public override async Task<ActionResponse> ExecuteActionAsync(ActionRequest request) { var cognitiveServiceKey = request.DataStore.GetAllValues("CognitiveServiceKey").LastOrDefault(); if (!string.IsNullOrEmpty(cognitiveServiceKey)) { return new ActionResponse(ActionStatus.Success); } 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 cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/accounts/{cognitiveServiceName}/listKeys", "2016-02-01-preview", string.Empty); if (response.IsSuccessStatusCode) { var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); JObject newCognitiveServiceKey = new JObject(); newCognitiveServiceKey.Add("CognitiveServiceKey", subscriptionKeys["key1"].ToString()); return new ActionResponse(ActionStatus.Success, newCognitiveServiceKey, true); } return new ActionResponse(ActionStatus.Failure); }
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 storageAccountName = request.DataStore.GetValue("StorageAccountName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys", "2016-01-01", string.Empty); if (response.IsSuccessStatusCode) { var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); string key = subscriptionKeys["keys"][0]["value"].ToString(); string connectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={key};EndpointSuffix=core.windows.net"; JObject newStorageAccountKey = new JObject(); newStorageAccountKey.Add("StorageAccountKey", key); newStorageAccountKey.Add("StorageAccountConnectionString", connectionString); request.DataStore.AddToDataStore("StorageAccountKey", key); request.DataStore.AddToDataStore("StorageAccountConnectionString", connectionString); return(new ActionResponse(ActionStatus.Success, newStorageAccountKey, true)); } return(new ActionResponse(ActionStatus.Failure)); }
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 logicAppName = request.DataStore.GetValue("LogicAppName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var runs = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"providers/Microsoft.Logic/workflows/{logicAppName}/runs", "2016-06-01", string.Empty); if (!runs.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } var runsResponse = JObject.Parse(await runs.Content.ReadAsStringAsync()); var runsArray = runsResponse["value"] as JArray; if (runsArray.Count > 0 && runsArray[0]["properties"]["status"].ToString() == "Running") { return(new ActionResponse(ActionStatus.Success)); } var triggers = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers", "2016-06-01", string.Empty); if (!triggers.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } var triggersResponse = JObject.Parse(await triggers.Content.ReadAsStringAsync()); string triggerToUse = triggersResponse["value"][0]["name"].ToString(); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerToUse}/run", "2016-06-01", string.Empty); if (!response.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } 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 sitename = request.DataStore.GetValue("FunctionName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var existingResponse = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"/providers/Microsoft.Web/sites/{sitename}/config/appSettings/list", "2016-03-01", "{}"); if (!existingResponse.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure)); } var appSettingsPayload = JObject.Parse(await existingResponse.Content.ReadAsStringAsync()); JObject properties = appSettingsPayload["properties"] as JObject; if (request.DataStore.GetJson("AppSettingKeys") != null) { foreach (var item in request.DataStore.GetJson("AppSettingKeys")) { string key = item.Path.Split('.').Last(); string value = (string)item; properties.Add(key, value); } } var appSettingCreated = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Put, $"/providers/Microsoft.Web/sites/{sitename}/config/appSettings", "2016-03-01", appSettingsPayload.ToString()); var response = await appSettingCreated.Content.ReadAsStringAsync(); if (!appSettingCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } return(new ActionResponse(ActionStatus.Success)); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string keyNumber = request.DataStore.GetValue("KeyNumber") ?? "0"; int keyNumberParsed = int.Parse(keyNumber); var cognitiveServiceKeys = request.DataStore.GetAllValues("CognitiveServiceKey"); if (cognitiveServiceKeys.Count - 1 >= keyNumberParsed) { string key = cognitiveServiceKeys[keyNumberParsed]; if (!string.IsNullOrEmpty(key)) { return(new ActionResponse(ActionStatus.Success)); } } 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 cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName"); var cognitiveServiceType = request.DataStore.GetValue("CognitiveServiceType"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/accounts/{cognitiveServiceName}/listKeys", "2016-02-01-preview", string.Empty); if (response.IsSuccessStatusCode) { var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); JObject newCognitiveServiceKey = new JObject(); newCognitiveServiceKey.Add("CognitiveServiceKey", subscriptionKeys["key1"].ToString()); string cognitiveKey = subscriptionKeys["key1"].ToString(); var itemsInDataStore = request.DataStore.GetAllDataStoreItems("CognitiveServiceKey"); if (itemsInDataStore.Count - 1 >= keyNumberParsed) { request.DataStore.UpdateValue(itemsInDataStore[keyNumberParsed].DataStoreType, itemsInDataStore[keyNumberParsed].Route, itemsInDataStore[keyNumberParsed].Key, cognitiveKey); } else { request.DataStore.AddToDataStore("CognitiveServiceKey", cognitiveKey); } return(new ActionResponse(ActionStatus.Success, newCognitiveServiceKey, true)); } return(new ActionResponse(ActionStatus.Failure)); }
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) { 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 sitename = request.DataStore.GetValue("FunctionName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); // Force sync dynamic obj = new ExpandoObject(); obj.subscriptionId = subscription; obj.SiteId = new ExpandoObject(); obj.SiteId.Name = sitename; obj.SiteId.ResourceGroup = resourceGroup; HttpResponseMessage result = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, "https://web1.appsvcux.ext.azure.com/websites/api/Websites/KuduSync", JsonUtility.GetJsonStringFromObject(obj)); var resultBody = await result.Content.ReadAsStringAsync(); while (true) { result = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}/deployments", "2016-08-01", ""); resultBody = await result.Content.ReadAsStringAsync(); if (result.IsSuccessStatusCode) { var jobj = JsonUtility.GetJObjectFromJsonString(resultBody); if (jobj["value"] != null && (jobj["value"] as JArray).Count > 0) { if (bool.Parse(jobj["value"][0]["properties"]["complete"].ToString()) == true) { break; } } } await Task.Delay(5000); } return(new ActionResponse(ActionStatus.Success)); }
private async Task <string> GetStorageAccountConnectionStringAsync(string azureToken, string subscriptionId, string storageAccountName, string storageAccountId) { var matches = resourceGroupEx.Match(storageAccountId); var resourceGroup = matches.Success ? matches.Groups[1].Value : string.Empty; AzureHttpClient client = new AzureHttpClient(azureToken, subscriptionId, resourceGroup); var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys", "2016-01-01", string.Empty); if (response.IsSuccessStatusCode) { var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); string key = subscriptionKeys["keys"][0]["value"].ToString(); return($"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={key};EndpointSuffix=core.windows.net"); } return(string.Empty); }
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 functionName = request.DataStore.GetValue("FunctionName"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); HttpResponseMessage publishxml = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, "/providers/Microsoft.Web/sites/" + functionName + "/publishxml", "2015-02-01", string.Empty); var publishxmlfile = publishxml.Content.ReadAsStringAsync().Result; XDocument doc = XDocument.Parse(publishxmlfile); XElement xElement = doc.Element("publishData"); if (xElement == null) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromStringValue(publishxmlfile), null, DefaultErrorCodes.DefaultErrorCode, "Unable to get publisher profile")); } var publishProfiles = xElement.Elements("publishProfile"); var profile = publishProfiles.SingleOrDefault(p => p.Attribute("publishMethod").Value == "FTP"); if (profile == null) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromStringValue(publishxmlfile), null, DefaultErrorCodes.DefaultErrorCode, "Unable to find FTP profile")); } var ftpServer = profile.Attribute("publishUrl").Value; var username = profile.Attribute("userName").Value; var password = profile.Attribute("userPWD").Value; FtpUtilityTest.UploadFileToServer(ftpServer, username, password, "/ArticleExtractor/bin/Microsoft.KnowledgeMining.MainArticleExtractor.dll", request.ControllerModel.SiteCommonFilePath + "/Assemblies/Microsoft.KnowledgeMining.MainArticleExtractor.dll"); return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject())); }
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 logicAppName = request.DataStore.GetValue("LogicAppNameHistorical"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var response = await client.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()); response = await client.ExecuteGenericRequestNoHeaderAsync(HttpMethod.Post, postUrl["value"].ToString(), string.Empty); 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 functionFileName = request.DataStore.GetValue("FunctionFileName"); var functionName = request.DataStore.GetValue("FunctionName"); var sitename = request.DataStore.GetValue("SiteName"); List <string> appSettings = new List <string>(); if (request.DataStore.GetJson("AppSettingKeys") != null && !string.IsNullOrEmpty(request.DataStore.GetJson("AppSettingKeys")[0].ToString())) { foreach (var item in request.DataStore.GetJson("AppSettingKeys")) { string key = (string)item; appSettings.Add(key); } } AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var function = System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, $"Service/Data/{functionFileName}")); var jsonBody = "{\"files\":{\"run.csx\":\"test\"},\"config\":" + "{\"" + "bindings\":" + "[" + "{\"name\":\"req\"," + "\"type\":\"httpTrigger\"," + "\"direction\":\"in\"," + "\"webHookType\":\"genericJson\"," + "\"scriptFile\":\"run.csx\"" + "}" + "]," + "\"disabled\":false}}"; JObject jsonRequest = JsonUtility.GetJObjectFromJsonString(jsonBody); jsonRequest["files"]["run.csx"] = function; string stringRequest = JsonUtility.GetJsonStringFromObject(jsonRequest); var functionCreated = await client.ExecuteWebsiteAsync(HttpMethod.Put, sitename, $"/api/functions/{functionName}", stringRequest); string response = await functionCreated.Content.ReadAsStringAsync(); if (!functionCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating function")); } dynamic obj = new ExpandoObject(); obj.subscriptionId = subscription; obj.siteId = new ExpandoObject(); obj.siteId.Name = sitename; obj.siteId.ResourceGroup = resourceGroup; obj.connectionStrings = new ExpandoObject[appSettings.Count]; if (appSettings.Count != 0) { for (int i = 0; i < appSettings.Count; i++) { obj.connectionStrings[i] = new ExpandoObject(); obj.connectionStrings[i].ConnectionString = appSettings[i]; obj.connectionStrings[i].Name = "connectionString" + i.ToString(); obj.connectionStrings[i].Type = 2; } } obj.location = location; var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings", JsonUtility.GetJsonStringFromObject(obj)); response = await appSettingCreated.Content.ReadAsStringAsync(); if (!appSettingCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty); response = await getFunction.Content.ReadAsStringAsync(); if (!getFunction.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject())); }
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"); var dataFactory = resourceGroup + "SalesforceCopyFactory"; var url = string.Format(getDatasetRelativeUrl, dataFactory); DataTable table = new DataTable(); table.Columns.Add("Dataset"); table.Columns.Add("Start"); table.Columns.Add("End"); table.Columns.Add("Status"); var client = new AzureHttpClient(token, subscription, resourceGroup); var connection = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, url, apiVersion, string.Empty); if (!connection.IsSuccessStatusCode) { var result = connection.Content.ReadAsStringAsync().Result; return(new ActionResponse(ActionStatus.FailureExpected, JsonUtility.GetJObjectFromJsonString(result), null, DefaultErrorCodes.DefaultErrorCode, result)); } var connectionData = JsonUtility.GetJObjectFromJsonString(connection.Content.ReadAsStringAsync().Result); if (connectionData != null) { foreach (var dataset in connectionData["value"]) { var nameParts = dataset["name"].ToString().Split('_'); if (nameParts[0] == "PreDeployment" && nameParts[2] == "Output") { Dictionary <string, string> queryParameters = new Dictionary <string, string>(); queryParameters.Add("start", DateTime.UtcNow.AddYears(-3).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)); queryParameters.Add("end", DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)); var sliceRelativeUrl = string.Concat(url, '/', dataset["name"].ToString()); sliceRelativeUrl.Remove(0, 1); var sliceConnection = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, sliceRelativeUrl + "/slices/", apiVersion, string.Empty, queryParameters ); if (!sliceConnection.IsSuccessStatusCode) { var result = connection.Content.ReadAsStringAsync().Result; return(new ActionResponse(ActionStatus.FailureExpected, JsonUtility.GetJObjectFromJsonString(result), null, DefaultErrorCodes.DefaultErrorCode, result)); } var data = JsonUtility.GetJObjectFromJsonString(sliceConnection.Content.ReadAsStringAsync().Result); if (data["value"].Count() > 2) { int numberOfSlices = data["value"].Count() - 2; var lastSlice = data["value"][numberOfSlices]; table.Rows.Add(new[] { dataset["name"].ToString().Split('_')[1], lastSlice["start"].ToString(), lastSlice["end"].ToString(), lastSlice["status"].ToString() }); } else { table.Rows.Add(new[] { dataset["name"].ToString().Split('_')[1], string.Empty, string.Empty, data["value"][0]["status"].ToString() }); } } } } var ready = from DataRow row in table.Rows where (string)row["Status"] != "Ready" select(string) row["Dataset"]; var response = JsonUtility.CreateJObjectWithValueFromObject(table); if (ready.Count() > 0) { return(new ActionResponse(ActionStatus.BatchNoState, response)); } else { return(new ActionResponse(ActionStatus.Success, response)); } }
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 sitename = request.DataStore.GetValue("SiteName"); var sqlConnectionString = request.DataStore.GetValue("SqlConnectionString"); var cognitiveServiceKey = request.DataStore.GetValue("CognitiveServiceKey"); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); var functionCSharp = System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/Data/TweetFunctionCSharp.cs")); var jsonBody = "{\"files\":{\"run.csx\":\"test\"},\"config\":" + "{\"" + "bindings\":" + "[" + "{\"name\":\"req\"," + "\"type\":\"httpTrigger\"," + "\"direction\":\"in\"," + "\"webHookType\":\"genericJson\"," + "\"scriptFile\":\"run.csx\"" + "}" + "]," + "\"disabled\":false}}"; JObject jsonRequest = JsonUtility.GetJObjectFromJsonString(jsonBody); jsonRequest["files"]["run.csx"] = functionCSharp; string stringRequest = JsonUtility.GetJsonStringFromObject(jsonRequest); var functionCreated = await client.ExecuteWebsiteAsync(HttpMethod.Put, sitename, "/api/functions/TweetProcessingFunction", stringRequest); string response = await functionCreated.Content.ReadAsStringAsync(); if (!functionCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating function")); } dynamic obj = new ExpandoObject(); obj.subscriptionId = subscription; obj.siteId = new ExpandoObject(); obj.siteId.Name = sitename; obj.siteId.ResourceGroup = resourceGroup; obj.connectionStrings = new ExpandoObject[2]; obj.connectionStrings[0] = new ExpandoObject(); obj.connectionStrings[0].ConnectionString = sqlConnectionString; obj.connectionStrings[0].Name = "connectionString"; obj.connectionStrings[0].Type = 2; obj.connectionStrings[1] = new ExpandoObject(); obj.connectionStrings[1].ConnectionString = cognitiveServiceKey; obj.connectionStrings[1].Name = "subscriptionKey"; obj.connectionStrings[1].Type = 2; obj.location = location; var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings", JsonUtility.GetJsonStringFromObject(obj)); response = await appSettingCreated.Content.ReadAsStringAsync(); if (!appSettingCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty); response = await getFunction.Content.ReadAsStringAsync(); if (!getFunction.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject())); }
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)); }
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 apiKey = request.DataStore.GetValue("apiKey"); var subscriptionKey = request.DataStore.GetValue("subscriptionKey"); string connectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex"); var sitename = request.DataStore.GetValue("FunctionName"); List <string> appSettings = new List <string>(); if (request.DataStore.GetJson("AppSettingKeys") != null && !string.IsNullOrEmpty(request.DataStore.GetJson("AppSettingKeys")[0].ToString())) { foreach (var item in request.DataStore.GetJson("AppSettingKeys")) { string key = (string)item; appSettings.Add(key); } } AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); dynamic obj = new ExpandoObject(); obj.subscriptionId = subscription; obj.siteId = new ExpandoObject(); obj.siteId.Name = sitename; obj.siteId.ResourceGroup = resourceGroup; obj.connectionStrings = new ExpandoObject[3]; obj.connectionStrings[0] = new ExpandoObject(); obj.connectionStrings[0].ConnectionString = apiKey; obj.connectionStrings[0].Name = "apiKey"; obj.connectionStrings[0].Type = 2; obj.connectionStrings[1] = new ExpandoObject(); obj.connectionStrings[1].ConnectionString = subscriptionKey; obj.connectionStrings[1].Name = "subscriptionKey"; obj.connectionStrings[1].Type = 2; obj.connectionStrings[2] = new ExpandoObject(); obj.connectionStrings[2].ConnectionString = connectionString; obj.connectionStrings[2].Name = "ConnectionString"; obj.connectionStrings[2].Type = 2; obj.location = location; var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings", JsonUtility.GetJsonStringFromObject(obj)); string response = await appSettingCreated.Content.ReadAsStringAsync(); if (!appSettingCreated.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty); response = await getFunction.Content.ReadAsStringAsync(); if (!getFunction.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response), null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting")); } return(new ActionResponse(ActionStatus.Success)); }
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); }