Exemple #1
0
        private void RefreshDiff()
        {
            Data.NewConfigLines = VyattaConfigUtil.WriteToStringLines(Data.ConfigRoot);

            var Diff       = new Menees.Diffs.TextDiff(HashType.HashCode, false, false, 0, false);
            var EditScript = Diff.Execute(Data.OldConfigLines, Data.NewConfigLines);

            ConfigDiff.SetData(Data.OldConfigLines, Data.NewConfigLines, EditScript, "Existing router config", "New router config", false, true, false);
            ConfigDiff.GoToFirstDiff();
        }
        public bool DoWork(Util.UpdateStatusDelegate SetStatus, Util.ShouldCancelDelegate ShouldCancel)
        {
            SetStatus("Connecting to SSH...", 0);

            using (VyattaShell Shell = new VyattaShell(Data.Address, Data.Username, Data.Password))
            {
                SetStatus("Creating backup...", 5);
                Shell.RunCommand("mkdir /config/vcu");
                Shell.RunCommand("cp /config/config.boot /config/vcu/previous.boot");
                Shell.RunCommand("cp /config/current.vcu /config/vcu/previous.vcu");
                Shell.RunCommand(string.Format("cp /config/config.boot /config/vcu/history_{0}.boot", DateTime.Now.ToString(VyattaConfigUtil.SortableDateFormat)));
                Shell.RunCommand(string.Format("cp /config/current.vcu /config/vcu/history_{0}.vcu", DateTime.Now.ToString(VyattaConfigUtil.SortableDateFormat)));

                SetStatus("Entering configure mode...", 10);
                Shell.RunCommand("configure");

                if (!ShouldCancel())
                {
                    using (ScpClient ScpClient = new ScpClient(Data.Address, Data.Username, Data.Password))
                    {
                        string TempConfigPath = Path.ChangeExtension(Path.GetTempFileName(), Guid.NewGuid().ToString());
                        Data.NewConfigLines = VyattaConfigUtil.WriteToStringLines(Data.ConfigRoot);
                        VyattaConfigUtil.WriteToFile(Data.ConfigRoot, TempConfigPath);

                        string TempTemplatePath = Path.ChangeExtension(Path.GetTempFileName(), Guid.NewGuid().ToString());
                        VyattaConfigUtil.WriteToFile(Data.TemplateRoot, TempTemplatePath);

                        ScpClient.Connect();

                        SetStatus("Uploading new config...", 15);

                        if (!ShouldCancel())
                        {
                            using (Stream configFile = new FileStream(TempConfigPath, FileMode.Open))
                            {
                                ScpClient.Upload(configFile, "/config/config.boot");
                            }
                        }

                        //Probably shouldn't cancel after this point it might leave things in a weird state...

                        using (Stream templateFile = new FileStream(TempTemplatePath, FileMode.Open))
                        {
                            ScpClient.Upload(templateFile, "/config/current.vcu");
                        }

                        SetStatus("Disconnecting SCP...", 20);

                        ScpClient.Disconnect();
                    }
                }

                SetStatus("Loading new config...", 25);

                Shell.RunCommand("load");

                SetStatus("Comparing config...", 35);
                Shell.RunCommand("compare");

                SetStatus("Committing new config (this will take a while)...", 45);
                string CommitResult = Shell.RunCommand("commit");

                if (CommitResult.Contains("Commit failed"))
                {
                    //Restore the backup
                    Shell.RunCommand("cp /config/vcu/previous.boot /config/config.boot");

                    Shell.RunCommand("load");
                    Shell.RunCommand("commit");

                    Shell.RunCommand("exit");

                    throw new Exception(CommitResult);
                }

                SetStatus("Committing new config (this will take a while)...", 95);
                Shell.RunCommand("exit");

                SetStatus("Disconnecting from SSH...", 98);
            }

            SetStatus("Completed.", 100);

            return(true);
        }
Exemple #3
0
        public bool DoWork(Util.UpdateStatusDelegate SetStatus, Util.ShouldCancelDelegate ShouldCancel)
        {
            if (ShouldCancel())
            {
                return(false);
            }

            SetStatus("Deleting previous auto-generated rules...", 16);
            VyattaConfigRouting.DeleteGeneratedStaticRoutes(Data.ConfigRoot);

            if (ShouldCancel())
            {
                return(false);
            }

            SetStatus("Generating Netflix static routing...", 32);
            //VyattaConfigRouting.AddStaticRoutesForOrganization( Data.ConfigRoot, "Netflix", Data, "Internet", "Netflix" );
            {
                StaticRoutingData NewRoute = new StaticRoutingData();
                NewRoute.Destination = "Netflix";
                NewRoute.Interface   = "eth0";
                NewRoute.Name        = "Netflix";
                NewRoute.Type        = RoutingType.Organisation;
                NewRoute.Action      = StaticRouteAction.ToInterface;

                Data.StaticRoutes.Add(NewRoute);
            }

            if (ShouldCancel())
            {
                return(false);
            }

            SetStatus("Generating BBC static routing...", 48);
            //VyattaConfigRouting.AddStaticRoutesForOrganization( Data.ConfigRoot, "BBC", Data, "Internet", "BBC" );
            {
                StaticRoutingData NewRoute = new StaticRoutingData();
                NewRoute.Destination = "BBC";
                NewRoute.Interface   = "eth0";
                NewRoute.Name        = "BBC";
                NewRoute.Type        = RoutingType.Organisation;
                NewRoute.Action      = StaticRouteAction.ToInterface;

                Data.StaticRoutes.Add(NewRoute);
            }

            if (ShouldCancel())
            {
                return(false);
            }

            SetStatus("Generating Valve static routing...", 56);
            //VyattaConfigRouting.AddStaticRoutesForOrganization( Data.ConfigRoot, "Valve", Data, "Internet", "Valve" );
            {
                StaticRoutingData NewRoute = new StaticRoutingData();
                NewRoute.Destination = "Valve";
                NewRoute.Interface   = "eth0";
                NewRoute.Name        = "Valve";
                NewRoute.Type        = RoutingType.Organisation;
                NewRoute.Action      = StaticRouteAction.ToInterface;

                Data.StaticRoutes.Add(NewRoute);
            }

            if (ShouldCancel())
            {
                return(false);
            }

            SetStatus("Generating Nest static routing...", 80);
            //VyattaConfigRouting.AddStaticRoutesForOrganization( Data.ConfigRoot, "Nest", Data, "Internet", "Nest" );
            {
                StaticRoutingData NewRoute = new StaticRoutingData();
                NewRoute.Destination = "Nest";
                NewRoute.Interface   = "eth0";
                NewRoute.Name        = "Nest";
                NewRoute.Type        = RoutingType.Organisation;
                NewRoute.Action      = StaticRouteAction.ToInterface;

                Data.StaticRoutes.Add(NewRoute);
            }

            SetStatus("Saving new config...", 90);
            Data.NewConfigLines = VyattaConfigUtil.WriteToStringLines(Data.ConfigRoot);

            return(true);
        }