Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
6343c2a
resource identity support for project_iam_member
BBBmau Jan 26, 2026
7759e08
add resourceIdentitySchema as part of CRUD functions for parent ident…
BBBmau Mar 25, 2026
8a164e8
add resourceIdentityParser in iam_policy for parser generation in IAM…
BBBmau Mar 25, 2026
6bf0947
move iam_identity utility methods to its own iam_identity.go file
BBBmau Mar 25, 2026
62d91fb
simplify ConvertToIdentitySchema
BBBmau Mar 27, 2026
e06c203
remove iam_identity.go
BBBmau Mar 27, 2026
9bd5f22
add IamImportTerraformData for ability to set default values from pro…
BBBmau Mar 27, 2026
4e29564
add support for multiple required fields in import path
BBBmau Mar 27, 2026
307dd14
iam resource identity test generation
BBBmau Mar 28, 2026
39088e0
add resourceIdentity test for project_iam_member
BBBmau Mar 28, 2026
dcf6ab0
resolve missing module for runtimeConfig
BBBmau Mar 30, 2026
ff19478
remove ImportStateVerify: true for resourceIdentityBlock step
BBBmau Mar 30, 2026
3f2433b
refactor: remove IamImportTerraformData requirement
BBBmau Mar 31, 2026
bff98cc
go fmt fix
BBBmau Mar 31, 2026
a586192
add resourceIdentityImport step in first TestAcc instead of adding a …
BBBmau Mar 31, 2026
6d23624
simplify parser of identity values in IAM resources
BBBmau Mar 31, 2026
7eeb733
fix tpgResource in map literal
BBBmau Mar 31, 2026
8acf7d0
move all logic in ParseIamResourceIdentity iam helper
BBBmau Apr 1, 2026
9bfbebe
simpler resourceIdentityParser logic
BBBmau Apr 1, 2026
3bad670
initial PoC implementation of list resources for IAM resources focusi…
BBBmau Mar 25, 2026
14d4f5f
refactoring for generation of iam list resources
BBBmau Mar 26, 2026
3fbd602
remove unneeded checks in list()
BBBmau Mar 26, 2026
a46df8c
refactors prior to adding google_compute_instance_list
BBBmau Mar 26, 2026
4eb4955
initial list_compute_instance_iam_member logic
BBBmau Mar 27, 2026
153b0b1
resolve issues with using list_compute_iam_member (muxinng + helpers)
BBBmau Mar 27, 2026
a3a4a78
flattenComputeInstance
BBBmau Mar 27, 2026
c0942d7
Drop compute instance list PoC from PR scope
BBBmau Apr 1, 2026
6d8d981
remove extra nil checks
BBBmau Apr 2, 2026
fa2e19d
remove unused iam_member_list_resouces.go.tmpl
BBBmau Apr 2, 2026
4f57d40
simpler list_iam_member implementation
BBBmau Apr 2, 2026
d04d595
move list_iam helper methods to list_resource_metadata.go
BBBmau Apr 2, 2026
c56de39
working generaiton of iam_members - WIP full resource flattener
BBBmau Apr 3, 2026
4c7fd56
Added filters
malhotrasagar2212 May 5, 2026
325b83d
disabled ListUrlFunc and Flattner for google_project_iam
malhotrasagar2212 May 5, 2026
6b59338
Added registry function
malhotrasagar2212 May 11, 2026
bb22cc2
Added tests
malhotrasagar2212 May 12, 2026
60876dc
fixed typo and removed duplicate file
malhotrasagar2212 May 12, 2026
b00781c
removed duplicate func and fixed issues
malhotrasagar2212 May 12, 2026
93b811b
Pulled Resource identity changes
malhotrasagar2212 May 13, 2026
c74ab06
resource identity support for project_iam_member
BBBmau Jan 26, 2026
20b9549
add resourceIdentitySchema as part of CRUD functions for parent ident…
BBBmau Mar 25, 2026
02c6b19
add resourceIdentityParser in iam_policy for parser generation in IAM…
BBBmau Mar 25, 2026
3b77d7c
move iam_identity utility methods to its own iam_identity.go file
BBBmau Mar 25, 2026
2c7537a
simplify ConvertToIdentitySchema
BBBmau Mar 27, 2026
285c8b4
remove iam_identity.go
BBBmau Mar 27, 2026
5531cf8
add IamImportTerraformData for ability to set default values from pro…
BBBmau Mar 27, 2026
ba8857f
add support for multiple required fields in import path
BBBmau Mar 27, 2026
be1a753
iam resource identity test generation
BBBmau Mar 28, 2026
130ada9
add resourceIdentity test for project_iam_member
BBBmau Mar 28, 2026
c8cbd37
resolve missing module for runtimeConfig
BBBmau Mar 30, 2026
8f5af7a
remove ImportStateVerify: true for resourceIdentityBlock step
BBBmau Mar 30, 2026
6fe6c29
refactor: remove IamImportTerraformData requirement
BBBmau Mar 31, 2026
042e82e
go fmt fix
BBBmau Mar 31, 2026
92678d8
add resourceIdentityImport step in first TestAcc instead of adding a …
BBBmau Mar 31, 2026
ff8ddf3
simplify parser of identity values in IAM resources
BBBmau Mar 31, 2026
feb2af9
fix tpgResource in map literal
BBBmau Mar 31, 2026
c67e2c5
move all logic in ParseIamResourceIdentity iam helper
BBBmau Apr 1, 2026
54a1dd8
simpler resourceIdentityParser logic
BBBmau Apr 1, 2026
89181db
update iam_policy.go.tmpl to include resource identity logic in new r…
BBBmau Apr 21, 2026
e6e6529
introduce setIamMemberIdFromResourceIdentity in iamMemberImport
BBBmau Apr 24, 2026
1c01438
Update mmv1/templates/terraform/samples/base_configs/iam_test_file.go…
BBBmau Apr 24, 2026
9a77fff
Update mmv1/templates/terraform/examples/base_configs/iam_test_file.g…
BBBmau Apr 24, 2026
8f306c8
update to be ParentResourceIdFromIdentityParserFunc
BBBmau May 12, 2026
4d484ba
missing renames
BBBmau May 12, 2026
33867f3
removed typo
malhotrasagar2212 May 13, 2026
f30e6c0
Fixed merge error and updated wiring
malhotrasagar2212 May 13, 2026
ab66fcb
changed var type
malhotrasagar2212 May 14, 2026
774617e
fixed wrong types
malhotrasagar2212 May 14, 2026
996302c
removed comments
malhotrasagar2212 May 18, 2026
8718ab8
fixed merge typos
malhotrasagar2212 May 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions mmv1/provider/terraform.go
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,6 @@ func (t *Terraform) GenerateIamPolicyLegacy(object api.Resource, templateData Te
targetFolder := t.makeFolder(outputFolder, t.FolderName(), "services", t.Product.ApiName)
targetFilePath := path.Join(targetFolder, fmt.Sprintf("iam_%s.go", t.ResourceGoFilename(object)))
templateData.GenerateIamPolicyFile(targetFilePath, object)

// Only generate test if testable examples exist.
examples := google.Reject(object.Examples, func(e *resource.Examples) bool {
return e.ExcludeTest
Expand Down Expand Up @@ -401,7 +400,6 @@ func (t *Terraform) GenerateIamPolicy(object api.Resource, templateData Template
targetFolder := t.makeFolder(outputFolder, t.FolderName(), "services", t.Product.ApiName)
targetFilePath := path.Join(targetFolder, fmt.Sprintf("iam_%s.go", t.ResourceGoFilename(object)))
templateData.GenerateIamPolicyFile(targetFilePath, object)

// Only generate test if testable example configs exist.
samples := google.Reject(object.Samples, func(s *resource.Sample) bool {
return s.ExcludeTest
Expand Down Expand Up @@ -955,19 +953,25 @@ func (t *Terraform) generateResourcesForVersion(products []*api.Product) {
}

var iamClassName string
var iamMemberListImport string
var iamMemberListFunc string
iamPolicy := object.IamPolicy
if iamPolicy != nil && !iamPolicy.Exclude {
t.IAMResourceCount += 3

if slices.Index(product.ORDER, iamPolicy.MinVersion) <= slices.Index(product.ORDER, t.TargetVersionName) {
iamClassName = fmt.Sprintf("%s.%s", service, object.ResourceName())
iamMemberListImport = service
iamMemberListFunc = fmt.Sprintf("New%sIamMemberListResource", object.ResourceName())
}
}

t.ResourcesForVersion = append(t.ResourcesForVersion, map[string]string{
"TerraformName": object.TerraformName(),
"ResourceName": resourceName,
"IamClassName": iamClassName,
"TerraformName": object.TerraformName(),
"ResourceName": resourceName,
"IamClassName": iamClassName,
"IamMemberListImport": iamMemberListImport,
"IamMemberListFunc": iamMemberListFunc,
})
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func TestAcc{{ $.ResourceName }}IamMemberGenerated(t *testing.T) {
acctest.VcrTest(t, resource.TestCase{
{{- if not $.IamPolicy.ExcludeImportTest }}
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.RequireAbove(tfversion.Version1_12_0), // resource identity min version
tfversion.SkipBelow(tfversion.Version1_12_0), // resource identity min version
},
{{- end }}
PreCheck: func() { acctest.AccTestPreCheck(t) },
Expand Down Expand Up @@ -117,6 +117,47 @@ func TestAcc{{ $.ResourceName }}IamMemberGenerated(t *testing.T) {
ImportState: true,
ImportStateVerify: true,
},
<<<<<<< HEAD
{
ResourceName: "{{ $.IamTerraformName }}_member.foo",
ImportState: true,
ImportStateKind: resource.ImportBlockWithResourceIdentity,
},
{{- end }}
},
})
}

{{- if not $.IamPolicy.ExcludeImportTest }}
// TestAcc{{ $.ResourceName }}IamMemberIdentityImportGenerated imports {{ $.IamTerraformName }}_member using
// Terraform resource identity (import block). Requires Terraform 1.12+.
func TestAcc{{ $.ResourceName }}IamMemberIdentityImportGenerated(t *testing.T) {
t.Parallel()
{{ template "IamTestSetup" $ }}

acctest.VcrTest(t, resource.TestCase{
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.SkipBelow(tfversion.Version1_12_0),
},
PreCheck: func() { acctest.AccTestPreCheck(t) },
{{- if eq $.MinVersionObj.Name "beta" }}
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
{{- else }}
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
{{- end }}
{{- if $example.ExternalProviders }}
ExternalProviders: map[string]resource.ExternalProvider{
{{- range $provider := $example.ExternalProviders }}
"{{$provider}}": {},
{{- end }}
},
{{- end }}
Steps: []resource.TestStep{
{
Config: testAcc{{ $.ResourceName }}IamMember_basicGenerated(context),
},
=======
>>>>>>> e126969d1 (add resourceIdentityImport step in first TestAcc instead of adding a new TestAcc)
{
ResourceName: "{{ $.IamTerraformName }}_member.foo",
ImportState: true,
Expand Down
2 changes: 1 addition & 1 deletion mmv1/templates/terraform/iam_policy.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -366,4 +366,4 @@ func (u *{{ $.ResourceName }}IamUpdater) GetMutexKey() string {

func (u *{{ $.ResourceName }}IamUpdater) DescribeResource() string {
return fmt.Sprintf("{{ lower $.ProductMetadata.Name }} {{ lower $.Name }} %q", u.GetResourceId())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func TestAcc{{ $.ResourceName }}IamMemberGenerated(t *testing.T) {
acctest.VcrTest(t, resource.TestCase{
{{- if not $.IamPolicy.ExcludeImportTest }}
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.RequireAbove(tfversion.Version1_12_0), // resource identity min version
tfversion.SkipBelow(tfversion.Version1_12_0), // resource identity min version
},
{{- end }}
PreCheck: func() { acctest.AccTestPreCheck(t) },
Expand Down
23 changes: 21 additions & 2 deletions mmv1/third_party/terraform/fwprovider/framework_provider.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ import (

"github.com/hashicorp/terraform-provider-google/google/fwvalidators"
"github.com/hashicorp/terraform-provider-google/google/functions"
sdkprovider "github.com/hashicorp/terraform-provider-google/google/provider"
"github.com/hashicorp/terraform-provider-google/google/fwmodels"
"github.com/hashicorp/terraform-provider-google/google/registry"
"github.com/hashicorp/terraform-provider-google/google/services/resourcemanager"
"github.com/hashicorp/terraform-provider-google/google/services/apigee"
"github.com/hashicorp/terraform-provider-google/google/services/secretmanager"
"github.com/hashicorp/terraform-provider-google/version"

transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
Expand Down Expand Up @@ -295,6 +298,19 @@ func (p *FrameworkProvider) Configure(ctx context.Context, req provider.Configur
// ephemeral resources, and list resources implemented using the plugin-framework. Their Configure functions receive this data via ConfigureRequest.ProviderData
// (list resources use ConfigureResponse.ListResourceData — see terraform-plugin-framework list.ConfigureRequest).
meta := p.Primary.Meta().(*transport_tpg.Config)
// This is how we make provider configuration info (configured clients, default project, etc) available to resources and data sources
// implemented using the plugin-framework. The resources' Configure functions receive this data in the ConfigureRequest argument.
primaryMeta := p.Primary.Meta()
if primaryMeta == nil {
resp.Diagnostics.AddError("Provider not configured", "SDK provider metadata is nil. Ensure the provider block is configured before using framework resources.")
return
}
meta, ok := primaryMeta.(*transport_tpg.Config)
if !ok {
resp.Diagnostics.AddError("Provider configuration error", "SDK provider metadata had unexpected type and could not be propagated to framework resources.")
return
}
meta := p.Primary.Meta().(*transport_tpg.Config)
resp.DataSourceData = meta
resp.ResourceData = meta
resp.EphemeralResourceData = meta
Expand Down Expand Up @@ -330,7 +346,10 @@ func (p *FrameworkProvider) EphemeralResources(_ context.Context) []func() ephem
}

func (p *FrameworkProvider) ListResources(_ context.Context) []func() list.ListResource {
return registry.FrameworkListResourceFuncs()
listResources := registry.FrameworkListResourceFuncs()
listResources = append(listResources, sdkprovider.IamMemberListResources()...)

return listResources
}

func (p *FrameworkProvider) GenerateResourceConfig(context.Context, any) (any, error) {
Expand Down
27 changes: 14 additions & 13 deletions mmv1/third_party/terraform/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,33 @@ module github.com/hashicorp/terraform-provider-google
go 1.26.0

require (
cloud.google.com/go/auth v0.20.0
bitbucket.org/creachadair/stringset v0.0.8
cloud.google.com/go/auth v0.18.2
cloud.google.com/go/auth/oauth2adapt v0.2.8
cloud.google.com/go/bigquery v1.74.0
cloud.google.com/go/bigtable v1.46.0
github.com/apparentlymart/go-cidr v1.1.0
github.com/cenkalti/backoff v2.2.1+incompatible
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
github.com/dnaeon/go-vcr v1.0.1
github.com/gammazero/workerpool v1.1.3
github.com/gammazero/workerpool v0.0.0-20181230203049-86a96b5d5d92
github.com/golang/glog v1.2.5
github.com/google/go-cmp v0.7.0
github.com/google/go-cpy v0.0.0-20211218193943-a9c933c06932
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/hashicorp/errwrap v1.1.0
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
github.com/hashicorp/errwrap v1.0.0
github.com/hashicorp/go-cleanhttp v0.5.2
github.com/hashicorp/go-cty v1.5.0
github.com/hashicorp/go-version v1.9.0
github.com/hashicorp/terraform-json v0.27.2
github.com/hashicorp/terraform-plugin-framework v1.19.0
github.com/hashicorp/terraform-plugin-framework-timeouts v0.5.0
github.com/hashicorp/terraform-plugin-framework-validators v0.19.0
github.com/hashicorp/terraform-plugin-go v0.31.0
github.com/hashicorp/terraform-plugin-log v0.10.0
github.com/hashicorp/terraform-plugin-mux v0.23.1
github.com/hashicorp/terraform-plugin-sdk/v2 v2.40.1
github.com/hashicorp/terraform-plugin-testing v1.15.0
github.com/hashicorp/terraform-plugin-framework-validators v0.9.0
github.com/hashicorp/terraform-plugin-go v0.29.0
github.com/hashicorp/terraform-plugin-log v0.9.0
github.com/hashicorp/terraform-plugin-mux v0.20.0
github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1
github.com/hashicorp/terraform-plugin-testing v1.14.1
github.com/kylelemons/godebug v1.1.0
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/hashstructure v1.1.0
Expand Down Expand Up @@ -81,12 +82,12 @@ require (
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.7.0 // indirect
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/hashicorp/hc-install v0.9.4 // indirect
github.com/hashicorp/hc-install v0.9.2 // indirect
github.com/hashicorp/hcl/v2 v2.24.0 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/terraform-exec v0.25.1 // indirect
github.com/hashicorp/terraform-exec v0.24.0 // indirect
github.com/hashicorp/terraform-registry-address v0.4.0 // indirect
github.com/hashicorp/terraform-svchost v0.1.1 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
Expand Down
Loading
Loading