Exemplo n.º 1
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()));
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
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));
        }
        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));
        }