diff --git a/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go b/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go new file mode 100644 index 000000000000..099429b5abe9 --- /dev/null +++ b/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go @@ -0,0 +1,44 @@ +package google + +import ( + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func dataSourceGoogleLoggingSink() *schema.Resource { + dsSchema := datasourceSchemaFromResourceSchema(resourceLoggingSinkSchema()) + dsSchema["id"] = &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: `Required. An identifier for the resource in format: "projects/[PROJECT_ID]/sinks/[SINK_NAME]", "organizations/[ORGANIZATION_ID]/sinks/[SINK_NAME]", "billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_NAME]", "folders/[FOLDER_ID]/sinks/[SINK_NAME]"`, + } + + return &schema.Resource{ + Read: dataSourceGoogleLoggingSinkRead, + Schema: dsSchema, + } +} + +func dataSourceGoogleLoggingSinkRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + userAgent, err := generateUserAgentString(d, config.userAgent) + if err != nil { + return err + } + + sinkId := d.Get("id").(string) + + sink, err := config.NewLoggingClient(userAgent).Sinks.Get(sinkId).Do() + if err != nil { + return handleNotFoundError(err, d, fmt.Sprintf("Logging Sink %s", d.Id())) + } + + if err := flattenResourceLoggingSink(d, sink); err != nil { + return err + } + + d.SetId(sinkId) + + return nil +} diff --git a/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go b/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go new file mode 100644 index 000000000000..3bd00be4cf2a --- /dev/null +++ b/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go @@ -0,0 +1,59 @@ +package google + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccDataSourceGoogleLoggingSink_basic(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "project_name": getTestProjectFromEnv(), + "sink_name": "tf-test-sink-ds-" + randString(t, 10), + "bucket_name": "tf-test-sink-ds-bucket-" + randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceGoogleLoggingSink_basic(context), + Check: resource.ComposeTestCheckFunc( + checkDataSourceStateMatchesResourceStateWithIgnores( + "data.google_logging_sink.basic", + "google_logging_project_sink.basic", + map[string]struct{}{ + "project": {}, + "unique_writer_identity": {}, + }, + ), + ), + }, + }, + }) +} + +func testAccDataSourceGoogleLoggingSink_basic(context map[string]interface{}) string { + return Nprintf(` +resource "google_logging_project_sink" "basic" { + name = "%{sink_name}" + project = "%{project_name}" + destination = "storage.googleapis.com/${google_storage_bucket.log-bucket.name}" + filter = "logName=\"projects/%{project_name}/logs/compute.googleapis.com%%2Factivity_log\" AND severity>=ERROR" + + unique_writer_identity = false +} + +resource "google_storage_bucket" "log-bucket" { + name = "%{bucket_name}" + location = "US" +} + +data "google_logging_sink" "basic" { + id = google_logging_project_sink.basic.id +} +`, context) +} diff --git a/mmv1/third_party/terraform/utils/provider.go.erb b/mmv1/third_party/terraform/utils/provider.go.erb index d68450f5e02b..e2aac274d241 100644 --- a/mmv1/third_party/terraform/utils/provider.go.erb +++ b/mmv1/third_party/terraform/utils/provider.go.erb @@ -253,6 +253,7 @@ func Provider() *schema.Provider { "google_folders": dataSourceGoogleFolders(), "google_folder_organization_policy": dataSourceGoogleFolderOrganizationPolicy(), "google_logging_project_cmek_settings": dataSourceGoogleLoggingProjectCmekSettings(), + "google_logging_sink": dataSourceGoogleLoggingSink(), "google_monitoring_notification_channel": dataSourceMonitoringNotificationChannel(), "google_monitoring_cluster_istio_service": dataSourceMonitoringServiceClusterIstio(), "google_monitoring_istio_canonical_service": dataSourceMonitoringIstioCanonicalService(), diff --git a/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown b/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown new file mode 100644 index 000000000000..db76682217cc --- /dev/null +++ b/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown @@ -0,0 +1,70 @@ +--- +subcategory: "Cloud (Stackdriver) Logging" +description: |- + Get information about a Google Cloud Logging Sink. +--- + +# google\_logging\_sink + +Use this data source to get a project, folder, organization or billing account logging sink details. +To get more information about Service, see: + +[API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/sinks) + +## Example Usage - Retrieve Project Logging Sink Basic + + +```hcl +data google_logging_sink "project-sink" { + id = "projects/0123456789/sinks/my-sink-name" +} +``` + +## Argument Reference + +The following arguments are supported: + + + +- - - + +* `id` - (Required) The identifier for the resource. + Examples: + + - `projects/[PROJECT_ID]/sinks/[SINK_NAME]` + - `organizations/[ORGANIZATION_ID]/sinks/[SINK_NAME]` + - `billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_NAME]` + - `folders/[FOLDER_ID]/sinks/[SINK_NAME]` + + +## Attributes Reference + +In addition to the arguments listed above, the following computed attributes are exported: + + +* `name` - The name of the logging sink. + +* `destination` - The destination of the sink (or, in other words, where logs are written to). + +* `filter` - The filter which is applied when exporting logs. Only log entries that match the filter are exported. + +* `description` - The description of this sink. + +* `disabled` - Whether this sink is disabled and it does not export any log entries. + +* `writer_identity` - The identity associated with this sink. This identity must be granted write access to the configured `destination`. + +* `bigquery_options` - Options that affect sinks exporting data to BigQuery. Structure is [documented below](#nested_bigquery_options). + +* `exclusions` - Log entries that match any of the exclusion filters are not exported. Structure is [documented below](#nested_exclusions). + +The `bigquery_options` block supports: + +* `use_partitioned_tables` - Whether [BigQuery's partition tables](https://cloud.google.com/bigquery/docs/partitioned-tables) are used. + +The `exclusions` block supports: + +* `name` - A client-assigned identifier, such as `load-balancer-exclusion`. +* `description` - A description of this exclusion. +* `filter` - An advanced logs filter that matches the log entries to be excluded. +* `disabled` - Whether this exclusion is disabled and it does not exclude any log entries.