public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string server = request.DataStore.GetJson("SqlCredentials", "Server"); AzureHttpClient httpClient = new AzureHttpClient(azureToken, subscription); dynamic payload = new ExpandoObject(); payload.name = server.Replace(".database.windows.net", ""); payload.type = "Microsoft.Sql/servers"; HttpResponseMessage response = await httpClient.ExecuteWithSubscriptionAsync(HttpMethod.Post, $"/providers/Microsoft.Sql/checkNameAvailability", "2014-04-01-preview", JsonUtility.GetJsonStringFromObject(payload)); string content = await response.Content.ReadAsStringAsync(); var json = JsonUtility.GetJObjectFromJsonString(content); bool isAvailable = json["available"].ToString().EqualsIgnoreCase("True"); string reason = json["reason"].ToString(); string message = json["message"].ToString(); if (isAvailable) { return(new ActionResponse(ActionStatus.Success, "")); } else { // Handle basic errorcases here return(new ActionResponse(ActionStatus.FailureExpected, json, null, SqlErrorCodes.DatabaseAlreadyExists)); } }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { var azureToken = request.DataStore.GetJson("AzureToken", "access_token"); var idSubscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); AzureHttpClient client = new AzureHttpClient(azureToken, idSubscription); var response = await client.ExecuteWithSubscriptionAsync(HttpMethod.Get, $"providers/Microsoft.Storage/storageAccounts", "2017-06-01", string.Empty); if (response.IsSuccessStatusCode) { var storageAccounts = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync()); JArray array = new JArray(); var tasks = storageAccounts["value"].Select(async item => { var storageAccountId = item["id"].ToString(); var storageAccountName = item["name"].ToString(); var connectionString = await this.GetStorageAccountConnectionStringAsync(azureToken, idSubscription, storageAccountName, storageAccountId); var containers = await this.GetContainersAsync(connectionString); return(new JObject { { "StorageAccountId", storageAccountId }, { "StorageAccountName", storageAccountName }, { "StorageAccountConnectionString", connectionString }, { "Containers", containers } }); }).ToArray(); await Task.WhenAll(tasks); foreach (var task in tasks) { array.Add(task.Result); } request.Logger.LogEvent("GetAzureStorages-result", new Dictionary <string, string>() { { "Storages", array.ToString() } }); request.DataStore.AddToDataStore("StorageAccounts", array); return(new ActionResponse(ActionStatus.Success, array, true)); } var error = await response.Content.ReadAsStringAsync(); return(new ActionResponse(ActionStatus.Failure, error, null, DefaultErrorCodes.DefaultErrorCode, "GetAzureStorages")); }
public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request) { string azureToken = request.DataStore.GetJson("AzureTokenAS", "access_token"); string subscription = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId"); string name = request.DataStore.GetValue("ASServerName"); string location = request.DataStore.GetValue("ASLocation") ?? "westus"; dynamic payload = new ExpandoObject(); payload.name = name; payload.type = "Microsoft.AnalysisServices/servers"; AzureHttpClient client = new AzureHttpClient(azureToken, subscription); HttpResponseMessage response = await client.ExecuteWithSubscriptionAsync( HttpMethod.Post, $"providers/Microsoft.AnalysisServices/locations/{location}/checkNameAvailability", "2016-05-16", JsonUtility.GetJsonStringFromObject(payload)); if (response.IsSuccessStatusCode) { string body = await response.Content.ReadAsStringAsync(); var json = JsonUtility.GetJsonObjectFromJsonString(body); if (json["nameAvailable"].ToString().ToLower() == "false") { return(new ActionResponse(ActionStatus.FailureExpected, json, null, null, json["reason"].ToString() + ": " + json["message"].ToString())); } if (json["nameAvailable"].ToString().ToLower() == "true") { return(new ActionResponse(ActionStatus.Success, json)); } } return(new ActionResponse(ActionStatus.Failure, null, null, null, "Unable to query Azure for name availability")); }
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"); request.DataStore.AddToDataStore("requestparameters", "AzureProvider", "Microsoft.CognitiveServices"); var location = request.DataStore.GetValue("CognitiveLocation"); string permissionsToCheck = request.DataStore.GetValue("CognitiveServices"); if (!(await RequestUtility.CallAction(request, "Microsoft-RegisterProviderBeta")).IsSuccess) { return(new ActionResponse(ActionStatus.Failure, null, null, null, "Unable to register Cognitive Services")); } List <string> cognitiveServicesToCheck = permissionsToCheck.Split(',').Select(p => p.Trim()).ToList(); AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup); bool passPermissionCheck = true; // Check if permissions are fine var getPermissionsResponse = await client.ExecuteWithSubscriptionAsync(HttpMethod.Get, $"providers/Microsoft.CognitiveServices/locations/{location}/settings/accounts", "2016-02-01-preview", string.Empty); var getPermissionsBody = JsonUtility.GetJsonObjectFromJsonString(await getPermissionsResponse.Content.ReadAsStringAsync()); foreach (var permission in getPermissionsBody["settings"]) { if (cognitiveServicesToCheck.Contains(permission["kind"].ToString()) && permission["allowCreate"].ToString().ToLowerInvariant() == "false") { passPermissionCheck = false; } if (cognitiveServicesToCheck.Contains(permission["kind"].ToString()) && permission["allowCreate"].ToString().ToLowerInvariant() == "true") { cognitiveServicesToCheck.Remove(permission["kind"].ToString()); } } if (passPermissionCheck && cognitiveServicesToCheck.Count == 0) { return(new ActionResponse(ActionStatus.Success)); } // IF not then check if user can enable var getOwnerResponse = await client.ExecuteWithSubscriptionAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/locations/{location}/checkAccountOwner", "2016-02-01-preview", JsonUtility.GetEmptyJObject().ToString()); var getOwnerBody = JsonUtility.GetJsonObjectFromJsonString(await getOwnerResponse.Content.ReadAsStringAsync()); if (getOwnerBody["isAccountOwner"].ToString().ToLowerInvariant() == "false") { return(new ActionResponse(ActionStatus.Failure, getOwnerBody, null, null, $"Your account admin ({getOwnerBody["accountOwnerEmail"].ToString()}) needs to enable cognitive services for this subscription. Ensure the account admin has at least contributor privileges to the Azure subscription. " + $"The following cognitive service should be enabled in order to proceed- {permissionsToCheck}")); } // User does not have permission but we can enable permission for the user as they are the admin dynamic obj = new ExpandoObject(); obj.resourceType = "accounts"; obj.settings = new ExpandoObject[cognitiveServicesToCheck.Count]; for (int i = 0; i < cognitiveServicesToCheck.Count; i++) { obj.settings[i] = new ExpandoObject(); obj.settings[i].kind = cognitiveServicesToCheck[i]; obj.settings[i].allowCreate = true; } var setPermissionsResponse = await client.ExecuteWithSubscriptionAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/locations/{location}/updateSettings", "2016-02-01-preview", JsonUtility.GetJObjectFromObject(obj).ToString()); if (!setPermissionsResponse.IsSuccessStatusCode) { return(new ActionResponse(ActionStatus.Failure, await setPermissionsResponse.Content.ReadAsStringAsync(), null, null, $"Unable to assign permissions for the cogntivie services {permissionsToCheck}. Use the Azure Portal to enable these services. Ensure you have at least contributor privilige to the subscription")); } return(new ActionResponse(ActionStatus.Success)); }