public override async Task ExecuteActionAsync()

in Source/Actions/Microsoft.Deployment.Actions.Salesforce/ADFDeployLinkedServices.cs [27:139]


        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("EmailAddress");

            string dataFactoryName = resourceGroup.Replace("_", string.Empty) + "SalesforceCopyFactory";
            var param = new AzureArmParameterGenerator();

            var sqlConn = new SqlConnectionStringBuilder(connString);

            var sqlFqdn = (sqlConn.DataSource.Contains(":") && sqlConn.DataSource.Contains(",")) ? sqlConn.DataSource.Split(':')[1].Split(',')[0] : sqlConn.DataSource;

            param.AddStringParam("dataFactoryName", dataFactoryName);
            param.AddStringParam("sqlServerFullyQualifiedName", sqlFqdn);
            param.AddStringParam("sqlServerUsername", sqlConn.UserID);
            param.AddStringParam("targetDatabaseName", sqlConn.InitialCatalog);
            param.AddStringParam("salesforceUsername", sfUsername);
            param.AddStringParam("subscriptionId", subscription);
            param.AddStringParam("environmentUrl", sfUrl);
            param.AddParameter("salesforcePassword", "securestring", sfPassword);
            param.AddParameter("sqlServerPassword", "securestring", sqlConn.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();

            var response = await helper.WaitForDeployment(client, resourceGroup, deploymentName);

            if (response.IsSuccess)
            {
                //Log data factory
                request.Logger.LogResource(request.DataStore, dataFactoryName,
                    DeployedResourceType.AzureDataFactory, CreatedBy.BPST, DateTime.UtcNow.ToString("o"));
            }

            return await helper.WaitForDeployment(client, resourceGroup, deploymentName);
        }