Skip to content

Commit 3294d40

Browse files
Composer 3 GA: Reintroduce changes (#12399) (#20478)
[upstream:300dee3525c934f6879b6d1b965e55ec483f018e] Signed-off-by: Modular Magician <[email protected]>
1 parent efe355c commit 3294d40

20 files changed

+3358
-867
lines changed

.changelog/12399.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```release-note:new-datasource
2+
`google_composer_user_workloads_config_map` (GA)
3+
```
4+
```release-note:new-datasource
5+
`google_composer_user_workloads_secret` (GA)
6+
```
7+
```release-note:new-resource
8+
`google_composer_user_workloads_config_map` (GA)
9+
```
10+
```release-note:new-resource
11+
`google_composer_user_workloads_secret` (GA)
12+
```
13+
```release-note:enhancement
14+
composer: added multiple composer 3 related fields to `google_composer_environment` (GA)
15+
```

google/provider/provider_mmv1_resources.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"github.com/hashicorp/terraform-provider-google/google/services/cloudrunv2"
4141
"github.com/hashicorp/terraform-provider-google/google/services/cloudscheduler"
4242
"github.com/hashicorp/terraform-provider-google/google/services/cloudtasks"
43+
"github.com/hashicorp/terraform-provider-google/google/services/composer"
4344
"github.com/hashicorp/terraform-provider-google/google/services/compute"
4445
"github.com/hashicorp/terraform-provider-google/google/services/containeranalysis"
4546
"github.com/hashicorp/terraform-provider-google/google/services/containerattached"
@@ -132,7 +133,6 @@ import (
132133
"github.com/hashicorp/terraform-provider-google/google/services/workbench"
133134
"github.com/hashicorp/terraform-provider-google/google/services/workflows"
134135

135-
"github.com/hashicorp/terraform-provider-google/google/services/composer"
136136
"github.com/hashicorp/terraform-provider-google/google/services/container"
137137
"github.com/hashicorp/terraform-provider-google/google/services/containeraws"
138138
"github.com/hashicorp/terraform-provider-google/google/services/containerazure"
@@ -182,6 +182,8 @@ var handwrittenDatasources = map[string]*schema.Resource{
182182
"google_cloud_run_v2_job": cloudrunv2.DataSourceGoogleCloudRunV2Job(),
183183
"google_cloud_run_v2_service": cloudrunv2.DataSourceGoogleCloudRunV2Service(),
184184
"google_composer_environment": composer.DataSourceGoogleComposerEnvironment(),
185+
"google_composer_user_workloads_config_map": composer.DataSourceGoogleComposerUserWorkloadsConfigMap(),
186+
"google_composer_user_workloads_secret": composer.DataSourceGoogleComposerUserWorkloadsSecret(),
185187
"google_composer_image_versions": composer.DataSourceGoogleComposerImageVersions(),
186188
"google_compute_address": compute.DataSourceGoogleComputeAddress(),
187189
"google_compute_addresses": compute.DataSourceGoogleComputeAddresses(),
@@ -458,9 +460,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
458460
}
459461

460462
// Resources
461-
// Generated resources: 495
463+
// Generated resources: 496
462464
// Generated IAM resources: 261
463-
// Total generated resources: 756
465+
// Total generated resources: 757
464466
var generatedResources = map[string]*schema.Resource{
465467
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
466468
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -626,6 +628,7 @@ var generatedResources = map[string]*schema.Resource{
626628
"google_cloud_tasks_queue_iam_binding": tpgiamresource.ResourceIamBinding(cloudtasks.CloudTasksQueueIamSchema, cloudtasks.CloudTasksQueueIamUpdaterProducer, cloudtasks.CloudTasksQueueIdParseFunc),
627629
"google_cloud_tasks_queue_iam_member": tpgiamresource.ResourceIamMember(cloudtasks.CloudTasksQueueIamSchema, cloudtasks.CloudTasksQueueIamUpdaterProducer, cloudtasks.CloudTasksQueueIdParseFunc),
628630
"google_cloud_tasks_queue_iam_policy": tpgiamresource.ResourceIamPolicy(cloudtasks.CloudTasksQueueIamSchema, cloudtasks.CloudTasksQueueIamUpdaterProducer, cloudtasks.CloudTasksQueueIdParseFunc),
631+
"google_composer_user_workloads_config_map": composer.ResourceComposerUserWorkloadsConfigMap(),
629632
"google_compute_address": compute.ResourceComputeAddress(),
630633
"google_compute_autoscaler": compute.ResourceComputeAutoscaler(),
631634
"google_compute_backend_bucket": compute.ResourceComputeBackendBucket(),
@@ -1219,6 +1222,7 @@ var handwrittenResources = map[string]*schema.Resource{
12191222
"google_billing_subaccount": resourcemanager.ResourceBillingSubaccount(),
12201223
"google_cloudfunctions_function": cloudfunctions.ResourceCloudFunctionsFunction(),
12211224
"google_composer_environment": composer.ResourceComposerEnvironment(),
1225+
"google_composer_user_workloads_secret": composer.ResourceComposerUserWorkloadsSecret(),
12221226
"google_compute_attached_disk": compute.ResourceComputeAttachedDisk(),
12231227
"google_compute_instance": compute.ResourceComputeInstance(),
12241228
"google_compute_disk_async_replication": compute.ResourceComputeDiskAsyncReplication(),
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,51 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package composer
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
11+
)
12+
13+
func DataSourceGoogleComposerUserWorkloadsConfigMap() *schema.Resource {
14+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceComposerUserWorkloadsConfigMap().Schema)
15+
16+
// Set 'Required' schema elements
17+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "environment", "name")
18+
19+
// Set 'Optional' schema elements
20+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project", "region")
21+
22+
return &schema.Resource{
23+
Read: dataSourceGoogleComposerUserWorkloadsConfigMapRead,
24+
Schema: dsSchema,
25+
}
26+
}
27+
28+
func dataSourceGoogleComposerUserWorkloadsConfigMapRead(d *schema.ResourceData, meta interface{}) error {
29+
config := meta.(*transport_tpg.Config)
30+
31+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsConfigMaps/{{name}}")
32+
if err != nil {
33+
return fmt.Errorf("Error constructing id: %s", err)
34+
}
35+
d.SetId(id)
36+
37+
err = resourceComposerUserWorkloadsConfigMapRead(d, meta)
38+
if err != nil {
39+
return err
40+
}
41+
42+
if err := tpgresource.SetDataSourceLabels(d); err != nil {
43+
return err
44+
}
45+
46+
if d.Id() == "" {
47+
return fmt.Errorf("%s not found", id)
48+
}
49+
50+
return nil
51+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,59 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package composer_test
4+
5+
import (
6+
"fmt"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
"github.com/hashicorp/terraform-provider-google/google/acctest"
11+
)
12+
13+
func TestAccDataSourceComposerUserWorkloadsConfigMap_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
context := map[string]interface{}{
17+
"env_name": fmt.Sprintf("%s-%d", testComposerEnvironmentPrefix, acctest.RandInt(t)),
18+
"config_map_name": fmt.Sprintf("tf-test-composer-config-map-%d", acctest.RandInt(t)),
19+
}
20+
21+
acctest.VcrTest(t, resource.TestCase{
22+
PreCheck: func() { acctest.AccTestPreCheck(t) },
23+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
24+
Steps: []resource.TestStep{
25+
{
26+
Config: testAccDataSourceComposerUserWorkloadsConfigMap_basic(context),
27+
Check: resource.ComposeTestCheckFunc(
28+
acctest.CheckDataSourceStateMatchesResourceState("data.google_composer_user_workloads_config_map.test",
29+
"google_composer_user_workloads_config_map.test"),
30+
),
31+
},
32+
},
33+
})
34+
}
35+
36+
func testAccDataSourceComposerUserWorkloadsConfigMap_basic(context map[string]interface{}) string {
37+
return acctest.Nprintf(`
38+
resource "google_composer_environment" "test" {
39+
name = "%{env_name}"
40+
config {
41+
software_config {
42+
image_version = "composer-3-airflow-2"
43+
}
44+
}
45+
}
46+
resource "google_composer_user_workloads_config_map" "test" {
47+
environment = google_composer_environment.test.name
48+
name = "%{config_map_name}"
49+
data = {
50+
db_host: "dbhost:5432",
51+
api_host: "apihost:443",
52+
}
53+
}
54+
data "google_composer_user_workloads_config_map" "test" {
55+
name = google_composer_user_workloads_config_map.test.name
56+
environment = google_composer_environment.test.name
57+
}
58+
`, context)
59+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,62 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package composer
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
11+
)
12+
13+
func DataSourceGoogleComposerUserWorkloadsSecret() *schema.Resource {
14+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceComposerUserWorkloadsSecret().Schema)
15+
16+
// Set 'Required' schema elements
17+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "environment", "name")
18+
19+
// Set 'Optional' schema elements
20+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project", "region")
21+
22+
return &schema.Resource{
23+
Read: dataSourceGoogleComposerUserWorkloadsSecretRead,
24+
Schema: dsSchema,
25+
}
26+
}
27+
28+
func dataSourceGoogleComposerUserWorkloadsSecretRead(d *schema.ResourceData, meta interface{}) error {
29+
config := meta.(*transport_tpg.Config)
30+
31+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsSecrets/{{name}}")
32+
if err != nil {
33+
return fmt.Errorf("Error constructing id: %s", err)
34+
}
35+
d.SetId(id)
36+
37+
// retrieve "data" in advance, because Read function won't do it.
38+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
39+
if err != nil {
40+
return err
41+
}
42+
43+
res, err := config.NewComposerClient(userAgent).Projects.Locations.Environments.UserWorkloadsSecrets.Get(id).Do()
44+
if err != nil {
45+
return err
46+
}
47+
48+
if err := d.Set("data", res.Data); err != nil {
49+
return fmt.Errorf("Error setting UserWorkloadsSecret Data: %s", err)
50+
}
51+
52+
err = resourceComposerUserWorkloadsSecretRead(d, meta)
53+
if err != nil {
54+
return err
55+
}
56+
57+
if d.Id() == "" {
58+
return fmt.Errorf("%s not found", id)
59+
}
60+
61+
return nil
62+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,102 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33
package composer_test
4+
5+
import (
6+
"errors"
7+
"fmt"
8+
"strings"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-testing/terraform"
13+
"github.com/hashicorp/terraform-provider-google/google/acctest"
14+
)
15+
16+
func TestAccDataSourceComposerUserWorkloadsSecret_basic(t *testing.T) {
17+
t.Parallel()
18+
19+
context := map[string]interface{}{
20+
"env_name": fmt.Sprintf("%s-%d", testComposerEnvironmentPrefix, acctest.RandInt(t)),
21+
"secret_name": fmt.Sprintf("%s-%d", testComposerUserWorkloadsSecretPrefix, acctest.RandInt(t)),
22+
}
23+
24+
acctest.VcrTest(t, resource.TestCase{
25+
PreCheck: func() { acctest.AccTestPreCheck(t) },
26+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
27+
Steps: []resource.TestStep{
28+
{
29+
Config: testAccDataSourceComposerUserWorkloadsSecret_basic(context),
30+
Check: resource.ComposeTestCheckFunc(
31+
checkSecretDataSourceMatchesResource(),
32+
),
33+
},
34+
},
35+
})
36+
}
37+
38+
func checkSecretDataSourceMatchesResource() resource.TestCheckFunc {
39+
return func(s *terraform.State) error {
40+
ds, ok := s.RootModule().Resources["data.google_composer_user_workloads_secret.test"]
41+
if !ok {
42+
return fmt.Errorf("can't find %s in state", "data.google_composer_user_workloads_secret.test")
43+
}
44+
rs, ok := s.RootModule().Resources["google_composer_user_workloads_secret.test"]
45+
if !ok {
46+
return fmt.Errorf("can't find %s in state", "google_composer_user_workloads_secret.test")
47+
}
48+
49+
dsAttr := ds.Primary.Attributes
50+
rsAttr := rs.Primary.Attributes
51+
errMsg := ""
52+
53+
for k := range rsAttr {
54+
if k == "%" || k == "data.%" {
55+
continue
56+
}
57+
// ignore diff if it's due to secrets being masked.
58+
if strings.HasPrefix(k, "data.") {
59+
if _, ok := dsAttr[k]; !ok {
60+
errMsg += fmt.Sprintf("%s is defined in resource and not in datasource\n", k)
61+
}
62+
if dsAttr[k] == "**********" {
63+
continue
64+
}
65+
}
66+
if dsAttr[k] != rsAttr[k] {
67+
errMsg += fmt.Sprintf("%s is %s; want %s\n", k, dsAttr[k], rsAttr[k])
68+
}
69+
}
70+
71+
if errMsg != "" {
72+
return errors.New(errMsg)
73+
}
74+
75+
return nil
76+
}
77+
}
78+
79+
func testAccDataSourceComposerUserWorkloadsSecret_basic(context map[string]interface{}) string {
80+
return acctest.Nprintf(`
81+
resource "google_composer_environment" "test" {
82+
name = "%{env_name}"
83+
config {
84+
software_config {
85+
image_version = "composer-3-airflow-2"
86+
}
87+
}
88+
}
89+
resource "google_composer_user_workloads_secret" "test" {
90+
environment = google_composer_environment.test.name
91+
name = "%{secret_name}"
92+
data = {
93+
username: base64encode("username"),
94+
password: base64encode("password"),
95+
}
96+
}
97+
data "google_composer_user_workloads_secret" "test" {
98+
name = google_composer_user_workloads_secret.test.name
99+
environment = google_composer_environment.test.name
100+
}
101+
`, context)
102+
}

0 commit comments

Comments
 (0)