示例#1
0
        private void ValidateService(
            ApiManagementServiceResource service,
            string expectedServiceName,
            string expectedResourceGroupName,
            string expectedSubId,
            string expectedLocation,
            string expectedPublisherEmail,
            string expectedPublisherName,
            string expectedSkuName,
            Dictionary <string, string> expectedTags)
        {
            Assert.NotNull(service);

            string resourceIdFormat   = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ApiManagement/service/{2}";
            string expectedResourceId = string.Format(resourceIdFormat, expectedSubId, expectedResourceGroupName, expectedServiceName);

            Assert.Equal(expectedResourceId, service.Id);
            Assert.Equal(expectedLocation, service.Location);
            Assert.Equal(expectedSkuName, service.Sku.Name, true);
            Assert.Equal(expectedServiceName, service.Name);
            Assert.True(expectedTags.DictionaryEqual(service.Tags));
            Assert.NotNull(service.GatewayUrl);
            // No Portal, Management URL and SCM endpoint for Consumption SKU.
            if (service.Sku.Name != SkuType.Consumption)
            {
                Assert.NotNull(service.PortalUrl);
                Assert.NotNull(service.ManagementApiUrl);
                Assert.NotNull(service.DeveloperPortalUrl);
                Assert.NotNull(service.ScmUrl);
                Assert.NotNull(service.PublicIPAddresses);
            }
            Assert.Equal(expectedPublisherName, service.PublisherName);
            Assert.Equal(expectedPublisherEmail, service.PublisherEmail);
        }
        public PsApiManagement SetApiManagementService(
            PsApiManagement apiManagement,
            bool createSystemResourceIdentity,
            string[] userAssignedIdentity)
        {
            ApiManagementServiceResource apiManagementParameters = Mappers.MapPsApiManagement(apiManagement);

            apiManagementParameters.Identity = Mappers.MapAssignedIdentity(createSystemResourceIdentity, userAssignedIdentity);

            var apiManagementService = Client.ApiManagementService.CreateOrUpdate(
                apiManagement.ResourceGroupName,
                apiManagement.Name,
                apiManagementParameters);

            return(new PsApiManagement(apiManagementService));
        }
示例#3
0
        public PsApiManagement SetApiManagementService(
            PsApiManagement apiManagement,
            bool createResourceIdentity)
        {
            ApiManagementServiceResource apiManagementParameters = Mappers.MapPsApiManagement(apiManagement);

            if (createResourceIdentity)
            {
                apiManagementParameters.Identity = new ApiManagementServiceIdentity();
            }

            var apiManagementService = Client.ApiManagementService.CreateOrUpdate(
                apiManagement.ResourceGroupName,
                apiManagement.Name,
                apiManagementParameters);

            return(new PsApiManagement(apiManagementService));
        }
示例#4
0
        private void ValidateService(
            ApiManagementServiceResource service,
            string expectedServiceName,
            string expectedResourceGroupName,
            string expectedSubId,
            string expectedLocation,
            string expectedPublisherEmail,
            string expectedPublisherName,
            string expectedSkuName,
            Dictionary <string, string> expectedTags,
            string platformVersion)
        {
            Assert.NotNull(service);

            string resourceIdFormat   = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ApiManagement/service/{2}";
            string expectedResourceId = string.Format(resourceIdFormat, expectedSubId, expectedResourceGroupName, expectedServiceName);

            Assert.Equal(expectedResourceId, service.Id);
            Assert.Equal(expectedLocation.ToLowerAndRemoveWhiteSpaces(), service.Location.ToLowerAndRemoveWhiteSpaces());
            Assert.Equal(expectedSkuName, service.Sku.Name, true);
            Assert.Equal(expectedServiceName, service.Name);
            Assert.True(expectedTags.DictionaryEqual(service.Tags));
            Assert.NotNull(service.GatewayUrl);
            // No Portal, Management URL and SCM endpoint for Consumption SKU.
            if (service.Sku.Name != SkuType.Consumption)
            {
                Assert.NotNull(service.PortalUrl);
                Assert.NotNull(service.ManagementApiUrl);
                Assert.NotNull(service.DeveloperPortalUrl);
                Assert.NotNull(service.ScmUrl);
                Assert.NotNull(service.PublicIPAddresses);
            }
            Assert.Equal(expectedPublisherName, service.PublisherName);
            Assert.Equal(expectedPublisherEmail, service.PublisherEmail);
            Assert.Equal(platformVersion, service.PlatformVersion);
            Assert.Equal("Enabled", service.PublicNetworkAccess);
            Assert.NotNull(service.SystemData);
            Assert.NotNull(service.SystemData.CreatedAt);
            Assert.NotNull(service.SystemData.CreatedBy);
            Assert.Equal("Application", service.SystemData.CreatedByType);
            Assert.NotNull(service.SystemData.LastModifiedAt);
            Assert.NotNull(service.SystemData.LastModifiedBy);
            Assert.Equal("Application", service.SystemData.LastModifiedByType);
        }
        public PsApiManagement GetApiManagement(string resourceGroupName, string serviceName)
        {
            ApiManagementServiceResource response = Client.ApiManagementService.Get(resourceGroupName, serviceName);

            return(new PsApiManagement(response));
        }
        public PsApiManagement CreateApiManagementService(
            string resourceGroupName,
            string serviceName,
            string location,
            string organization,
            string administratorEmail,
            Dictionary <string, string> tags,
            bool enableClientCertificate,
            PsApiManagementSku sku         = PsApiManagementSku.Developer,
            int?capacity                   = null,
            PsApiManagementVpnType vpnType = PsApiManagementVpnType.None,
            PsApiManagementVirtualNetwork virtualNetwork = null,
            PsApiManagementRegion[] additionalRegions    = null,
            PsApiManagementCustomHostNameConfiguration[] customHostnameConfigurations = null,
            PsApiManagementSystemCertificate[] systemCertificates = null,
            PsApiManagementSslSetting sslSettings = null,
            bool createSystemResourceIdentity     = false,
            string[] userAssignedIdentity         = null)
        {
            string skuType = Mappers.MapSku(sku);

            if (capacity == null)
            {
                capacity = (sku == PsApiManagementSku.Consumption ? 0 : 1);
            }

            var skuProperties = new ApiManagementServiceSkuProperties(skuType, capacity.Value);

            var parameters = new ApiManagementServiceResource
            {
                Location           = location,
                PublisherEmail     = administratorEmail,
                PublisherName      = organization,
                VirtualNetworkType = Mappers.MapVirtualNetworkType(vpnType),
                Sku  = skuProperties,
                Tags = tags
            };

            if (virtualNetwork != null)
            {
                parameters.VirtualNetworkConfiguration = new VirtualNetworkConfiguration
                {
                    SubnetResourceId = virtualNetwork.SubnetResourceId
                };
            }

            if (additionalRegions != null && additionalRegions.Any())
            {
                parameters.AdditionalLocations =
                    additionalRegions
                    .Select(region =>
                            new AdditionalLocation
                {
                    Location = region.Location,
                    Sku      = new ApiManagementServiceSkuProperties()
                    {
                        Name     = Mappers.MapSku(region.Sku),
                        Capacity = region.Capacity
                    },
                    VirtualNetworkConfiguration = region.VirtualNetwork == null
                                    ? null
                                    : new VirtualNetworkConfiguration
                    {
                        SubnetResourceId = region.VirtualNetwork.SubnetResourceId
                    }
                })
                    .ToList();
            }

            if (customHostnameConfigurations != null)
            {
                parameters.HostnameConfigurations = BuildHostNameConfiguration(customHostnameConfigurations);
            }

            if (systemCertificates != null)
            {
                parameters.Certificates = new List <CertificateConfiguration>();
                foreach (var systemCertificate in systemCertificates)
                {
                    var certificateConfig = systemCertificate.GetCertificateConfiguration();
                    parameters.Certificates.Add(certificateConfig);
                }
            }

            if (sslSettings != null)
            {
                parameters.CustomProperties = Mappers.MapPsApiManagementSslSetting(sslSettings);
            }

            if (enableClientCertificate)
            {
                parameters.EnableClientCertificate = enableClientCertificate;
            }

            parameters.Identity = Mappers.MapAssignedIdentity(createSystemResourceIdentity, userAssignedIdentity);

            var apiManagementResource = Client.ApiManagementService.CreateOrUpdate(resourceGroupName, serviceName, parameters);

            return(new PsApiManagement(apiManagementResource));
        }
示例#7
0
 /// <summary>
 /// Creates or updates an API Management service. This is long running
 /// operation and could take several minutes to complete.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group.
 /// </param>
 /// <param name='serviceName'>
 /// The name of the API Management service.
 /// </param>
 /// <param name='parameters'>
 /// Parameters supplied to the CreateOrUpdate API Management service operation.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <ApiManagementServiceResource> BeginCreateOrUpdateAsync(this IApiManagementServiceOperations operations, string resourceGroupName, string serviceName, ApiManagementServiceResource parameters, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, serviceName, parameters, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
示例#8
0
 /// <summary>
 /// Creates or updates an API Management service. This is long running
 /// operation and could take several minutes to complete.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group.
 /// </param>
 /// <param name='serviceName'>
 /// The name of the API Management service.
 /// </param>
 /// <param name='parameters'>
 /// Parameters supplied to the CreateOrUpdate API Management service operation.
 /// </param>
 public static ApiManagementServiceResource BeginCreateOrUpdate(this IApiManagementServiceOperations operations, string resourceGroupName, string serviceName, ApiManagementServiceResource parameters)
 {
     return(operations.BeginCreateOrUpdateAsync(resourceGroupName, serviceName, parameters).GetAwaiter().GetResult());
 }
        private void Initialize()
        {
            var testEnv = TestEnvironmentFactory.GetTestEnvironment();

            if (HttpMockServer.Mode == HttpRecorderMode.Record)
            {
                if (!testEnv.ConnectionString.KeyValuePairs.TryGetValue(ServiceNameKey, out string apimServiceName))
                {
                    this.serviceName = TestUtilities.GenerateName("sdktestapim");
                }
                else
                {
                    this.serviceName = apimServiceName;
                }

                if (!testEnv.ConnectionString.KeyValuePairs.TryGetValue(LocationKey, out string apimLocation))
                {
                    this.location = GetLocation();
                }
                else
                {
                    this.location = apimLocation;
                }

                if (!testEnv.ConnectionString.KeyValuePairs.TryGetValue(ResourceGroupNameKey, out string resourceGroupName))
                {
                    rgName = TestUtilities.GenerateName("sdktestrg");
                    resourcesClient.ResourceGroups.CreateOrUpdate(rgName, new ResourceGroup {
                        Location = this.location
                    });
                }
                else
                {
                    this.rgName = resourceGroupName;
                }

                if (testEnv.ConnectionString.KeyValuePairs.TryGetValue(TestCertificateKey, out string base64EncodedCertificate))
                {
                    this.base64EncodedTestCertificateData        = base64EncodedCertificate;
                    HttpMockServer.Variables[TestCertificateKey] = base64EncodedTestCertificateData;
                }

                if (testEnv.ConnectionString.KeyValuePairs.TryGetValue(TestCertificatePasswordKey, out string testCertificatePassword))
                {
                    this.testCertificatePassword = testCertificatePassword;
                    HttpMockServer.Variables[TestCertificatePasswordKey] = testCertificatePassword;
                }

                this.subscriptionId = testEnv.SubscriptionId;
                HttpMockServer.Variables[SubIdKey]             = subscriptionId;
                HttpMockServer.Variables[ServiceNameKey]       = this.serviceName;
                HttpMockServer.Variables[LocationKey]          = this.location;
                HttpMockServer.Variables[ResourceGroupNameKey] = this.rgName;
            }
            else if (HttpMockServer.Mode == HttpRecorderMode.Playback)
            {
                this.subscriptionId = testEnv.SubscriptionId;
                subscriptionId      = HttpMockServer.Variables[SubIdKey];
                rgName      = HttpMockServer.Variables[ResourceGroupNameKey];
                serviceName = HttpMockServer.Variables[ServiceNameKey];
                location    = HttpMockServer.Variables[LocationKey];
                HttpMockServer.Variables.TryGetValue(TestCertificateKey, out var testcertificate);
                if (!string.IsNullOrEmpty(testcertificate))
                {
                    this.base64EncodedTestCertificateData = testcertificate;
                }
                HttpMockServer.Variables.TryGetValue(TestCertificatePasswordKey, out var testCertificatePwd);
                if (!string.IsNullOrEmpty(testCertificatePwd))
                {
                    this.testCertificatePassword = testCertificatePwd;
                }
            }

            tags = new Dictionary <string, string> {
                { "tag1", "value1" }, { "tag2", "value2" }, { "tag3", "value3" }
            };

            serviceProperties = new ApiManagementServiceResource
            {
                Sku = new ApiManagementServiceSkuProperties
                {
                    Name     = SkuType.Developer,
                    Capacity = 1
                },
                Location       = location,
                PublisherEmail = "*****@*****.**",
                PublisherName  = "autorestsdk",
                Tags           = tags
            };
        }
示例#10
0
        public PsApiManagement(ApiManagementServiceResource apiServiceResource)
            : this()
        {
            if (apiServiceResource == null)
            {
                throw new ArgumentNullException("apiServiceResource");
            }

            Id                      = apiServiceResource.Id;
            Name                    = apiServiceResource.Name;
            Location                = apiServiceResource.Location;
            Sku                     = ApiManagementClient.Mapper.Map <string, PsApiManagementSku>(apiServiceResource.Sku.Name);
            Capacity                = apiServiceResource.Sku.Capacity ?? 1;
            CreatedTimeUtc          = apiServiceResource.CreatedAtUtc;
            PublisherEmail          = apiServiceResource.PublisherEmail;
            OrganizationName        = apiServiceResource.PublisherName;
            NotificationSenderEmail = apiServiceResource.NotificationSenderEmail;
            ProvisioningState       = apiServiceResource.ProvisioningState;
            RuntimeUrl              = apiServiceResource.GatewayUrl;
            RuntimeRegionalUrl      = apiServiceResource.GatewayRegionalUrl;
            PortalUrl               = apiServiceResource.PortalUrl;
            DeveloperPortalUrl      = apiServiceResource.DeveloperPortalUrl;
            ManagementApiUrl        = apiServiceResource.ManagementApiUrl;
            ScmUrl                  = apiServiceResource.ScmUrl;
            PublicIPAddresses       = apiServiceResource.PublicIPAddresses != null?apiServiceResource.PublicIPAddresses.ToArray() : null;

            PrivateIPAddresses = apiServiceResource.PrivateIPAddresses != null?apiServiceResource.PrivateIPAddresses.ToArray() : null;

            EnableClientCertificate = apiServiceResource.EnableClientCertificate;

            VpnType = ApiManagementClient.Mapper.Map <string, PsApiManagementVpnType>(apiServiceResource.VirtualNetworkType);

            if (apiServiceResource.AdditionalLocations != null)
            {
                AdditionalRegions =
                    apiServiceResource.AdditionalLocations
                    .Select(region => new PsApiManagementRegion(region))
                    .ToList();
            }

            if (apiServiceResource.VirtualNetworkConfiguration != null)
            {
                VirtualNetwork = new PsApiManagementVirtualNetwork(apiServiceResource.VirtualNetworkConfiguration);
            }

            if (apiServiceResource.HostnameConfigurations != null &&
                apiServiceResource.HostnameConfigurations.Any())
            {
                var portalHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Portal);
                if (portalHostnameResource != null)
                {
                    PortalCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(portalHostnameResource);
                }

                var proxyHostnameResources = apiServiceResource.HostnameConfigurations.Where(conf => conf.Type == HostnameType.Proxy);
                if (proxyHostnameResources != null && proxyHostnameResources.Any())
                {
                    var proxyCustomHostnameResources = new List <PsApiManagementCustomHostNameConfiguration>();
                    foreach (var proxyHostNameResource in proxyHostnameResources)
                    {
                        proxyCustomHostnameResources.Add(new PsApiManagementCustomHostNameConfiguration(proxyHostNameResource));
                    }

                    ProxyCustomHostnameConfiguration = proxyCustomHostnameResources.ToArray();
                }

                var managementHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Management);
                if (managementHostnameResource != null)
                {
                    ManagementCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(managementHostnameResource);
                }

                var scmHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Scm);
                if (scmHostnameResource != null)
                {
                    ScmCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(scmHostnameResource);
                }

                var developerPortalResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.DeveloperPortal);
                if (developerPortalResource != null)
                {
                    DeveloperPortalHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(developerPortalResource);
                }
            }

            if (apiServiceResource.Certificates != null && apiServiceResource.Certificates.Any())
            {
                var systemCertificates = new List <PsApiManagementSystemCertificate>();
                foreach (var certificate in apiServiceResource.Certificates)
                {
                    systemCertificates.Add(new PsApiManagementSystemCertificate(certificate));
                }
                SystemCertificates = systemCertificates.ToArray();
            }

            // prepare the SSL settings
            if (apiServiceResource.CustomProperties != null && apiServiceResource.CustomProperties.Any())
            {
                SslSetting = new PsApiManagementSslSetting(apiServiceResource.CustomProperties);
            }

            if (apiServiceResource.Tags != null)
            {
                Tags = apiServiceResource.Tags;
            }

            if (apiServiceResource.Identity != null)
            {
                this.Identity = new PsApiManagementServiceIdentity(apiServiceResource.Identity);
            }
        }
示例#11
0
        public static ApiManagementServiceResource MapPsApiManagement(PsApiManagement apiManagement)
        {
            var parameters = new ApiManagementServiceResource
            {
                Location                = apiManagement.Location,
                PublisherEmail          = apiManagement.PublisherEmail,
                PublisherName           = apiManagement.OrganizationName,
                NotificationSenderEmail = apiManagement.NotificationSenderEmail,
                VirtualNetworkType      = MapVirtualNetworkType(apiManagement.VpnType),
                Sku = new ApiManagementServiceSkuProperties
                {
                    Capacity = apiManagement.Capacity,
                    Name     = MapSku(apiManagement.Sku)
                },
                Tags = apiManagement.Tags,
                EnableClientCertificate = apiManagement.EnableClientCertificate,
                Zones               = apiManagement.Zone,
                DisableGateway      = apiManagement.DisableGateway,
                PublicNetworkAccess = apiManagement.PublicNetworkAccess
            };

            if (apiManagement.VirtualNetwork != null)
            {
                parameters.VirtualNetworkConfiguration = new VirtualNetworkConfiguration
                {
                    SubnetResourceId = apiManagement.VirtualNetwork.SubnetResourceId
                };

                parameters.PublicIpAddressId = apiManagement.PublicIpAddressId;
            }

            if (apiManagement.AdditionalRegions != null && apiManagement.AdditionalRegions.Any())
            {
                parameters.AdditionalLocations =
                    apiManagement.AdditionalRegions
                    .Select(region =>
                            new AdditionalLocation
                {
                    Location = region.Location,
                    Sku      = new ApiManagementServiceSkuProperties()
                    {
                        Name     = MapSku(region.Sku),
                        Capacity = region.Capacity
                    },
                    VirtualNetworkConfiguration = region.VirtualNetwork == null
                                    ? null
                                    : new VirtualNetworkConfiguration
                    {
                        SubnetResourceId = region.VirtualNetwork.SubnetResourceId
                    },
                    Zones             = region.Zone,
                    DisableGateway    = region.DisableGateway,
                    PublicIpAddressId = region.PublicIpAddressId
                })
                    .ToList();
            }

            if (apiManagement.ProxyCustomHostnameConfiguration != null ||
                apiManagement.PortalCustomHostnameConfiguration != null ||
                apiManagement.ManagementCustomHostnameConfiguration != null ||
                apiManagement.ScmCustomHostnameConfiguration != null ||
                apiManagement.DeveloperPortalHostnameConfiguration != null)
            {
                parameters.HostnameConfigurations = new List <HostnameConfiguration>();

                if (apiManagement.ProxyCustomHostnameConfiguration != null)
                {
                    foreach (var proxyCustomHostnameConfiguration in apiManagement.ProxyCustomHostnameConfiguration)
                    {
                        parameters.HostnameConfigurations.Add(proxyCustomHostnameConfiguration.GetHostnameConfiguration());
                    }
                }
                if (apiManagement.PortalCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.PortalCustomHostnameConfiguration.GetHostnameConfiguration());
                }
                if (apiManagement.DeveloperPortalHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.DeveloperPortalHostnameConfiguration.GetHostnameConfiguration());
                }
                if (apiManagement.ManagementCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.ManagementCustomHostnameConfiguration.GetHostnameConfiguration());
                }
                if (apiManagement.ScmCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.ScmCustomHostnameConfiguration.GetHostnameConfiguration());
                }
            }

            if (apiManagement.SystemCertificates != null)
            {
                parameters.Certificates = new List <CertificateConfiguration>();
                foreach (var systemCertificate in apiManagement.SystemCertificates)
                {
                    parameters.Certificates.Add(systemCertificate.GetCertificateConfiguration());
                }
            }

            if (!string.IsNullOrWhiteSpace(apiManagement.MinimalControlPlaneApiVersion))
            {
                parameters.ApiVersionConstraint = new ApiVersionConstraint()
                {
                    MinApiVersion = apiManagement.MinimalControlPlaneApiVersion
                };
            }

            if (apiManagement.Identity != null)
            {
                parameters.Identity = MapPsApiManagementIdentity(apiManagement.Identity);
            }

            parameters.CustomProperties = MapPsApiManagementSslSetting(apiManagement.SslSetting);

            return(parameters);
        }
示例#12
0
        public static ApiManagementServiceResource MapPsApiManagement(PsApiManagement apiManagement)
        {
            var parameters = new ApiManagementServiceResource
            {
                Location                = apiManagement.Location,
                PublisherEmail          = apiManagement.PublisherEmail,
                PublisherName           = apiManagement.OrganizationName,
                NotificationSenderEmail = apiManagement.NotificationSenderEmail,
                VirtualNetworkType      = MapVirtualNetworkType(apiManagement.VpnType),
                Sku = new ApiManagementServiceSkuProperties
                {
                    Capacity = apiManagement.Capacity,
                    Name     = MapSku(apiManagement.Sku)
                },
                Tags = apiManagement.Tags
            };

            if (apiManagement.VirtualNetwork != null)
            {
                parameters.VirtualNetworkConfiguration = new VirtualNetworkConfiguration
                {
                    SubnetResourceId = apiManagement.VirtualNetwork.SubnetResourceId
                };
            }

            if (apiManagement.AdditionalRegions != null && apiManagement.AdditionalRegions.Any())
            {
                parameters.AdditionalLocations =
                    apiManagement.AdditionalRegions
                    .Select(region =>
                            new AdditionalLocation
                {
                    Location = region.Location,
                    Sku      = new ApiManagementServiceSkuProperties()
                    {
                        Name     = MapSku(region.Sku),
                        Capacity = region.Capacity
                    },
                    VirtualNetworkConfiguration = region.VirtualNetwork == null
                                    ? null
                                    : new VirtualNetworkConfiguration
                    {
                        SubnetResourceId = region.VirtualNetwork.SubnetResourceId
                    }
                })
                    .ToList();
            }

            if (apiManagement.ProxyCustomHostnameConfiguration != null ||
                apiManagement.PortalCustomHostnameConfiguration != null ||
                apiManagement.ManagementCustomHostnameConfiguration != null ||
                apiManagement.ScmCustomHostnameConfiguration != null)
            {
                parameters.HostnameConfigurations = new List <HostnameConfiguration>();

                if (apiManagement.ProxyCustomHostnameConfiguration != null)
                {
                    foreach (var proxyCustomHostnameConfiguration in apiManagement.ProxyCustomHostnameConfiguration)
                    {
                        parameters.HostnameConfigurations.Add(proxyCustomHostnameConfiguration.GetHostnameConfiguration());
                    }
                }
                if (apiManagement.PortalCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.PortalCustomHostnameConfiguration.GetHostnameConfiguration());
                }
                if (apiManagement.ManagementCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.ManagementCustomHostnameConfiguration.GetHostnameConfiguration());
                }
                if (apiManagement.ScmCustomHostnameConfiguration != null)
                {
                    parameters.HostnameConfigurations.Add(apiManagement.ScmCustomHostnameConfiguration.GetHostnameConfiguration());
                }
            }

            if (apiManagement.SystemCertificates != null)
            {
                parameters.Certificates = new List <CertificateConfiguration>();
                foreach (var systemCertificate in apiManagement.SystemCertificates)
                {
                    parameters.Certificates.Add(systemCertificate.GetCertificateConfiguration());
                }
            }

            if (apiManagement.Identity != null)
            {
                parameters.Identity = MapPsApiManagementIdentity(apiManagement.Identity);
            }

            return(parameters);
        }
        public PsApiManagement CreateApiManagementService(
            string resourceGroupName,
            string serviceName,
            string location,
            string organization,
            string administratorEmail,
            Dictionary <string, string> tags,
            bool enableClientCertificate,
            PsApiManagementSku sku         = PsApiManagementSku.Developer,
            int?capacity                   = null,
            PsApiManagementVpnType vpnType = PsApiManagementVpnType.None,
            PsApiManagementVirtualNetwork virtualNetwork = null,
            PsApiManagementRegion[] additionalRegions    = null,
            PsApiManagementCustomHostNameConfiguration[] customHostnameConfigurations = null,
            PsApiManagementSystemCertificate[] systemCertificates = null,
            PsApiManagementSslSetting sslSettings = null,
            bool createSystemResourceIdentity     = false,
            string[] userAssignedIdentity         = null,
            string[] zone       = null,
            bool?disableGateway = null,
            string minimalControlPlaneApiVersion = null,
            string publicNetworkAccess           = null,
            string publicIpAddressId             = null)
        {
            string skuType = Mappers.MapSku(sku);

            if (capacity == null)
            {
                capacity = (sku == PsApiManagementSku.Consumption ? 0 : 1);
            }

            var skuProperties = new ApiManagementServiceSkuProperties(skuType, capacity.Value);

            var parameters = new ApiManagementServiceResource
            {
                Location           = location,
                PublisherEmail     = administratorEmail,
                PublisherName      = organization,
                VirtualNetworkType = Mappers.MapVirtualNetworkType(vpnType),
                Sku  = skuProperties,
                Tags = tags
            };

            if (virtualNetwork != null)
            {
                parameters.VirtualNetworkConfiguration = new VirtualNetworkConfiguration
                {
                    SubnetResourceId = virtualNetwork.SubnetResourceId
                };
            }

            if (additionalRegions != null && additionalRegions.Any())
            {
                parameters.AdditionalLocations =
                    additionalRegions
                    .Select(region => region.GetAdditionalLocation())
                    .ToList();
            }

            if (customHostnameConfigurations != null)
            {
                parameters.HostnameConfigurations = BuildHostNameConfiguration(customHostnameConfigurations);
            }

            if (systemCertificates != null)
            {
                parameters.Certificates = new List <CertificateConfiguration>();
                foreach (var systemCertificate in systemCertificates)
                {
                    var certificateConfig = systemCertificate.GetCertificateConfiguration();
                    parameters.Certificates.Add(certificateConfig);
                }
            }

            if (sslSettings != null)
            {
                parameters.CustomProperties = Mappers.MapPsApiManagementSslSetting(sslSettings);
            }

            if (enableClientCertificate)
            {
                parameters.EnableClientCertificate = enableClientCertificate;
            }

            if (zone != null)
            {
                parameters.Zones = zone;
            }

            if (disableGateway != null && disableGateway.HasValue)
            {
                parameters.DisableGateway = disableGateway.Value;
            }

            if (!string.IsNullOrWhiteSpace(minimalControlPlaneApiVersion))
            {
                parameters.ApiVersionConstraint = new ApiVersionConstraint()
                {
                    MinApiVersion = minimalControlPlaneApiVersion
                };
            }

            if (publicIpAddressId != null)
            {
                parameters.PublicIpAddressId = publicIpAddressId;
            }

            if (publicNetworkAccess != null)
            {
                parameters.PublicNetworkAccess = publicNetworkAccess;
            }

            parameters.Identity = Mappers.MapAssignedIdentity(createSystemResourceIdentity, userAssignedIdentity);

            var apiManagementResource = Client.ApiManagementService.CreateOrUpdate(resourceGroupName, serviceName, parameters);

            return(new PsApiManagement(apiManagementResource));
        }
示例#14
0
        public PsApiManagement(ApiManagementServiceResource apiServiceResource)
            : this()
        {
            if (apiServiceResource == null)
            {
                throw new ArgumentNullException("apiServiceResource");
            }

            Id                      = apiServiceResource.Id;
            Name                    = apiServiceResource.Name;
            Location                = apiServiceResource.Location;
            Sku                     = ApiManagementClient.Mapper.Map <string, PsApiManagementSku>(apiServiceResource.Sku.Name);
            Capacity                = apiServiceResource.Sku.Capacity ?? 1;
            PublisherEmail          = apiServiceResource.PublisherEmail;
            OrganizationName        = apiServiceResource.PublisherName;
            NotificationSenderEmail = apiServiceResource.NotificationSenderEmail;
            ProvisioningState       = apiServiceResource.ProvisioningState;
            RuntimeUrl              = apiServiceResource.GatewayUrl;
            RuntimeRegionalUrl      = apiServiceResource.GatewayRegionalUrl;
            PortalUrl               = apiServiceResource.PortalUrl;
            ManagementApiUrl        = apiServiceResource.ManagementApiUrl;
            ScmUrl                  = apiServiceResource.ScmUrl;
            PublicIPAddresses       = apiServiceResource.PublicIPAddresses != null?apiServiceResource.PublicIPAddresses.ToArray() : null;

            PrivateIPAddresses = apiServiceResource.PrivateIPAddresses != null?apiServiceResource.PrivateIPAddresses.ToArray() : null;

            var staticIPList = new List <string>();

            if (apiServiceResource.PublicIPAddresses != null)
            {
                staticIPList.AddRange(apiServiceResource.PublicIPAddresses);
            }
            if (apiServiceResource.PrivateIPAddresses != null)
            {
                staticIPList.AddRange(apiServiceResource.PrivateIPAddresses);
            }
#pragma warning disable CS0618
            StaticIPs = staticIPList.ToArray();
#pragma warning restore CS0618
            VpnType = ApiManagementClient.Mapper.Map <string, PsApiManagementVpnType>(apiServiceResource.VirtualNetworkType);

            if (apiServiceResource.AdditionalLocations != null)
            {
                AdditionalRegions =
                    apiServiceResource.AdditionalLocations
                    .Select(region => new PsApiManagementRegion(region))
                    .ToList();
            }

            if (apiServiceResource.VirtualNetworkConfiguration != null)
            {
                VirtualNetwork = new PsApiManagementVirtualNetwork(apiServiceResource.VirtualNetworkConfiguration);
            }

            if (apiServiceResource.HostnameConfigurations != null &&
                apiServiceResource.HostnameConfigurations.Any())
            {
                var portalHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Portal);
                if (portalHostnameResource != null)
                {
#pragma warning disable CS0618
                    PortalHostnameConfiguration = new PsApiManagementHostnameConfiguration(portalHostnameResource);
#pragma warning restore CS0618
                    PortalCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(portalHostnameResource);
                }

                var proxyHostnameResources = apiServiceResource.HostnameConfigurations.Where(conf => conf.Type == HostnameType.Proxy);
                if (proxyHostnameResources != null && proxyHostnameResources.Any())
                {
#pragma warning disable CS0618
                    ProxyHostnameConfiguration = new PsApiManagementHostnameConfiguration(proxyHostnameResources.First());
#pragma warning restore CS0618
                    var proxyCustomHostnameResources = new List <PsApiManagementCustomHostNameConfiguration>();
                    foreach (var proxyHostNameResource in proxyHostnameResources)
                    {
                        proxyCustomHostnameResources.Add(new PsApiManagementCustomHostNameConfiguration(proxyHostNameResource));
                    }

                    ProxyCustomHostnameConfiguration = proxyCustomHostnameResources.ToArray();
                }

                var managementHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Management);
                if (managementHostnameResource != null)
                {
#pragma warning disable CS0618
                    ManagementHostnameConfiguration = new PsApiManagementHostnameConfiguration(managementHostnameResource);
#pragma warning restore CS0618
                    ManagementCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(managementHostnameResource);
                }

                var scmHostnameResource = apiServiceResource.HostnameConfigurations.FirstOrDefault(conf => conf.Type == HostnameType.Scm);
                if (scmHostnameResource != null)
                {
#pragma warning disable CS0618
                    ScmHostnameConfiguration = new PsApiManagementHostnameConfiguration(scmHostnameResource);
#pragma warning restore CS0618
                    ScmCustomHostnameConfiguration = new PsApiManagementCustomHostNameConfiguration(scmHostnameResource);
                }
            }

            if (apiServiceResource.Certificates != null && apiServiceResource.Certificates.Any())
            {
                var systemCertificates = new List <PsApiManagementSystemCertificate>();
                foreach (var certificate in apiServiceResource.Certificates)
                {
                    systemCertificates.Add(new PsApiManagementSystemCertificate(certificate));
                }
                SystemCertificates = systemCertificates.ToArray();
            }

            if (apiServiceResource.Tags != null)
            {
                Tags = apiServiceResource.Tags;
            }

            if (apiServiceResource.Identity != null)
            {
                this.Identity = new PsApiManagementServiceIdentity(apiServiceResource.Identity);
            }
        }