From 77d29b5864c73fcc28e7a3a04253ebc259575b79 Mon Sep 17 00:00:00 2001 From: Matt Mencel Date: Mon, 8 Jul 2019 10:04:11 -0500 Subject: [PATCH] New data resource compute_resource_skus. --- azurerm/config.go | 479 ------------------ azurerm/data_source_compute_resource_sku.go | 387 ++++++++++++++ .../data_source_compute_resource_sku_test.go | 40 ++ azurerm/internal/services/compute/client.go | 5 + azurerm/provider.go | 357 ++++++++++++- azurerm/utils/utils.go | 9 + .../docs/d/compute_resource_sku.html.markdown | 63 +++ 7 files changed, 859 insertions(+), 481 deletions(-) create mode 100644 azurerm/data_source_compute_resource_sku.go create mode 100644 azurerm/data_source_compute_resource_sku_test.go create mode 100644 website/docs/d/compute_resource_sku.html.markdown diff --git a/azurerm/config.go b/azurerm/config.go index 5c71861f931a1..e00c93bb9604e 100644 --- a/azurerm/config.go +++ b/azurerm/config.go @@ -143,125 +143,7 @@ type ArmClient struct { subscription *subscription.Client sql *sql.Client trafficManager *trafficmanager.Client -<<<<<<< HEAD - - // TODO: refactor - cosmosAccountsClient documentdb.DatabaseAccountsClient - - // Authentication - roleAssignmentsClient authorization.RoleAssignmentsClient - roleDefinitionsClient authorization.RoleDefinitionsClient - applicationsClient graphrbac.ApplicationsClient - servicePrincipalsClient graphrbac.ServicePrincipalsClient - - // Autoscale Settings - autoscaleSettingsClient insights.AutoscaleSettingsClient - - // Batch - batchAccountClient batch.AccountClient - batchApplicationClient batch.ApplicationClient - batchCertificateClient batch.CertificateClient - batchPoolClient batch.PoolClient - - // Compute - availSetClient compute.AvailabilitySetsClient - diskClient compute.DisksClient - imageClient compute.ImagesClient - galleriesClient compute.GalleriesClient - galleryImagesClient compute.GalleryImagesClient - galleryImageVersionsClient compute.GalleryImageVersionsClient - resourceSkusClient compute.ResourceSkusClient - snapshotsClient compute.SnapshotsClient - usageOpsClient compute.UsageClient - vmExtensionImageClient compute.VirtualMachineExtensionImagesClient - vmExtensionClient compute.VirtualMachineExtensionsClient - vmScaleSetClient compute.VirtualMachineScaleSetsClient - vmImageClient compute.VirtualMachineImagesClient - vmClient compute.VirtualMachinesClient - - // Databases - mariadbDatabasesClient mariadb.DatabasesClient - mariadbFirewallRulesClient mariadb.FirewallRulesClient - mariadbServersClient mariadb.ServersClient - mysqlConfigurationsClient mysql.ConfigurationsClient - mysqlDatabasesClient mysql.DatabasesClient - mysqlFirewallRulesClient mysql.FirewallRulesClient - mysqlServersClient mysql.ServersClient - mysqlVirtualNetworkRulesClient mysql.VirtualNetworkRulesClient - postgresqlConfigurationsClient postgresql.ConfigurationsClient - postgresqlDatabasesClient postgresql.DatabasesClient - postgresqlFirewallRulesClient postgresql.FirewallRulesClient - postgresqlServersClient postgresql.ServersClient - postgresqlVirtualNetworkRulesClient postgresql.VirtualNetworkRulesClient - sqlDatabasesClient sql.DatabasesClient - sqlDatabaseThreatDetectionPoliciesClient sql.DatabaseThreatDetectionPoliciesClient - sqlElasticPoolsClient sql.ElasticPoolsClient - // Client for the new 2017-10-01-preview SQL API which implements vCore, DTU, and Azure data standards - msSqlElasticPoolsClient MsSql.ElasticPoolsClient - sqlFirewallRulesClient sql.FirewallRulesClient - sqlServersClient sql.ServersClient - sqlServerAzureADAdministratorsClient sql.ServerAzureADAdministratorsClient - sqlVirtualNetworkRulesClient sql.VirtualNetworkRulesClient - - // Data Lake Store - dataLakeStoreAccountClient storeAccount.AccountsClient - dataLakeStoreFirewallRulesClient storeAccount.FirewallRulesClient - dataLakeStoreFilesClient filesystem.Client - - // Data Lake Analytics - dataLakeAnalyticsAccountClient analyticsAccount.AccountsClient - dataLakeAnalyticsFirewallRulesClient analyticsAccount.FirewallRulesClient - - // KeyVault - keyVaultClient keyvault.VaultsClient - keyVaultManagementClient keyVault.BaseClient - - // Monitor - monitorActionGroupsClient insights.ActionGroupsClient - monitorActivityLogAlertsClient insights.ActivityLogAlertsClient - monitorAlertRulesClient insights.AlertRulesClient - monitorDiagnosticSettingsClient insights.DiagnosticSettingsClient - monitorDiagnosticSettingsCategoryClient insights.DiagnosticSettingsCategoryClient - monitorLogProfilesClient insights.LogProfilesClient - monitorMetricAlertsClient insights.MetricAlertsClient - - // Networking - applicationGatewayClient network.ApplicationGatewaysClient - applicationSecurityGroupsClient network.ApplicationSecurityGroupsClient - azureFirewallsClient network.AzureFirewallsClient - connectionMonitorsClient network.ConnectionMonitorsClient - ddosProtectionPlanClient network.DdosProtectionPlansClient - expressRouteAuthsClient network.ExpressRouteCircuitAuthorizationsClient - expressRouteCircuitClient network.ExpressRouteCircuitsClient - expressRoutePeeringsClient network.ExpressRouteCircuitPeeringsClient - ifaceClient network.InterfacesClient - loadBalancerClient network.LoadBalancersClient - localNetConnClient network.LocalNetworkGatewaysClient - netProfileClient network.ProfilesClient - packetCapturesClient network.PacketCapturesClient - publicIPClient network.PublicIPAddressesClient - publicIPPrefixClient network.PublicIPPrefixesClient - routesClient network.RoutesClient - routeTablesClient network.RouteTablesClient - secGroupClient network.SecurityGroupsClient - secRuleClient network.SecurityRulesClient - subnetClient network.SubnetsClient - vnetGatewayConnectionsClient network.VirtualNetworkGatewayConnectionsClient - vnetGatewayClient network.VirtualNetworkGatewaysClient - vnetClient network.VirtualNetworksClient - vnetPeeringsClient network.VirtualNetworkPeeringsClient - watcherClient network.WatchersClient - - // Resources - managementLocksClient locks.ManagementLocksClient - deploymentsClient resources.DeploymentsClient - providersClient resourcesprofile.ProvidersClient - resourcesClient resources.Client - resourceGroupsClient resources.GroupsClient - subscriptionsClient subscriptions.Client -======= web *web.Client ->>>>>>> 0c07af5441a900456108b50771fb64c5f566d5b6 // Storage storageServiceClient storage.AccountsClient @@ -408,366 +290,6 @@ func getArmClient(c *authentication.Config, skipProviderRegistration bool, partn return &client, nil } -<<<<<<< HEAD -func (c *ArmClient) registerAuthentication(endpoint, graphEndpoint, subscriptionId, tenantId string, auth, graphAuth autorest.Authorizer) { - assignmentsClient := authorization.NewRoleAssignmentsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&assignmentsClient.Client, auth) - c.roleAssignmentsClient = assignmentsClient - - definitionsClient := authorization.NewRoleDefinitionsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&definitionsClient.Client, auth) - c.roleDefinitionsClient = definitionsClient - - applicationsClient := graphrbac.NewApplicationsClientWithBaseURI(graphEndpoint, tenantId) - c.configureClient(&applicationsClient.Client, graphAuth) - c.applicationsClient = applicationsClient - - servicePrincipalsClient := graphrbac.NewServicePrincipalsClientWithBaseURI(graphEndpoint, tenantId) - c.configureClient(&servicePrincipalsClient.Client, graphAuth) - c.servicePrincipalsClient = servicePrincipalsClient -} - -func (c *ArmClient) registerBatchClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - batchAccount := batch.NewAccountClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&batchAccount.Client, auth) - c.batchAccountClient = batchAccount - - batchApplicationClient := batch.NewApplicationClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&batchApplicationClient.Client, auth) - c.batchApplicationClient = batchApplicationClient - - batchCertificateClient := batch.NewCertificateClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&batchCertificateClient.Client, auth) - c.batchCertificateClient = batchCertificateClient - - batchPool := batch.NewPoolClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&batchPool.Client, auth) - c.batchPoolClient = batchPool -} - -func (c *ArmClient) registerCosmosAccountsClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - ca := documentdb.NewDatabaseAccountsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&ca.Client, auth) - c.cosmosAccountsClient = ca -} - -func (c *ArmClient) registerComputeClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - availabilitySetsClient := compute.NewAvailabilitySetsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&availabilitySetsClient.Client, auth) - c.availSetClient = availabilitySetsClient - - diskClient := compute.NewDisksClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&diskClient.Client, auth) - c.diskClient = diskClient - - imagesClient := compute.NewImagesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&imagesClient.Client, auth) - c.imageClient = imagesClient - - snapshotsClient := compute.NewSnapshotsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&snapshotsClient.Client, auth) - c.snapshotsClient = snapshotsClient - - usageClient := compute.NewUsageClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&usageClient.Client, auth) - c.usageOpsClient = usageClient - - extensionImagesClient := compute.NewVirtualMachineExtensionImagesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&extensionImagesClient.Client, auth) - c.vmExtensionImageClient = extensionImagesClient - - extensionsClient := compute.NewVirtualMachineExtensionsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&extensionsClient.Client, auth) - c.vmExtensionClient = extensionsClient - - virtualMachineImagesClient := compute.NewVirtualMachineImagesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&virtualMachineImagesClient.Client, auth) - c.vmImageClient = virtualMachineImagesClient - - scaleSetsClient := compute.NewVirtualMachineScaleSetsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&scaleSetsClient.Client, auth) - c.vmScaleSetClient = scaleSetsClient - - virtualMachinesClient := compute.NewVirtualMachinesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&virtualMachinesClient.Client, auth) - c.vmClient = virtualMachinesClient - - galleriesClient := compute.NewGalleriesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&galleriesClient.Client, auth) - c.galleriesClient = galleriesClient - - galleryImagesClient := compute.NewGalleryImagesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&galleryImagesClient.Client, auth) - c.galleryImagesClient = galleryImagesClient - - galleryImageVersionsClient := compute.NewGalleryImageVersionsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&galleryImageVersionsClient.Client, auth) - c.galleryImageVersionsClient = galleryImageVersionsClient - - resourceSkusClient := compute.NewResourceSkusClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&resourceSkusClient.Client, auth) - c.resourceSkusClient = resourceSkusClient -} - -func (c *ArmClient) registerDatabases(endpoint, subscriptionId string, auth autorest.Authorizer, sender autorest.Sender) { - mariadbDBClient := mariadb.NewDatabasesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mariadbDBClient.Client, auth) - c.mariadbDatabasesClient = mariadbDBClient - - mariadbFWClient := mariadb.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mariadbFWClient.Client, auth) - c.mariadbFirewallRulesClient = mariadbFWClient - - mariadbServersClient := mariadb.NewServersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mariadbServersClient.Client, auth) - c.mariadbServersClient = mariadbServersClient - - // MySQL - mysqlConfigClient := mysql.NewConfigurationsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mysqlConfigClient.Client, auth) - c.mysqlConfigurationsClient = mysqlConfigClient - - mysqlDBClient := mysql.NewDatabasesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mysqlDBClient.Client, auth) - c.mysqlDatabasesClient = mysqlDBClient - - mysqlFWClient := mysql.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mysqlFWClient.Client, auth) - c.mysqlFirewallRulesClient = mysqlFWClient - - mysqlServersClient := mysql.NewServersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mysqlServersClient.Client, auth) - c.mysqlServersClient = mysqlServersClient - - mysqlVirtualNetworkRulesClient := mysql.NewVirtualNetworkRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mysqlVirtualNetworkRulesClient.Client, auth) - c.mysqlVirtualNetworkRulesClient = mysqlVirtualNetworkRulesClient - - // PostgreSQL - postgresqlConfigClient := postgresql.NewConfigurationsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&postgresqlConfigClient.Client, auth) - c.postgresqlConfigurationsClient = postgresqlConfigClient - - postgresqlDBClient := postgresql.NewDatabasesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&postgresqlDBClient.Client, auth) - c.postgresqlDatabasesClient = postgresqlDBClient - - postgresqlFWClient := postgresql.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&postgresqlFWClient.Client, auth) - c.postgresqlFirewallRulesClient = postgresqlFWClient - - postgresqlSrvClient := postgresql.NewServersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&postgresqlSrvClient.Client, auth) - c.postgresqlServersClient = postgresqlSrvClient - - postgresqlVNRClient := postgresql.NewVirtualNetworkRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&postgresqlVNRClient.Client, auth) - c.postgresqlVirtualNetworkRulesClient = postgresqlVNRClient - - // SQL Azure - sqlDBClient := sql.NewDatabasesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlDBClient.Client, auth) - c.sqlDatabasesClient = sqlDBClient - - sqlDTDPClient := sql.NewDatabaseThreatDetectionPoliciesClientWithBaseURI(endpoint, subscriptionId) - setUserAgent(&sqlDTDPClient.Client, "") - sqlDTDPClient.Authorizer = auth - sqlDTDPClient.Sender = sender - sqlDTDPClient.SkipResourceProviderRegistration = c.skipProviderRegistration - c.sqlDatabaseThreatDetectionPoliciesClient = sqlDTDPClient - - sqlFWClient := sql.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlFWClient.Client, auth) - c.sqlFirewallRulesClient = sqlFWClient - - sqlEPClient := sql.NewElasticPoolsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlEPClient.Client, auth) - c.sqlElasticPoolsClient = sqlEPClient - - MsSqlEPClient := MsSql.NewElasticPoolsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&MsSqlEPClient.Client, auth) - c.msSqlElasticPoolsClient = MsSqlEPClient - - sqlSrvClient := sql.NewServersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlSrvClient.Client, auth) - c.sqlServersClient = sqlSrvClient - - sqlADClient := sql.NewServerAzureADAdministratorsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlADClient.Client, auth) - c.sqlServerAzureADAdministratorsClient = sqlADClient - - sqlVNRClient := sql.NewVirtualNetworkRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&sqlVNRClient.Client, auth) - c.sqlVirtualNetworkRulesClient = sqlVNRClient -} - -func (c *ArmClient) registerDataLakeStoreClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - storeAccountClient := storeAccount.NewAccountsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&storeAccountClient.Client, auth) - c.dataLakeStoreAccountClient = storeAccountClient - - storeFirewallRulesClient := storeAccount.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&storeFirewallRulesClient.Client, auth) - c.dataLakeStoreFirewallRulesClient = storeFirewallRulesClient - - analyticsAccountClient := analyticsAccount.NewAccountsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&analyticsAccountClient.Client, auth) - c.dataLakeAnalyticsAccountClient = analyticsAccountClient - - filesClient := filesystem.NewClient() - c.configureClient(&filesClient.Client, auth) - c.dataLakeStoreFilesClient = filesClient - - analyticsFirewallRulesClient := analyticsAccount.NewFirewallRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&analyticsFirewallRulesClient.Client, auth) - c.dataLakeAnalyticsFirewallRulesClient = analyticsFirewallRulesClient -} - -func (c *ArmClient) registerKeyVaultClients(endpoint, subscriptionId string, auth autorest.Authorizer, keyVaultAuth autorest.Authorizer) { - keyVaultClient := keyvault.NewVaultsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&keyVaultClient.Client, auth) - c.keyVaultClient = keyVaultClient - - keyVaultManagementClient := keyVault.New() - c.configureClient(&keyVaultManagementClient.Client, keyVaultAuth) - c.keyVaultManagementClient = keyVaultManagementClient -} - -func (c *ArmClient) registerMonitorClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - agc := insights.NewActionGroupsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&agc.Client, auth) - c.monitorActionGroupsClient = agc - - alac := insights.NewActivityLogAlertsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&alac.Client, auth) - c.monitorActivityLogAlertsClient = alac - - arc := insights.NewAlertRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&arc.Client, auth) - c.monitorAlertRulesClient = arc - - monitorLogProfilesClient := insights.NewLogProfilesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&monitorLogProfilesClient.Client, auth) - c.monitorLogProfilesClient = monitorLogProfilesClient - - mac := insights.NewMetricAlertsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&mac.Client, auth) - c.monitorMetricAlertsClient = mac - - autoscaleSettingsClient := insights.NewAutoscaleSettingsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&autoscaleSettingsClient.Client, auth) - c.autoscaleSettingsClient = autoscaleSettingsClient - - monitoringInsightsClient := insights.NewDiagnosticSettingsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&monitoringInsightsClient.Client, auth) - c.monitorDiagnosticSettingsClient = monitoringInsightsClient - - monitoringCategorySettingsClient := insights.NewDiagnosticSettingsCategoryClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&monitoringCategorySettingsClient.Client, auth) - c.monitorDiagnosticSettingsCategoryClient = monitoringCategorySettingsClient -} - -func (c *ArmClient) registerNetworkingClients(endpoint, subscriptionId string, auth autorest.Authorizer) { - applicationGatewaysClient := network.NewApplicationGatewaysClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&applicationGatewaysClient.Client, auth) - c.applicationGatewayClient = applicationGatewaysClient - - appSecurityGroupsClient := network.NewApplicationSecurityGroupsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&appSecurityGroupsClient.Client, auth) - c.applicationSecurityGroupsClient = appSecurityGroupsClient - - azureFirewallsClient := network.NewAzureFirewallsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&azureFirewallsClient.Client, auth) - c.azureFirewallsClient = azureFirewallsClient - - connectionMonitorsClient := network.NewConnectionMonitorsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&connectionMonitorsClient.Client, auth) - c.connectionMonitorsClient = connectionMonitorsClient - - ddosProtectionPlanClient := network.NewDdosProtectionPlansClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&ddosProtectionPlanClient.Client, auth) - c.ddosProtectionPlanClient = ddosProtectionPlanClient - - expressRouteAuthsClient := network.NewExpressRouteCircuitAuthorizationsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&expressRouteAuthsClient.Client, auth) - c.expressRouteAuthsClient = expressRouteAuthsClient - - expressRouteCircuitsClient := network.NewExpressRouteCircuitsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&expressRouteCircuitsClient.Client, auth) - c.expressRouteCircuitClient = expressRouteCircuitsClient - - expressRoutePeeringsClient := network.NewExpressRouteCircuitPeeringsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&expressRoutePeeringsClient.Client, auth) - c.expressRoutePeeringsClient = expressRoutePeeringsClient - - interfacesClient := network.NewInterfacesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&interfacesClient.Client, auth) - c.ifaceClient = interfacesClient - - loadBalancersClient := network.NewLoadBalancersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&loadBalancersClient.Client, auth) - c.loadBalancerClient = loadBalancersClient - - localNetworkGatewaysClient := network.NewLocalNetworkGatewaysClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&localNetworkGatewaysClient.Client, auth) - c.localNetConnClient = localNetworkGatewaysClient - - gatewaysClient := network.NewVirtualNetworkGatewaysClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&gatewaysClient.Client, auth) - c.vnetGatewayClient = gatewaysClient - - gatewayConnectionsClient := network.NewVirtualNetworkGatewayConnectionsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&gatewayConnectionsClient.Client, auth) - c.vnetGatewayConnectionsClient = gatewayConnectionsClient - - netProfileClient := network.NewProfilesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&netProfileClient.Client, auth) - c.netProfileClient = netProfileClient - - networksClient := network.NewVirtualNetworksClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&networksClient.Client, auth) - c.vnetClient = networksClient - - packetCapturesClient := network.NewPacketCapturesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&packetCapturesClient.Client, auth) - c.packetCapturesClient = packetCapturesClient - - peeringsClient := network.NewVirtualNetworkPeeringsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&peeringsClient.Client, auth) - c.vnetPeeringsClient = peeringsClient - - publicIPAddressesClient := network.NewPublicIPAddressesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&publicIPAddressesClient.Client, auth) - c.publicIPClient = publicIPAddressesClient - - publicIPPrefixesClient := network.NewPublicIPPrefixesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&publicIPPrefixesClient.Client, auth) - c.publicIPPrefixClient = publicIPPrefixesClient - - routesClient := network.NewRoutesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&routesClient.Client, auth) - c.routesClient = routesClient - - routeTablesClient := network.NewRouteTablesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&routeTablesClient.Client, auth) - c.routeTablesClient = routeTablesClient - - securityGroupsClient := network.NewSecurityGroupsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&securityGroupsClient.Client, auth) - c.secGroupClient = securityGroupsClient - - securityRulesClient := network.NewSecurityRulesClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&securityRulesClient.Client, auth) - c.secRuleClient = securityRulesClient - - subnetsClient := network.NewSubnetsClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&subnetsClient.Client, auth) - c.subnetClient = subnetsClient - - watchersClient := network.NewWatchersClientWithBaseURI(endpoint, subscriptionId) - c.configureClient(&watchersClient.Client, auth) - c.watcherClient = watchersClient -======= func (c *ArmClient) configureClient(client *autorest.Client, auth autorest.Authorizer) { setUserAgent(client, c.partnerId) client.Authorizer = auth @@ -775,7 +297,6 @@ func (c *ArmClient) configureClient(client *autorest.Client, auth autorest.Autho client.Sender = sender.BuildSender("AzureRM") client.SkipResourceProviderRegistration = c.skipProviderRegistration client.PollingDuration = 180 * time.Minute ->>>>>>> 0c07af5441a900456108b50771fb64c5f566d5b6 } func setUserAgent(client *autorest.Client, partnerID string) { diff --git a/azurerm/data_source_compute_resource_sku.go b/azurerm/data_source_compute_resource_sku.go new file mode 100644 index 0000000000000..eb1f2299c58b6 --- /dev/null +++ b/azurerm/data_source_compute_resource_sku.go @@ -0,0 +1,387 @@ +package azurerm + +import ( + "fmt" + "log" + "time" + + "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-06-01/compute" + "github.com/hashicorp/terraform/helper/schema" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func dataSourceArmComputeResourceSku() *schema.Resource { + return &schema.Resource{ + Read: dataSourceArmComputeResourceSkuRead, + + Schema: map[string]*schema.Schema{ + + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validate.NoEmptyStrings, + }, + + "location": azure.SchemaLocation(), + + "resource_type": { + Type: schema.TypeString, + Computed: true, + }, + + "tier": { + Type: schema.TypeString, + Computed: true, + }, + + "size": { + Type: schema.TypeString, + Computed: true, + }, + + "family": { + Type: schema.TypeString, + Computed: true, + }, + + "kind": { + Type: schema.TypeString, + Computed: true, + }, + + "capacity": { + Type: schema.TypeString, + Computed: true, + }, + + "locations": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "location_info": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "location": { + Type: schema.TypeString, + Computed: true, + }, + + "zones": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + + "api_versions": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "costs": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "meter_id": { + Type: schema.TypeString, + Computed: true, + }, + + "quantity": { + Type: schema.TypeInt, + Computed: true, + }, + + "extended_unit": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + + "capabilities": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Computed: true, + }, + + "value": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + + "restrictions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "restriction_type": { + Type: schema.TypeString, + Computed: true, + }, + + "values": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "restriction_info": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "locations": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "zones": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + }, + }, + + "reason_code": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + } +} + +func dataSourceArmComputeResourceSkuRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient).compute.ResourceSkusClient + ctx := meta.(*ArmClient).StopContext + + name := d.Get("name").(string) + location := d.Get("location").(string) + + resourceSkus, err := client.ListComplete(ctx) + + if err != nil { + return fmt.Errorf("Error loading Compute Resource SKUs: %+v", err) + } + + filteredResourceSkus := make([]compute.ResourceSku, 0) + for resourceSkus.NotDone() { + sku := resourceSkus.Value() + + if v, ok := d.GetOk("location"); ok { + if location := v.(string); location != "" { + if utils.StringSliceContains(*sku.Locations, location) && *sku.Name == name { + filteredResourceSkus = append(filteredResourceSkus, sku) + } + } + } + + err = resourceSkus.NextWithContext(ctx) + if err != nil { + return fmt.Errorf("Error loading Compute Resource SKUs: %+v", err) + } + } + + d.SetId(time.Now().UTC().String()) + d.Set("name", name) + + log.Printf("[DEBUG] filteredResourceSkus: %+v\n", filteredResourceSkus) + + if len(filteredResourceSkus) == 0 { + return fmt.Errorf("Error loading Resource SKU: could not find SKU '%s'. Invalid SKU Name or not valid in this subscription or location.", name) + } else if len(filteredResourceSkus) > 1 { + return fmt.Errorf("Error loading Resource SKU: multiple results found for %s/%s.", location, name) + } else { + + frs := filteredResourceSkus[0] + + d.Set("resource_type", frs.ResourceType) + d.Set("tier", frs.Tier) + d.Set("size", frs.Size) + d.Set("family", frs.Family) + d.Set("kind", frs.Kind) + d.Set("capacity", frs.Capacity) + + locationInfo := flattenLocationInfo(frs.LocationInfo) + if err := d.Set("location_info", locationInfo); err != nil { + return fmt.Errorf("Error setting `location_info`: %+v", err) + } + + d.Set("api_versions", frs.APIVersions) + + costs := flattenCosts(frs.Costs) + if err := d.Set("costs", costs); err != nil { + return fmt.Errorf("Error setting `costs`: %+v", err) + } + + capabilities := flattenCapabilities(frs.Capabilities) + if err := d.Set("capabilities", capabilities); err != nil { + return fmt.Errorf("Error setting `capabilities`: %+v", err) + } + + restrictions := flattenRestrictions(frs.Restrictions) + if err := d.Set("restrictions", restrictions); err != nil { + return fmt.Errorf("Error setting `restrictions`: %+v", err) + } + } + + return nil +} + +func flattenCapabilities(input *[]compute.ResourceSkuCapabilities) []interface{} { + result := make([]interface{}, 0) + if input == nil { + return result + } + + for _, prop := range *input { + output := make(map[string]interface{}) + + if prop.Name != nil { + output["name"] = *prop.Name + } + + if prop.Value != nil { + output["value"] = *prop.Value + } + + result = append(result, output) + } + return result +} + +func flattenCosts(input *[]compute.ResourceSkuCosts) []interface{} { + result := make([]interface{}, 0) + if input == nil { + return result + } + + for _, prop := range *input { + output := make(map[string]interface{}) + + if prop.MeterID != nil { + output["meter_id"] = *prop.MeterID + } + + if prop.Quantity != nil { + output["quantity"] = *prop.Quantity + } + + if prop.ExtendedUnit != nil { + output["extended_unit"] = *prop.ExtendedUnit + } + + result = append(result, output) + } + return result +} + +func flattenLocationInfo(input *[]compute.ResourceSkuLocationInfo) []interface{} { + result := make([]interface{}, 0) + if input == nil { + return result + } + + for _, prop := range *input { + output := make(map[string]interface{}) + + if prop.Location != nil { + output["location"] = azure.NormalizeLocation(*prop.Location) + } + + if prop.Zones != nil { + output["zones"] = *prop.Zones + } + + result = append(result, output) + } + return result +} + +func flattenRestrictions(input *[]compute.ResourceSkuRestrictions) []interface{} { + result := make([]interface{}, 0) + if input == nil { + return result + } + + for _, prop := range *input { + output := make(map[string]interface{}) + + output["restriction_type"] = prop.Type + + if prop.Values != nil { + output["values"] = *prop.Values + } + + if prop.RestrictionInfo != nil { + output["restriction_info"] = flattenRestrictionInfo(prop.RestrictionInfo) + } + + output["reason_code"] = prop.ReasonCode + + result = append(result, output) + } + return result +} + +func flattenRestrictionInfo(input *compute.ResourceSkuRestrictionInfo) []interface{} { + result := make([]interface{}, 0) + if input == nil { + return result + } + + prop := *input + output := make(map[string]interface{}) + + if prop.Locations != nil { + locations := make([]string, 0) + if loc := prop.Locations; loc != nil { + locations = *loc + } + output["locations"] = locations + } + + if prop.Zones != nil { + output["zones"] = *prop.Zones + } + + result = append(result, output) + + return result +} diff --git a/azurerm/data_source_compute_resource_sku_test.go b/azurerm/data_source_compute_resource_sku_test.go new file mode 100644 index 0000000000000..b54411e084cd5 --- /dev/null +++ b/azurerm/data_source_compute_resource_sku_test.go @@ -0,0 +1,40 @@ +package azurerm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccDataSourceAzureRMComputeResourceSku_basic(t *testing.T) { + dataSourceName := "data.azurerm_compute_resource_sku.test" + location := testLocation() + name := "Standard_DS2_v2" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceAzureRMComputeResourceSku_basic(name, location), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "name", name), + resource.TestCheckResourceAttrSet(dataSourceName, "resource_type"), + resource.TestCheckResourceAttrSet(dataSourceName, "tier"), + resource.TestCheckResourceAttrSet(dataSourceName, "size"), + resource.TestCheckResourceAttrSet(dataSourceName, "family"), + ), + }, + }, + }) +} + +func testAccDataSourceAzureRMComputeResourceSku_basic(name string, location string) string { + return fmt.Sprintf(` +data "azurerm_compute_resource_sku" "test" { + name = "%s" + location = "%s" +} +`, name, location) +} diff --git a/azurerm/internal/services/compute/client.go b/azurerm/internal/services/compute/client.go index 8b6d64359be72..9855c7b77cbe4 100644 --- a/azurerm/internal/services/compute/client.go +++ b/azurerm/internal/services/compute/client.go @@ -12,6 +12,7 @@ type Client struct { GalleryImagesClient *compute.GalleryImagesClient GalleryImageVersionsClient *compute.GalleryImageVersionsClient ImagesClient *compute.ImagesClient + ResourceSkusClient *compute.ResourceSkusClient SnapshotsClient *compute.SnapshotsClient UsageClient *compute.UsageClient VMExtensionImageClient *compute.VirtualMachineExtensionImagesClient @@ -41,6 +42,9 @@ func BuildClient(o *common.ClientOptions) *Client { ImagesClient := compute.NewImagesClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&ImagesClient.Client, o.ResourceManagerAuthorizer) + ResourceSkusClient := compute.NewResourceSkusClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) + o.ConfigureClient(&ResourceSkusClient.Client, o.ResourceManagerAuthorizer) + SnapshotsClient := compute.NewSnapshotsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&SnapshotsClient.Client, o.ResourceManagerAuthorizer) @@ -69,6 +73,7 @@ func BuildClient(o *common.ClientOptions) *Client { GalleryImagesClient: &GalleryImagesClient, GalleryImageVersionsClient: &GalleryImageVersionsClient, ImagesClient: &ImagesClient, + ResourceSkusClient: &ResourceSkusClient, SnapshotsClient: &SnapshotsClient, UsageClient: &UsageClient, VMExtensionImageClient: &VMExtensionImageClient, diff --git a/azurerm/provider.go b/azurerm/provider.go index 09afedad9d2e9..1db99ee3335e1 100644 --- a/azurerm/provider.go +++ b/azurerm/provider.go @@ -525,8 +525,361 @@ func Provider() terraform.ResourceProvider { }, }, - DataSourcesMap: dataSources, - ResourcesMap: resources, + DataSourcesMap: map[string]*schema.Resource{ + "azurerm_api_management": dataSourceApiManagementService(), + "azurerm_api_management_api": dataSourceApiManagementApi(), + "azurerm_api_management_group": dataSourceApiManagementGroup(), + "azurerm_api_management_product": dataSourceApiManagementProduct(), + "azurerm_api_management_user": dataSourceArmApiManagementUser(), + "azurerm_app_service_plan": dataSourceAppServicePlan(), + "azurerm_app_service": dataSourceArmAppService(), + "azurerm_application_insights": dataSourceArmApplicationInsights(), + "azurerm_application_security_group": dataSourceArmApplicationSecurityGroup(), + "azurerm_automation_variable_bool": dataSourceArmAutomationVariableBool(), + "azurerm_automation_variable_datetime": dataSourceArmAutomationVariableDateTime(), + "azurerm_automation_variable_int": dataSourceArmAutomationVariableInt(), + "azurerm_automation_variable_string": dataSourceArmAutomationVariableString(), + "azurerm_availability_set": dataSourceArmAvailabilitySet(), + "azurerm_azuread_application": dataSourceArmAzureADApplication(), + "azurerm_azuread_service_principal": dataSourceArmActiveDirectoryServicePrincipal(), + "azurerm_batch_account": dataSourceArmBatchAccount(), + "azurerm_batch_certificate": dataSourceArmBatchCertificate(), + "azurerm_batch_pool": dataSourceArmBatchPool(), + "azurerm_builtin_role_definition": dataSourceArmBuiltInRoleDefinition(), + "azurerm_cdn_profile": dataSourceArmCdnProfile(), + "azurerm_client_config": dataSourceArmClientConfig(), + "azurerm_kubernetes_service_versions": dataSourceArmKubernetesServiceVersions(), + "azurerm_compute_resource_sku": dataSourceArmComputeResourceSku(), + "azurerm_container_registry": dataSourceArmContainerRegistry(), + "azurerm_cosmosdb_account": dataSourceArmCosmosDbAccount(), + "azurerm_data_lake_store": dataSourceArmDataLakeStoreAccount(), + "azurerm_dev_test_lab": dataSourceArmDevTestLab(), + "azurerm_dns_zone": dataSourceArmDnsZone(), + "azurerm_eventhub_namespace": dataSourceEventHubNamespace(), + "azurerm_express_route_circuit": dataSourceArmExpressRouteCircuit(), + "azurerm_firewall": dataSourceArmFirewall(), + "azurerm_image": dataSourceArmImage(), + "azurerm_hdinsight_cluster": dataSourceArmHDInsightSparkCluster(), + "azurerm_key_vault_access_policy": dataSourceArmKeyVaultAccessPolicy(), + "azurerm_key_vault_key": dataSourceArmKeyVaultKey(), + "azurerm_key_vault_secret": dataSourceArmKeyVaultSecret(), + "azurerm_key_vault": dataSourceArmKeyVault(), + "azurerm_kubernetes_cluster": dataSourceArmKubernetesCluster(), + "azurerm_lb": dataSourceArmLoadBalancer(), + "azurerm_lb_backend_address_pool": dataSourceArmLoadBalancerBackendAddressPool(), + "azurerm_log_analytics_workspace": dataSourceLogAnalyticsWorkspace(), + "azurerm_logic_app_workflow": dataSourceArmLogicAppWorkflow(), + "azurerm_managed_disk": dataSourceArmManagedDisk(), + "azurerm_management_group": dataSourceArmManagementGroup(), + "azurerm_monitor_action_group": dataSourceArmMonitorActionGroup(), + "azurerm_monitor_diagnostic_categories": dataSourceArmMonitorDiagnosticCategories(), + "azurerm_monitor_log_profile": dataSourceArmMonitorLogProfile(), + "azurerm_mssql_elasticpool": dataSourceArmMsSqlElasticpool(), + "azurerm_network_interface": dataSourceArmNetworkInterface(), + "azurerm_network_security_group": dataSourceArmNetworkSecurityGroup(), + "azurerm_network_watcher": dataSourceArmNetworkWatcher(), + "azurerm_notification_hub_namespace": dataSourceNotificationHubNamespace(), + "azurerm_notification_hub": dataSourceNotificationHub(), + "azurerm_platform_image": dataSourceArmPlatformImage(), + "azurerm_policy_definition": dataSourceArmPolicyDefinition(), + "azurerm_public_ip": dataSourceArmPublicIP(), + "azurerm_public_ips": dataSourceArmPublicIPs(), + "azurerm_recovery_services_vault": dataSourceArmRecoveryServicesVault(), + "azurerm_recovery_services_protection_policy_vm": dataSourceArmRecoveryServicesProtectionPolicyVm(), + "azurerm_redis_cache": dataSourceArmRedisCache(), + "azurerm_resource_group": dataSourceArmResourceGroup(), + "azurerm_role_definition": dataSourceArmRoleDefinition(), + "azurerm_route_table": dataSourceArmRouteTable(), + "azurerm_scheduler_job_collection": dataSourceArmSchedulerJobCollection(), + "azurerm_servicebus_namespace": dataSourceArmServiceBusNamespace(), + "azurerm_shared_image_gallery": dataSourceArmSharedImageGallery(), + "azurerm_shared_image_version": dataSourceArmSharedImageVersion(), + "azurerm_shared_image": dataSourceArmSharedImage(), + "azurerm_snapshot": dataSourceArmSnapshot(), + "azurerm_sql_server": dataSourceSqlServer(), + "azurerm_stream_analytics_job": dataSourceArmStreamAnalyticsJob(), + "azurerm_storage_account_sas": dataSourceArmStorageAccountSharedAccessSignature(), + "azurerm_storage_account": dataSourceArmStorageAccount(), + "azurerm_subnet": dataSourceArmSubnet(), + "azurerm_subscription": dataSourceArmSubscription(), + "azurerm_subscriptions": dataSourceArmSubscriptions(), + "azurerm_traffic_manager_geographical_location": dataSourceArmTrafficManagerGeographicalLocation(), + "azurerm_user_assigned_identity": dataSourceArmUserAssignedIdentity(), + "azurerm_virtual_machine": dataSourceArmVirtualMachine(), + "azurerm_virtual_network_gateway": dataSourceArmVirtualNetworkGateway(), + "azurerm_virtual_network_gateway_connection": dataSourceArmVirtualNetworkGatewayConnection(), + "azurerm_virtual_network": dataSourceArmVirtualNetwork(), + }, + + ResourcesMap: map[string]*schema.Resource{ + "azurerm_api_management": resourceArmApiManagementService(), + "azurerm_api_management_api": resourceArmApiManagementApi(), + "azurerm_api_management_api_operation": resourceArmApiManagementApiOperation(), + "azurerm_api_management_api_operation_policy": resourceArmApiManagementApiOperationPolicy(), + "azurerm_api_management_api_policy": resourceArmApiManagementApiPolicy(), + "azurerm_api_management_api_schema": resourceArmApiManagementApiSchema(), + "azurerm_api_management_api_version_set": resourceArmApiManagementApiVersionSet(), + "azurerm_api_management_authorization_server": resourceArmApiManagementAuthorizationServer(), + "azurerm_api_management_backend": resourceArmApiManagementBackend(), + "azurerm_api_management_certificate": resourceArmApiManagementCertificate(), + "azurerm_api_management_group": resourceArmApiManagementGroup(), + "azurerm_api_management_group_user": resourceArmApiManagementGroupUser(), + "azurerm_api_management_logger": resourceArmApiManagementLogger(), + "azurerm_api_management_openid_connect_provider": resourceArmApiManagementOpenIDConnectProvider(), + "azurerm_api_management_product": resourceArmApiManagementProduct(), + "azurerm_api_management_product_api": resourceArmApiManagementProductApi(), + "azurerm_api_management_product_group": resourceArmApiManagementProductGroup(), + "azurerm_api_management_product_policy": resourceArmApiManagementProductPolicy(), + "azurerm_api_management_property": resourceArmApiManagementProperty(), + "azurerm_api_management_subscription": resourceArmApiManagementSubscription(), + "azurerm_api_management_user": resourceArmApiManagementUser(), + "azurerm_app_service_active_slot": resourceArmAppServiceActiveSlot(), + "azurerm_app_service_custom_hostname_binding": resourceArmAppServiceCustomHostnameBinding(), + "azurerm_app_service_plan": resourceArmAppServicePlan(), + "azurerm_app_service_slot": resourceArmAppServiceSlot(), + "azurerm_app_service": resourceArmAppService(), + "azurerm_application_gateway": resourceArmApplicationGateway(), + "azurerm_application_insights_api_key": resourceArmApplicationInsightsAPIKey(), + "azurerm_application_insights": resourceArmApplicationInsights(), + "azurerm_application_insights_web_test": resourceArmApplicationInsightsWebTests(), + "azurerm_application_security_group": resourceArmApplicationSecurityGroup(), + "azurerm_automation_account": resourceArmAutomationAccount(), + "azurerm_automation_credential": resourceArmAutomationCredential(), + "azurerm_automation_dsc_configuration": resourceArmAutomationDscConfiguration(), + "azurerm_automation_dsc_nodeconfiguration": resourceArmAutomationDscNodeConfiguration(), + "azurerm_automation_module": resourceArmAutomationModule(), + "azurerm_automation_runbook": resourceArmAutomationRunbook(), + "azurerm_automation_schedule": resourceArmAutomationSchedule(), + "azurerm_automation_variable_bool": resourceArmAutomationVariableBool(), + "azurerm_automation_variable_datetime": resourceArmAutomationVariableDateTime(), + "azurerm_automation_variable_int": resourceArmAutomationVariableInt(), + "azurerm_automation_variable_string": resourceArmAutomationVariableString(), + "azurerm_autoscale_setting": resourceArmAutoScaleSetting(), + "azurerm_availability_set": resourceArmAvailabilitySet(), + "azurerm_azuread_application": resourceArmActiveDirectoryApplication(), + "azurerm_azuread_service_principal_password": resourceArmActiveDirectoryServicePrincipalPassword(), + "azurerm_azuread_service_principal": resourceArmActiveDirectoryServicePrincipal(), + "azurerm_batch_account": resourceArmBatchAccount(), + "azurerm_batch_application": resourceArmBatchApplication(), + "azurerm_batch_certificate": resourceArmBatchCertificate(), + "azurerm_batch_pool": resourceArmBatchPool(), + "azurerm_cdn_endpoint": resourceArmCdnEndpoint(), + "azurerm_cdn_profile": resourceArmCdnProfile(), + "azurerm_cognitive_account": resourceArmCognitiveAccount(), + "azurerm_connection_monitor": resourceArmConnectionMonitor(), + "azurerm_container_group": resourceArmContainerGroup(), + "azurerm_container_registry": resourceArmContainerRegistry(), + "azurerm_container_service": resourceArmContainerService(), + "azurerm_cosmosdb_account": resourceArmCosmosDbAccount(), + "azurerm_cosmosdb_cassandra_keyspace": resourceArmCosmosDbCassandraKeyspace(), + "azurerm_cosmosdb_mongo_collection": resourceArmCosmosDbMongoCollection(), + "azurerm_cosmosdb_mongo_database": resourceArmCosmosDbMongoDatabase(), + "azurerm_cosmosdb_sql_database": resourceArmCosmosDbSQLDatabase(), + "azurerm_cosmosdb_table": resourceArmCosmosDbTable(), + "azurerm_data_factory": resourceArmDataFactory(), + "azurerm_data_factory_dataset_mysql": resourceArmDataFactoryDatasetMySQL(), + "azurerm_data_factory_dataset_postgresql": resourceArmDataFactoryDatasetPostgreSQL(), + "azurerm_data_factory_dataset_sql_server_table": resourceArmDataFactoryDatasetSQLServerTable(), + "azurerm_data_factory_linked_service_data_lake_storage_gen2": resourceArmDataFactoryLinkedServiceDataLakeStorageGen2(), + "azurerm_data_factory_linked_service_mysql": resourceArmDataFactoryLinkedServiceMySQL(), + "azurerm_data_factory_linked_service_postgresql": resourceArmDataFactoryLinkedServicePostgreSQL(), + "azurerm_data_factory_linked_service_sql_server": resourceArmDataFactoryLinkedServiceSQLServer(), + "azurerm_data_factory_pipeline": resourceArmDataFactoryPipeline(), + "azurerm_data_lake_analytics_account": resourceArmDataLakeAnalyticsAccount(), + "azurerm_data_lake_analytics_firewall_rule": resourceArmDataLakeAnalyticsFirewallRule(), + "azurerm_data_lake_store_file": resourceArmDataLakeStoreFile(), + "azurerm_data_lake_store_firewall_rule": resourceArmDataLakeStoreFirewallRule(), + "azurerm_data_lake_store": resourceArmDataLakeStore(), + "azurerm_databricks_workspace": resourceArmDatabricksWorkspace(), + "azurerm_ddos_protection_plan": resourceArmDDoSProtectionPlan(), + "azurerm_dev_test_lab": resourceArmDevTestLab(), + "azurerm_dev_test_linux_virtual_machine": resourceArmDevTestLinuxVirtualMachine(), + "azurerm_dev_test_policy": resourceArmDevTestPolicy(), + "azurerm_dev_test_virtual_network": resourceArmDevTestVirtualNetwork(), + "azurerm_dev_test_windows_virtual_machine": resourceArmDevTestWindowsVirtualMachine(), + "azurerm_devspace_controller": resourceArmDevSpaceController(), + "azurerm_dns_a_record": resourceArmDnsARecord(), + "azurerm_dns_aaaa_record": resourceArmDnsAAAARecord(), + "azurerm_dns_caa_record": resourceArmDnsCaaRecord(), + "azurerm_dns_cname_record": resourceArmDnsCNameRecord(), + "azurerm_dns_mx_record": resourceArmDnsMxRecord(), + "azurerm_dns_ns_record": resourceArmDnsNsRecord(), + "azurerm_dns_ptr_record": resourceArmDnsPtrRecord(), + "azurerm_dns_srv_record": resourceArmDnsSrvRecord(), + "azurerm_dns_txt_record": resourceArmDnsTxtRecord(), + "azurerm_dns_zone": resourceArmDnsZone(), + "azurerm_eventgrid_domain": resourceArmEventGridDomain(), + "azurerm_eventgrid_event_subscription": resourceArmEventGridEventSubscription(), + "azurerm_eventgrid_topic": resourceArmEventGridTopic(), + "azurerm_eventhub_authorization_rule": resourceArmEventHubAuthorizationRule(), + "azurerm_eventhub_consumer_group": resourceArmEventHubConsumerGroup(), + "azurerm_eventhub_namespace_authorization_rule": resourceArmEventHubNamespaceAuthorizationRule(), + "azurerm_eventhub_namespace": resourceArmEventHubNamespace(), + "azurerm_eventhub": resourceArmEventHub(), + "azurerm_express_route_circuit_authorization": resourceArmExpressRouteCircuitAuthorization(), + "azurerm_express_route_circuit_peering": resourceArmExpressRouteCircuitPeering(), + "azurerm_express_route_circuit": resourceArmExpressRouteCircuit(), + "azurerm_firewall_application_rule_collection": resourceArmFirewallApplicationRuleCollection(), + "azurerm_firewall_nat_rule_collection": resourceArmFirewallNatRuleCollection(), + "azurerm_firewall_network_rule_collection": resourceArmFirewallNetworkRuleCollection(), + "azurerm_firewall": resourceArmFirewall(), + "azurerm_function_app": resourceArmFunctionApp(), + "azurerm_hdinsight_hadoop_cluster": resourceArmHDInsightHadoopCluster(), + "azurerm_hdinsight_hbase_cluster": resourceArmHDInsightHBaseCluster(), + "azurerm_hdinsight_interactive_query_cluster": resourceArmHDInsightInteractiveQueryCluster(), + "azurerm_hdinsight_kafka_cluster": resourceArmHDInsightKafkaCluster(), + "azurerm_hdinsight_ml_services_cluster": resourceArmHDInsightMLServicesCluster(), + "azurerm_hdinsight_rserver_cluster": resourceArmHDInsightRServerCluster(), + "azurerm_hdinsight_spark_cluster": resourceArmHDInsightSparkCluster(), + "azurerm_hdinsight_storm_cluster": resourceArmHDInsightStormCluster(), + "azurerm_image": resourceArmImage(), + "azurerm_iot_dps": resourceArmIotDPS(), + "azurerm_iot_dps_certificate": resourceArmIotDPSCertificate(), + "azurerm_iothub_consumer_group": resourceArmIotHubConsumerGroup(), + "azurerm_iothub": resourceArmIotHub(), + "azurerm_iothub_shared_access_policy": resourceArmIotHubSharedAccessPolicy(), + "azurerm_key_vault_access_policy": resourceArmKeyVaultAccessPolicy(), + "azurerm_key_vault_certificate": resourceArmKeyVaultCertificate(), + "azurerm_key_vault_key": resourceArmKeyVaultKey(), + "azurerm_key_vault_secret": resourceArmKeyVaultSecret(), + "azurerm_key_vault": resourceArmKeyVault(), + "azurerm_kubernetes_cluster": resourceArmKubernetesCluster(), + "azurerm_lb_backend_address_pool": resourceArmLoadBalancerBackendAddressPool(), + "azurerm_lb_nat_pool": resourceArmLoadBalancerNatPool(), + "azurerm_lb_nat_rule": resourceArmLoadBalancerNatRule(), + "azurerm_lb_probe": resourceArmLoadBalancerProbe(), + "azurerm_lb_outbound_rule": resourceArmLoadBalancerOutboundRule(), + "azurerm_lb_rule": resourceArmLoadBalancerRule(), + "azurerm_lb": resourceArmLoadBalancer(), + "azurerm_local_network_gateway": resourceArmLocalNetworkGateway(), + "azurerm_log_analytics_solution": resourceArmLogAnalyticsSolution(), + "azurerm_log_analytics_linked_service": resourceArmLogAnalyticsLinkedService(), + "azurerm_log_analytics_workspace_linked_service": resourceArmLogAnalyticsWorkspaceLinkedService(), + "azurerm_log_analytics_workspace": resourceArmLogAnalyticsWorkspace(), + "azurerm_logic_app_action_custom": resourceArmLogicAppActionCustom(), + "azurerm_logic_app_action_http": resourceArmLogicAppActionHTTP(), + "azurerm_logic_app_trigger_custom": resourceArmLogicAppTriggerCustom(), + "azurerm_logic_app_trigger_http_request": resourceArmLogicAppTriggerHttpRequest(), + "azurerm_logic_app_trigger_recurrence": resourceArmLogicAppTriggerRecurrence(), + "azurerm_logic_app_workflow": resourceArmLogicAppWorkflow(), + "azurerm_managed_disk": resourceArmManagedDisk(), + "azurerm_management_group": resourceArmManagementGroup(), + "azurerm_management_lock": resourceArmManagementLock(), + "azurerm_mariadb_database": resourceArmMariaDbDatabase(), + "azurerm_mariadb_firewall_rule": resourceArmMariaDBFirewallRule(), + "azurerm_mariadb_server": resourceArmMariaDbServer(), + "azurerm_media_services_account": resourceArmMediaServicesAccount(), + "azurerm_metric_alertrule": resourceArmMetricAlertRule(), + "azurerm_monitor_autoscale_setting": resourceArmMonitorAutoScaleSetting(), + "azurerm_monitor_action_group": resourceArmMonitorActionGroup(), + "azurerm_monitor_activity_log_alert": resourceArmMonitorActivityLogAlert(), + "azurerm_monitor_diagnostic_setting": resourceArmMonitorDiagnosticSetting(), + "azurerm_monitor_log_profile": resourceArmMonitorLogProfile(), + "azurerm_monitor_metric_alert": resourceArmMonitorMetricAlert(), + "azurerm_monitor_metric_alertrule": resourceArmMonitorMetricAlertRule(), + "azurerm_mssql_elasticpool": resourceArmMsSqlElasticPool(), + "azurerm_mysql_configuration": resourceArmMySQLConfiguration(), + "azurerm_mysql_database": resourceArmMySqlDatabase(), + "azurerm_mysql_firewall_rule": resourceArmMySqlFirewallRule(), + "azurerm_mysql_server": resourceArmMySqlServer(), + "azurerm_mysql_virtual_network_rule": resourceArmMySqlVirtualNetworkRule(), + "azurerm_network_connection_monitor": resourceArmNetworkConnectionMonitor(), + "azurerm_network_ddos_protection_plan": resourceArmNetworkDDoSProtectionPlan(), + "azurerm_network_interface": resourceArmNetworkInterface(), + "azurerm_network_interface_application_gateway_backend_address_pool_association": resourceArmNetworkInterfaceApplicationGatewayBackendAddressPoolAssociation(), + "azurerm_network_interface_application_security_group_association": resourceArmNetworkInterfaceApplicationSecurityGroupAssociation(), + "azurerm_network_interface_backend_address_pool_association": resourceArmNetworkInterfaceBackendAddressPoolAssociation(), + "azurerm_network_interface_nat_rule_association": resourceArmNetworkInterfaceNatRuleAssociation(), + "azurerm_network_packet_capture": resourceArmNetworkPacketCapture(), + "azurerm_network_profile": resourceArmNetworkProfile(), + "azurerm_network_security_group": resourceArmNetworkSecurityGroup(), + "azurerm_network_security_rule": resourceArmNetworkSecurityRule(), + "azurerm_network_watcher": resourceArmNetworkWatcher(), + "azurerm_notification_hub_authorization_rule": resourceArmNotificationHubAuthorizationRule(), + "azurerm_notification_hub_namespace": resourceArmNotificationHubNamespace(), + "azurerm_notification_hub": resourceArmNotificationHub(), + "azurerm_packet_capture": resourceArmPacketCapture(), + "azurerm_policy_assignment": resourceArmPolicyAssignment(), + "azurerm_policy_definition": resourceArmPolicyDefinition(), + "azurerm_policy_set_definition": resourceArmPolicySetDefinition(), + "azurerm_postgresql_configuration": resourceArmPostgreSQLConfiguration(), + "azurerm_postgresql_database": resourceArmPostgreSQLDatabase(), + "azurerm_postgresql_firewall_rule": resourceArmPostgreSQLFirewallRule(), + "azurerm_postgresql_server": resourceArmPostgreSQLServer(), + "azurerm_postgresql_virtual_network_rule": resourceArmPostgreSQLVirtualNetworkRule(), + "azurerm_private_dns_zone": resourceArmPrivateDnsZone(), + "azurerm_public_ip": resourceArmPublicIp(), + "azurerm_public_ip_prefix": resourceArmPublicIpPrefix(), + "azurerm_recovery_services_protected_vm": resourceArmRecoveryServicesProtectedVm(), + "azurerm_recovery_services_protection_policy_vm": resourceArmRecoveryServicesProtectionPolicyVm(), + "azurerm_recovery_services_vault": resourceArmRecoveryServicesVault(), + "azurerm_redis_cache": resourceArmRedisCache(), + "azurerm_redis_firewall_rule": resourceArmRedisFirewallRule(), + "azurerm_relay_namespace": resourceArmRelayNamespace(), + "azurerm_resource_group": resourceArmResourceGroup(), + "azurerm_role_assignment": resourceArmRoleAssignment(), + "azurerm_role_definition": resourceArmRoleDefinition(), + "azurerm_route_table": resourceArmRouteTable(), + "azurerm_route": resourceArmRoute(), + "azurerm_scheduler_job_collection": resourceArmSchedulerJobCollection(), + "azurerm_scheduler_job": resourceArmSchedulerJob(), + "azurerm_search_service": resourceArmSearchService(), + "azurerm_security_center_contact": resourceArmSecurityCenterContact(), + "azurerm_security_center_subscription_pricing": resourceArmSecurityCenterSubscriptionPricing(), + "azurerm_security_center_workspace": resourceArmSecurityCenterWorkspace(), + "azurerm_service_fabric_cluster": resourceArmServiceFabricCluster(), + "azurerm_servicebus_namespace_authorization_rule": resourceArmServiceBusNamespaceAuthorizationRule(), + "azurerm_servicebus_namespace": resourceArmServiceBusNamespace(), + "azurerm_servicebus_queue_authorization_rule": resourceArmServiceBusQueueAuthorizationRule(), + "azurerm_servicebus_queue": resourceArmServiceBusQueue(), + "azurerm_servicebus_subscription_rule": resourceArmServiceBusSubscriptionRule(), + "azurerm_servicebus_subscription": resourceArmServiceBusSubscription(), + "azurerm_servicebus_topic_authorization_rule": resourceArmServiceBusTopicAuthorizationRule(), + "azurerm_servicebus_topic": resourceArmServiceBusTopic(), + "azurerm_shared_image_gallery": resourceArmSharedImageGallery(), + "azurerm_shared_image_version": resourceArmSharedImageVersion(), + "azurerm_shared_image": resourceArmSharedImage(), + "azurerm_signalr_service": resourceArmSignalRService(), + "azurerm_snapshot": resourceArmSnapshot(), + "azurerm_sql_active_directory_administrator": resourceArmSqlAdministrator(), + "azurerm_sql_database": resourceArmSqlDatabase(), + "azurerm_sql_elasticpool": resourceArmSqlElasticPool(), + "azurerm_sql_firewall_rule": resourceArmSqlFirewallRule(), + "azurerm_sql_server": resourceArmSqlServer(), + "azurerm_sql_virtual_network_rule": resourceArmSqlVirtualNetworkRule(), + "azurerm_storage_account": resourceArmStorageAccount(), + "azurerm_storage_blob": resourceArmStorageBlob(), + "azurerm_storage_container": resourceArmStorageContainer(), + "azurerm_storage_queue": resourceArmStorageQueue(), + "azurerm_storage_share": resourceArmStorageShare(), + "azurerm_storage_share_directory": resourceArmStorageShareDirectory(), + "azurerm_storage_table": resourceArmStorageTable(), + "azurerm_storage_table_entity": resourceArmStorageTableEntity(), + "azurerm_stream_analytics_job": resourceArmStreamAnalyticsJob(), + "azurerm_stream_analytics_function_javascript_udf": resourceArmStreamAnalyticsFunctionUDF(), + "azurerm_stream_analytics_output_blob": resourceArmStreamAnalyticsOutputBlob(), + "azurerm_stream_analytics_output_mssql": resourceArmStreamAnalyticsOutputSql(), + "azurerm_stream_analytics_output_eventhub": resourceArmStreamAnalyticsOutputEventHub(), + "azurerm_stream_analytics_output_servicebus_queue": resourceArmStreamAnalyticsOutputServiceBusQueue(), + "azurerm_stream_analytics_stream_input_blob": resourceArmStreamAnalyticsStreamInputBlob(), + "azurerm_stream_analytics_stream_input_eventhub": resourceArmStreamAnalyticsStreamInputEventHub(), + "azurerm_stream_analytics_stream_input_iothub": resourceArmStreamAnalyticsStreamInputIoTHub(), + "azurerm_subnet_network_security_group_association": resourceArmSubnetNetworkSecurityGroupAssociation(), + "azurerm_subnet_route_table_association": resourceArmSubnetRouteTableAssociation(), + "azurerm_subnet": resourceArmSubnet(), + "azurerm_template_deployment": resourceArmTemplateDeployment(), + "azurerm_traffic_manager_endpoint": resourceArmTrafficManagerEndpoint(), + "azurerm_traffic_manager_profile": resourceArmTrafficManagerProfile(), + "azurerm_user_assigned_identity": resourceArmUserAssignedIdentity(), + "azurerm_virtual_machine_data_disk_attachment": resourceArmVirtualMachineDataDiskAttachment(), + "azurerm_virtual_machine_extension": resourceArmVirtualMachineExtensions(), + "azurerm_virtual_machine_scale_set": resourceArmVirtualMachineScaleSet(), + "azurerm_virtual_machine": resourceArmVirtualMachine(), + "azurerm_virtual_network_gateway_connection": resourceArmVirtualNetworkGatewayConnection(), + "azurerm_virtual_network_gateway": resourceArmVirtualNetworkGateway(), + "azurerm_virtual_network_peering": resourceArmVirtualNetworkPeering(), + "azurerm_virtual_network": resourceArmVirtualNetwork(), + }, } p.ConfigureFunc = providerConfigure(p) diff --git a/azurerm/utils/utils.go b/azurerm/utils/utils.go index bba617138c054..17478d393d66e 100644 --- a/azurerm/utils/utils.go +++ b/azurerm/utils/utils.go @@ -23,3 +23,12 @@ func Float(input float64) *float64 { func String(input string) *string { return &input } + +func StringSliceContains(a []string, x string) bool { + for _, n := range a { + if x == n { + return true + } + } + return false +} diff --git a/website/docs/d/compute_resource_sku.html.markdown b/website/docs/d/compute_resource_sku.html.markdown new file mode 100644 index 0000000000000..97935e7aca204 --- /dev/null +++ b/website/docs/d/compute_resource_sku.html.markdown @@ -0,0 +1,63 @@ +--- +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_compute_resource_sku" +sidebar_current: "docs-azurerm-datasource-compute-resource-sku" +description: |- + Retrieve information about a Compute SKU + +--- + +# Data Source: azurerm_compute_resource_sku + +Use this data source to access information about Compute Resource SKUs. + +## Example Usage + +```hcl +data "azurerm_compute_resource_sku" "test" { + name = "Standard_D2s_v2" + location = "eastus" +} + +output "location_info" { + value = "${data.azurerm_compute_resource_sku.test.location_info}" +} + +output "zones" { + value = "${data.azurerm_compute_resource_sku.test.location_info.0.zones}" +} +``` + +## Argument Reference + +* `name` - (Required) The name of the SKU to retrieve information for (e.g. Standard_DS2_v2). +* `location` - (Required) The location to retrieve SKU information from. + +## Attributes Reference + +The following attributes are exported (Not all attributes may be available for every SKU): + +* `resource_type` - The type of resource the SKU applies to. + +* `name` - The name of the SKU. + +* `tier` - Specifies the tier of the virtual machines in a scale set. Possible values: **Standard** or **Basic**. + +* `size` - The size of the SKU. + +* `family` - The Family of this particular SKU. + +* `kind` - The Kind of resources that are supported in this SKU. + +* `capacity` - Specifies the number of virtual machines in the scale set. + +* `location_info` - A list of locations and availability zones in those locations where the SKU is available. + +* `api_versions` - The api versions that support this SKU. + +* `costs` - Metadata for retrieving price info. + +* `capabilities` - A set of name value pairs describing capabilities. + +* `restrictions` - The restrictions because of which SKU cannot be used. This is empty if there are no restrictions. + \ No newline at end of file