public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken")["access_token"].ToString(); var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString(); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var deploymentName = request.DataStore.GetValue("DeploymentName") ?? "AzureMLDeployment"; var workspaceName = request.DataStore.GetValue("WorkspaceName"); var storageAccountName = request.DataStore.GetValue("StorageAccountName"); var planName = request.DataStore.GetValue("PlanName") ?? "azuremlplan"; var skuName = request.DataStore.GetValue("SkuName") ?? "S1"; var skuTier = request.DataStore.GetValue("SkuTier") ?? "Standard"; var skuCapacity = request.DataStore.GetValue("SkuCapacity") ?? "1"; // Get email address var param = new AzureArmParameterGenerator(); param.AddStringParam("name", workspaceName); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("newStorageAccountName", storageAccountName); param.AddStringParam("planName", planName); param.AddStringParam("skuName", skuName); param.AddStringParam("skuTier", skuTier); param.AddStringParam("skuCapacity", skuCapacity); param.AddStringParam("ownerEmail", AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"))); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, "Service/Arm/azureml.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; return(new ActionResponse(ActionStatus.Success)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken")["access_token"].ToString(); var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString(); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation")["Name"].ToString(); var deploymentName = request.DataStore.GetValue("DeploymentName"); var sitename = request.DataStore.GetValue("SiteName"); var functionAppHostingPlan = request.DataStore.GetValue("FunctionHostingPlan"); var param = new AzureArmParameterGenerator(); param.AddStringParam("storageaccountname", "solutiontemplate" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8)); param.AddStringParam("sitename", sitename); param.AddStringParam("AppHostingPlan", functionAppHostingPlan); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/function.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); return(new ActionResponse(ActionStatus.Success)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation", "Name"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var functionAppHostingPlan = request.DataStore.GetValue("functionAppHostingPlan"); var sitename = request.DataStore.GetValue("SiteName"); var search = request.DataStore.GetValue("SearchQuery"); var logicAppNameHistorical = request.DataStore.GetValue("LogicAppNameHistorical"); search = search.StartsWith("@") ? "@" + search : search; var param = new AzureArmParameterGenerator(); param.AddStringParam("sitename", sitename); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("search", search); param.AddStringParam("LogicAppName", logicAppNameHistorical); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/logicappHistorical.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, validate, null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; //Log logic app request.Logger.LogResource(request.DataStore, logicAppNameHistorical, DeployedResourceType.LogicApp, CreatedBy.BPST, DateTime.UtcNow.ToString("o")); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public void TestAzureParam() { AzureArmParameterGenerator param = new AzureArmParameterGenerator(); param.AddStringParam("test", "test2"); param.AddStringParam("test2", "test2"); var val = param.GetDynamicObject(); }
public static string GetAzureArmParameters(string armTemplate, AzureArmParameterGenerator param) { var armTemplateContents = JsonUtility.GetJObjectFromJsonString(armTemplate); var paramDynamo = param.GetDynamicObject(); var armParamTemplate = JsonUtility.GetJObjectFromObject(paramDynamo); armTemplateContents.Remove("parameters"); armTemplateContents.Add("parameters", armParamTemplate["parameters"]); return(armTemplateContents.ToString()); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation", "Name"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var name = request.DataStore.GetValue("StorageAccountName"); var accountType = request.DataStore.GetValue("StorageAccountType"); var encryptionEnabled = request.DataStore.GetValue("StorageAccountEncryptionEnabled"); string storageAccountName = "solutiontemplate" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8); var param = new AzureArmParameterGenerator(); param.AddStringParam("encryptionEnabled", encryptionEnabled); param.AddStringParam("accountType", accountType); param.AddStringParam("location", location); param.AddStringParam("name", name); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, "Service/Arm/storageAccount.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); request.Logger.LogResource(request.DataStore, name, DeployedResourceType.StorageAccount, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, accountType); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var cognitiveServiceKey = request.DataStore.GetValue("CognitiveServiceKey"); if (cognitiveServiceKey == "") { var azureToken = request.DataStore.GetJson("AzureToken")["access_token"].ToString(); var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString(); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation")["Name"].ToString(); var deploymentName = request.DataStore.GetValue("DeploymentName"); var cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName"); var skuName = request.DataStore.GetValue("CognitiveSkuName"); var param = new AzureArmParameterGenerator(); param.AddStringParam("CognitiveServiceName", cognitiveServiceName); param.AddStringParam("skuName", skuName); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var registeration = await client.Providers.RegisterAsync("Microsoft.CognitiveServices"); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/sentimentCognitiveService.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); return(new ActionResponse(ActionStatus.Success, deploymentItem)); } return(new ActionResponse(ActionStatus.Success, string.Empty)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation", "Name"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var logicAppName = request.DataStore.GetValue("LogicAppName"); var searchQuery = request.DataStore.GetValue("SearchQuery"); var imageCacheLogicApp = request.DataStore.GetValue("ImageCacheLogicApp"); var siteName = request.DataStore.GetValue("FunctionName"); var param = new AzureArmParameterGenerator(); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("logicappname", logicAppName); param.AddStringParam("imagecachelogicapp", imageCacheLogicApp); param.AddStringParam("sitename", siteName); param.AddStringParam("searchquery", searchQuery); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/NewsTemplateLogicApp.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken")["access_token"].ToString(); var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString(); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var repoUrl = request.DataStore.GetValue("RepoUrl"); var name = request.DataStore.GetValue("FunctionName"); var param = new AzureArmParameterGenerator(); param.AddStringParam("storageaccountname", "solutiontemplate" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8)); param.AddStringParam("name", name); param.AddStringParam("repoUrl", repoUrl); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, "Service/Arm/AzureFunctions.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string azureToken = request.DataStore.GetJson("AzureToken", "access_token"); string subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string serverName = request.DataStore.GetValue("ASServerName") ?? "analysisserver-" + RandomGenerator.GetRandomLowerCaseCharacters(5); string location = request.DataStore.GetValue("ASLocation") ?? "westus"; string sku = request.DataStore.GetValue("ASSku") ?? "D1"; string admin = AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken")); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); AzureArmParameterGenerator param = new AzureArmParameterGenerator(); param.AddStringParam("name", serverName); param.AddStringParam("location", location); param.AddStringParam("sku", sku); param.AddStringParam("admin", admin); string armTemplatefilePath = File.ReadAllText(request.ControllerModel.SiteCommonFilePath + "/service/arm/NewAzureAS.json"); string template = AzureUtility.GetAzureArmParameters(armTemplatefilePath, param); await AzureUtility.ValidateAndDeployArm(creds, resourceGroup, "ASDeployment", template); await AzureUtility.WaitForArmDeployment(creds, resourceGroup, "ASDeployment"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get , $"/providers/Microsoft.AnalysisServices/servers/{serverName}/" , "2016-05-16" , string.Empty , new Dictionary <string, string>()); string responseBody = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } JObject responseObj = JsonUtility.GetJObjectFromJsonString(responseBody); request.DataStore.AddToDataStore("ASServerUrl", responseObj["properties"]["serverFullName"], DataStoreType.Public); request.Logger.LogResource(request.DataStore, responseObj["properties"]["serverFullName"].ToString(), DeployedResourceType.AzureAnalysisServices, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, sku); return(new ActionResponse(ActionStatus.Success, responseObj)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string azureToken = request.DataStore.GetJson("AzureToken", "access_token"); string subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string deploymentName = request.DataStore.GetValue("DeploymentName"); string logicAppTrigger = string.Empty; string areaId = request.DataStore.GetValue("AxEntityDataAreaId"); string id = request.DataStore.GetValue("AxEntityId"); string connectionName = request.DataStore.GetValue("connectorName"); string instanceUrl = request.DataStore.GetValue("AxInstanceName").Replace("https://", string.Empty).Replace("/", string.Empty); // Read from file var logicAppJsonLocation = "Service/LogicApp/axLogicApp.json"; if (deploymentName == null) { deploymentName = request.DataStore.CurrentRoute; } var param = new AzureArmParameterGenerator(); param.AddStringParam("resourceGroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("connectionName", connectionName); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, logicAppJsonLocation))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var armString = armTemplate.ToString().Replace("ENTITYID", id).Replace("ENTITYAREAID", areaId).Replace("AXINSTANCEURL", instanceUrl); //Deploy logic app var helper = new DeploymentHelper(); var deploymentResponse = await helper.DeployLogicApp(subscription, azureToken, resourceGroup, JsonUtility.GetJObjectFromJsonString(armString), deploymentName); if (!deploymentResponse.IsSuccess) { return(deploymentResponse); } return(new ActionResponse(ActionStatus.Success)); }
public static string GetAzureArmParameters(string armTemplate, JToken armParameters) { var param = new AzureArmParameterGenerator(); foreach (var prop in armParameters.Children()) { string key = prop.Path.Split('.').Last(); string value = prop.First().ToString(); param.AddStringParam(key, value); } var armTemplateContents = JsonUtility.GetJObjectFromJsonString(armTemplate); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplateContents.Remove("parameters"); armTemplateContents.Add("parameters", armParamTemplate["parameters"]); return(armTemplateContents.ToString()); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { List <Task <ActionResponse> > task = new List <Task <ActionResponse> >(); var token = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string connString = request.DataStore.GetValue("SqlConnectionString"); string schema = "dbo"; string postDeploymentPipelineType = request.DataStore.GetValue("postDeploymentPipelineType"); string pipelineFrequency = request.DataStore.GetValue("pipelineFrequency"); string pipelineInterval = request.DataStore.GetValue("pipelineInterval"); string pipelineType = request.DataStore.GetValue("pipelineType"); string pipelineStart = request.DataStore.GetValue("pipelineStart"); string pipelineEnd = request.DataStore.GetValue("pipelineEnd"); bool historicalOnly = Convert.ToBoolean(request.DataStore.GetValue("historicalOnly")); string dataFactoryName = resourceGroup.Replace("_", string.Empty) + "SalesforceCopyFactory"; if (!string.IsNullOrWhiteSpace(postDeploymentPipelineType)) { pipelineFrequency = request.DataStore.GetValue("postDeploymentPipelineFrequency"); pipelineType = postDeploymentPipelineType; pipelineInterval = request.DataStore.GetValue("postDeploymentPipelineInterval"); pipelineStart = DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); pipelineEnd = new DateTime(9999, 12, 31, 23, 59, 59).ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); } if (string.IsNullOrWhiteSpace(pipelineStart)) { pipelineStart = DateTime.UtcNow.AddYears(-3).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); } if (string.IsNullOrWhiteSpace(pipelineEnd)) { pipelineEnd = DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); } var adfJsonData = request.DataStore.GetValue("ADFPipelineJsonData"); var obj = JsonConvert.DeserializeObject(adfJsonData, typeof(DeserializedADFPayload)) as DeserializedADFPayload; obj = ReorderObjects(obj); for (int i = 0; i < obj.fields.Count(); i++) { var o = obj.fields[i]; string deploymentName = string.Concat("ADFPipeline", pipelineType, o.Item1); var sqlCreds = SqlUtility.GetSqlCredentialsFromConnectionString(connString); var param = new AzureArmParameterGenerator(); param.AddStringParam("dataFactoryName", dataFactoryName); param.AddStringParam("targetSqlSchema", schema); param.AddStringParam("targetSqlTable", o.Item1.ToLowerInvariant()); param.AddStringParam("targetSalesforceTable", o.Item1); param.AddStringParam("pipelineName", o.Item1 + "_CopyPipeline"); param.AddStringParam("sqlWritableTypeName", o.Item1.ToLowerInvariant() + "type"); param.AddStringParam("sqlWriterStoredProcedureName", "spMerge" + o.Item1.ToLowerInvariant()); param.AddStringParam("pipelineStartDate", pipelineStart); param.AddStringParam("pipelineEndDate", pipelineEnd); param.AddStringParam("pipelineType", pipelineType); param.AddStringParam("sliceFrequency", pipelineFrequency); param.AddStringParam("sliceInterval", pipelineInterval); var armTemplate = JsonUtility.GetJsonObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/ADF/pipeline.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); if (i >= 1) { armTemplate = CreatePipelineDependency(pipelineType, obj, armTemplate, i - 1); } string tableFields = JsonConvert.SerializeObject(o.Item2); StringBuilder query; if (o.Item1 != "Opportunity" && o.Item1 != "Lead" && o.Item1 != "OpportunityLineItem" && pipelineType == "PreDeployment") { query = CreateQuery(o, tableFields, true, pipelineStart, pipelineEnd); armTemplate = CreateOneTimePipeline(armTemplate); } else { query = CreateQuery(o, tableFields, false); } if (historicalOnly && pipelineType == "PostDeployment") { armTemplate = this.PausePipeline(armTemplate); } string stringTemplate = ReplaceTableFieldsAndQuery(tableFields, query, armTemplate); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, token); ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = stringTemplate, Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } task.Add(new Task <ActionResponse>(() => { var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; var helper = new DeploymentHelper(); return(helper.WaitForDeployment(resourceGroup, deploymentName, client)); })); } foreach (var t in task) { t.Start(); } Task.WaitAll(task.ToArray()); foreach (var t in task) { if (t.Result.Status != ActionStatus.Success) { return(new ActionResponse(ActionStatus.Failure, t.Result.ExceptionDetail.FriendlyErrorMessage)); } } return(new ActionResponse(ActionStatus.Success, JsonUtility.GetJObjectFromStringValue(dataFactoryName))); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var repoUrl = request.DataStore.GetValue("RepoUrl"); var name = request.DataStore.GetValue("FunctionName"); var hostingPlanName = request.DataStore.GetValue("hostingPlanName") ?? "apphostingplan"; var hostingEnvironment = request.DataStore.GetValue("hostingEnvironment") ?? string.Empty; var sku = request.DataStore.GetValue("sku") ?? "Dynamic"; var skuCode = request.DataStore.GetValue("skuCode") ?? "S1"; var workerSize = request.DataStore.GetValue("workerSize") ?? "0"; var branch = request.DataStore.GetValue("branch") ?? "master"; /*var projectPath = request.DataStore.GetValue("ProjectPath") ?? string.Empty; Commented out until we find a way to hasten deployments -we will bring back functions to the same repo then */ string functionArmDeploymentRelativePath = sku.ToLower() == "standard" ? "Service/Arm/AzureFunctionsStaticAppPlan.json" : "Service/Arm/AzureFunctions.json"; string storageAccountName = "solutiontemplate" + Path.GetRandomFileName().Replace(".", "").Substring(0, 8); var param = new AzureArmParameterGenerator(); param.AddStringParam("storageaccountname", storageAccountName); param.AddStringParam("name", name); param.AddStringParam("repoUrl", repoUrl); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("hostingPlanName", hostingPlanName); param.AddStringParam("hostingEnvironment", hostingEnvironment); param.AddStringParam("sku", sku); param.AddStringParam("skuCode", skuCode); param.AddStringParam("workerSize", workerSize); param.AddStringParam("branch", branch); /*param.AddStringParam("projectPath", projectPath); Commented out until we find a way to hasten deployments - we will bring back functions to the same repo then*/ var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, functionArmDeploymentRelativePath))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); //Log app hosting plan request.Logger.LogResource(request.DataStore, hostingPlanName, DeployedResourceType.AppServicePlan, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, sku + "" + skuCode + "" + workerSize); //Log function request.Logger.LogResource(request.DataStore, name, DeployedResourceType.Function, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, sku + "" + skuCode + "" + workerSize); //Log storage account request.Logger.LogResource(request.DataStore, storageAccountName, DeployedResourceType.StorageAccount, CreatedBy.BPST, DateTime.UtcNow.ToString("o")); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string idSubscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string nameResourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string tokenAzure = request.DataStore.GetJson("AzureToken", "access_token"); string databaseConnectionString = request.DataStore.GetValue("SqlConnectionString"); string storageAccountConnectionString = request.DataStore.GetJson("SelectedStorageAccount", "StorageAccountConnectionString"); string functionName = request.DataStore.GetValue("functionName"); string functionStorageAccountName = request.DataStore.GetValue("functionStorageAccountName"); string deploymentName = request.DataStore.GetValue("DeploymentName") ?? request.DataStore.CurrentRoute; var payload = new AzureArmParameterGenerator(); var armParameters = request.DataStore.GetJson("AzureArmParameters"); if (armParameters != null) { foreach (var prop in armParameters.Children()) { string key = prop.Path.Split('.').Last(); string value = prop.First().ToString(); payload.AddStringParam(key, value); } } payload.AddStringParam("siteName", functionName); payload.AddStringParam("blobStorageConnectionString", storageAccountConnectionString); payload.AddStringParam("functionStorageAccountName", functionStorageAccountName); payload.AddStringParam("databaseConnectionString", databaseConnectionString); var armTemplate = JsonUtility.GetJObjectFromJsonString(File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, request.DataStore.GetValue("AzureArmFile")))); var armParamTemplate = JsonUtility.GetJObjectFromObject(payload.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; ResourceManagementClient client = new ResourceManagementClient(new TokenCloudCredentials(idSubscription, tokenAzure)); var validate = await client.Deployments.ValidateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken()); ActionResponse r = await WaitForAction(client, nameResourceGroup, deploymentName); request.DataStore.AddToDataStore("ArmOutput", r.DataStore.GetValue("ArmOutput"), DataStoreType.Public); return(r); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string idSubscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string nameResourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string tokenAzure = request.DataStore.GetJson("AzureToken", "access_token"); string databaseConnectionString = request.DataStore.GetValue("SqlConnectionString"); string dataFactoryName = request.DataStore.GetValue("dataFactoryName"); string deploymentName = request.DataStore.GetValue("DeploymentName") ?? request.DataStore.CurrentRoute; var payload = new AzureArmParameterGenerator(); var armParameters = request.DataStore.GetJson("AzureArmParameters"); if (armParameters != null) { foreach (var prop in armParameters.Children()) { string key = prop.Path.Split('.').Last(); string value = prop.First().ToString(); payload.AddStringParam(key, value); } } payload.AddStringParam("databaseConnectionString", databaseConnectionString); payload.AddStringParam("factoryName", dataFactoryName); payload.AddStringParam("startTime", DateTime.UtcNow.ToString()); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, request.DataStore.GetValue("AzureArmFile")))); var armParamTemplate = JsonUtility.GetJObjectFromObject(payload.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; ResourceManagementClient client = new ResourceManagementClient(new TokenCloudCredentials(idSubscription, tokenAzure)); var validate = await client.Deployments.ValidateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken()); ActionResponse r = await WaitForAction(client, nameResourceGroup, deploymentName); request.DataStore.AddToDataStore("ArmOutput", r.DataStore.GetValue("ArmOutput"), DataStoreType.Public); if (!r.IsSuccess) { return(r); } // Active the function trigger AzureHttpClient httpClient = new AzureHttpClient(tokenAzure, idSubscription, nameResourceGroup); var response = await httpClient.ExecuteWithSubscriptionAndResourceGroupAsync( HttpMethod.Post, $"providers/Microsoft.DataFactory/factories/{dataFactoryName}/triggers/DefaultTrigger/start", "2017-09-01-preview", string.Empty); if (!response.IsSuccessStatusCode) { var error = await response.Content.ReadAsStringAsync(); return(new ActionResponse(ActionStatus.Failure, error, null, DefaultErrorCodes.DefaultErrorCode, "Active trigger")); } return(r); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string azureToken = request.DataStore.GetJson("AzureToken", "access_token"); string subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string doNotWaitString = request.DataStore.GetValue("Wait"); bool doNotWait = !string.IsNullOrEmpty(doNotWaitString) && bool.Parse(doNotWaitString); string deploymentName = request.DataStore.GetValue("DeploymentName"); // Read from file var armTemplatefilePath = request.DataStore.GetValue("AzureArmFile"); var armParamTemplateProperties = request.DataStore.GetJson("AzureArmParameters"); if (deploymentName == null && !doNotWait) { deploymentName = request.DataStore.CurrentRoute; } var param = new AzureArmParameterGenerator(); foreach (var prop in armParamTemplateProperties.Children()) { string key = prop.Path.Split('.').Last(); string value = prop.First().ToString(); param.AddStringParam(key, value); } var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, armTemplatefilePath))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse( ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (doNotWait) { return(new ActionResponse(ActionStatus.Success, deploymentItem)); } return(await WaitForAction(client, resourceGroup, deploymentName)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation", "Name"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var logicAppName = request.DataStore.GetValue("LogicAppName"); var apiKeyTopics = request.DataStore.GetAllValues("AzureMLKey")[0]; var apiKeyImages = request.DataStore.GetAllValues("AzureMLKey")[1];; var apiKeyEntities = request.DataStore.GetAllValues("AzureMLKey")[2];; var apiUrlTopics = request.DataStore.GetAllValues("AzureMLUrl")[0]; var apiUrlImages = request.DataStore.GetAllValues("AzureMLUrl")[1]; var apiUrlEntities = request.DataStore.GetAllValues("AzureMLUrl")[2]; var param = new AzureArmParameterGenerator(); param.AddStringParam("resourcegroup", resourceGroup); param.AddStringParam("subscription", subscription); param.AddStringParam("logicappname", logicAppName); param.AddStringParam("apikeytopics", apiKeyTopics); param.AddStringParam("apikeyimages", apiKeyImages); param.AddStringParam("apikeyentities", apiKeyEntities); param.AddStringParam("apiurltopics", apiUrlTopics); param.AddStringParam("apiurlentities", apiUrlEntities); param.AddStringParam("apiurlimages", apiUrlImages); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/AzureMLSchedulerLogicApp.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); // Log logic app request.Logger.LogResource(request.DataStore, logicAppName, DeployedResourceType.LogicApp, CreatedBy.BPST, DateTime.UtcNow.ToString("o")); return(new ActionResponse(ActionStatus.Success, deploymentItem)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var cognitiveServiceKey = request.DataStore.GetValue("CognitiveServiceKey"); if (!string.IsNullOrEmpty(cognitiveServiceKey)) { return(new ActionResponse(ActionStatus.Success)); } var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetJson("SelectedLocation", "Name"); var deploymentName = request.DataStore.GetValue("DeploymentName"); var cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName"); var cognitiveServiceType = request.DataStore.GetValue("CognitiveServiceType"); var skuName = request.DataStore.GetValue("CognitiveSkuName"); var param = new AzureArmParameterGenerator(); param.AddStringParam("CognitiveServiceName", cognitiveServiceName); param.AddStringParam("CognitiveServiceType", cognitiveServiceType); if (cognitiveServiceType == "Bing.Search") { param.AddStringParam("Location", "global"); } else { param.AddStringParam("Location", "West US"); } param.AddStringParam("skuName", skuName); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); Microsoft.Azure.Management.Resources.ResourceManagementClient client = new ResourceManagementClient(creds); var registeration = await client.Providers.RegisterAsync("Microsoft.CognitiveServices"); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/AzureArm/CognitiveServices.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; while (true) { Thread.Sleep(5000); var status = client.Deployments.GetAsync(resourceGroup, deploymentName, new CancellationToken()).Result; var operations = client.DeploymentOperations.ListAsync(resourceGroup, deploymentName, new DeploymentOperationsListParameters(), new CancellationToken()).Result; var provisioningState = status.Deployment.Properties.ProvisioningState; if (provisioningState == "Accepted" || provisioningState == "Running") { continue; } if (provisioningState == "Succeeded") { return(new ActionResponse(ActionStatus.Success, operations)); } var operation = operations.Operations.First(p => p.Properties.ProvisioningState == ProvisioningState.Failed); var operationFailed = client.DeploymentOperations.GetAsync(resourceGroup, deploymentName, operation.OperationId, new CancellationToken()).Result; return(new ActionResponse(ActionStatus.Failure, operationFailed)); } }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var token = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string sfUsername = request.DataStore.GetValue("SalesforceUser"); string sfPassword = request.DataStore.GetValue("SalesforcePassword"); string sfToken = request.DataStore.GetValue("SalesforceToken"); string sfUrl = request.DataStore.GetValue("SalesforceUrl"); string fullServerUrl = request.DataStore.GetValue("SalesforceBaseUrl"); string connString = request.DataStore.GetValue("SqlConnectionString"); string emails = request.DataStore.GetValue("EmailAddresses"); string dataFactoryName = resourceGroup + "SalesforceCopyFactory"; var param = new AzureArmParameterGenerator(); var sqlCreds = SqlUtility.GetSqlCredentialsFromConnectionString(connString); param.AddStringParam("dataFactoryName", dataFactoryName); param.AddStringParam("sqlServerFullyQualifiedName", sqlCreds.Server); param.AddStringParam("sqlServerUsername", sqlCreds.Username); param.AddStringParam("targetDatabaseName", sqlCreds.Database); param.AddStringParam("salesforceUsername", sfUsername); param.AddStringParam("subscriptionId", subscription); param.AddStringParam("environmentUrl", sfUrl); param.AddParameter("salesforcePassword", "securestring", sfPassword); param.AddParameter("sqlServerPassword", "securestring", sqlCreds.Password); param.AddParameter("salesforceSecurityToken", "securestring", sfToken); var armTemplate = JsonUtility.GetJsonObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/ADF/linkedServices.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); if (string.IsNullOrEmpty(emails)) { (armTemplate .SelectToken("resources")[0] .SelectToken("resources") as JArray) .RemoveAt(2); } else { var addresses = emails.Split(','); List <string> adr = new List <string>(); foreach (var address in addresses) { adr.Add(address); } var stringTemplate = armTemplate.ToString(); stringTemplate = stringTemplate.Replace("\"EMAILS\"", JsonConvert.SerializeObject(adr)); armTemplate = JsonUtility.GetJObjectFromJsonString(stringTemplate); } SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, token); ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var factoryIdenity = new ResourceIdentity { ResourceProviderApiVersion = "2015-10-01", ResourceName = dataFactoryName, ResourceProviderNamespace = "Microsoft.DataFactory", ResourceType = "datafactories" }; var factory = client.Resources.CheckExistence(resourceGroup, factoryIdenity); if (factory.Exists) { client.Resources.Delete(resourceGroup, factoryIdenity); } string deploymentName = "SalesforceCopyFactory-linkedServices"; var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; var helper = new DeploymentHelper(); return(helper.WaitForDeployment(resourceGroup, deploymentName, client)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); var location = request.DataStore.GetLastValue("SqlLocation") ?? "westus"; var databaseTier = request.DataStore.GetLastValue("SqlSku") ?? "S1"; string server = request.DataStore.GetJson("SqlCredentials").SelectToken("Server")?.ToString(); string user = request.DataStore.GetJson("SqlCredentials").SelectToken("User")?.ToString(); string password = request.DataStore.GetJson("SqlCredentials").SelectToken("Password")?.ToString(); var database = request.DataStore.GetJson("SqlCredentials").SelectToken("Database")?.ToString(); string serverWithoutExtension = server.Replace(".database.windows.net", string.Empty); var param = new AzureArmParameterGenerator(); param.AddStringParam("SqlServerName", serverWithoutExtension); param.AddStringParam("SqlDatabaseName", database); param.AddStringParam("Username", user); param.AddParameter("Password", "securestring", password); param.AddStringParam("Sku", databaseTier); param.AddStringParam("SqlLocation", location); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.ControllerModel.SiteCommonFilePath, "Service/Arm/sqlserveranddatabase.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken); ResourceManagementClient client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = armTemplate.ToString(), Parameters = JsonUtility.GetEmptyJObject().ToString() } }; string deploymentName = "SqlDatabaseDeployment"; var validate = await client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); if (!validate.IsValid) { return(new ActionResponse( ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } var deploymentItem = await client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()); // Wait for deployment while (true) { Thread.Sleep(5000); var status = await client.Deployments.GetAsync(resourceGroup, deploymentName, new CancellationToken()); var operations = await client.DeploymentOperations.ListAsync(resourceGroup, deploymentName, new DeploymentOperationsListParameters()); var provisioningState = status.Deployment.Properties.ProvisioningState; if (provisioningState == "Accepted" || provisioningState == "Running") { continue; } if (provisioningState == "Succeeded") { break; } var operation = operations.Operations.First(p => p.Properties.ProvisioningState == ProvisioningState.Failed); var operationFailed = await client.DeploymentOperations.GetAsync(resourceGroup, deploymentName, operation.OperationId); return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(operationFailed), null, DefaultErrorCodes.DefaultErrorCode, operationFailed.Operation.Properties.StatusMessage)); } SqlCredentials credentials = new SqlCredentials() { Server = server, Username = user, Password = password, Authentication = SqlAuthentication.SQL, Database = database }; var connectionStringResponse = SqlUtility.GetConnectionString(credentials); return(new ActionResponse(ActionStatus.Success, JsonUtility.CreateJObjectWithValueFromObject(connectionStringResponse), true)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { List <Task <ActionResponse> > task = new List <Task <ActionResponse> >(); var token = request.DataStore.GetJson("AzureToken")["access_token"].ToString(); var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString(); var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string schema = "dbo"; string postDeploymentPipelineType = request.DataStore.GetValue("postDeploymentPipelineType"); string pipelineFrequency = request.DataStore.GetValue("pipelineFrequency"); string pipelineInterval = request.DataStore.GetValue("pipelineInterval"); string pipelineType = request.DataStore.GetValue("pipelineType"); string pipelineStart = request.DataStore.GetValue("pipelineStart"); string pipelineEnd = request.DataStore.GetValue("pipelineEnd"); string connString = request.DataStore.GetValue("SqlConnectionString"); string sfUsername = request.DataStore.GetValue("SalesforceUser"); string sfPassword = request.DataStore.GetValue("SalesforcePassword"); string sfToken = request.DataStore.GetValue("SalesforceToken"); if (!string.IsNullOrWhiteSpace(postDeploymentPipelineType)) { pipelineFrequency = request.DataStore.GetValue("postDeploymentPipelineFrequency"); pipelineType = postDeploymentPipelineType; pipelineInterval = request.DataStore.GetValue("postDeploymentPipelineInterval"); } string adfJsonData = request.DataStore.GetValue("ADFPipelineJsonData"); var sqlCreds = SqlUtility.GetSqlCredentialsFromConnectionString(connString); var obj = JsonConvert.DeserializeObject(adfJsonData, typeof(DeserializedADFPayload)) as DeserializedADFPayload; foreach (var o in obj.fields) { var deploymentName = string.Concat("ADFDataset", pipelineType, o.Item1); dynamic datasetParam = new AzureArmParameterGenerator(); datasetParam.AddStringParam("dataFactoryName", resourceGroup + "SalesforceCopyFactory"); datasetParam.AddStringParam("sqlServerName", sqlCreds.Server.Split('.')[0]); datasetParam.AddStringParam("sqlServerUsername", sqlCreds.Username); datasetParam.AddStringParam("targetDatabaseName", sqlCreds.Database); datasetParam.AddStringParam("targetSqlSchema", schema); datasetParam.AddStringParam("targetSqlTable", o.Item1); datasetParam.AddStringParam("salesforceUsername", sfUsername); datasetParam.AddStringParam("targetSalesforceTable", o.Item1); datasetParam.AddStringParam("pipelineName", o.Item1 + "CopyPipeline"); datasetParam.AddStringParam("sqlWritableTypeName", o.Item1 + "Type"); datasetParam.AddStringParam("sqlWriterStoredProcedureName", "spMerge" + o.Item1); datasetParam.AddStringParam("pipelineStartDate", pipelineStart); datasetParam.AddStringParam("pipelineEndDate", pipelineEnd); datasetParam.AddStringParam("sliceFrequency", pipelineFrequency); datasetParam.AddStringParam("sliceInterval", pipelineInterval); datasetParam.AddStringParam("pipelineType", pipelineType); datasetParam.AddParameter("salesforcePassword", "securestring", sfPassword); datasetParam.AddParameter("sqlServerPassword", "securestring", sqlCreds.Password); datasetParam.AddParameter("salesforceSecurityToken", "securestring", sfToken); var armTemplate = JsonUtility.GetJsonObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/ADF/datasets.json"))); var armParamTemplate = JsonUtility.GetJObjectFromObject(datasetParam.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); string tableFields = JsonConvert.SerializeObject(o.Item2); StringBuilder query = CreateQuery(o, tableFields); string stringTemplate = ReplaceTableFieldsAndQuery(tableFields, query, armTemplate); var creds = new TokenCloudCredentials(subscription, token); var client = new ResourceManagementClient(creds); var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment() { Properties = new DeploymentPropertiesExtended() { Template = stringTemplate, Parameters = JsonUtility.GetEmptyJObject().ToString() } }; var validate = client.Deployments.ValidateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; if (!validate.IsValid) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode, $"Azure:{validate.Error.Message} Details:{validate.Error.Details}")); } task.Add(new Task <ActionResponse>(() => { var deploymentItem = client.Deployments.CreateOrUpdateAsync(resourceGroup, deploymentName, deployment, new CancellationToken()).Result; var helper = new DeploymentHelper(); return(helper.WaitForDeployment(resourceGroup, deploymentName, client)); })); } foreach (var t in task) { t.Start(); } Task.WaitAll(task.ToArray()); foreach (var t in task) { if (t.Result.Status != ActionStatus.Success) { return(new ActionResponse(ActionStatus.Failure, t.Result.ExceptionDetail.FriendlyErrorMessage)); } } return(new ActionResponse(ActionStatus.Success)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string azureToken = request.DataStore.GetJson("AzureToken", "access_token"); string subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup"); string deploymentName = request.DataStore.GetValue("DeploymentName"); string logicAppTrigger = string.Empty; string logicAppName = request.DataStore.GetValue("logicAppName"); string sqlConnectionName = request.DataStore.GetValue("sqlConnectionName"); // Read from file var logicAppJsonLocation = "Service/Notifier/notifierLogicApp.json"; if (deploymentName == null) { deploymentName = request.DataStore.CurrentRoute; } var param = new AzureArmParameterGenerator(); param.AddStringParam("logicAppTrigger", string.Empty); param.AddStringParam("logicAppName", logicAppName); param.AddStringParam("sqlConnectionName", request.DataStore.GetValue("sqlConnectionName")); param.AddStringParam("resourceGroup", resourceGroup); param.AddStringParam("subscription", subscription); var armTemplate = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, logicAppJsonLocation))); var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); //Deploy logic app var helper = new DeploymentHelper(); var deploymentResponse = await helper.DeployLogicApp(subscription, azureToken, resourceGroup, armTemplate, deploymentName); if (!deploymentResponse.IsSuccess) { return(deploymentResponse); } //Get logic app trigger Url AzureHttpClient azureClient = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await azureClient.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers/manual/listCallbackUrl", "2016-06-01", string.Empty); if (!response.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } var postUrl = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); // Deploy logic app with updated trigger URL for last action var newParam = new AzureArmParameterGenerator(); newParam.AddStringParam("logicAppTrigger", postUrl["value"].ToString()); newParam.AddStringParam("logicAppName", logicAppName); newParam.AddStringParam("sqlConnectionName", request.DataStore.GetValue("sqlConnectionName")); newParam.AddStringParam("resourceGroup", resourceGroup); newParam.AddStringParam("subscription", subscription); armParamTemplate = JsonUtility.GetJObjectFromObject(newParam.GetDynamicObject()); armTemplate.Remove("parameters"); armTemplate.Add("parameters", armParamTemplate["parameters"]); deploymentResponse = await helper.DeployLogicApp(subscription, azureToken, resourceGroup, armTemplate, deploymentName); if (!deploymentResponse.IsSuccess) { return(deploymentResponse); } request.DataStore.AddToDataStore("NotifierTriggerUrl", postUrl["value"].ToString()); //Log logic app request.Logger.LogResource(request.DataStore, logicAppName, DeployedResourceType.LogicApp, CreatedBy.BPST, DateTime.UtcNow.ToString("o")); return(new ActionResponse(ActionStatus.Success)); }