From 6374cc7d339239d738d2a071fa0ab16aeb271408 Mon Sep 17 00:00:00 2001 From: Peter McAtominey Date: Thu, 20 Oct 2016 11:29:26 +0100 Subject: [PATCH 1/2] provider/azurerm: add client_config data source azurerm_client_config provides access to: - client_id - tenant_id - subscription_id ``` TF_ACC=1 go test ./builtin/providers/azurerm -v -run TestAccAzureRMClientConfig -timeout 120m === RUN TestAccAzureRMClientConfig_basic --- PASS: TestAccAzureRMClientConfig_basic (27.79s) PASS ok github.com/hashicorp/terraform/builtin/providers/azurerm 27.862s ``` --- builtin/providers/azurerm/config.go | 10 +++- .../azurerm/data_source_arm_client_config.go | 39 +++++++++++++++ .../data_source_arm_client_config_test.go | 48 +++++++++++++++++++ builtin/providers/azurerm/provider.go | 4 ++ .../azurerm/d/client_config.html.markdown | 31 ++++++++++++ website/source/layouts/azurerm.erb | 9 ++++ 6 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 builtin/providers/azurerm/data_source_arm_client_config.go create mode 100644 builtin/providers/azurerm/data_source_arm_client_config_test.go create mode 100644 website/source/docs/providers/azurerm/d/client_config.html.markdown diff --git a/builtin/providers/azurerm/config.go b/builtin/providers/azurerm/config.go index e068f2738a..c0dcb80417 100644 --- a/builtin/providers/azurerm/config.go +++ b/builtin/providers/azurerm/config.go @@ -24,6 +24,10 @@ import ( // ArmClient contains the handles to all the specific Azure Resource Manager // resource classes' respective clients. type ArmClient struct { + clientId string + tenantId string + subscriptionId string + rivieraClient *riviera.Client availSetClient compute.AvailabilitySetsClient @@ -110,7 +114,11 @@ func setUserAgent(client *autorest.Client) { // *ArmClient based on the Config's current settings. func (c *Config) getArmClient() (*ArmClient, error) { // client declarations: - client := ArmClient{} + client := ArmClient{ + clientId: c.ClientID, + tenantId: c.TenantID, + subscriptionId: c.SubscriptionID, + } rivieraClient, err := riviera.NewClient(&riviera.AzureResourceManagerCredentials{ ClientID: c.ClientID, diff --git a/builtin/providers/azurerm/data_source_arm_client_config.go b/builtin/providers/azurerm/data_source_arm_client_config.go new file mode 100644 index 0000000000..42756b893e --- /dev/null +++ b/builtin/providers/azurerm/data_source_arm_client_config.go @@ -0,0 +1,39 @@ +package azurerm + +import ( + "time" + + "github.com/hashicorp/terraform/helper/schema" +) + +func dataSourceArmClientConfig() *schema.Resource { + return &schema.Resource{ + Read: dataSourceArmClientConfigRead, + + Schema: map[string]*schema.Schema{ + "client_id": { + Type: schema.TypeString, + Computed: true, + }, + "tenant_id": { + Type: schema.TypeString, + Computed: true, + }, + "subscription_id": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func dataSourceArmClientConfigRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*ArmClient) + + d.SetId(time.Now().UTC().String()) + d.Set("client_id", client.clientId) + d.Set("tenant_id", client.tenantId) + d.Set("subscription_id", client.subscriptionId) + + return nil +} diff --git a/builtin/providers/azurerm/data_source_arm_client_config_test.go b/builtin/providers/azurerm/data_source_arm_client_config_test.go new file mode 100644 index 0000000000..8962b2d3b1 --- /dev/null +++ b/builtin/providers/azurerm/data_source_arm_client_config_test.go @@ -0,0 +1,48 @@ +package azurerm + +import ( + "os" + "testing" + + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccAzureRMClientConfig_basic(t *testing.T) { + clientId := os.Getenv("ARM_CLIENT_ID") + tenantId := os.Getenv("ARM_TENANT_ID") + subscriptionId := os.Getenv("ARM_SUBSCRIPTION_ID") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckArmClientConfig_basic, + Check: resource.ComposeTestCheckFunc( + testAzureRMClientConfigAttr("data.azurerm_client_config.current", "client_id", clientId), + testAzureRMClientConfigAttr("data.azurerm_client_config.current", "tenant_id", tenantId), + testAzureRMClientConfigAttr("data.azurerm_client_config.current", "subscription_id", subscriptionId), + ), + }, + }, + }) +} + +// Wraps resource.TestCheckResourceAttr to prevent leaking values to console +// in case of mismatch +func testAzureRMClientConfigAttr(name, key, value string) resource.TestCheckFunc { + return func(s *terraform.State) error { + err := resource.TestCheckResourceAttr(name, key, value)(s) + if err != nil { + // return fmt.Errorf("%s: Attribute '%s', failed check (values hidden)", name, key) + return err + } + + return nil + } +} + +const testAccCheckArmClientConfig_basic = ` +data "azurerm_client_config" "current" { } +` diff --git a/builtin/providers/azurerm/provider.go b/builtin/providers/azurerm/provider.go index 88daf6945f..9b56ac07e2 100644 --- a/builtin/providers/azurerm/provider.go +++ b/builtin/providers/azurerm/provider.go @@ -44,6 +44,10 @@ func Provider() terraform.ResourceProvider { }, }, + DataSourcesMap: map[string]*schema.Resource{ + "azurerm_client_config": dataSourceArmClientConfig(), + }, + ResourcesMap: map[string]*schema.Resource{ // These resources use the Azure ARM SDK "azurerm_availability_set": resourceArmAvailabilitySet(), diff --git a/website/source/docs/providers/azurerm/d/client_config.html.markdown b/website/source/docs/providers/azurerm/d/client_config.html.markdown new file mode 100644 index 0000000000..c3abef18dc --- /dev/null +++ b/website/source/docs/providers/azurerm/d/client_config.html.markdown @@ -0,0 +1,31 @@ +--- +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_client_config" +sidebar_current: "docs-azurerm-datasource-client-config" +description: |- + Get information about the configuration of the azurerm provider. +--- + +# azurerm\_client\_config + +Use this data source to access the configuration + +## Example Usage + +``` +data "azurerm_client_config" "current" { } + +output "account_id" { + value = "${data.azurerm_client_config.current.account_id}" +} +``` + +## Argument Reference + +There are no arguments available for this data source. + +## Attributes Reference + +`client_id` is set to the Azure Client ID. +`tenant_id` is set to the Azure Tenant ID. +`subscription_id` is set to the Azure Subscription ID. \ No newline at end of file diff --git a/website/source/layouts/azurerm.erb b/website/source/layouts/azurerm.erb index baa001a0bb..b9e2cbd7f9 100644 --- a/website/source/layouts/azurerm.erb +++ b/website/source/layouts/azurerm.erb @@ -11,6 +11,15 @@ Microsoft Azure Provider + > + Data Sources + + + > Base Resources + > + Key Vault Resources + + + > Load Balancer Resources