mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-01 16:21:06 +00:00
Add usage export bucket resource. (#1080)
This commit is contained in:
parent
c77bb36523
commit
8354a43d1a
@ -173,6 +173,7 @@ func Provider() terraform.ResourceProvider {
|
||||
"google_project_iam_member": ResourceIamMemberWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc),
|
||||
"google_project_service": resourceGoogleProjectService(),
|
||||
"google_project_iam_custom_role": resourceGoogleProjectIamCustomRole(),
|
||||
"google_project_usage_export_bucket": resourceProjectUsageBucket(),
|
||||
"google_project_services": resourceGoogleProjectServices(),
|
||||
"google_pubsub_topic": resourcePubsubTopic(),
|
||||
"google_pubsub_topic_iam_binding": ResourceIamBindingWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc),
|
||||
|
103
google/resource_usage_export_bucket.go
Normal file
103
google/resource_usage_export_bucket.go
Normal file
@ -0,0 +1,103 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/schema"
|
||||
"google.golang.org/api/compute/v1"
|
||||
)
|
||||
|
||||
func resourceProjectUsageBucket() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Create: resourceProjectUsageBucketCreate,
|
||||
Read: resourceProjectUsageBucketRead,
|
||||
Delete: resourceProjectUsageBucketDelete,
|
||||
Importer: &schema.ResourceImporter{
|
||||
State: schema.ImportStatePassthrough,
|
||||
},
|
||||
|
||||
Schema: map[string]*schema.Schema{
|
||||
"bucket_name": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Required: true,
|
||||
ForceNew: true,
|
||||
},
|
||||
"prefix": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
ForceNew: true,
|
||||
},
|
||||
"project": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Computed: true,
|
||||
ForceNew: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func resourceProjectUsageBucketRead(d *schema.ResourceData, meta interface{}) error {
|
||||
config := meta.(*Config)
|
||||
project := d.Id()
|
||||
|
||||
p, err := config.clientCompute.Projects.Get(project).Do()
|
||||
if err != nil {
|
||||
return handleNotFoundError(err, d, fmt.Sprintf("Project data for project %s", project))
|
||||
}
|
||||
|
||||
if p.UsageExportLocation == nil {
|
||||
log.Printf("[WARN] Removing usage export location resource %s because it's not enabled server-side.", project)
|
||||
d.SetId("")
|
||||
}
|
||||
|
||||
d.Set("project", project)
|
||||
d.Set("prefix", p.UsageExportLocation.ReportNamePrefix)
|
||||
d.Set("bucket_name", p.UsageExportLocation.BucketName)
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceProjectUsageBucketCreate(d *schema.ResourceData, meta interface{}) error {
|
||||
config := meta.(*Config)
|
||||
project, err := getProject(d, config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
op, err := config.clientCompute.Projects.SetUsageExportBucket(project, &compute.UsageExportLocation{
|
||||
ReportNamePrefix: d.Get("prefix").(string),
|
||||
BucketName: d.Get("bucket_name").(string),
|
||||
}).Do()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
d.SetId(project)
|
||||
err = computeOperationWait(config.clientCompute, op, project, "Setting usage export bucket.")
|
||||
if err != nil {
|
||||
d.SetId("")
|
||||
return err
|
||||
}
|
||||
|
||||
d.Set("project", project)
|
||||
|
||||
return resourceProjectUsageBucketRead(d, meta)
|
||||
}
|
||||
|
||||
func resourceProjectUsageBucketDelete(d *schema.ResourceData, meta interface{}) error {
|
||||
config := meta.(*Config)
|
||||
project := d.Id()
|
||||
|
||||
op, err := config.clientCompute.Projects.SetUsageExportBucket(project, nil).Do()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
d.SetId(project)
|
||||
err = computeOperationWait(config.clientCompute, op, project, "Setting usage export bucket.")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
d.SetId("")
|
||||
|
||||
return nil
|
||||
}
|
59
google/resource_usage_export_bucket_test.go
Normal file
59
google/resource_usage_export_bucket_test.go
Normal file
@ -0,0 +1,59 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/acctest"
|
||||
"github.com/hashicorp/terraform/helper/resource"
|
||||
)
|
||||
|
||||
func TestAccComputeResourceUsageExportBucket(t *testing.T) {
|
||||
org := getTestOrgFromEnv(t)
|
||||
billingId := getTestBillingAccountFromEnv(t)
|
||||
|
||||
baseProject := "ub-" + acctest.RandString(10)
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: testAccResourceUsageExportBucket(baseProject, org, billingId),
|
||||
},
|
||||
// Test import.
|
||||
resource.TestStep{
|
||||
ResourceName: "google_project_usage_export_bucket.ueb",
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func testAccResourceUsageExportBucket(baseProject, org, billingId string) string {
|
||||
return fmt.Sprintf(`
|
||||
resource "google_project" "base" {
|
||||
project_id = "%s"
|
||||
name = "Export Bucket Base"
|
||||
org_id = "%s"
|
||||
billing_account = "%s"
|
||||
}
|
||||
|
||||
resource "google_project_service" "service" {
|
||||
project = "${google_project.base.project_id}"
|
||||
service = "compute.googleapis.com"
|
||||
}
|
||||
|
||||
resource "google_storage_bucket" "bucket" {
|
||||
name = "b-${google_project.base.project_id}"
|
||||
project = "${google_project_service.service.project}"
|
||||
}
|
||||
|
||||
resource "google_project_usage_export_bucket" "ueb" {
|
||||
project = "${google_project.base.project_id}"
|
||||
bucket_name = "${google_storage_bucket.bucket.name}"
|
||||
prefix = "foobar"
|
||||
}
|
||||
`, baseProject, org, billingId)
|
||||
}
|
38
website/docs/r/usage_export_bucket.html.markdown
Normal file
38
website/docs/r/usage_export_bucket.html.markdown
Normal file
@ -0,0 +1,38 @@
|
||||
---
|
||||
layout: "google"
|
||||
page_title: "Google: google_project_usage_export_bucket"
|
||||
sidebar_current: "docs-google-project-usage-export-bucket"
|
||||
description: |-
|
||||
Creates a dataset resource for Google BigQuery.
|
||||
---
|
||||
|
||||
# google_project_usage_export_bucket
|
||||
|
||||
Sets up a usage export bucket for a particular project. A usage export bucket
|
||||
is a pre-configured GCS bucket which is set up to receive daily and monthly
|
||||
reports of the GCE resources used.
|
||||
|
||||
For more information see the [Docs](https://cloud.google.com/compute/docs/usage-export)
|
||||
and for further details, the
|
||||
[API Documentation](https://cloud.google.com/compute/docs/reference/rest/beta/projects/setUsageExportBucket).
|
||||
|
||||
|
||||
## Example Usage
|
||||
|
||||
```hcl
|
||||
resource "google_project_usage_export_bucket" "export" {
|
||||
project = "foo"
|
||||
bucket_name = "bar"
|
||||
}
|
||||
```
|
||||
|
||||
## Argument Reference
|
||||
* `project`: (Required) The project to set the export bucket on.
|
||||
* `bucket_name`: (Required) The bucket to store reports in.
|
||||
* `prefix`: (Optional) A prefix for the reports, for instance, the project name.
|
||||
|
||||
## Note
|
||||
|
||||
You should specify only one of these per project. If there are two or more
|
||||
they will fight over which bucket the reports should be stored in. It is
|
||||
safe to have multiple resources with the same backing bucket.
|
@ -167,6 +167,9 @@
|
||||
<li<%= sidebar_current("docs-google-project-services") %>>
|
||||
<a href="/docs/providers/google/r/google_project_services.html">google_project_services</a>
|
||||
</li>
|
||||
<li<%= sidebar_current("docs-google-project-usage-export-bucket") %>>
|
||||
<a href="/docs/providers/google/r/usage_export_bucket.html">google_project_usage_export_bucket</a>
|
||||
</li>
|
||||
<li<%= sidebar_current("docs-google-service-account") %>>
|
||||
<a href="/docs/providers/google/r/google_service_account.html">google_service_account</a>
|
||||
</li>
|
||||
|
Loading…
Reference in New Issue
Block a user