//######################################### //## GetDeploy ## //######################################### public async Task GetDeploy(int Id) { var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault(); string tennantID = deployTypes.Tennant.AzureTennantId; string clientID = deployTypes.Tennant.AzureClientId; string secret = deployTypes.Tennant.AzureClientSecret; string subscriptionID = deployTypes.Tennant.AzureSubscriptionId; string resourcegroupname = deployTypes.ResourceGroupName; if (string.IsNullOrEmpty(resourcegroupname) == true) { resourcegroupname = deployTypes.Tennant.ResourceGroupName; } string resourcegroup = deployTypes.Tennant.ResourceGroupName; string azuredeploy = deployTypes.AzureDeployName; var results = RESTApi.PostAction(tennantID, clientID, secret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result); string accesstoken = AccessToken.access_token; var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroupname, accesstoken, azuredeploy); if (await getcontent == null) { deployTypes.DeployResult = ""; } else { deployTypes.DeployResult = await getcontent; } _context.Update(deployTypes); await _context.SaveChangesAsync(); }
public async Task <IActionResult> CreateConAccessPolicy(int Id) { var deployTypes = _context.DeployTypes.Include(d => d.Tennants).Where(d => d.DeployTypeID == Id).FirstOrDefault(); var policyPath = _context.TennantParams.Where(t => t.ParamName == "PolicyPath").FirstOrDefault(); string path = policyPath.ParamValue; var tokenResults = RESTApi.GraphToken(deployTypes.Tennants.AzureTennantID, deployTypes.Tennants.AzureClientID, deployTypes.Tennants.AzureClientSecret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result); string accesstoken = AccessToken.access_token; string uri = "https://graph.microsoft.com/beta/conditionalAccess/Policies"; var restAPI = new RESTApi(_storageConfig, hostingEnv); var result = await restAPI.GraphPostAction(accesstoken, uri, path); string filename = path; filename = hostingEnv.WebRootPath + $@"\csv\{filename}"; if (!System.IO.File.Exists(filename)) { System.IO.File.WriteAllText(filename, result); } deployTypes.DeploySaved = "N/A"; deployTypes.DeployResult = result; deployTypes.DeployState = "N/A"; deployTypes.DeployState = "Deployed"; _context.Update(deployTypes); await _context.SaveChangesAsync(); return(RedirectToAction("Index", "DeployTypes", new { Id = deployTypes.TennantID })); }
//########################################## //## CheckQueue ## //########################################## public async Task <string> CheckQueue(int Id) { var QueueList = _context.Queue.Include(q => q.DeployType).Where(q => q.DeployTypeId == Id).FirstOrDefault(); string tennantID = QueueList.DeployType.Tennant.AzureTennantId; string clientID = QueueList.DeployType.Tennant.AzureClientId; string secret = QueueList.DeployType.Tennant.AzureClientSecret; string subscriptionID = QueueList.DeployType.Tennant.AzureSubscriptionId; string resourcegroup = QueueList.Resourcegroup; if (string.IsNullOrEmpty(resourcegroup) == true) { resourcegroup = QueueList.DeployType.Tennant.ResourceGroupName; } string azuredeploy = QueueList.Azuredeploy; var results = RESTApi.PostAction(tennantID, clientID, secret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result); string accesstoken = AccessToken.access_token; var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroup, accesstoken, azuredeploy); if (await getcontent == null) { QueueList.DeployType.DeployResult = ""; } else { QueueList.DeployType.DeployResult = await getcontent; } _context.Update(QueueList.DeployType); await _context.SaveChangesAsync(); var content = await getcontent; return(content); }
public async Task <IActionResult> GetConAccessPolicy(int Id) { var deployTypes = _context.DeployTypes.Include(d => d.Tennants).Where(d => d.DeployTypeID == Id).FirstOrDefault(); var tokenResults = RESTApi.GraphToken(deployTypes.Tennants.AzureTennantID, deployTypes.Tennants.AzureClientID, deployTypes.Tennants.AzureClientSecret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result); string accesstoken = AccessToken.access_token; string uri = "https://graph.microsoft.com/beta/conditionalAccess/Policies"; var result = await RESTApi.GraphGetAction(accesstoken, uri); JObject o = JObject.Parse(result); deployTypes.DeploySaved = "N/A"; deployTypes.DeployResult = result; deployTypes.DeployState = "N/A"; deployTypes.DeployState = "Deployed"; _context.Update(deployTypes); await _context.SaveChangesAsync(); return(RedirectToAction("Index", "DeployTypes", new { Id = deployTypes.TennantID })); }
//########################################## //## DeployfromQueue ## //######################################### public async Task <string> DeployfromQueue(int Id, bool Force) { var results = string.Empty; //Get DeployType to allow update of DeployState var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault(); //Get Queue Item to process var QueueItem = _context.Queue.Include(q => q.DeployType).Include(q => q.DeployType.Tennant).Where(q => q.DeployTypeId == Id).FirstOrDefault(); //Declare variables for use in Deploy method string resourcegroup = QueueItem.Resourcegroup; string subscriptionID = QueueItem.SubscriptionId; string azuredeploy = QueueItem.Azuredeploy; string tennantID = QueueItem.DeployType.Tennant.AzureTennantId; string TennantName = QueueItem.DeployType.Tennant.TennantName; string clientID = QueueItem.DeployType.Tennant.AzureClientId; string secret = QueueItem.DeployType.Tennant.AzureClientSecret; string DepParams = QueueItem.DeployType.ParamsFile; string DeployFile = QueueItem.DeployType.DeployFile; //Get Access Token from HTTP POST to Azure var tokenResults = RESTApi.PostAction(tennantID, clientID, secret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(tokenResults.Result); string accesstoken = AccessToken.access_token; var sasToken = AzureHelper.GetSASToken(_storageConfig); //Create relevant JSON Object for deployment. string jsonDeploy = "{\"properties\": { \"templateLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/{template}{sasToken}\", \"contentVersion\": \"1.0.0.0\"}, \"mode\": \"Incremental\", \"parametersLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/deployments/{parameters}{sasToken}\", \"contentVersion\": \"1.0.0.0\" } } }"; jsonDeploy = jsonDeploy.Replace("{sasToken}", sasToken); //Set Deploy Template dependent on Deployment Type //Add new Deployment Type logic here! jsonDeploy = jsonDeploy.Replace("{template}", DeployFile); DepParams = DepParams.Replace("{tennant}", TennantName); DepParams = DepParams.Replace("{id}", QueueItem.DeployType.DeployTypeId.ToString()); jsonDeploy = jsonDeploy.Replace("{parameters}", DepParams); //Run main deploy REST API call to Azure var putcontent = RESTApi.PutAsync(subscriptionID, resourcegroup, azuredeploy, accesstoken, jsonDeploy, false); JObject json = JsonConvert.DeserializeObject <JObject>(putcontent.Result); //Make DeployState as Queued deployTypes.DeployState = "Queued"; _context.Update(deployTypes); //Run CheckQueue method to ensure deployment complete before moving onto next item. var check = CheckQueue(Id); while (!check.Result.Contains("Succeeded") && !check.Result.Contains("Failed")) { QueueItem.Status = "Running"; _context.Update(QueueItem); await _context.SaveChangesAsync(); //Currently set to sleep for 30 secs //Thread.Sleep(30000); check = CheckQueue(Id); } //Check to see if deployment failed. if (check.Result.Contains("Failed")) { results = "Failed"; QueueItem.Status = "Failed - See Results"; _context.Update(QueueItem); } //On successful completion of deployment mark Queue Item to Complete. results = "Succeeded"; QueueItem.Status = "Complete"; _context.Update(QueueItem); var content = await _context.SaveChangesAsync(); return(results); }
//######################################### //## GetDeployAll ## //######################################### public async Task GetDeployAll(int Id) { var deployTypes = await _context.DeployTypes.Include(d => d.Tennant).Where(d => d.TennantId == Id).Where(d => d.DeployState != null).ToListAsync(); string tennantID = deployTypes.FirstOrDefault().Tennant.AzureTennantId; string clientID = deployTypes.FirstOrDefault().Tennant.AzureClientId; string secret = deployTypes.FirstOrDefault().Tennant.AzureClientSecret; string subscriptionID = deployTypes.FirstOrDefault().Tennant.AzureSubscriptionId; //string resourcegroupname = deployTypes.FirstOrDefault().Tennants.ResourceGroupName; //if (string.IsNullOrEmpty(resourcegroupname) == true) //{ // resourcegroupname = deployTypes.FirstOrDefault().Tennants.ResourceGroupName; //} string resourcegroup = deployTypes.FirstOrDefault().Tennant.ResourceGroupName; string azuredeploy = string.Empty; //Add logic for getting deployment for solutions. //Example for rdssmallsolution below. for (var i = 0; i < deployTypes.Count(); i++) { string resourcegroupname = deployTypes[i].ResourceGroupName; if (string.IsNullOrEmpty(resourcegroupname) == true) { resourcegroupname = deployTypes.FirstOrDefault().Tennant.ResourceGroupName; } if (deployTypes[i].AzureDeployName.Contains("rdssmallsolution")) { if (deployTypes[i].DeployName.Contains("(IDS)") || deployTypes[i].DeployName.Contains("Identity Small")) { azuredeploy = "IDSmall"; } if (deployTypes[i].DeployName.Contains("(RDSS)") || deployTypes[i].DeployName.Contains("RDS Small")) { azuredeploy = "RDSSmall"; } if (deployTypes[i].DeployName.Contains("(VNET)")) { azuredeploy = "VNET"; } } else { if (deployTypes[i].AzureDeployName.Contains("rdsmedsolution")) { if (deployTypes[i].DeployName.Contains("(IDM)") || deployTypes[i].DeployName.Contains("Identity Medium") || deployTypes[i].DeployName.Contains("(IDMTYPE)")) { azuredeploy = "IDMed"; } if (deployTypes[i].DeployName.Contains("(RDSM)") || deployTypes[i].DeployName.Contains("RDS Medium") || deployTypes[i].DeployName.Contains("(RDSMTYPE)")) { azuredeploy = "RDSMed"; } if (deployTypes[i].DeployName.Contains("(VNET)")) { azuredeploy = "VNET"; } } else { azuredeploy = deployTypes[i].AzureDeployName; } } var results = RESTApi.PostAction(tennantID, clientID, secret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result); string accesstoken = AccessToken.access_token; var getcontent = RESTApi.GetAsync(subscriptionID, resourcegroupname, accesstoken, azuredeploy); if (await getcontent == null) { deployTypes[i].DeployResult = " "; } else { deployTypes[i].DeployResult = await getcontent; } _context.Update(deployTypes[i]); await _context.SaveChangesAsync(); } //End of solution logic loop. }
//######################################### //## DeployToAzure ## //######################################### public async Task <string[]> DeployToAzure(int Id, bool Force) { var deployTypes = _context.DeployTypes.Include(d => d.Tennant).Where(d => d.DeployTypeId == Id).FirstOrDefault(); string[] resultsarr = new string[3]; //Declare variables for use string tennantID = deployTypes.Tennant.AzureTennantId; string clientID = deployTypes.Tennant.AzureClientId; string secret = deployTypes.Tennant.AzureClientSecret; string subscriptionID = deployTypes.Tennant.AzureSubscriptionId; string resourcegroupname = deployTypes.ResourceGroupName; if (string.IsNullOrEmpty(resourcegroupname) == true) { resourcegroupname = deployTypes.Tennant.ResourceGroupName; } string resourcegrouplocation = deployTypes.Tennant.ResourceGroupLocation; string azuredeploy = string.Empty; string jsonResourceGroup = "{ \"location\": \"{resourcegrouplocation}\" }"; jsonResourceGroup = jsonResourceGroup.Replace("{resourcegrouplocation}", resourcegrouplocation); //Get Access Token from HTTP POST to Azure var results = RESTApi.PostAction(tennantID, clientID, secret); RESTApi.AccessToken AccessToken = JsonConvert.DeserializeObject <RESTApi.AccessToken>(results.Result); string accesstoken = AccessToken.access_token; var sasToken = AzureHelper.GetSASToken(_storageConfig); //Create json for deployment to be amended. string jsonDeploy = "{\"properties\": { \"templateLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/{template}{sasToken}\", \"contentVersion\": \"1.0.0.0\"}, \"mode\": \"Incremental\", \"parametersLink\": { \"uri\": \"https://tighedeploy.blob.core.windows.net/deployments/{parameters}{sasToken}\", \"contentVersion\": \"1.0.0.0\" } } }"; jsonDeploy = jsonDeploy.Replace("{sasToken}", sasToken); //Set Deploy Template dependent on Deployment Type //Add new Deployment Type logic here! jsonDeploy = jsonDeploy.Replace("{template}", deployTypes.DeployFile); var DepParams = deployTypes.ParamsFile; DepParams = DepParams.Replace("{tennant}", deployTypes.Tennant.TennantName); DepParams = DepParams.Replace("{id}", deployTypes.DeployTypeId.ToString()); jsonDeploy = jsonDeploy.Replace("{parameters}", DepParams); azuredeploy = deployTypes.AzureDeployName; var putResourceGroup = RESTApi.PutAsync(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonResourceGroup, true); //PUT request for deployment. var ValidateContent = RESTApi.Validate(subscriptionID, resourcegroupname, azuredeploy, accesstoken).Result; if (ValidateContent == "DeployExists" && Force == false) { resultsarr[0] = "DeployExists"; resultsarr[1] = ""; resultsarr[2] = ""; return(resultsarr); } else { var ValidateTemplate = RESTApi.ValidateTemplate(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonDeploy).Result; if (ValidateTemplate[0] == "TemplateValid") { var putcontent = RESTApi.PutAsync(subscriptionID, resourcegroupname, azuredeploy, accesstoken, jsonDeploy, false); JObject json = JsonConvert.DeserializeObject <JObject>(putcontent.Result); //Update Deployment Type to show deployed deployTypes.DeployState = "Deployed"; deployTypes.DeployResult = await putcontent; _context.Update(deployTypes); await _context.SaveChangesAsync(); ValidateContent = "False"; resultsarr[0] = "DeployNotExists"; resultsarr[1] = "TemplateValid"; resultsarr[2] = ""; return(resultsarr); } else { resultsarr[0] = "DeployNotExists"; resultsarr[1] = ValidateTemplate[0]; resultsarr[2] = ValidateTemplate[1]; return(resultsarr); } } }