Skip to content

Commit b175083

Browse files
bigtable: IAM resources were not able to upgrade to v7.X.X without state upgrader (#15027)
Co-authored-by: Thomas Rodgers <[email protected]>
1 parent daa32c0 commit b175083

File tree

6 files changed

+77
-7
lines changed

6 files changed

+77
-7
lines changed

mmv1/third_party/terraform/provider/provider_mmv1_resources.go.tmpl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,9 +456,9 @@ var handwrittenIAMResources = map[string]*schema.Resource{
456456
"google_bigtable_instance_iam_binding": tpgiamresource.ResourceIamBinding(bigtable.IamBigtableInstanceSchema, bigtable.NewBigtableInstanceUpdater, bigtable.BigtableInstanceIdParseFunc),
457457
"google_bigtable_instance_iam_member": tpgiamresource.ResourceIamMember(bigtable.IamBigtableInstanceSchema, bigtable.NewBigtableInstanceUpdater, bigtable.BigtableInstanceIdParseFunc),
458458
"google_bigtable_instance_iam_policy": tpgiamresource.ResourceIamPolicy(bigtable.IamBigtableInstanceSchema, bigtable.NewBigtableInstanceUpdater, bigtable.BigtableInstanceIdParseFunc),
459-
"google_bigtable_table_iam_binding": tpgiamresource.ResourceIamBinding(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc),
460-
"google_bigtable_table_iam_member": tpgiamresource.ResourceIamMember(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc),
461-
"google_bigtable_table_iam_policy": tpgiamresource.ResourceIamPolicy(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc),
459+
"google_bigtable_table_iam_binding": tpgiamresource.ResourceIamBinding(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc, tpgiamresource.IamWithStateUpgraders(bigtable.BigtableTableIamStateUpgraders), tpgiamresource.IamWithSchemaVersion(1)),
460+
"google_bigtable_table_iam_member": tpgiamresource.ResourceIamMember(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc, tpgiamresource.IamWithStateUpgraders(bigtable.BigtableTableIamStateUpgraders), tpgiamresource.IamWithSchemaVersion(1)),
461+
"google_bigtable_table_iam_policy": tpgiamresource.ResourceIamPolicy(bigtable.IamBigtableTableSchema, bigtable.NewBigtableTableUpdater, bigtable.BigtableTableIdParseFunc, tpgiamresource.IamWithStateUpgraders(bigtable.BigtableTableIamStateUpgraders), tpgiamresource.IamWithSchemaVersion(1)),
462462
"google_bigquery_dataset_iam_binding": tpgiamresource.ResourceIamBinding(bigquery.IamBigqueryDatasetSchema, bigquery.NewBigqueryDatasetIamUpdater, bigquery.BigqueryDatasetIdParseFunc),
463463
"google_bigquery_dataset_iam_member": tpgiamresource.ResourceIamMember(bigquery.IamMemberBigqueryDatasetSchema, bigquery.NewBigqueryDatasetIamMemberUpdater, bigquery.BigqueryDatasetIdParseFunc),
464464
"google_bigquery_dataset_iam_policy": tpgiamresource.ResourceIamPolicy(bigquery.IamBigqueryDatasetSchema, bigquery.NewBigqueryDatasetIamUpdater, bigquery.BigqueryDatasetIdParseFunc),
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package bigtable
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
var BigtableTableIamStateUpgraders = []schema.StateUpgrader{
11+
{
12+
Type: resourceBigtableTableIAMV0().CoreConfigSchema().ImpliedType(),
13+
Upgrade: ResourceBigtableTableIAMUpgradeV0,
14+
Version: 0,
15+
},
16+
}
17+
18+
func resourceBigtableTableIAMV0() *schema.Resource {
19+
return &schema.Resource{
20+
Schema: map[string]*schema.Schema{
21+
"instance": {
22+
Type: schema.TypeString,
23+
Required: true,
24+
ForceNew: true,
25+
},
26+
"project": {
27+
Type: schema.TypeString,
28+
Optional: true,
29+
Computed: true,
30+
ForceNew: true,
31+
},
32+
"table": {
33+
Type: schema.TypeString,
34+
Required: true,
35+
ForceNew: true,
36+
},
37+
},
38+
UseJSONNumber: true,
39+
}
40+
}
41+
42+
func ResourceBigtableTableIAMUpgradeV0(_ context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) {
43+
log.Printf("[DEBUG] Attributes before migration: %#v", rawState)
44+
45+
if _, ok := rawState["instance"]; ok {
46+
rawState["instance_name"] = rawState["instance"]
47+
}
48+
49+
log.Printf("[DEBUG] Attributes after migration: %#v", rawState)
50+
return rawState, nil
51+
}

mmv1/third_party/terraform/tpgiamresource/iam.go.tmpl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,8 @@ func CompareAuditConfigs(a, b []*cloudresourcemanager.AuditConfig) bool {
467467
type IamSettings struct {
468468
DeprecationMessage string
469469
EnableBatching bool
470+
StateUpgraders []schema.StateUpgrader
471+
SchemaVersion int
470472
}
471473

472474
func NewIamSettings(options ...func(*IamSettings)) *IamSettings {
@@ -495,6 +497,18 @@ func IamWithBatching (s *IamSettings) {
495497
s.EnableBatching = true
496498
}
497499

500+
func IamWithStateUpgraders(upgraders []schema.StateUpgrader) func(*IamSettings) {
501+
return func(s *IamSettings) {
502+
s.StateUpgraders = upgraders
503+
}
504+
}
505+
506+
func IamWithSchemaVersion(version int) func(*IamSettings) {
507+
return func(s *IamSettings) {
508+
s.SchemaVersion = version
509+
}
510+
}
511+
498512
// Util to deref and print auditConfigs
499513
func DebugPrintAuditConfigs(bs []*cloudresourcemanager.AuditConfig) string {
500514
v, _ := json.MarshalIndent(bs, "", "\t")

mmv1/third_party/terraform/tpgiamresource/resource_iam_binding.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ func ResourceIamBinding(parentSpecificSchema map[string]*schema.Schema, newUpdat
7575
// if non-empty, this will be used to send a deprecation message when the
7676
// resource is used.
7777
DeprecationMessage: settings.DeprecationMessage,
78-
79-
Schema: tpgresource.MergeSchemas(iamBindingSchema, parentSpecificSchema),
78+
Schema: tpgresource.MergeSchemas(iamBindingSchema, parentSpecificSchema),
79+
SchemaVersion: settings.SchemaVersion,
80+
StateUpgraders: settings.StateUpgraders,
8081
Importer: &schema.ResourceImporter{
8182
State: iamBindingImport(newUpdaterFunc, resourceIdParser),
8283
},

mmv1/third_party/terraform/tpgiamresource/resource_iam_member.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,9 @@ func ResourceIamMember(parentSpecificSchema map[string]*schema.Schema, newUpdate
181181
// resource is used.
182182
DeprecationMessage: settings.DeprecationMessage,
183183

184-
Schema: tpgresource.MergeSchemas(IamMemberBaseSchema, parentSpecificSchema),
184+
Schema: tpgresource.MergeSchemas(IamMemberBaseSchema, parentSpecificSchema),
185+
SchemaVersion: settings.SchemaVersion,
186+
StateUpgraders: settings.StateUpgraders,
185187
Importer: &schema.ResourceImporter{
186188
State: iamMemberImport(newUpdaterFunc, resourceIdParser),
187189
},

mmv1/third_party/terraform/tpgiamresource/resource_iam_policy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ func ResourceIamPolicy(parentSpecificSchema map[string]*schema.Schema, newUpdate
5353
// resource is used.
5454
DeprecationMessage: settings.DeprecationMessage,
5555

56-
Schema: tpgresource.MergeSchemas(IamPolicyBaseSchema, parentSpecificSchema),
56+
Schema: tpgresource.MergeSchemas(IamPolicyBaseSchema, parentSpecificSchema),
57+
SchemaVersion: settings.SchemaVersion,
58+
StateUpgraders: settings.StateUpgraders,
5759
Importer: &schema.ResourceImporter{
5860
State: iamPolicyImport(resourceIdParser),
5961
},

0 commit comments

Comments
 (0)