Ejemplo n.º 1
0
        public void SetUp()
        {
            var successDetail = new DeploymentDetail(() => "success detail", () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Good, "verify")
            }, () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Good, "execute")
            });

            var failDetail = new DeploymentDetail(() => "fail detail", () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Error, "fail verify")
            }, () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Good, "execute")
            });


            var webRole = new DeploymentRole("Web");

            webRole.AddServer(new DeploymentServer("SrvWeb1"));
            webRole.AddServer(new DeploymentServer("SrvWeb2"));
            webRole.ForEachServer(s => s.AddDetail(successDetail));
            var dbRole = new DeploymentRole("Db");

            dbRole.AddServer("SrvDb");
            dbRole.ForEachServer(s => s.AddDetail(failDetail));
            Plan = new DeploymentPlan();
            Plan.AddRole(webRole);
            Plan.AddRole(dbRole);

            BecauseOf();
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Create(CreateDeploymentPlanViewModel model)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageDeploymentPlan))
            {
                return(Forbid());
            }

            if (ModelState.IsValid)
            {
                if (String.IsNullOrWhiteSpace(model.Name))
                {
                    ModelState.AddModelError(nameof(CreateDeploymentPlanViewModel.Name), S["The name is mandatory."]);
                }
            }

            if (ModelState.IsValid)
            {
                var deploymentPlan = new DeploymentPlan {
                    Name = model.Name
                };

                _session.Save(deploymentPlan);

                return(RedirectToAction(nameof(Index)));
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Ejemplo n.º 3
0
            public override void Context()
            {
                base.Context();

                var successDetail = new DeploymentDetail(() => "success detail", () => new DeploymentResult()
                {
                    new DeploymentItem(DeploymentItemStatus.Good, "verify")
                }, () => new DeploymentResult()
                {
                    new DeploymentItem(DeploymentItemStatus.Good, "execute")
                }, () => new DeploymentResult());

                var failDetail = new DeploymentDetail(() => "fail detail", () => new DeploymentResult()
                {
                    new DeploymentItem(DeploymentItemStatus.Error, "fail verify")
                }, () => new DeploymentResult()
                {
                    new DeploymentItem(DeploymentItemStatus.Good, "execute")
                }, () => new DeploymentResult());


                var webRole = new DeploymentRole("Web");

                webRole.AddServer(new DeploymentServer("SrvWeb1"));
                webRole.AddServer(new DeploymentServer("SrvWeb2"));
                webRole.ForEachServerMapped(s => s.AddDetail(successDetail));
                var dbRole = new DeploymentRole("Db");

                dbRole.AddServer("SrvDb");
                dbRole.ForEachServerMapped(s => s.AddDetail(failDetail));
                Plan = new DeploymentPlan();
                Plan.AddRole(webRole);
                Plan.AddRole(dbRole);
            }
Ejemplo n.º 4
0
        public async Task ExecuteDeploymentPlanAsync(DeploymentPlan deploymentPlan, DeploymentPlanResult result)
        {
            foreach (var step in deploymentPlan.DeploymentSteps)
            {
                foreach (var source in _deploymentSources)
                {
                    await source.ProcessDeploymentStepAsync(step, result);
                }
            }

            await result.FinalizeAsync();
        }
        public Task ExecuteAsync(RecipeExecutionContext context)
        {
            if (!String.Equals(context.Name, "deployment", StringComparison.OrdinalIgnoreCase))
            {
                return(Task.CompletedTask);
            }

            var deploymentStepFactories = _serviceProvider.GetServices <IDeploymentStepFactory>().ToDictionary(f => f.Name);

            var model = context.Step.ToObject <DeploymentPlansModel>();

            var unknownTypes    = new List <string>();
            var deploymentPlans = new List <DeploymentPlan>();

            foreach (var plan in model.Plans)
            {
                var deploymentPlan = new DeploymentPlan
                {
                    Name = plan.Name
                };

                foreach (var step in plan.Steps)
                {
                    if (deploymentStepFactories.TryGetValue(step.Type, out var deploymentStepFactory))
                    {
                        var deploymentStep = (DeploymentStep)step.Step.ToObject(deploymentStepFactory.Create().GetType());

                        deploymentPlan.DeploymentSteps.Add(deploymentStep);
                    }
                    else
                    {
                        unknownTypes.Add(step.Type);
                    }
                }

                deploymentPlans.Add(deploymentPlan);
            }

            if (unknownTypes.Count != 0)
            {
                var prefix = "No changes have been made. The following types of deployment plans cannot be added:";
                var suffix = "Please ensure that the related features are enabled to add these types of deployment plans.";

                throw new InvalidOperationException($"{prefix} {String.Join(", ", unknownTypes)}. {suffix}");
            }

            _deploymentPlanService.CreateOrUpdateDeploymentPlans(deploymentPlans);

            return(Task.CompletedTask);
        }
        public void Execute()
        {
            bool verifyRan  = false;
            bool executeRan = false;
            bool traceRan   = false;

            var detail = new DeploymentDetail(() =>
            {
                traceRan = true;
                return("trace");
            }, () =>
            {
                verifyRan = true;
                var r     = new DeploymentResult();
                r.AddGood("test:v");
                return(r);
            }, () =>
            {
                executeRan = true;
                var r      = new DeploymentResult();
                r.AddGood("test:e");
                return(r);
            },
                                              () => new DeploymentResult());


            var web = new DeploymentRole("WEB");

            web.AddServer("BILL");
            web.ForEachServerMapped(s => s.AddDetail(detail));

            var plan = new DeploymentPlan();

            plan.AddRole(web);


            var args = new DeploymentArguments
            {
                Role    = "WEB",
                Command = DeploymentCommands.Execute
            };

            plan.Execute();

            Assert.IsTrue(traceRan, "trace");
            Assert.IsTrue(verifyRan, "verify");
            Assert.IsTrue(executeRan, "execute");
        }
        public void Trace()
        {
            bool verifyRan  = false;
            bool executeRan = false;
            bool traceRan   = false;

            var detail = new DeploymentDetail(() =>
            {
                traceRan = true;
                return("trace");
            }, () =>
            {
                verifyRan = true;
                return(new DeploymentResult());
            }, () =>
            {
                executeRan = true;
                return(new DeploymentResult());
            }, () => new DeploymentResult());


            var web = new DeploymentRole("WEB");

            web.AddServer(new DeploymentServer("bob"));
            web.ForEachServerMapped(s => s.AddDetail(detail));

            var plan = new DeploymentPlan();

            plan.AddRole(web);


            var args = new DeploymentArguments
            {
                Role    = "WEB",
                Command = DeploymentCommands.Trace
            };

            plan.Trace();

            Assert.IsTrue(traceRan);
            Assert.IsFalse(verifyRan);
            Assert.IsFalse(executeRan);
        }
Ejemplo n.º 8
0
        public void SetUp()
        {
            var detail = new DeploymentDetail(() => "test detail", () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Good, "verify")
            }, () => new DeploymentResult()
            {
                new DeploymentItem(DeploymentItemStatus.Good, "execute")
            }, () => new DeploymentResult());
            var webRole = new DeploymentRole("Web");

            webRole.AddServer(new DeploymentServer("SrvWeb1"));
            webRole.AddServer(new DeploymentServer("SrvWeb2"));
            webRole.ForEachServerMapped(s => s.AddDetail(detail));
            var dbRole = new DeploymentRole("Db");

            dbRole.AddServer("SrvDb");
            dbRole.ForEachServerMapped(s => s.AddDetail(detail));
            Plan = new DeploymentPlan();
            Plan.AddRole(webRole);
            Plan.AddRole(dbRole);

            BecauseOf();
        }
Ejemplo n.º 9
0
 public override void BecauseOf()
 {
     //TODO: not a fan of Inspector.GetPlan - but do I really need to wrap it?
     Plan = Inspector.GetPlan(Deployment);
 }
 public override void BecauseOf()
 {
     Plan = Inspector.GetPlan(Deployment);
 }