diff --git a/google/data_source_google_compute_default_service_account.go b/google/data_source_google_compute_default_service_account.go new file mode 100644 index 00000000..0c1cb85a --- /dev/null +++ b/google/data_source_google_compute_default_service_account.go @@ -0,0 +1,40 @@ +package google + +import ( + "github.com/hashicorp/terraform/helper/schema" +) + +func dataSourceGoogleComputeDefaultServiceAccount() *schema.Resource { + return &schema.Resource{ + Read: dataSourceGoogleComputeDefaultServiceAccountRead, + Schema: map[string]*schema.Schema{ + "email": { + Type: schema.TypeString, + Optional: true, + }, + "project": { + Type: schema.TypeString, + Optional: true, + }, + }, + } +} + +func dataSourceGoogleComputeDefaultServiceAccountRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + project, err := getProject(d, config) + if err != nil { + return err + } + + projectCompResource, err := config.clientCompute.Projects.Get(project).Do() + if err != nil { + return handleNotFoundError(err, d, "GCE service account not found") + } + + d.SetId(projectCompResource.DefaultServiceAccount) + d.Set("email", projectCompResource.DefaultServiceAccount) + d.Set("project", project) + return nil +} diff --git a/google/data_source_google_compute_default_service_account_test.go b/google/data_source_google_compute_default_service_account_test.go new file mode 100644 index 00000000..83e8929c --- /dev/null +++ b/google/data_source_google_compute_default_service_account_test.go @@ -0,0 +1,31 @@ +package google + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccDataSourceGoogleComputeDefaultServiceAccount_basic(t *testing.T) { + t.Parallel() + + resourceName := "data.google_compute_default_service_account.default" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGoogleComputeDefaultServiceAccount_basic, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "email"), + ), + }, + }, + }) +} + +const testAccCheckGoogleComputeDefaultServiceAccount_basic = ` +data "google_compute_default_service_account" "default" { } +` diff --git a/google/provider.go b/google/provider.go index 25fd0598..e18e5527 100644 --- a/google/provider.go +++ b/google/provider.go @@ -66,6 +66,7 @@ func Provider() terraform.ResourceProvider { "google_client_config": dataSourceGoogleClientConfig(), "google_cloudfunctions_function": dataSourceGoogleCloudFunctionsFunction(), "google_compute_address": dataSourceGoogleComputeAddress(), + "google_compute_default_service_account": dataSourceGoogleComputeDefaultServiceAccount(), "google_compute_image": dataSourceGoogleComputeImage(), "google_compute_global_address": dataSourceGoogleComputeGlobalAddress(), "google_compute_lb_ip_ranges": dataSourceGoogleComputeLbIpRanges(), diff --git a/website/docs/d/google_compute_default_service_account.html.markdown b/website/docs/d/google_compute_default_service_account.html.markdown new file mode 100644 index 00000000..d2899a67 --- /dev/null +++ b/website/docs/d/google_compute_default_service_account.html.markdown @@ -0,0 +1,34 @@ +--- +layout: "google" +page_title: "Google: google_compute_default_service_account" +sidebar_current: "docs-google-datasource-compute-default-service-account" +description: |- + Retrieve default service account used by VMs running in this project +--- + +# google\_compute\_default\_service\_account + +Use this data source to retrieve default service account for this project + +## Example Usage + +```hcl +data "google_compute_default_service_account" "default" { } + +output "default_account" { + value = "${google_compute_default_service_account.default.email}" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `project` - (Optional) The project ID. If it is not provided, the provider project is used. + + +## Attributes Reference + +The following attributes are exported: + +* `email` - Email address of the default service account used by VMs running in this project diff --git a/website/google.erb b/website/google.erb index 251d9c46..80d6447c 100644 --- a/website/google.erb +++ b/website/google.erb @@ -25,6 +25,9 @@ > google_compute_address + > + google_compute_default_service_account + > google_compute_image