public ActionResult Index(bool isDataCamp) { // Set Visibility ViewBag.Day1Visible = true; ViewBag.Day2Visible = isDataCamp; ViewBag.ShowMessage = false; // Set Defaults - Not logged in ViewBag.Day1Provisioned = false; ViewBag.Day2Provisioned = true; if (ClaimsPrincipal.Current.Identity.IsAuthenticated) { // Get the Tenants linked to the user var tenantService = new TenantService(); var tenants = tenantService.FetchByUsername(ClaimsPrincipal.Current.Identity.SplitName()); ViewBag.Day1Provisioned = tenants != null && tenants.Any(t => t.ProvisioningOptionCode.Equals("S1")); ViewBag.Day2Provisioned = tenants == null || tenants.Any(t => t.ProvisioningOptionCode.Equals("S1") && !t.AzureServicesProvisioned) || tenants.Any(t => t.ProvisioningOptionCode.Equals("S2")); ViewBag.ShowMessage = tenants != null && tenants.Any(t => !t.AzureServicesProvisioned); return PartialView(); } return PartialView(); }
public ActionResult StartDeprovisioning() { TempData["PipelineRunning"] = true; TempData["Process"] = "Deprovisioning"; var tenantService = new TenantService(); var tenants = tenantService.FetchByUsername(HttpContext.User.Identity.SplitName()); DeprovisionTenantSite(tenants); return RedirectToAction("Index", "TenantView"); }
private bool IsTenant(string username) { // Fix the Username username = username.Split('#').Last(); // Find the user var command = new TenantService(); var tenants = command.FetchByUsername(username); // Check if user return tenants != null &&tenants.Any(); }
public ActionResult Index() { // Get working values var pipelineRunning = TempData["PipelineRunning"] != null && (bool)TempData["PipelineRunning"]; var process = TempData["Process"] != null ? TempData["Process"].ToString() : string.Empty; // Get data var tenantService = new TenantService(); var tenants = tenantService.FetchByUsername(HttpContext.User.Identity.SplitName()); // Build the ViewModel var viewModel = BuildTenantViewModel(tenants); AddTenantServices(viewModel, pipelineRunning, process); SetupViewBag(viewModel, pipelineRunning, process); return View(viewModel); }
private static ProvisioningService Create(int tenantId, bool isAdminInterface) { // Fetch the Tenant var tenantService = new TenantService(); var scheduledTenant = tenantService.FetchByTenantId(tenantId); // Get Day1 Tenant Site Url var tenants = tenantService.FetchByUsername(scheduledTenant.Username); var dayOneTenant = tenants.First(t => t.ProvisioningOptionCode.Equals("S1")); // Get DataCenters var day = scheduledTenant.ProvisioningOptionCode.Equals("S1") ? 1 : 2; var util = new ManagementUtilities(); var dataCenters = util.GetLocations(day, Settings.AccountSubscriptionId); // Build Parameters var provisioningParameters = GetParameters(day, dataCenters, scheduledTenant, dayOneTenant, isAdminInterface); // Create Provisioning Service return(new ProvisioningService((int)scheduledTenant.ProvisioningOptionId, provisioningParameters)); }
private static TenantModel GetDay1Tenant() { var tenantService = new TenantService(); var tenants = tenantService.FetchByUsername(ClaimsPrincipal.Current.Identity.SplitName()); return tenants.First(t => t.ProvisioningOptionCode.Equals("S1")); }
private void CreateOrUpdate() { var locations = GetLocationList(); // Loop all locations to find viable Sql Server V12 location foreach (var location in locations) { var asyncTaskList = new List <Task <bool> >(); var awaitTaskList = new List <Task <bool> >(); // Set first location ProvisioningParameters.Properties.LocationPrimary = location; // Loop through all the Parallel Provisiong Groups for (var group = 1; group <= _provisioningTasks.Max(p => p.GroupNo); group++) { awaitTaskList = new List <Task <bool> >(); // Start tasks assigned to group foreach (var provisioner in _provisioningTasks.Where(p => p.GroupNo == group)) { var task = new Task <bool>(provisioner.RunCreateOrUpdate); task.Start(); if (provisioner.WaitForCompletion) { awaitTaskList.Add(task); } else { asyncTaskList.Add(task); } } // Wait for non-waiting tasks before continueing to group 5 (deploys the website) // Certain settings are required from the previous groups if (group == 4) { Task.WaitAll(asyncTaskList.ToArray()); // Check if errors occurred if (asyncTaskList.Any(t => t.Result == false)) { TasksCompleted = true; ErrorsOccurred = true; break; } } // Await tasks marked for waiting Task.WaitAll(awaitTaskList.ToArray()); // Check if Rollback is needed if (_provisioningTasks.Any(t => t.RollbackRequired)) { _provisioningTasks.ForEach(p => p.Status = "Queued"); var resourceGroup = _provisioningTasks.First(p => p.Service.Equals("Resource Group")); ErrorsOccurred = !resourceGroup.RunRemove("Select Next V12 Location"); break; } // Check if errors occurred if (awaitTaskList.Any(t => t.Result == false)) { TasksCompleted = true; ErrorsOccurred = true; break; } } } // Set completion status and automatically selected location AutomaticLocation = ProvisioningParameters.Properties.LocationPrimary; TasksCompleted = true; // Mark scheduleTenant as provisioned if (_provisioningTasks.All(p => p.Status == "Deployed")) { ProvisioningCompleted = true; var tenantService = new TenantService(); tenantService.SetProvisioningStatus(ProvisioningParameters.Tenant.TenantId, ProvisioningCompleted); } }
public void DeleteAccount(string username) { var tenantService = new TenantService(); tenantService.DeleteTenant(username); }
public ActionResult Index(SignUpViewModel day1ViewModel) { var tenantService = new TenantService(); // Build the Lookups var themes = FetchThemes(); var provisioningOptions = FetchProvisioningOptions(); var day1DataCenters = FetchAvailableDataCenters(1, day1ViewModel.SubscriptionId); var day2DataCenters = FetchAvailableDataCenters(2, day1ViewModel.SubscriptionId); var subscriptions = FetchSubscriptions(); // Setup the ViewBag ViewBag.Themes = new SelectList(themes, "Id", "Description", null); ViewBag.Day1DataCenters = new SelectList(day1DataCenters, "Code", "Name", null); ViewBag.Day2DataCenters = new SelectList(day2DataCenters, "Code", "Name", null); ViewBag.Subscriptions = new SelectList(subscriptions, "Id", "DisplayName", null); // Check model validity if (!ModelState.IsValid) { return View(day1ViewModel); } // Check name and email var errors = tenantService.Validate(day1ViewModel.SiteName, day1ViewModel.SubscriptionId); if (errors.Any()) { ViewBag.Errors = errors; return View(day1ViewModel); } // Update the DB with modification or new entry var organizationId = Settings.AccountOrganizationId; // Valid - Process the SignUp (Day1) var tenantId = tenantService.CreateDay1(new CreateTenantModel() { Tenant = new CreateTenantModel.TenantModel() { ThemeId = day1ViewModel.ThemeId, ProvisioningOptionId = provisioningOptions.First(o => o.Code.Equals("S1")).Id ?? -1, DataCenter = !string.IsNullOrEmpty(day1ViewModel.Day1DataCenter) ? day1ViewModel.Day1DataCenter : null, SiteName = day1ViewModel.SiteName.ToLower(), OrganizationId = organizationId, SubscriptionId = day1ViewModel.SubscriptionId }, UserAccount = new CreateTenantModel.UserAccountModel() { Username = ClaimsPrincipal.Current.Identity.SplitName(), Firstname = day1ViewModel.FirstName, Lastname = day1ViewModel.LastName, }, CreditCard = new CreateTenantModel.CreditCardModel() { CreditCardNumber = day1ViewModel.CreditCardNumber, ExpiryDate = day1ViewModel.ExpiryDate, CardVerificationValue = day1ViewModel.CardVerificationValue } }); // Valid - Process the SignUp (Day2) tenantService.CreateDay2(new CreateTenantModel() { Tenant = new CreateTenantModel.TenantModel() { ThemeId = day1ViewModel.ThemeId, ProvisioningOptionId = provisioningOptions.First(o => o.Code.Equals("S2")).Id ?? -1, DataCenter = !string.IsNullOrEmpty(day1ViewModel.Day2DataCenter) ? day1ViewModel.Day2DataCenter : null, SiteName = day1ViewModel.SiteName.ToLower() + "pr", OrganizationId = organizationId, SubscriptionId = day1ViewModel.SubscriptionId } }); return RedirectToAction("Index", "TenantView", new { tenantId }); }
public ActionResult StartDeprovisioning(string username) { var tenantService = new TenantService(); var tenants = tenantService.FetchByUsername(username); TempData["PipelineRunning"] = true; TempData["Username"] = username; DeprovisionTenantSite(tenants); return RedirectToAction("Index", "AdminView"); }
public ActionResult Index() { // Fetch required data var accountService = new UserAccountService(); var user = accountService.FetchByUsername(HttpContext.User.Identity.SplitName()); var tenantService = new TenantService(); var tenants = tenantService.FetchTenants(); // Build the tenants viewmodel var viewModel = tenants != null ? new MyAccountViewModel() { UserAccounts = tenants.GroupBy(u => u.Username).Select(u => new UserAccountViewModel() { Username = u.Key, Tenants = u.Select(t => new TenantViewModel() { Id = t.TenantId, Plan = t.ProvisioningOption, Theme = t.Theme, Status = t.AzureServicesProvisioned ? ProvisioningStatus.Deployed : ProvisioningStatus.NotDeployed, AzureServicesProvisioned = t.AzureServicesProvisioned, }).ToList() }).ToList() } : new MyAccountViewModel(); // Get working values var pipelineRunning = TempData["PipelineRunning"] != null && (bool)TempData["PipelineRunning"]; var username = TempData["Username"] != null ? (string)TempData["Username"] : string.Empty; // Add each tenants services foreach (var userAccount in viewModel.UserAccounts) { foreach (var company in userAccount.Tenants) { var provisioningService = ProvisioningService.CreateForAdmin(company.Id); company.Services = provisioningService.GetStatusses().Select(s => new ServiceStatusViewModel() { StatusId = s.Id, Name = s.Name, Service = s.Service, Status = company.AzureServicesProvisioned ? ProvisioningStatus.Deployed : ProvisioningStatus.NotDeployed }).ToList(); } // Set already provisioned tenant services to active userAccount.Tenants.Where(c => c.AzureServicesProvisioned) .ForEach(c => c.Services.ForEach(s => s.Status = ProvisioningStatus.Deployed)); // Update statusses foreach (var tenant in userAccount.Tenants) { // Set the Status if (!tenant.AzureServicesProvisioned) { tenant.Status = pipelineRunning && userAccount.Username.Equals(username) ? ProvisioningStatus.Removing : ProvisioningStatus.NotDeployed; } else { tenant.Status = pipelineRunning && userAccount.Username.Equals(username) ? ProvisioningStatus.Removing : ProvisioningStatus.Deployed; } } } // Build up the ViewBag ViewBag.PipelineRunning = pipelineRunning; ViewBag.Username = username; return View(viewModel); }
private static ProvisioningService Create(int tenantId, bool isAdminInterface) { // Fetch the Tenant var tenantService = new TenantService(); var scheduledTenant = tenantService.FetchByTenantId(tenantId); // Get Day1 Tenant Site Url var tenants = tenantService.FetchByUsername(scheduledTenant.Username); var dayOneTenant = tenants.First(t => t.ProvisioningOptionCode.Equals("S1")); // Get DataCenters var day = scheduledTenant.ProvisioningOptionCode.Equals("S1") ? 1 : 2; var util = new ManagementUtilities(); var dataCenters = util.GetLocations(day, Settings.AccountSubscriptionId); // Build Parameters var provisioningParameters = GetParameters(day, dataCenters, scheduledTenant, dayOneTenant, isAdminInterface); // Create Provisioning Service return new ProvisioningService((int)scheduledTenant.ProvisioningOptionId, provisioningParameters); }
private void CreateOrUpdate() { var locations = GetLocationList(); // Loop all locations to find viable Sql Server V12 location foreach (var location in locations) { var asyncTaskList = new List<Task<bool>>(); var awaitTaskList = new List<Task<bool>>(); // Set first location ProvisioningParameters.Properties.LocationPrimary = location; // Loop through all the Parallel Provisiong Groups for (var group = 1; group <= _provisioningTasks.Max(p => p.GroupNo); group++) { awaitTaskList = new List<Task<bool>>(); // Start tasks assigned to group foreach (var provisioner in _provisioningTasks.Where(p => p.GroupNo == group)) { var task = new Task<bool>(provisioner.RunCreateOrUpdate); task.Start(); if (provisioner.WaitForCompletion) { awaitTaskList.Add(task); } else { asyncTaskList.Add(task); } } // Wait for non-waiting tasks before continueing to group 5 (deploys the website) // Certain settings are required from the previous groups if (group == 4) { Task.WaitAll(asyncTaskList.ToArray()); // Check if errors occurred if (asyncTaskList.Any(t => t.Result == false)) { TasksCompleted = true; ErrorsOccurred = true; break; } } // Await tasks marked for waiting Task.WaitAll(awaitTaskList.ToArray()); // Check if Rollback is needed if (_provisioningTasks.Any(t => t.RollbackRequired)) { _provisioningTasks.ForEach(p => p.Status = "Queued"); var resourceGroup = _provisioningTasks.First(p => p.Service.Equals("Resource Group")); ErrorsOccurred = !resourceGroup.RunRemove("Select Next V12 Location"); break; } // Check if errors occurred if (awaitTaskList.Any(t => t.Result == false)) { TasksCompleted = true; ErrorsOccurred = true; break; } } } // Set completion status and automatically selected location AutomaticLocation = ProvisioningParameters.Properties.LocationPrimary; TasksCompleted = true; // Mark scheduleTenant as provisioned if (_provisioningTasks.All(p => p.Status == "Deployed")) { ProvisioningCompleted = true; var tenantService = new TenantService(); tenantService.SetProvisioningStatus(ProvisioningParameters.Tenant.TenantId, ProvisioningCompleted); } }