private static JObject UpdateArmTemplateForImport()

in SQL-Hybrid-Cloud-Toolkit/Components/ADP/ADPControl/AzureResourceManagerActivity.cs [184:242]


        private static JObject UpdateArmTemplateForImport(JObject originalTemplate, ImportRequest request)
        {
            string serverNameParameterName = null;

            // Go through every parameter to find the property name is like 'server_%_name'
            using (JsonTextReader reader = new JsonTextReader(new StringReader(originalTemplate["parameters"].ToString())))
            {
                while (reader.Read())
                {
                    if (reader.TokenType.ToString().Equals("PropertyName")
                       && reader.ValueType.ToString().Equals("System.String")
                       && reader.Value.ToString().StartsWith("servers_")
                       && reader.Value.ToString().EndsWith("_name"))
                    {
                        serverNameParameterName = reader.Value.ToString();
                        break;
                    }
                }
            }

            // 1. Replacing the default value to the target server name, appending to the new template
            originalTemplate["parameters"][serverNameParameterName]["defaultValue"] = request.TargetSqlServerName;
            JObject serverNameParameterValue = (JObject)originalTemplate["parameters"][serverNameParameterName];

            // 2. Cleanup all the parameters except the updated server name
            ((JObject)originalTemplate["parameters"]).RemoveAll();
            ((JObject)originalTemplate["parameters"]).Add(serverNameParameterName, serverNameParameterValue);

            // 3. Adjust the servers resource by adding password after the login
            JObject server = (JObject)originalTemplate["resources"]
                .SelectToken("$.[?(@.type == 'Microsoft.Sql/servers')]");

            server.Remove("identity");

            JObject serverProperties = (JObject)server["properties"];
            serverProperties.Property("administratorLogin")
                .AddAfterSelf(new JProperty("administratorLoginPassword", request.SqlAdminPassword));

            JArray newResources = new JArray();

            // 4. Getting the whitelisted resources and adding them to the new template later.
            foreach (string resourceType in AllowedImportSubServerResourceTypes)
            {
                List<JToken> resources = originalTemplate["resources"]
                    .SelectTokens(string.Format("$.[?(@.type == '{0}')]", resourceType)).ToList();
                newResources.Add(resources);
            }

            // 5. Clean up all the resources excepted the new server and whitelisted resource type.
            ((JArray)originalTemplate["resources"]).Clear();
            ((JArray)originalTemplate["resources"]).Add(server);

            foreach (var resource in newResources)
            {
                ((JArray)originalTemplate["resources"]).Add(resource);
            }

            return originalTemplate;
        }