コード例 #1
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);
        }
コード例 #2
0
        public JObject CreateLogger(JObject restObject, bool addResource)
        {
            var resource        = CreateServiceResource(restObject, "Microsoft.ApiManagement/service/loggers", addResource);
            var azureResourceId = new AzureResourceId(restObject.Value <string>("id"));
            var loggerName      = azureResourceId.ValueAfter("loggers");
            var serviceName     = azureResourceId.ValueAfter("service");
            var credentials     = resource["properties"]?["credentials"];

            if (credentials != null)
            {
                if (credentials.Value <string>("connectionString") != null)
                {
                    credentials["connectionString"] = WrapParameterName(AddParameter($"logger_{loggerName}_connectionString", "securestring", String.Empty));
                }
                var loggerType = resource["properties"]?["loggerType"]?.Value <string>() ?? string.Empty;
                if (referenceApplicationInsightsInstrumentationKey && loggerType == "applicationInsights" && credentials.Value <string>("instrumentationKey") != null)
                {
                    string parameter = AddParameter($"{GetServiceName(serviceName, false)}_applicationInsights", "string", loggerName);
                    credentials["instrumentationKey"] = $"[reference(resourceId('Microsoft.Insights/components', parameters('{parameter}')), '2014-04-01').InstrumentationKey]";
                    var dependsOn = resource.Value <JArray>("dependsOn") ?? new JArray();
                    dependsOn.Add($"[resourceId('Microsoft.Insights/components',parameters('{GetServiceName(serviceName, false)}_applicationInsights'))]");
                    resource["dependsOn"] = dependsOn;
                    if (resource["properties"] is JObject properties)
                    {
                        properties.Remove("resourceId");
                    }
                }
                if (credentials.Value <string>("name") != null)
                {
                    credentials["name"] = WrapParameterName(AddParameter($"logger_{loggerName}_credentialName", "string", GetDefaultValue(resource, "credentials", "name")));
                }
            }
            return(resource);
        }
コード例 #3
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);
        }
コード例 #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);
        }
コード例 #5
0
        public void AzureResourceIdToString()
        {
            string reourceid = "/subscriptions/89d02439-770d-43f3-9e4a-8b910457a10c/resourceGroups/INT001.Invoice/providers/Microsoft.Web/connections/Billogram";
            var    ari       = new AzureResourceId(reourceid);

            Assert.AreEqual(reourceid, ari.ToString());
        }
コード例 #6
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);
        }
コード例 #7
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);
        }
コード例 #8
0
        public void AzureResourceIdReplaceValueAfterAndToString()
        {
            string reourceid = "subscriptions/fakeecb73-d0ff-455d-a2bf-eae0b300696d/providers/Microsoft.Web/locations/westeurope/managedApis/filesystem";
            var    ari       = new AzureResourceId(reourceid);

            ari.ReplaceValueAfter("locations", "',parameters('logicapplocation'),'");

            Assert.AreEqual("subscriptions/fakeecb73-d0ff-455d-a2bf-eae0b300696d/providers/Microsoft.Web/locations/',parameters('logicapplocation'),'/managedApis/filesystem", ari.ToString());
        }
コード例 #9
0
        public void AzureResourceIdReplaceAndToString()
        {
            string reourceid = "/subscriptions/89d02439-770d-43f3-9e4a-8b910457a10c/resourceGroups/INT001.Invoice/providers/Microsoft.Web/connections/Billogram";
            var    ari       = new AzureResourceId(reourceid);

            ari.SubscriptionId    = "',subscription().subscriptionId,'";
            ari.ResourceGroupName = "',parameters('rgname-something'),'";
            Assert.AreEqual("/subscriptions/',subscription().subscriptionId,'/resourceGroups/',parameters('rgname-something'),'/providers/Microsoft.Web/connections/Billogram", ari.ToString());
        }
コード例 #10
0
        public void AzureResourceIdGetNameBasedOnTypeName()
        {
            //subscriptions/fakeecb73-d0ff-455d-a2bf-eae0b300696d/providers/Microsoft.Web/locations/westeurope/managedApis/filesystem
            string reourceid = "subscriptions/fakeecb73-d0ff-455d-a2bf-eae0b300696d/providers/Microsoft.Web/locations/westeurope/managedApis/filesystem";
            var    ari       = new AzureResourceId(reourceid);

            Assert.AreEqual("westeurope", ari.ValueAfter("locations"));
            Assert.AreEqual(null, ari.ValueAfter("a"));
        }
コード例 #11
0
        public JObject CreateOpenIDConnectProvider(JObject restObject, bool addResource)
        {
            var resource     = CreateServiceResource(restObject, "Microsoft.ApiManagement/service/openidConnectProviders", addResource);
            var providerName = new AzureResourceId(restObject.Value <string>("id")).ValueAfter("openidConnectProviders");

            resource["properties"]["displayName"]      = WrapParameterName(AddParameter($"openidConnectProvider_{providerName}_displayname", "string", GetDefaultValue(resource, "displayName")));
            resource["properties"]["metadataEndpoint"] = WrapParameterName(AddParameter($"openidConnectProvider_{providerName}_metadataEndpoint", "string", GetDefaultValue(resource, "metadataEndpoint")));
            resource["properties"]["clientId"]         = WrapParameterName(AddParameter($"openidConnectProvider_{providerName}_clientId", "string", GetDefaultValue(resource, "clientId")));
            resource["properties"]["clientSecret"]     = WrapParameterName(AddParameter($"openidConnectProvider_{providerName}_clientSecret", "securestring", String.Empty));
            return(resource);
        }
コード例 #12
0
        public void AzureResourceIdComplex()
        {
            string reourceid = "https://management.azure.com/subscriptions/c107df29-a4af-4bc9-a733-f88f0eaa4296/resourceGroups/maloapimtest/providers/Microsoft.Logic/workflows/malologicapptestManual";
            var    ari       = new AzureResourceId(reourceid);

            Assert.AreEqual("c107df29-a4af-4bc9-a733-f88f0eaa4296", ari.SubscriptionId);
            Assert.AreEqual("maloapimtest", ari.ResourceGroupName);
            Assert.AreEqual("malologicapptestManual", ari.ResourceName);

            Assert.AreEqual("/subscriptions/c107df29-a4af-4bc9-a733-f88f0eaa4296/resourceGroups/maloapimtest/providers/Microsoft.Logic/workflows/malologicapptestManual", ari.ToString());
        }
コード例 #13
0
        public JObject CreateCertificate(JObject restObject, bool addResource)
        {
            var resource        = CreateServiceResource(restObject, "Microsoft.ApiManagement/service/certificates", addResource);
            var certificatename = new AzureResourceId(restObject.Value <string>("id")).ValueAfter("certificates");
            var properties      = new
            {
                data     = WrapParameterName(AddParameter($"certificate_{certificatename}_data", "securestring", String.Empty)),
                password = WrapParameterName(AddParameter($"certificate_{certificatename}_password", "securestring", String.Empty))
            };

            resource["properties"] = JObject.FromObject(properties);
            return(resource);
        }
コード例 #14
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);
        }
コード例 #15
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);
        }
コード例 #17
0
        public JObject AddApi(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($"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"], "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);
        }
コード例 #18
0
        public void AddGroup(JObject restObject)
        {
            if (restObject == null)
            {
                return;
            }

            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($"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 && rr.Value <string>("type") == obj.type) == 0)
            {
                this.resources.Add(resource);
            }
        }
コード例 #19
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);
        }
コード例 #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 = "";

            name = $"'{name}'";


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

            obj.comments = "Generated for resource " + restObject.Value <string>("id");
            if (type == "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($"service_{servicename}_name", "string", servicename)}'), '/', {apiname}, '/', {name})]";
            }
            else if (type == "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($"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);
        }
コード例 #21
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);
        }
コード例 #22
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);
        }
コード例 #23
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);
        }