예제 #1
0
        private Environment CreateEnvironment(ProvisioningViewModel viewModel, string environment)
        {
            string subscriptionId    = _settings.GetSubscriptionId(environment);
            string resourceGroupName = string.Concat(viewModel.ProjectName, "-", environment + "-rg");

            return(new Environment(resourceGroupName, subscriptionId, viewModel.ProjectName, environment, viewModel.Email));
        }
        public ActionResult Provisioning(ProvisioningViewModel vm)
        {
            if (!vm.ProvisioningInformation.Any(p => p.Select && string.IsNullOrEmpty(p.SiteUrl)))
            {
                var commands = vm.ProvisioningInformation.Where(p => p.Select).Select(p => new ForceProvisioningCompletionCommand {
                    ProjectId = p.Id, SiteUrl = p.SiteUrl
                }).ToList();

                commands.ForEach(c => _bus.Send <ForceProvisioningCompletionCommand>
                                     (m =>
                {
                    m.ProjectId = c.ProjectId;
                    m.SiteUrl   = c.SiteUrl;
                }
                                     ));


                ViewBag.Message = "Provisioning requests updated; refresh in a few minutes to see the result.";
            }
            else
            {
                ViewBag.Message = "Invalid request(s) selected; ensure all selected requests have a site url.";
            }

            vm.Projects = _projectRepository.GetAllWhichFailedProvisioning();
            return(View(vm));
        }
예제 #3
0
        private ProvisioningRequest CreateRequest(ProvisioningViewModel provisioningViewModel, bool vnetCreatedBefore)
        {
            ProvisioningRequest provisioningRequest = new ProvisioningRequest(provisioningViewModel.ProvisionAzure, provisioningViewModel.ProvisionVSTS,
                                                                              provisioningViewModel.ProjectName, provisioningViewModel.Email, provisioningViewModel.OwnerObjectId);

            if (provisioningViewModel.ProvisionAzure)
            {
                if (provisioningViewModel.ProvisionDevEnvironment)
                {
                    provisioningRequest.Environments.Add(CreateEnvironment(provisioningViewModel, Environments.Development));
                }

                if (provisioningViewModel.ProvisionTestEnvironment)
                {
                    provisioningRequest.Environments.Add(CreateEnvironment(provisioningViewModel, Environments.Test));
                }

                if (provisioningViewModel.ProvisionStagingEnvironment)
                {
                    provisioningRequest.Environments.Add(CreateEnvironment(provisioningViewModel, Environments.Staging));
                }
            }

            if (!vnetCreatedBefore && provisioningRequest.Environments.Any())
            {
                provisioningRequest.Environments.First().CreateVNet = true;
            }

            return(provisioningRequest);
        }
예제 #4
0
        public IActionResult Index()
        {
            var provisioningViewModel = new ProvisioningViewModel();

            SetUserMetadata(provisioningViewModel);

            return(View(provisioningViewModel));
        }
        public ActionResult Provisioning()
        {
            var projects = _projectRepository.GetAllWhichFailedProvisioning();

            var vm = new ProvisioningViewModel {
                Projects = projects
            };

            return(View(vm));
        }
예제 #6
0
        public async Task <IActionResult> Index(ProvisioningViewModel provisioningViewModel)
        {
            SetUserMetadata(provisioningViewModel);

            if (string.IsNullOrWhiteSpace(provisioningViewModel.Email) || string.IsNullOrWhiteSpace(provisioningViewModel.OwnerObjectId))
            {
                provisioningViewModel.ErrorMessage = "Could not retrieve objectId or email from currently logged in user";
                return(View(provisioningViewModel));
            }

            if (!ModelState.IsValid)
            {
                return(View(provisioningViewModel));
            }

            List <ExistingEnvironment> existingEnvironments = _validator.IsValid(provisioningViewModel);

            if (existingEnvironments.Any())
            {
                string errorMessage = string.Empty;
                foreach (var environment in existingEnvironments)
                {
                    if (!string.IsNullOrWhiteSpace(environment.ErrorMessage))
                    {
                        errorMessage += environment.ErrorMessage;
                    }
                }

                if (!string.IsNullOrEmpty(errorMessage))
                {
                    provisioningViewModel.ErrorMessage = errorMessage;
                    return(View(provisioningViewModel));
                }
            }

            if (!provisioningViewModel.ProvisionAzure && !provisioningViewModel.ProvisionVSTS)
            {
                provisioningViewModel.ErrorMessage = "Please select a provisioning option below!";
                return(View(provisioningViewModel));
            }

            var success = await _provisioning.Run(provisioningViewModel, existingEnvironments.Any());

            if (success)
            {
                return(View("Success"));
            }
            else
            {
                return(View("Error"));
            }
        }
        public List <ExistingEnvironment> IsValid(ProvisioningViewModel model)
        {
            List <ExistingEnvironment> existingEnvironments = new List <ExistingEnvironment>();
            CloudStorageAccount        storageAccount       = CloudStorageAccount.Parse(_settings.GetProjectDbConnectionString());

            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
            CloudTable       table       = tableClient.GetTableReference("tblproject");

            bool devExists = Exists(table, model.ProjectName, Environments.Development).Result;

            if (devExists)
            {
                var dev = new ExistingEnvironment {
                    Name = Environments.Development
                };
                if (model.ProvisionDevEnvironment)
                {
                    dev.ErrorMessage = $"Project with name {model.ProjectName} already has an existing development environment";
                }
                existingEnvironments.Add(dev);
            }

            bool testExists = Exists(table, model.ProjectName, Environments.Test).Result;

            if (testExists)
            {
                var test = new ExistingEnvironment {
                    Name = Environments.Test
                };
                if (model.ProvisionTestEnvironment)
                {
                    test.ErrorMessage = $"Project with name {model.ProjectName} already has an existing test environment";
                }
                existingEnvironments.Add(test);
            }

            bool stagingExists = Exists(table, model.ProjectName, Environments.Staging).Result;

            if (stagingExists)
            {
                var staging = new ExistingEnvironment {
                    Name = Environments.Staging
                };
                if (model.ProvisionStagingEnvironment)
                {
                    staging.ErrorMessage = $"Project with name {model.ProjectName} already has an existing staging environment";
                }
                existingEnvironments.Add(staging);
            }
            return(existingEnvironments);
        }
예제 #8
0
 private void SetUserMetadata(ProvisioningViewModel provisioningViewModel)
 {
     //TODO: Remove default
     provisioningViewModel.Email         = GetValueOfUserClaim("name");
     provisioningViewModel.OwnerObjectId = GetValueOfUserClaim("http://schemas.microsoft.com/identity/claims/objectidentifier");
 }
예제 #9
0
        public async Task <bool> Run(ProvisioningViewModel provisioningViewModel, bool vnetCreatedBefore)
        {
            var request = CreateRequest(provisioningViewModel, vnetCreatedBefore);

            return(await _workflow.Trigger(request));
        }