コード例 #1
0
        //need to return an object with property list and so on
        public JObject CreatePolicy(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name          = restObject.Value <string>("name");
            string type          = restObject.Value <string>("type");
            string servicename   = "";
            string apiname       = "";
            string operationname = "";

            name = parametrizePropertiesOnly ? $"'{name}'" : $"parameters('{AddParameter($"operations_{name}_name", "string", name)}')";

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            if (type == "Microsoft.ApiManagement/service/apis/policies")
            {
                var matches = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/apis/(?<apiname>[a-zA-Z0-9_-]*)");
                servicename = matches.Groups["servicename"].Value;
                apiname     = matches.Groups["apiname"].Value;
                apiname     = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";
                obj.name    = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {apiname}, '/', {name})]";
            }
            else if (type == "Microsoft.ApiManagement/service/apis/operations/policies")
            {
                var matches = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/apis/(?<apiname>[a-zA-Z0-9_-]*)/operations/(?<operationname>[a-zA-Z0-9_-]*)");
                servicename   = matches.Groups["servicename"].Value;
                apiname       = matches.Groups["apiname"].Value;
                operationname = matches.Groups["operationname"].Value;
                apiname       = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";
                operationname = parametrizePropertiesOnly ? $"'{operationname}'" : $"parameters('{AddParameter($"operations_{operationname}_name", "string", operationname)}')";
                obj.name      = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {apiname}, '/', {operationname}, '/', {name})]";
            }

            obj.type = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }

            dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis', parameters('service_{servicename}_name') , {apiname})]");

            if (type == "Microsoft.ApiManagement/service/apis/operations/policies")
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis/operations', parameters('service_{servicename}_name'), {apiname}, {operationname})]");
            }

            resource["dependsOn"] = dependsOn;
            return(resource);
            //this.resources.Add(resource);
        }
コード例 #2
0
        public JObject AddApplicationInsightsInstance(JObject restObject)
        {
            var obj = new ResourceTemplate
            {
                comments = "Generated for resource " + restObject.Value <string>("id"),
                type     = "Microsoft.Insights/components",
            };
            var    rid         = new AzureResourceId(restObject.Value <string>("id"));
            var    servicename = rid.ValueAfter("service");
            string name        = restObject.Value <string>("name");

            obj.name = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_applicationInsights", "string", name));
            var resource = JObject.FromObject(obj);

            resource["location"]   = WrapParameterName($"{GetServiceName(servicename, false)}_location");
            resource["apiVersion"] = "2015-05-01";
            resource["kind"]       = "other";
            resource["properties"] = JObject.FromObject(new { Application_Type = "other" });
            if (APIMInstanceAdded)
            {
                resource["dependsOn"] = new JArray
                {
                    $"[resourceId('Microsoft.ApiManagement/service', parameters('{GetServiceName(servicename)}'))]"
                };
            }
            return(resource);
        }
コード例 #3
0
        public ResourceTemplate AddLogger(string servicename, string loggerNameParam)
        {
            string serviceNameParam       = WrapParameterNameWithoutBrackets(GetServiceName(servicename));
            string appInsightsRgNameParam = WrapParameterNameWithoutBrackets(AddParameter("app-insights-resourceGroup", "string", ""));
            string appInsightsNameParam   = WrapParameterNameWithoutBrackets(AddParameter("app-insights-name", "string", ""));

            var loggerTemplate = new ResourceTemplate
            {
                type       = "Microsoft.ApiManagement/service/loggers",
                properties = JObject.FromObject(new
                {
                    loggerType  = "applicationInsights",
                    credentials = new { instrumentationKey = $"[reference(resourceId({appInsightsRgNameParam}, 'Microsoft.Insights/components', {appInsightsNameParam}), '2014-04-01').InstrumentationKey]" },
                    isBuffered  = true
                })
            };

            loggerTemplate.AddName(serviceNameParam);
            loggerTemplate.AddName(loggerNameParam);

            if (resources.Any(r => r.Value <string>("name") == loggerTemplate.name))
            {
                return(null);
            }

            resources.Add(JObject.FromObject(loggerTemplate));

            return(loggerTemplate);
        }
コード例 #4
0
        public JObject AddProduct(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = parametrizePropertiesOnly ? $"[concat(parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}'), '/{name}')]" : $"[concat(parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}'), '/' ,parameters('{AddParameter($"product_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('{GetServiceName(servicename)}'))]");
            }
            resource["dependsOn"] = dependsOn;

            this.resources.Add(resource);
            return(resource);
        }
        public JObject AddProductSubObject(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/products/(?<productname>[a-zA-Z0-9_-]*)");
            string servicename = matches.Groups["servicename"].Value;
            string productname = matches.Groups["productname"].Value;

            productname = parametrizePropertiesOnly ? $"'{productname}'" : $"parameters('{AddParameter($"api_{productname}_name", "string", productname)}')";

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {productname}, '/{name}')]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/products', parameters('service_{servicename}_name'), {productname})]");
            resource["dependsOn"] = dependsOn;

            return(resource);
        }
コード例 #6
0
        public ResourceTemplate CreateAPISchema(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string          name        = restObject.Value <string>("name");
            string          type        = restObject.Value <string>("type");
            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");
            string          apiname     = apiid.ValueAfter("apis");



            var obj = new ResourceTemplate();

            obj.AddName($"parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}')");
            obj.AddName($"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')");
            obj.AddName($"'{name}'");

            obj.comments   = "Generated for resource " + restObject.Value <string>("id");
            obj.name       = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'),'/',parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}'), '/{name}')]";
            obj.type       = type;
            obj.properties = restObject.Value <JObject>("properties");

            if (APIMInstanceAdded)
            {
                obj.dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
                //resource["dependsOn"] = new JArray(new string[] { $"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]" });
            }
            obj.dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis', parameters('service_{servicename}_name'),parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}'))]");

            return(obj);
        }
コード例 #7
0
        public JObject AddProductSubObject(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");
            string          productname = apiid.ValueAfter("products");

            productname = parametrizePropertiesOnly ? $"'{productname}'" : $"parameters('{AddParameter($"product_{productname}_name", "string", productname)}')";

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {productname}, '/', parameters('{AddParameter($"api_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/products', parameters('service_{servicename}_name'), {productname})]");
            resource["dependsOn"] = dependsOn;

            return(resource);
        }
コード例 #8
0
        public void AddProperty(JObject restObject)
        {
            if (restObject == null)
            {
                return;
            }

            string name   = restObject["properties"].Value <string>("displayName");
            string type   = restObject.Value <string>("type");
            bool   secret = restObject["properties"].Value <bool>("secret");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = parametrizePropertiesOnly ? $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/{name}')]"  : $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,parameters('{AddParameter($"property_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            AddParameterFromObject((JObject)resource["properties"], "value", secret ? "securestring" : "string", name);

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }
            resource["dependsOn"] = dependsOn;

            this.resources.Add(resource);
        }
コード例 #9
0
        public void AddBackend(JObject restObject)
        {
            if (restObject == null)
            {
                return;
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/");
            string servicename = matches.Groups["servicename"].Value;

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,parameters('{AddParameter($"backend_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            AddParameterFromObject((JObject)resource["properties"], "url", "string", name);

            if (APIMInstanceAdded)
            {
                resource["dependsOn"] = new JArray(new string[] { $"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]" });
            }

            this.resources.Add(resource);
        }
コード例 #10
0
        public ResourceTemplate AddVersionSet(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            Func <JObject, bool> findVersionSet = vs =>
                                                  vs.Value <string>("type") == "Microsoft.ApiManagement/service/api-version-sets" &&
                                                  vs.Value <string>("name").Contains(name);

            bool versionSetExists = this.resources.Any(findVersionSet);

            if (versionSetExists)
            {
                return(null);
            }

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.AddName($"parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}')");
            obj.AddName($"'{name}'");

            obj.type       = type;
            obj.properties = restObject.Value <JObject>("properties");
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('{GetServiceName(servicename)}'))]");
            }

            resource["dependsOn"] = dependsOn;

            this.resources.Add(resource);
            return(obj);
        }
コード例 #11
0
        public ResourceTemplate AddProperty(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name   = restObject.Value <string>("name");
            string type   = restObject.Value <string>("type");
            bool   secret = restObject["properties"].Value <bool>("secret");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.AddName($"parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}')");
            obj.AddName($"'{name}'");

            obj.type       = type;
            obj.properties = restObject.Value <JObject>("properties");
            var resource = JObject.FromObject(obj);

            var propValue = resource["properties"].Value <string>("value");

            if (!(propValue == null || (propValue.StartsWith("[") && propValue.EndsWith("]"))))
            {
                resource["properties"]["value"] = WrapParameterName(this.AddParameter(restObject["properties"].Value <string>("displayName") + "_" + "value", secret ? "securestring" : "string", secret ? "secretvalue" : resource["properties"]["value"]));
            }



            //AddParameterFromObject((JObject)resource["properties"], "value", secret ? "securestring" : "string", restObject["properties"].Value<string>("displayName"));

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }
            resource["dependsOn"] = dependsOn;

            this.resources.Add(resource);
            return(obj);
        }
        public JObject CreateServiceResource(JObject restObject, string resourceType, bool addResource)
        {
            var obj = new ResourceTemplate
            {
                comments = "Generated for resource " + restObject.Value <string>("id"),
                type     = resourceType
            };
            var rid         = new AzureResourceId(restObject.Value <string>("id"));
            var servicename = rid.ValueAfter("service");

            obj.AddName($"parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}')");
            var  name = restObject.Value <string>("name");
            var  resourceTypeShort         = GetResourceTypeShort(resourceType);
            bool applicationInsightsLogger = IsApplicationInsightsLogger(restObject);

            if (applicationInsightsLogger && referenceApplicationInsightsInstrumentationKey)
            {
                name = $"parameters('{AddParameter($"{GetServiceName(servicename, false)}_applicationInsights", "string", name)}')";
            }
            else
            {
                name = parametrizePropertiesOnly ? $"'{name}'" : $"parameters('{AddParameter($"{resourceTypeShort}_{name}_name", "string", name)}')";
            }
            obj.AddName(name);
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];
            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('{GetServiceName(servicename)}'))]");
            }
            resource["dependsOn"] = dependsOn;
            if (addResource)
            {
                if (resources.All(x => x.Value <string>("name") != resource.Value <string>("name")))
                {
                    resources.Add(resource);
                }
            }

            return(resource);
        }
コード例 #13
0
        public JObject CreateDiagnostics(string servicename, string apiNameParam)
        {
            string serviceNameParam = WrapParameterNameWithoutBrackets(GetServiceName(servicename));
            string loggerNameParam  = WrapParameterNameWithoutBrackets(AddParameter("api-logger-name", "string", ""));

            var diagnosticsTemplate = new ResourceTemplate
            {
                type       = "diagnostics",
                name       = "applicationinsights",
                properties = JObject.FromObject(new
                {
                    enabled = true,
                    enableHttpCorrelationHeaders = true,
                    loggerId = $"[resourceId('Microsoft.ApiManagement/service/loggers', {serviceNameParam}, {loggerNameParam})]"
                }),
                dependsOn = new JArray($"[resourceId('Microsoft.ApiManagement/service/apis', {serviceNameParam}, {WrapParameterNameWithoutBrackets(apiNameParam)})]")
            };

            return(JObject.FromObject(diagnosticsTemplate));
        }
コード例 #14
0
        public JObject AddApi(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/");
            string servicename = matches.Groups["servicename"].Value;

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = parametrizePropertiesOnly ? $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/{name}')]" : $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,parameters('{AddParameter($"api_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            AddParameterFromObject((JObject)resource["properties"], "apiRevision", "string", name);
            AddParameterFromObject((JObject)resource["properties"], "serviceUrl", "string", name);
            AddParameterFromObject((JObject)resource["properties"], "apiVersion", "string", name);
            AddParameterFromObject((JObject)resource["properties"], "apiVersionSetId", "string", name);
            AddParameterFromObject((JObject)resource["properties"], "isCurrent", "bool", name);

            if (APIMInstanceAdded)
            {
                resource["dependsOn"] = new JArray(new string[] { $"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]" });
            }
            else
            {
                resource["dependsOn"] = new JArray();;
            }

            this.resources.Add(resource);
            return(resource);
        }
コード例 #15
0
        public void AddGroup(JObject restObject)
        {
            if (restObject == null)
            {
                return;
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");


            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/");
            string servicename = matches.Groups["servicename"].Value;



            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = parametrizePropertiesOnly ? $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/{name}')]" : $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,parameters('{AddParameter($"group_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }
            resource["dependsOn"] = dependsOn;

            // Avoid duplicates.
            if (this.resources.Count(rr => rr.Value <string>("name") == obj.name) == 0)
            {
                this.resources.Add(resource);
            }
        }
コード例 #16
0
        public JObject AddAPIManagementInstance(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string servicename = restObject.Value <string>("name").ToLowerInvariant();
            string type        = restObject.Value <string>("type");

            apimservicename = servicename;
            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = WrapParameterName(AddParameter($"{GetServiceName(servicename)}", "string", servicename));
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["sku"]             = restObject["sku"];
            resource["sku"]["name"]     = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_sku_name", "string", restObject["sku"].Value <string>("name")));
            resource["sku"]["capacity"] = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_sku_capacity", "string", restObject["sku"].Value <string>("capacity")));
            resource["location"]        = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_location", "string", restObject.Value <string>("location")));
            resource["tags"]            = restObject["tags"];
            resource["scale"]           = null;
            resource["properties"]      = new JObject();
            resource["properties"]["publisherEmail"]              = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_publisherEmail", "string", restObject["properties"].Value <string>("publisherEmail")));
            resource["properties"]["publisherName"]               = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_publisherName", "string", restObject["properties"].Value <string>("publisherName")));
            resource["properties"]["notificationSenderEmail"]     = WrapParameterName(AddParameter($"{GetServiceName(servicename, false)}_notificationSenderEmail", "string", restObject["properties"].Value <string>("notificationSenderEmail")));
            resource["properties"]["hostnameConfigurations"]      = restObject["properties"]["hostnameConfigurations"];
            resource["properties"]["additionalLocations"]         = restObject["properties"]["additionalLocations"];
            resource["properties"]["virtualNetworkConfiguration"] = restObject["properties"]["virtualNetworkConfiguration"];
            resource["properties"]["customProperties"]            = restObject["properties"]["customProperties"];
            resource["properties"]["virtualNetworkType"]          = restObject["properties"]["virtualNetworkType"];
            this.resources.Add(resource);
            APIMInstanceAdded = true;
            return(resource);
        }
コード例 #17
0
        public ResourceTemplate AddVersionSet(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");


            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.AddName($"parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}')");
            obj.AddName($"'{name}'");

            obj.type       = type;
            obj.properties = restObject.Value <JObject>("properties");
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }
            resource["dependsOn"] = dependsOn;
            this.resources.Add(resource);
            return(obj);
        }
コード例 #18
0
        public Property AddBackend(JObject restObject, JObject azureResource)
        {
            Property retval = null;

            if (restObject == null)
            {
                return(retval);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,'{name}')]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            if (restObject["properties"]["resourceId"] != null)
            {
                string resourceid = restObject["properties"].Value <string>("resourceId");
                var    aid        = new AzureResourceId(resourceid.Replace("https://management.azure.com/", ""));
                aid.SubscriptionId = "',subscription().subscriptionId,'";
                var rgparamname = AddParameter(name + "_resourceGroup", "string", aid.ResourceGroupName);
                aid.ResourceGroupName = "',parameters('" + rgparamname + "'),'";
                if (resourceid.Contains("providers/Microsoft.Logic/workflows")) //Logic App
                {
                    var laname       = aid.ValueAfter("workflows");
                    var logicappname = AddParameter(name + "_logicAppName", "string", laname);
                    aid.ReplaceValueAfter("workflows", "',parameters('" + logicappname + "')");


                    var    triggerObject = azureResource["properties"]["definition"].Value <JObject>("triggers");
                    string triggername   = "manual";
                    foreach (var trigger in triggerObject)
                    {
                        if (trigger.Value.Value <string>("type") == "Request" && trigger.Value.Value <string>("kind") == "Http")
                        {
                            triggername = trigger.Key;
                        }
                    }
                    //need to get the Logic App triggers and find the HTTP one....

                    string listcallbackref = $"listCallbackUrl(resourceId(parameters('{rgparamname}'), 'Microsoft.Logic/workflows/triggers', parameters('{logicappname}'), '{triggername}'), '2017-07-01')";

                    resource["properties"]["url"] = $"[substring({listcallbackref}.basePath,0,add(10,indexOf({listcallbackref}.basePath,'/triggers/')))]";
                    retval = new Property()
                    {
                        type      = Property.PropertyType.LogicApp,
                        name      = laname.ToLower(),
                        extraInfo = listcallbackref
                    };
                }
                else if (resourceid.Contains("providers/Microsoft.Web/sites")) //Web App/Function
                {
                    var sitename      = aid.ValueAfter("sites");
                    var paramsitename = AddParameter(name + "_siteName", "string", sitename);
                    aid.ReplaceValueAfter("sites", "',parameters('" + paramsitename + "')");
                    resource["properties"]["description"] = $"[parameters('{paramsitename}')]";
                    resource["properties"]["url"]         = $"[concat('https://',toLower(parameters('{paramsitename}')),'.azurewebsites.net/')]";
                    retval = new Property()
                    {
                        type      = Property.PropertyType.Function,
                        name      = sitename.ToLower(),
                        extraInfo = $"listsecrets(resourceId(parameters('{rgparamname}'),'Microsoft.Web/sites/functions', parameters('{paramsitename}'), 'replacewithfunctionoperationname'),'2015-08-01').key"
                    };
                }
                resource["properties"]["resourceId"] = "[concat('https://management.azure.com/','" + aid.ToString().Substring(1) + ")]";
            }
            else
            {
                AddParameterFromObject((JObject)resource["properties"], "url", "string", name);
            }

            if (APIMInstanceAdded)
            {
                resource["dependsOn"] = new JArray(new string[] { $"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]" });
            }

            if (this.resources.Where(rr => rr.Value <string>("name") == obj.name).Count() == 0)
            {
                this.resources.Add(resource);
            }

            return(retval);
        }
コード例 #19
0
        public JObject CreateOperation(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            AzureResourceId apiid       = new AzureResourceId(restObject.Value <string>("id"));
            string          servicename = apiid.ValueAfter("service");
            string          apiname     = apiid.ValueAfter("apis");

            name    = $"'{name}'";
            apiname = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {apiname}, '/', {name})]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            //Schema list
            var schemalist = new List <string>();

            var request = resource["properties"].Value <JObject>("request");

            if (request != null)
            {
                schemalist = schemalist.Union(FixRepresentations(request.Value <JArray>("representations"))).ToList();
            }

            var responses = resource["properties"].Value <JArray>("responses");

            if (responses != null)
            {
                foreach (var resp in responses)
                {
                    schemalist = schemalist.Union(FixRepresentations(resp.Value <JArray>("representations"))).ToList();
                }
            }


            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }
            foreach (var schema in schemalist)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('service_{servicename}_name'),{apiname},'{schema}')]");
            }

            dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis', parameters('service_{servicename}_name'),{apiname})]");

            resource["dependsOn"] = dependsOn;

            return(resource);
            //this.resources.Add(resource);
        }
コード例 #20
0
        //need to return an object with property list and so on
        public JObject CreatePolicy(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name          = restObject.Value <string>("name");
            string type          = restObject.Value <string>("type");
            string servicename   = "";
            string apiname       = "";
            string operationname = "";
            bool   servicePolicy = false;
            var    dependsOn     = new JArray();

            name = $"'{name}'";

            var rid = new AzureResourceId(restObject.Value <string>("id"));
            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");

            switch (type)
            {
            case "Microsoft.ApiManagement/service/apis/policies":
                servicename = rid.ValueAfter("service");
                apiname     = rid.ValueAfter("apis");

                apiname  = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";
                obj.name = $"[concat(parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}'), '/', {apiname}, '/', {name})]";
                break;

            case "Microsoft.ApiManagement/service/apis/operations/policies":
                servicename   = rid.ValueAfter("service");
                apiname       = rid.ValueAfter("apis");
                operationname = rid.ValueAfter("operations");
                apiname       = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";
                operationname = $"'{operationname}'";
                obj.name      = $"[concat(parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}'), '/', {apiname}, '/', {operationname}, '/', {name})]";
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis/operations', parameters('{GetServiceName(servicename)}'), {apiname}, {operationname})]");
                break;

            case "Microsoft.ApiManagement/service/policies":
                servicename   = rid.ValueAfter("service");
                obj.name      = $"[concat(parameters('{AddParameter($"{GetServiceName(servicename)}", "string", servicename)}'), '/', 'policy')]";
                servicePolicy = true;
                break;
            }

            obj.type = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];


            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('{GetServiceName(servicename)}'))]");
            }

            if (!servicePolicy)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis', parameters('{GetServiceName(servicename)}') , {apiname})]");
            }

            resource["dependsOn"] = dependsOn;
            return(resource);
            //this.resources.Add(resource);
        }
コード例 #21
0
        public Property AddBackend(JObject restObject)
        {
            Property retval = null;

            if (restObject == null)
            {
                return(retval);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");

            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/");
            string servicename = matches.Groups["servicename"].Value;

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/' ,parameters('{AddParameter($"backend_{name}_name", "string", name)}'))]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];


            if (restObject["properties"]["resourceId"] != null)
            {
                string resourceid = restObject["properties"].Value <string>("resourceId");
                if (resourceid.Contains("providers/Microsoft.Logic/workflows")) //Logic App
                {
                    var aid = new AzureResourceId(resourceid.Replace("https://management.azure.com/", ""));
                    aid.SubscriptionId = "',subscription().subscriptionId,'";
                    var rgparamname  = AddParameter(name + "_resourceGroup", "string", aid.ResourceGroupName);
                    var laname       = aid.ValueAfter("workflows");
                    var logicappname = AddParameter(name + "_logicAppName", "string", laname);
                    aid.ResourceGroupName = "',parameters('" + rgparamname + "'),'";
                    aid.ReplaceValueAfter("workflows", "',parameters('" + logicappname + "')");

                    resource["properties"]["resourceId"] = "[concat('https://management.azure.com/','" + aid.ToString() + ")]";
                    string listcallbackref = $"listCallbackUrl(resourceId(parameters('{rgparamname}'), 'Microsoft.Logic/workflows/triggers', parameters('{logicappname}'), 'manual'), providers('Microsoft.Logic', 'workflows').apiVersions[0])";

                    resource["properties"]["url"] = $"[substring({listcallbackref}.basePath,0,add(10,indexOf({listcallbackref}.basePath,'/triggers/')))]";
                    retval = new Property()
                    {
                        type      = Property.PropertyType.LogicApp,
                        name      = laname.ToLower(),
                        extraInfo = listcallbackref
                    };
                }
            }
            else
            {
                AddParameterFromObject((JObject)resource["properties"], "url", "string", name);
            }

            if (APIMInstanceAdded)
            {
                resource["dependsOn"] = new JArray(new string[] { $"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]" });
            }

            this.resources.Add(resource);
            return(retval);
        }
コード例 #22
0
        public JObject CreateOperation(JObject restObject)
        {
            if (restObject == null)
            {
                return(null);
            }

            string name = restObject.Value <string>("name");
            string type = restObject.Value <string>("type");


            var    matches     = Regex.Match(restObject.Value <string>("id"), "/service/(?<servicename>[a-zA-Z0-9_-]*)/apis/(?<apiname>[a-zA-Z0-9_-]*)");
            string servicename = matches.Groups["servicename"].Value;
            string apiname     = matches.Groups["apiname"].Value;

            name    = parametrizePropertiesOnly ? $"'{name}'" : $"parameters('{AddParameter($"operations_{name}_name", "string", name)}')";
            apiname = parametrizePropertiesOnly ? $"'{apiname}'" : $"parameters('{AddParameter($"api_{apiname}_name", "string", apiname)}')";

            var obj = new ResourceTemplate();

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            obj.name     = $"[concat(parameters('{AddParameter($"service_{servicename}_name", "string", servicename)}'), '/', {apiname}, '/', {name})]";
            obj.type     = type;
            var resource = JObject.FromObject(obj);

            resource["properties"] = restObject["properties"];

            //schemaId is not handled well yet.. so Reseting it for now

            var request = resource["properties"].Value <JObject>("request");

            if (request != null)
            {
                FixRepresentations(request.Value <JArray>("representations"));
            }

            var responses = resource["properties"].Value <JArray>("responses");

            if (responses != null)
            {
                foreach (var resp in responses)
                {
                    FixRepresentations(resp.Value <JArray>("representations"));
                }
            }


            var dependsOn = new JArray();

            if (APIMInstanceAdded)
            {
                dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service', parameters('service_{servicename}_name'))]");
            }

            dependsOn.Add($"[resourceId('Microsoft.ApiManagement/service/apis', parameters('service_{servicename}_name'), {apiname})]");

            resource["dependsOn"] = dependsOn;

            return(resource);
            //this.resources.Add(resource);
        }