コード例 #1
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var             azureToken = request.DataStore.GetJson("AzureToken", "access_token");
            AzureHttpClient client     = new AzureHttpClient(azureToken);

            string newSqlConnectionId  = GetNewSqlConnectionId();
            string powerAppEnvironment = request.DataStore.GetValue("PowerAppEnvironment");

            if (powerAppEnvironment == null)
            {
                return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
            }

            string         sqlConnectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");
            SqlCredentials sqlCredentials      = SqlUtility.GetSqlCredentialsFromConnectionString(sqlConnectionString);

            string body = $"{{\"properties\":{{\"environment\":{{\"id\":\"/providers/Microsoft.PowerApps/environments/{powerAppEnvironment}\",\"name\":\"{powerAppEnvironment}\"}},\"connectionParameters\":{{\"server\":\"{sqlCredentials.Server}\",\"database\":\"{sqlCredentials.Database}\",\"username\":\"{sqlCredentials.Username}\",\"password\":\"{sqlCredentials.Password}\"}}}}}}";
            string url  = $"{BASE_POWER_APPS_URL}/apis/shared_sql/connections/{newSqlConnectionId}?api-version=2016-11-01&$filter=environment%20eq%20%27{powerAppEnvironment}%27";

            await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Put, url, body);

            //TODO: if create fails return failure

            request.DataStore.AddToDataStore("PowerAppSqlConnectionId", newSqlConnectionId, DataStoreType.Private);

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
        }
コード例 #2
0
        public static List <string> GetListOfDatabases(SqlCredentials credentials, bool showOnlyWriteEnabled = false, bool showSystemDB = false)
        {
            var connectionString = GetConnectionString(credentials);

            var result = GetListOfDatabases(connectionString);

            if (showOnlyWriteEnabled)
            {
                var databasesToReturn = new List <string>();
                foreach (var database in result)
                {
                    credentials.Database = database;
                    connectionString     = GetConnectionString(credentials);

                    if (IsDatabaseWriteEnabled(connectionString))
                    {
                        databasesToReturn.Add(database);
                    }
                }

                result = databasesToReturn;
            }

            if (!showSystemDB)
            {
                result.RemoveAll(p =>
                                 string.Equals("master", p, StringComparison.OrdinalIgnoreCase) ||
                                 string.Equals("tempdb", p, StringComparison.OrdinalIgnoreCase) ||
                                 string.Equals("msdb", p, StringComparison.OrdinalIgnoreCase) ||
                                 string.Equals("model", p, StringComparison.OrdinalIgnoreCase));
            }

            return(result);
        }
コード例 #3
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string powerAppEnvironmentId = request.DataStore.GetValue("PowerAppEnvironment");

            if (powerAppEnvironmentId != null)
            {
                AzureHttpClient ahc = new AzureHttpClient(request.DataStore.GetJson("AzureToken", "access_token"));

                string newSqlConnectionId  = RandomGenerator.GetRandomHexadecimal(PowerAppUtility.SQL_CONNECTION_ID_LENGTH);
                string sqlConnectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");

                SqlCredentials sqlCredentials = SqlUtility.GetSqlCredentialsFromConnectionString(sqlConnectionString);

                PowerAppSqlConnection powerAppSqlConnection = new PowerAppSqlConnection(sqlCredentials, powerAppEnvironmentId);

                string body = JsonUtility.Serialize <PowerAppSqlConnection>(powerAppSqlConnection);
                string url  = string.Format(PowerAppUtility.URL_POWERAPPS_SQL_CONNECTION, newSqlConnectionId, powerAppEnvironmentId);

                if (await ahc.IsSuccess(HttpMethod.Put, url, body))
                {
                    request.DataStore.AddToDataStore("PowerAppSqlConnectionId", newSqlConnectionId, DataStoreType.Private);
                }
                else
                {
                    PowerAppUtility.SkipPowerApp(request.DataStore);
                }
            }

            return(new ActionResponse(ActionStatus.Success));
        }
コード例 #4
0
        public static DataTable InvokeSqlCommandWithData(SqlCredentials credentials, string script, Dictionary <string, string> args)
        {
            var connectionString = GetConnectionString(credentials);

            script = ReplaceScriptWithArgs(script, args);
            return(RunCommand(connectionString, script, SqlCommandType.ExecuteWithData));
        }
コード例 #5
0
        public static string GetConnectionString(SqlCredentials credentials)
        {
            SqlConnectionStringBuilder conn = new SqlConnectionStringBuilder
            {
                DataSource     = credentials.Server,
                ConnectTimeout = 15
            };

            // Add encryption if we're targeting an Azure server
            if (credentials.Server.IndexOf(".database.windows.net", StringComparison.OrdinalIgnoreCase) > 0)
            {
                conn.Encrypt = true;
                conn.TrustServerCertificate = false;
            }

            conn.InitialCatalog = credentials.Database ?? (credentials.AlternativeDatabaseToConnect ?? "master");

            if (credentials.Authentication == SqlAuthentication.SQL)
            {
                conn.IntegratedSecurity = false;
                conn.UserID             = credentials.Username;
                conn.Password           = credentials.Password;
            }
            else
            {
                conn.IntegratedSecurity = true;
            }

            return(conn.ConnectionString);
        }
 public PowerAppSqlConnectionPropertiesConnectionParameters(SqlCredentials sqlCredentials)
 {
     Database = sqlCredentials.Database;
     Password = sqlCredentials.Password;
     Server   = sqlCredentials.Server;
     Username = sqlCredentials.Username;
 }
コード例 #7
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string connectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");

            string[] originalFiles = request.DataStore.GetValue("FileName").Split('|');
            string[] tempFolders   = new string[originalFiles.Length];

            for (int i = 0; i < originalFiles.Length; i++)
            {
                string templateFullPath = request.Info.App.AppFilePath + $"/service/PowerBI/{originalFiles[i]}";
                tempFolders[i] = Path.GetRandomFileName();
                Directory.CreateDirectory(request.Info.App.AppFilePath + $"/Temp/{tempFolders[i]}");

                SqlCredentials creds = SqlUtility.GetSqlCredentialsFromConnectionString(connectionString);

                using (PBIXUtils wrangler = new PBIXUtils(templateFullPath, request.Info.App.AppFilePath + $"/Temp/{tempFolders[i]}/{originalFiles[i]}"))
                {
                    wrangler.ReplaceKnownVariableinMashup("STSqlServer", creds.Server);
                    wrangler.ReplaceKnownVariableinMashup("STSqlDatabase", creds.Database);
                }
            }

            string serverPath = string.Empty;

            if (originalFiles.Length == 1)
            {
                serverPath = request.Info.ServiceRootUrl + request.Info.ServiceRelativePath + request.Info.App.AppRelativeFilePath + $"/Temp/{tempFolders[0]}/{originalFiles[0]}";
            }
            else
            {
                string        randomZipFolder = Path.GetRandomFileName();
                DirectoryInfo d = Directory.CreateDirectory(Path.Combine(request.Info.App.AppFilePath, "Temp", randomZipFolder));
                serverPath = Path.Combine(d.FullName, "SolutionTemplate.zip");
                using (FileStream zipFile = AVAwareOpen(serverPath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read))
                {
                    using (ZipArchive z = new ZipArchive(zipFile, ZipArchiveMode.Update))
                    {
                        for (int i = 0; i < originalFiles.Length; i++)
                        {
                            ZipArchiveEntry entry = z.CreateEntry(originalFiles[i], CompressionLevel.Optimal);
                            using (Stream w = entry.Open())
                            {
                                string fileToZip = Path.Combine(request.Info.App.AppFilePath, "Temp", tempFolders[i], originalFiles[i]);
                                using (FileStream source = AVAwareOpen(fileToZip, FileMode.Open, FileAccess.Read, FileShare.Read))
                                {
                                    source.CopyTo(w);
                                    w.Flush();
                                }
                            }
                        }
                    }
                }

                // reconstruct a web server path
                serverPath = request.Info.ServiceRootUrl + request.Info.ServiceRelativePath + request.Info.App.AppRelativeFilePath + $"/Temp/{randomZipFolder}/SolutionTemplate.zip";;
            }

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetJObjectFromStringValue(serverPath)));
        }
コード例 #8
0
        private static string ReplaceSqlPasswords(SqlCredentials sqlCredentials, string json)
        {
            JObject obj   = JsonUtility.GetJsonObjectFromJsonString(json);
            var     nodes = obj["properties"]["package"]["nodes"];

            foreach (var node in nodes.Children())
            {
                var nodeConverted = node.Children().First();

                if (nodeConverted.SelectToken("parameters") != null)
                {
                    if (nodeConverted["parameters"]["Database Server Name"] != null)
                    {
                        nodeConverted["parameters"]["Database Server Name"] = sqlCredentials.Server;
                    }

                    if (nodeConverted["parameters"]["Database Name"] != null)
                    {
                        nodeConverted["parameters"]["Database Name"] = sqlCredentials.Database;
                    }

                    if (nodeConverted["parameters"]["Server User Account Name"] != null)
                    {
                        nodeConverted["parameters"]["Server User Account Name"] = sqlCredentials.Username;
                    }

                    if (nodeConverted["parameters"]["Server User Account Password"] != null)
                    {
                        nodeConverted["parameters"]["Server User Account Password"] = sqlCredentials.Password;
                    }
                }
            }


            if (obj["properties"].SelectToken("parameters") != null)
            {
                if (obj["properties"]["parameters"]["database server name"] != null)
                {
                    obj["properties"]["parameters"]["database server name"] = sqlCredentials.Server;
                }

                if (obj["properties"]["parameters"]["database name"] != null)
                {
                    obj["properties"]["parameters"]["database name"] = sqlCredentials.Database;
                }

                if (obj["properties"]["parameters"]["user name"] != null)
                {
                    obj["properties"]["parameters"]["user name"] = sqlCredentials.Username;
                }

                if (obj["properties"]["parameters"]["Server User Account Password"] != null)
                {
                    obj["properties"]["parameters"]["Server User Account Password"] = sqlCredentials.Password;
                }
            }

            return(obj.ToString());
        }
コード例 #9
0
 public static SqlCredentials GetSQLCredentials()
 {
     SqlCredentials credentials = new SqlCredentials();
     credentials.DataSource = ConfigurationManager.AppSettings["DataSource"];
     credentials.UserId = ConfigurationManager.AppSettings["UserId"];
     credentials.Password = ConfigurationManager.AppSettings["Password"];
     credentials.InitialCatalog = ConfigurationManager.AppSettings["InitialCatalog"];
     return credentials;
 }
コード例 #10
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string rowBatchSize    = request.DataStore.GetValue("RowBatchSize");
            string sapClient       = request.DataStore.GetValue("SapClient");
            string sapHost         = request.DataStore.GetValue("SapHost");
            string sapLanguage     = request.DataStore.GetValue("SapLanguage");
            string sapRouterString = request.DataStore.GetValue("SapRouterString");
            string sapSystemId     = request.DataStore.GetValue("SapSystemId");
            string sapSystemNumber = request.DataStore.GetValue("SapSystemNumber");

            var    sqlConnectionStrings = request.DataStore.GetAllValues("SqlConnectionString");
            string sqlConnectionString  = sqlConnectionStrings != null ? sqlConnectionStrings[0] : string.Empty;

            if (!string.IsNullOrEmpty(sqlConnectionString))
            {
                SqlCredentials sqlCredentials = SqlUtility.GetSqlCredentialsFromConnectionString(sqlConnectionString);
                sqlCredentials.Username = string.Empty;
                sqlCredentials.Password = string.Empty;
                sqlConnectionString     = SqlUtility.GetConnectionString(sqlCredentials);
            }

            string jsonDestination = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), JSON_PATH);

            (new FileInfo(jsonDestination)).Directory.Create();

            JObject config = new JObject(
                new JProperty("RowBatchSize", rowBatchSize),
                new JProperty("SapClient", sapClient),
                new JProperty("SapHost", sapHost),
                new JProperty("SapLanguage", sapLanguage),
                new JProperty("SapRouterString", sapRouterString),
                new JProperty("SapSystemId", sapSystemId),
                new JProperty("SapSystemNumber", sapSystemNumber),
                new JProperty("SqlConnectionString", sqlConnectionString)
                );

            using (StreamWriter file = File.CreateText(jsonDestination))
            {
                using (JsonTextWriter writer = new JsonTextWriter(file))
                {
                    config.WriteTo(writer);
                }
            }

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
        }
コード例 #11
0
        public static void RunSqlCommandWithoutTransaction(SqlCredentials creds, string commandText)
        {
            var connString = SqlUtility.GetConnectionString(creds).Replace("Connect Timeout=15", "Connect Timeout=60");

            using (var cn = new SqlConnection(connString))
            {
                cn.Open();
                using (var command = cn.CreateCommand())
                {
                    command.CommandTimeout = 60;
                    command.CommandText    = commandText;
                    command.Transaction    = null;
                    command.ExecuteNonQuery();
                }
                cn.Close();
            }
        }
コード例 #12
0
        public static void RemoveTempDB()
        {
            SqlCredentials creds = new SqlCredentials()
            {
                Server         = Credential.Instance.Sql.Server,
                Username       = Credential.Instance.Sql.Username,
                Password       = Credential.Instance.Sql.Password,
                Authentication = SqlAuthentication.SQL,
                Database       = "master"
            };

            string command = $"SET IMPLICIT_TRANSACTIONS OFF; " +
                             $"IF EXISTS (SELECT * FROM sys.databases WHERE name='{CurrentDatabase}') " +
                             $"DROP DATABASE [{CurrentDatabase}];";

            RunSqlCommandWithoutTransaction(creds, command);
        }
コード例 #13
0
        public void SetConfigValuesInSql_Success()
        {
            var dataStore = TestHarness.GetCommonDataStoreWithSql().Result;

            dataStore.AddToDataStore("SqlServerIndex", 0, DataStoreType.Any);
            dataStore.AddToDataStore("Customize", "SqlGroup", "SolutionTemplate", DataStoreType.Public);
            dataStore.AddToDataStore("Customize", "SqlSubGroup", "System Center", DataStoreType.Public);
            dataStore.AddToDataStore("Customize", "SqlEntryName", "endpointcompliancetarget", DataStoreType.Public);
            dataStore.AddToDataStore("Customize", "SqlEntryValue", "0.99", DataStoreType.Public);

            dataStore.AddToDataStore("Customize1", "SqlGroup", "SolutionTemplate", DataStoreType.Public);
            dataStore.AddToDataStore("Customize1", "SqlSubGroup", "System Center", DataStoreType.Public);
            dataStore.AddToDataStore("Customize1", "SqlEntryName", "healthevaluationtarget", DataStoreType.Public);
            dataStore.AddToDataStore("Customize1", "SqlEntryValue", "0.99", DataStoreType.Public);

            dataStore.AddToDataStore("Customize3", "SqlGroup", "SolutionTemplate", DataStoreType.Public);
            dataStore.AddToDataStore("Customize3", "SqlSubGroup", "System Center", DataStoreType.Public);
            dataStore.AddToDataStore("Customize3", "SqlEntryName", "healthevaluationtarget", DataStoreType.Public);
            dataStore.AddToDataStore("Customize3", "SqlEntryValue", "120", DataStoreType.Public);

            SqlCredentials creds = new SqlCredentials()
            {
                Server         = Credential.Instance.Sql.Server,
                Username       = Credential.Instance.Sql.Username,
                Password       = Credential.Instance.Sql.Password,
                Authentication = SqlAuthentication.SQL,
                Database       = TestHarness.CurrentDatabase
            };

            TestHarness.RunSqlCommandWithoutTransaction(creds, "CREATE TABLE [dbo].[testTable]" +
                                                        "(" +
                                                        "id                     INT IDENTITY(1, 1) NOT NULL," +
                                                        "configuration_group    VARCHAR(150) NOT NULL," +
                                                        "configuration_subgroup VARCHAR(150) NOT NULL," +
                                                        "name                   VARCHAR(150) NOT NULL," +
                                                        "value                  VARCHAR(max) NULL,    " +
                                                        "visible                BIT NOT NULL DEFAULT 0" +
                                                        ");");

            dataStore.AddToDataStore("SqlConfigTable", "testTable");

            var response = TestHarness.ExecuteAction("Microsoft-SetConfigValueInSql", dataStore);

            Assert.IsTrue(response.Status == 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 workspaceName  = request.DataStore.GetValue("WorkspaceName");
            var experimentName = request.DataStore.GetValue("ExperimentName");

            string sqlConnectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");

            sqlCredentials = SqlUtility.GetSqlCredentialsFromConnectionString(sqlConnectionString);

            ManagementSDK azuremlClient = new ManagementSDK();
            var           workspaces    = azuremlClient.GetWorkspacesFromRdfe(azureToken, subscription);
            var           workspace     = workspaces.SingleOrDefault(p => p.Name.ToLowerInvariant() == workspaceName.ToLowerInvariant());

            if (workspace == null)
            {
                return(new ActionResponse(ActionStatus.Failure, null, null, string.Empty, "Workspace not found"));
            }

            var workspaceSettings = new WorkspaceSetting()
            {
                AuthorizationToken = workspace.AuthorizationToken.PrimaryToken,
                Location           = workspace.Region,
                WorkspaceId        = workspace.Id
            };
            var experiments = azuremlClient.GetExperiments(workspaceSettings);
            var experiment  = experiments.LastOrDefault(p => p.Description.ToLowerInvariant() == experimentName.ToLowerInvariant());

            if (experiment == null)
            {
                return(new ActionResponse(ActionStatus.Failure, null, null, string.Empty, "Experiment not found"));
            }

            string     rawJson = string.Empty;
            Experiment exp     = azuremlClient.GetExperimentById(workspaceSettings, experiment.ExperimentId, out rawJson);

            rawJson = this.ReplaceConnectionString(rawJson);
            azuremlClient.SaveExperiment(workspaceSettings, exp, rawJson);
            return(new ActionResponse(ActionStatus.Success));
        }
コード例 #15
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string server   = request.DataStore.GetJson("SqlCredentials")["Server"].ToString();
            string user     = request.DataStore.GetJson("SqlCredentials").SelectToken("User")?.ToString();
            string password = request.DataStore.GetJson("SqlCredentials").SelectToken("Password")?.ToString();
            var    auth     = request.DataStore.GetJson("SqlCredentials")["AuthType"].ToString();

            SqlCredentials credentials = new SqlCredentials()
            {
                Server         = server,
                Username       = user,
                Password       = password,
                Authentication = auth.EqualsIgnoreCase("Windows") ? SqlAuthentication.Windows : SqlAuthentication.SQL
            };

            var response = SqlUtility.GetListOfDatabases(credentials, true);

            return(response.Count == 0
                ? new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), "NoDatabasesFound")
                : new ActionResponse(ActionStatus.Success, JsonUtility.CreateJObjectWithValueFromObject(response)));
        }
コード例 #16
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var sqlCreds = request.DataStore.GetJson("SqlCredentials");

            string server   = sqlCreds.SelectToken("Server")?.ToString();
            string user     = sqlCreds.SelectToken("User")?.ToString();
            string password = sqlCreds.SelectToken("Password")?.ToString();
            var    auth     = sqlCreds.SelectToken("AuthType")?.ToString();
            var    database = sqlCreds.SelectToken("Database")?.ToString();

            SqlCredentials credentials = new SqlCredentials()
            {
                Server         = server,
                Username       = user,
                Password       = password,
                Authentication = auth.EqualsIgnoreCase("Windows") ? SqlAuthentication.Windows : SqlAuthentication.SQL,
                Database       = string.IsNullOrEmpty(database) ? "master" : database
            };

            var response = SqlUtility.GetConnectionString(credentials);

            return(new ActionResponse(ActionStatus.Success, JsonUtility.CreateJObjectWithValueFromObject(response), true));
        }
コード例 #17
0
 public PowerAppSqlConnectionProperties(SqlCredentials sqlCredentials, string environmentId)
 {
     ConnectionParameters = new PowerAppSqlConnectionPropertiesConnectionParameters(sqlCredentials);
     Environment          = new PowerAppEnvironment(environmentId);
 }
コード例 #18
0
 public static DataTable InvokeStoredProcedure(SqlCredentials credentials, string script, Dictionary <string, string> args)
 {
     return(InvokeStoredProcedure(GetConnectionString(credentials), script, args));
 }
コード例 #19
0
        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));
        }
コード例 #20
0
 public PowerAppSqlConnection(SqlCredentials sqlCredentials, string environmentId)
 {
     Properties = new PowerAppSqlConnectionProperties(sqlCredentials, environmentId);
 }
コード例 #21
0
        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 webserviceFile     = request.DataStore.GetValue("WebServiceFile");
            var webserviceName     = request.DataStore.GetValue("WebServiceName");
            var commitmentPlanName = request.DataStore.GetValue("CommitmentPlan");
            var resourceGroup      = request.DataStore.GetValue("SelectedResourceGroup");
            var storageAccountName = request.DataStore.GetValue("StorageAccountName");

            string         sqlConnectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");
            SqlCredentials sqlCredentials      = SqlUtility.GetSqlCredentialsFromConnectionString(sqlConnectionString);

            ServiceClientCredentials               creds            = new TokenCredentials(azureToken);
            AzureMLWebServicesManagementClient     client           = new AzureMLWebServicesManagementClient(creds);
            AzureMLCommitmentPlansManagementClient commitmentClient = new AzureMLCommitmentPlansManagementClient(creds);

            client.SubscriptionId           = subscription;
            commitmentClient.SubscriptionId = subscription;

            // Create commitment plan
            var commitmentPlan = new Azure.Management.MachineLearning.CommitmentPlans.Models.CommitmentPlan();

            commitmentPlan.Sku = new ResourceSku()
            {
                Capacity = 1,
                Name     = "S1",
                Tier     = "Standard"
            };

            commitmentPlan.Location = "South Central US";
            var createdsCommitmentPlan = await commitmentClient.CommitmentPlans.CreateOrUpdateAsync(commitmentPlan, resourceGroup, commitmentPlanName);

            // Get key from storage account
            var response = await RequestUtility.CallAction(request, "Microsoft-GetStorageAccountKey");

            var    responseObject = JsonUtility.GetJObjectFromObject(response.Body);
            string key            = responseObject["StorageAccountKey"].ToString();

            // Get webservicedefinition
            string jsonDefinition = File.ReadAllText(request.Info.App.AppFilePath + "/" + webserviceFile);
            string jsonFinal      = ReplaceSqlPasswords(sqlCredentials, jsonDefinition);

            // Create WebService - fixed to southcentralus
            WebService webService = ModelsSerializationUtil.GetAzureMLWebServiceFromJsonDefinition(jsonFinal);

            webService.Properties.StorageAccount = new StorageAccount
            {
                Key  = key,
                Name = storageAccountName
            };

            webService.Properties.CommitmentPlan = new CommitmentPlan(createdsCommitmentPlan.Id);
            webService.Name = webserviceName;

            var result = await client.WebServices.CreateOrUpdateAsync(resourceGroup, webserviceName, webService);

            var keys = await client.WebServices.ListKeysAsync(resourceGroup, webserviceName);

            var swaggerLocation = result.Properties.SwaggerLocation;

            string url        = swaggerLocation.Replace("swagger.json", "jobs?api-version=2.0");
            string serviceKey = keys.Primary;

            request.DataStore.AddToDataStore("AzureMLUrl", url);
            request.DataStore.AddToDataStore("AzureMLKey", serviceKey);

            return(new ActionResponse(ActionStatus.Success));
        }