diff --git a/cmd/tools/filtersb/cli.go b/cmd/tools/filtersb/cli.go deleted file mode 100644 index 5e63bbb..0000000 --- a/cmd/tools/filtersb/cli.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2023 Volvo Car Corporation -// SPDX-License-Identifier: Apache-2.0 - -package main - -import ( - "context" - "encoding/json" - "flag" - "fmt" - "log/slog" - "os" - "path/filepath" - "strings" - - "github.com/golingon/lingon/pkg/terragen" -) - -func main() { - var ( - outDir string - providerStr string - includeResources filterMap = map[string]struct{}{} - includeDataSources filterMap = map[string]struct{}{} - ) - - tfOutDir := filepath.Join(".lingon", "testdata") - flag.StringVar(&outDir, "out", "", "directory to generate Go files in") - flag.Var(&includeResources, "include-resources", "resources to include") - flag.Var( - &includeDataSources, - "include-data-sources", - "data sources to include", - ) - flag.StringVar( - &providerStr, - "provider", - "", - "provider to generate Go files for, e.g. aws=hashicorp/aws:4.49.0", - ) - flag.Parse() - - if outDir == "" { - slog.Error("-out flag required") - os.Exit(1) - } - provider, err := terragen.ParseProvider(providerStr) - if err != nil { - slog.Error("invalid provider", "err", err) - os.Exit(1) - } - - ctx := context.Background() - slog.Info( - "Generating Terraform provider schema", - slog.String("provider", providerStr), - slog.String("out", tfOutDir), - ) - ps, err := terragen.GenerateProviderSchema( - ctx, provider, - ) - if err != nil { - slog.Error("generating provider schema", "err", err) - os.Exit(1) - } - - slog.Info( - "Filtering provider schema", - slog.Any("resources", includeResources), - slog.Any("data_sources", includeDataSources), - ) - for _, schema := range ps.Schemas { - for rName := range schema.ResourceSchemas { - if _, ok := includeResources[rName]; !ok { - delete(schema.ResourceSchemas, rName) - } - } - for dName := range schema.DataSourceSchemas { - if _, ok := includeDataSources[dName]; !ok { - delete(schema.DataSourceSchemas, dName) - } - } - } - - outFile := filepath.Join( - outDir, fmt.Sprintf( - "%s_%s.json", provider.Name, - provider.Version, - ), - ) - f, err := os.OpenFile(outFile, os.O_RDWR|os.O_CREATE, 0o755) - if err != nil { - slog.Error("opening out file", err, slog.String("out", outFile)) - } - if err := json.NewEncoder(f).Encode(ps); err != nil { - slog.Error("encoding provider schema", err) - os.Exit(1) - } -} - -var _ flag.Value = (*providerFlag)(nil) - -type providerFlag struct { - LocalName string - Provider terragen.Provider -} - -func (p *providerFlag) String() string { - return fmt.Sprintf( - "%s:%s=%s", - p.LocalName, - p.Provider.Source, - p.Provider.Version, - ) -} - -func (p *providerFlag) Set(value string) error { - pMap := strings.SplitN(value, "=", 2) - if len(pMap) == 1 { - return fmt.Errorf("provider format incorrect: missing `=`") - } - localName := pMap[0] - sourceVersion := strings.SplitN(pMap[1], ":", 2) - if len(sourceVersion) == 1 { - return fmt.Errorf( - "provider format incorrect: missing `:` in `source:version`", - ) - } - source := sourceVersion[0] - version := sourceVersion[1] - - p.LocalName = localName - p.Provider.Source = source - p.Provider.Version = version - return nil -} - -var _ flag.Value = (*filterMap)(nil) - -type filterMap map[string]struct{} - -func (f *filterMap) String() string { - s := make([]string, len(*f)) - for name := range *f { - s = append(s, name) - } - return strings.Join(s, ", ") -} - -func (f *filterMap) Set(value string) error { - (*f)[value] = struct{}{} - return nil -} diff --git a/pkg/internal/terrajen/generator.go b/pkg/internal/terrajen/generator.go index f160b8c..40aa9b2 100644 --- a/pkg/internal/terrajen/generator.go +++ b/pkg/internal/terrajen/generator.go @@ -23,8 +23,7 @@ type ProviderGenerator struct { // E.g. github.com/golingon/lingon/gen/aws GoProviderPkgPath string // GeneratedPackageLocation is the directory on the filesystem where the - // generated - // Go files will be created. + // generated Go files will be created. // The GoProviderPkgPath path must match the location of the generated files // so that they can be imported correctly. // E.g. if we are in a Go module called "my-module" and we generate the diff --git a/pkg/internal/terrajen/subpkg.go b/pkg/internal/terrajen/subpkg.go index 3d8a156..c1a3fc9 100644 --- a/pkg/internal/terrajen/subpkg.go +++ b/pkg/internal/terrajen/subpkg.go @@ -10,6 +10,13 @@ import ( "github.com/veggiemonk/strcase" ) +// SubPkgFile generates a Go file for the given schema. +// The schema should represent a sub-package or be the sub-types of a top-level +// provider/resource/data source. +// +// For example, the AWS provider has a top-level provider config, with many +// nested subtypes. +// SubPkgFile would generate a file containing all the subtypes. func SubPkgFile(s *Schema) (*jen.File, bool) { // Skip sub pkg if there are no blocks to render if s.graph.isEmpty() { diff --git a/pkg/terragen/gowrapper.go b/pkg/terragen/gowrapper.go index 3fdb70b..7e6e774 100644 --- a/pkg/terragen/gowrapper.go +++ b/pkg/terragen/gowrapper.go @@ -4,6 +4,7 @@ package terragen import ( + "bytes" "errors" "fmt" "io" @@ -13,6 +14,7 @@ import ( "strings" "github.com/golingon/lingon/pkg/internal/terrajen" + "golang.org/x/tools/txtar" tfjson "github.com/hashicorp/terraform-json" ) @@ -44,7 +46,7 @@ type GenerateGoArgs struct { // providers and their schemas. func GenerateGoCode( args GenerateGoArgs, - schemas *tfjson.ProviderSchemas, + providerSchema *tfjson.ProviderSchema, ) error { if args.OutDir == "" { return errors.New("outDir is empty") @@ -59,7 +61,7 @@ func GenerateGoCode( slog.String("source", args.ProviderSource), slog.String("version", args.ProviderVersion), ) - tfArgs := terrajen.ProviderGenerator{ + providerGenerator := terrajen.ProviderGenerator{ GoProviderPkgPath: args.PkgPath, GeneratedPackageLocation: args.OutDir, ProviderName: args.ProviderName, @@ -67,146 +69,133 @@ func GenerateGoCode( ProviderVersion: args.ProviderVersion, } - pSchema, ok := schemas.Schemas[args.ProviderSource] - if !ok { - // Try adding registry.terraform.io/ prefix if not already added - if !strings.HasPrefix(args.ProviderSource, "registry.terraform.io/") { - pSchema, ok = schemas.Schemas[fmt.Sprintf( - "registry.terraform.io/%s", - args.ProviderSource, - )] - } - // If still not ok, indicate an error - if !ok { - return fmt.Errorf( - "provider source: %s: %w", - args.ProviderSource, - ErrProviderSchemaNotFound, - ) - } - } - err := generateProvider(args, tfArgs, pSchema) + arch, err := generateProviderTxtar(providerGenerator, providerSchema) if err != nil { return err } + if err := createDirIfNotEmpty(args.OutDir, args.Force); err != nil { + return fmt.Errorf( + "creating providers pkg directory %q: %w", + args.OutDir, + err, + ) + } + // Write the txtar archive to the filesystem. + if err := writeTxtarArchive(arch); err != nil { + return fmt.Errorf("writing txtar archive: %w", err) + } return nil } -func generateProvider( - genArgs GenerateGoArgs, - provider terrajen.ProviderGenerator, - providerSchema *tfjson.ProviderSchema, -) error { - if err := createDirIfNotEmpty( - provider.GeneratedPackageLocation, - genArgs.Force, - ); err != nil { - return fmt.Errorf( - "creating providers pkg directory %s: %w", - provider.GeneratedPackageLocation, - err, - ) +func writeTxtarArchive(ar *txtar.Archive) error { + for _, file := range ar.Files { + dir := filepath.Dir(file.Name) + if err := os.MkdirAll(dir, os.ModePerm); err != nil { + return fmt.Errorf("creating directory %q: %w", dir, err) + } + if err := os.WriteFile(file.Name, file.Data, 0o644); err != nil { + return fmt.Errorf("writing file %q: %w", file.Name, err) + } } + return nil +} + +func generateProviderTxtar( + provider terrajen.ProviderGenerator, + schema *tfjson.ProviderSchema, +) (*txtar.Archive, error) { + ar := txtar.Archive{} + // // Generate Provider // - ps := provider.SchemaProvider(providerSchema.ConfigSchema.Block) - f := terrajen.ProviderFile(ps) - if err := f.Save(ps.FilePath); err != nil { + providerSchema := provider.SchemaProvider(schema.ConfigSchema.Block) + providerFile := terrajen.ProviderFile(providerSchema) + providerBuf := bytes.Buffer{} + if err := providerFile.Render(&providerBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf("saving provider file %s: %w", ps.FilePath, err) + return nil, fmt.Errorf("rendering provider file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: providerSchema.FilePath, + Data: providerBuf.Bytes(), + }) - subPkgFile, ok := terrajen.SubPkgFile(ps) + subPkgFile, ok := terrajen.SubPkgFile(providerSchema) if ok { - subPkgDir := filepath.Dir(ps.SubPkgPath()) - if err := os.MkdirAll(subPkgDir, os.ModePerm); err != nil { - return fmt.Errorf( - "creating sub package directory %s: %w", - subPkgDir, - err, - ) - } - if err := subPkgFile.Save(ps.SubPkgPath()); err != nil { + subPkgBuf := bytes.Buffer{} + if err := subPkgFile.Render(&subPkgBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf( - "saving sub package file %s: %w", - ps.SubPkgPath(), - err, - ) + return nil, fmt.Errorf("rendering sub package file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: providerSchema.SubPkgPath(), + Data: subPkgBuf.Bytes(), + }) } // // Generate Resources // - for name, resource := range providerSchema.ResourceSchemas { + for name, resource := range schema.ResourceSchemas { rs := provider.SchemaResource(name, resource.Block) rsf := terrajen.ResourceFile(rs) - if err := rsf.Save(rs.FilePath); err != nil { + resourceBuf := bytes.Buffer{} + if err := rsf.Render(&resourceBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf( - "saving resource file %s: %w", - rs.FilePath, - err, - ) + return nil, fmt.Errorf("rendering resource file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: rs.FilePath, + Data: resourceBuf.Bytes(), + }) rsSubPkgFile, ok := terrajen.SubPkgFile(rs) if !ok { continue } - subPkgDir := filepath.Dir(rs.SubPkgPath()) - if err := os.MkdirAll(subPkgDir, os.ModePerm); err != nil { - return fmt.Errorf( - "creating sub package directory %s: %w", - subPkgDir, - err, - ) - } - if err := rsSubPkgFile.Save(rs.SubPkgPath()); err != nil { + rsSubPkgBuf := bytes.Buffer{} + if err := rsSubPkgFile.Render(&rsSubPkgBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf( - "saving sub package file %s: %w", - rs.SubPkgPath(), - err, - ) + return nil, fmt.Errorf("rendering sub package file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: rs.SubPkgPath(), + Data: rsSubPkgBuf.Bytes(), + }) } // // Generate Data blocks // - for name, data := range providerSchema.DataSourceSchemas { + for name, data := range schema.DataSourceSchemas { ds := provider.SchemaData(name, data.Block) df := terrajen.DataSourceFile(ds) - if err := df.Save(ds.FilePath); err != nil { + dataBuf := bytes.Buffer{} + if err := df.Render(&dataBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf("saving data file %s: %w", ds.FilePath, err) + return nil, fmt.Errorf("rendering data file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: ds.FilePath, + Data: dataBuf.Bytes(), + }) dataSubPkgFile, ok := terrajen.SubPkgFile(ds) if !ok { continue } - subPkgDir := filepath.Dir(ds.SubPkgPath()) - if err := os.MkdirAll(subPkgDir, os.ModePerm); err != nil { - return fmt.Errorf( - "creating sub package directory %s: %w", - subPkgDir, - err, - ) - } - if err := dataSubPkgFile.Save(ds.SubPkgPath()); err != nil { + dataSubPkgBuf := bytes.Buffer{} + if err := dataSubPkgFile.Render(&dataSubPkgBuf); err != nil { terrajen.JenDebug(err) - return fmt.Errorf( - "saving sub package file %s: %w", - ds.SubPkgPath(), - err, - ) + return nil, fmt.Errorf("rendering sub package file: %w", err) } + ar.Files = append(ar.Files, txtar.File{ + Name: ds.SubPkgPath(), + Data: dataSubPkgBuf.Bytes(), + }) } - return nil + return &ar, nil } func createDirIfNotEmpty(path string, force bool) error { diff --git a/pkg/terragen/gowrapper_test.go b/pkg/terragen/gowrapper_test.go index 15131f0..43ed1dd 100644 --- a/pkg/terragen/gowrapper_test.go +++ b/pkg/terragen/gowrapper_test.go @@ -4,11 +4,157 @@ package terragen import ( + "context" + "encoding/json" + "flag" + "os" + "path/filepath" + "slices" "testing" + "github.com/golingon/lingon/pkg/internal/terrajen" tu "github.com/golingon/lingon/pkg/testutil" + tfjson "github.com/hashicorp/terraform-json" + "golang.org/x/tools/txtar" ) +var update = flag.Bool("update", false, "update golden files") + +type ProviderTestCase struct { + Name string + + ProviderName string + ProviderSource string + ProviderVersion string + + FilterResources []string + FilterDataSources []string +} + +// TestGenerateProvider tests the generation of Terraform provider schemas into +// Go code. +// +// When using the -update flag, it updates the golden files which are used as a +// baseline for detecting drift in the generated code. +// It is quite challenging to verify the correctness of the generated code, +// and it is out of scope of this pkg and test. +func TestGenerateProvider(t *testing.T) { + goldenTestDir := filepath.Join("testdata", "golden") + + tests := []ProviderTestCase{ + { + Name: "aws_emr_cluster", + ProviderName: "aws", + ProviderSource: "hashicorp/aws", + ProviderVersion: "5.44.0", + + FilterResources: []string{"aws_emr_cluster"}, + FilterDataSources: []string{"aws_emr_cluster"}, + }, + { + Name: "aws_iam_role", + ProviderName: "aws", + ProviderSource: "hashicorp/aws", + ProviderVersion: "5.44.0", + + FilterResources: []string{"aws_iam_role"}, + FilterDataSources: []string{"aws_iam_role"}, + }, + } + if *update { + t.Log("running update") + // Generate "golden" files. Start be deleting the directory. + err := os.RemoveAll(goldenTestDir) + tu.AssertNoError(t, err, "removing golden test dir") + + for _, test := range tests { + ctx := context.Background() + ps, err := GenerateProviderSchema( + ctx, Provider{ + Name: test.ProviderName, + Source: test.ProviderSource, + Version: test.ProviderVersion, + }, + ) + tu.AssertNoError(t, err, "generating provider schema:", test.Name) + + // Filter resources and data sources. + for rName := range ps.ResourceSchemas { + if !slices.Contains(test.FilterResources, rName) { + delete(ps.ResourceSchemas, rName) + } + } + for dName := range ps.DataSourceSchemas { + if !slices.Contains(test.FilterDataSources, dName) { + delete(ps.DataSourceSchemas, dName) + } + } + + providerGenerator := terrajen.ProviderGenerator{ + GoProviderPkgPath: "test/out", + GeneratedPackageLocation: "out", + ProviderName: test.ProviderName, + ProviderSource: test.ProviderSource, + ProviderVersion: test.ProviderVersion, + } + + ar, err := generateProviderTxtar(providerGenerator, ps) + tu.AssertNoError(t, err, "generating provider txtar") + + testDir := filepath.Join(goldenTestDir, test.Name) + err = os.MkdirAll(testDir, os.ModePerm) + tu.AssertNoError(t, err, "creating golden test dir: ", testDir) + + schemaPath := filepath.Join(testDir, "schema.json") + schemaFile, err := os.Create(schemaPath) + tu.AssertNoError(t, err, "creating schema file") + err = json.NewEncoder(schemaFile).Encode(ps) + tu.AssertNoError(t, err, "writing schema file") + + txtarPath := filepath.Join(testDir, "provider.txtar") + err = os.WriteFile(txtarPath, txtar.Format(ar), 0o644) + tu.AssertNoError(t, err, "writing txtar file") + } + + t.SkipNow() + } + + for _, test := range tests { + t.Run(test.Name, func(t *testing.T) { + schemaPath := filepath.Join(goldenTestDir, test.Name, "schema.json") + schemaFile, err := os.Open(schemaPath) + tu.AssertNoError(t, err, "opening schema file") + var ps tfjson.ProviderSchema + err = json.NewDecoder(schemaFile).Decode(&ps) + tu.AssertNoError(t, err, "decoding schema file") + + txtarPath := filepath.Join( + goldenTestDir, + test.Name, + "provider.txtar", + ) + txtarContents, err := os.ReadFile(txtarPath) + tu.AssertNoError(t, err, "opening txtar file") + expectedAr := txtar.Parse(txtarContents) + + providerGenerator := terrajen.ProviderGenerator{ + GoProviderPkgPath: "test/out", + GeneratedPackageLocation: "out", + ProviderName: "aws", + ProviderSource: "hashicorp/aws", + ProviderVersion: "5.44.0", + } + + actualAr, err := generateProviderTxtar(providerGenerator, &ps) + tu.AssertNoError(t, err, "generating provider txtar") + + if diff := tu.DiffTxtar(actualAr, expectedAr); diff != "" { + t.Fatal(tu.Callers(), diff) + } + }) + } +} + func TestParseProvider(t *testing.T) { type test struct { providerStr string diff --git a/pkg/terragen/testdata/.gitignore b/pkg/terragen/testdata/.gitignore deleted file mode 100644 index c585e19..0000000 --- a/pkg/terragen/testdata/.gitignore +++ /dev/null @@ -1 +0,0 @@ -out \ No newline at end of file diff --git a/pkg/terragen/testdata/aws_emr_cluster.txtar b/pkg/terragen/testdata/aws_emr_cluster.txtar deleted file mode 100644 index a76feac..0000000 --- a/pkg/terragen/testdata/aws_emr_cluster.txtar +++ /dev/null @@ -1,134 +0,0 @@ -{ - "provider": { - "name": "aws", - "source": "hashicorp/aws", - "version": "4.49.0" - } -} --- schema.json -- -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/hashicorp/aws":{"provider":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"allowed_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"custom_ca_bundle":{"type":"string","description":"File containing custom root and intermediate certificates. Can also be configured using the `AWS_CA_BUNDLE` environment variable. (Setting `ca_bundle` in the shared config file is not supported.)","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint":{"type":"string","description":"Address of the EC2 metadata service endpoint to use. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT` environment variable.","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint_mode":{"type":"string","description":"Protocol to use with EC2 metadata service endpoint.Valid values are `IPv4` and `IPv6`. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE` environment variable.","description_kind":"plain","optional":true},"forbidden_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"http_proxy":{"type":"string","description":"The address of an HTTP proxy to use when accessing the AWS API. Can also be configured using the `HTTP_PROXY` or `HTTPS_PROXY` environment variables.","description_kind":"plain","optional":true},"insecure":{"type":"bool","description":"Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`","description_kind":"plain","optional":true},"max_retries":{"type":"number","description":"The maximum number of times an AWS API request is\nbeing executed. If the API request still fails, an error is\nthrown.","description_kind":"plain","optional":true},"profile":{"type":"string","description":"The profile for API operations. If not set, the default profile\ncreated with `aws configure` will be used.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where AWS operations will take place. Examples\nare us-east-1, us-west-2, etc.","description_kind":"plain","optional":true},"s3_force_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","deprecated":true,"optional":true},"s3_use_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The secret key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"shared_config_files":{"type":["list","string"],"description":"List of paths to shared config files. If not set, defaults to [~/.aws/config].","description_kind":"plain","optional":true},"shared_credentials_file":{"type":"string","description":"The path to the shared credentials file. If not set, defaults to ~/.aws/credentials.","description_kind":"plain","deprecated":true,"optional":true},"shared_credentials_files":{"type":["list","string"],"description":"List of paths to shared credentials files. If not set, defaults to [~/.aws/credentials].","description_kind":"plain","optional":true},"skip_credentials_validation":{"type":"bool","description":"Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available/implemented.","description_kind":"plain","optional":true},"skip_get_ec2_platforms":{"type":"bool","description":"Skip getting the supported EC2 platforms. Used by users that don't have ec2:DescribeAccountAttributes permissions.","description_kind":"plain","deprecated":true,"optional":true},"skip_metadata_api_check":{"type":"string","description":"Skip the AWS Metadata API check. Used for AWS API implementations that do not have a metadata api endpoint.","description_kind":"plain","optional":true},"skip_region_validation":{"type":"bool","description":"Skip static validation of region name. Used by users of alternative AWS-like APIs or users w/ access to regions that are not public (yet).","description_kind":"plain","optional":true},"skip_requesting_account_id":{"type":"bool","description":"Skip requesting the account ID. Used for AWS API implementations that do not have IAM/STS API and/or metadata API.","description_kind":"plain","optional":true},"sts_region":{"type":"string","description":"The region where AWS STS operations will take place. Examples\nare us-east-1 and us-west-2.","description_kind":"plain","optional":true},"token":{"type":"string","description":"session token. A session token is only required if you are\nusing temporary security credentials.","description_kind":"plain","optional":true},"use_dualstack_endpoint":{"type":"bool","description":"Resolve an endpoint with DualStack capability","description_kind":"plain","optional":true},"use_fips_endpoint":{"type":"bool","description":"Resolve an endpoint with FIPS capability","description_kind":"plain","optional":true}},"block_types":{"assume_role":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"duration_seconds":{"type":"number","description":"The duration, in seconds, of the role session.","description_kind":"plain","deprecated":true,"optional":true},"external_id":{"type":"string","description":"A unique identifier that might be required when you assume a role in another account.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"source_identity":{"type":"string","description":"Source identity specified by the principal assuming the role.","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description":"Assume role session tags.","description_kind":"plain","optional":true},"transitive_tag_keys":{"type":["set","string"],"description":"Assume role session tag keys to pass to any subsequent sessions.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"assume_role_with_web_identity":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"web_identity_token":{"type":"string","description_kind":"plain","optional":true},"web_identity_token_file":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"default_tags":{"nesting_mode":"list","block":{"attributes":{"tags":{"type":["map","string"],"description":"Resource tags to default across all resources","description_kind":"plain","optional":true}},"description":"Configuration block with settings to default resource tags across all resources.","description_kind":"plain"}},"endpoints":{"nesting_mode":"set","block":{"attributes":{"accessanalyzer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"account":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acmpca":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"alexaforbusiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amg":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplify":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplifybackend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplifyuibuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewaymanagementapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewayv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfigdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrationsservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationcostprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationdiscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationdiscoveryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationinsights":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appmesh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apprunner":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appstream":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appsync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"athena":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"auditmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"augmentedairuntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscalingplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backup":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backupgateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"batch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"beanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"billingconductor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"braket":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"budgets":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ce":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmeetings":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmessaging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloud9":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrol":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrolapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"clouddirectory":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfront":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsmv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearchdomain":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudtrail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlogs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchrum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeartifact":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codebuild":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecommit":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codedeploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeguruprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codegurureviewer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codepipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestar":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarconnections":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarnotifications":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentityprovider":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitosync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehendmedical":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"computeoptimizer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"config":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"configservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectcontactlens":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectparticipant":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectwisdomservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"controltower":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costandusagereportservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costexplorer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cur":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"customerprofiles":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigration":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigrationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databrew":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dataexchange":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datapipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datasync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dax":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"deploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"detective":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devicefarm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devopsguru":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directoryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"discovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dlm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"drs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodbstreams":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ebs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2instanceconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecrpublic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"efs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticache":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticbeanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticinference":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancingv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elastictranscoder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elbv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrcontainers":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"es":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eventbridge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"events":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"evidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspacedata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"firehose":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecast":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastquery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastqueryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"frauddetector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fsx":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gamelift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glacier":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"globalaccelerator":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glue":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gluedatabrew":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"grafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrass":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrassv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"groundstation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"guardduty":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"health":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"healthlake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"honeycode":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"identitystore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"imagebuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspectorv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickdevices":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickdevicesservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickprojects":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdataplane":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdeviceadvisor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ioteventsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotfleethub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotjobsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotjobsdataplane":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotsecuretunneling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotsitewise":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotthingsgraph":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iottwinmaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotwireless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivschat":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafka":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafkaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kendra":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"keyspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalyticsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideoarchivedmedia":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideomedia":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideosignaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideosignalingchannels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lakeformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lambda":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lex":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuilding":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuildingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntimeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntimev2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2models":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2runtime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"licensemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lightsail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"location":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"locationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"logs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutequipment":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutforvision":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutmetrics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutvision":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"machinelearning":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedblockchain":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedgrafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacecommerceanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplaceentitlement":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplaceentitlementservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacemetering":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconvert":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"medialive":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackage":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackagevod":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastoredata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediatailor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"memorydb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"meteringmarketplace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mgh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mgn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubrefactorspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubstrategy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubstrategyrecommendations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mobile":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mq":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"msk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mturk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mwaa":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"neptune":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkfirewall":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"nimble":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"nimblestudio":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworkscm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"organizations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"panorama":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalize":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalizeevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalizeruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpoint":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpointemail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpointsmsvoice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pipes":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"polly":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pricing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheus":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheusservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"proton":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldbsession":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"quicksight":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ram":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rbin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rdsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rdsdataservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"recyclebin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdataapiservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rekognition":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resiliencehub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourceexplorer2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroups":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstagging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstaggingapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"robomaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rolesanywhere":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53domains":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycluster":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycontrolconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoveryreadiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53resolver":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3api":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3control":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakera2iruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakeredge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakeredgemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakerfeaturestoreruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakerruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"savingsplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"scheduler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"schemas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"secretsmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securityhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapplicationrepository":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapprepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessrepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalogappregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicediscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicequotas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ses":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sesv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sfn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"shield":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"signer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"simpledb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"snowball":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"snowdevicemanagement":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sns":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sqs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmcontacts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmincidents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sso":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssoadmin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssooidc":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"stepfunctions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"storagegateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"support":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"swf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"synthetics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"textract":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamquery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamwrite":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribe":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribestreaming":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribestreamingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transfer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"translate":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"voiceid":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"waf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafregional":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wellarchitected":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wisdom":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workdocs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"worklink":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workmail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workmailmessageflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspacesweb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"xray":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ignore_tags":{"nesting_mode":"list","block":{"attributes":{"key_prefixes":{"type":["set","string"],"description":"Resource tag key prefixes to ignore across all resources.","description_kind":"plain","optional":true},"keys":{"type":["set","string"],"description":"Resource tag keys to ignore across all resources.","description_kind":"plain","optional":true}},"description":"Configuration block with settings to ignore resource tags across all resources.","description_kind":"plain"}}},"description_kind":"plain"}},"resource_schemas":{"aws_emr_cluster":{"version":0,"block":{"attributes":{"additional_info":{"type":"string","description_kind":"plain","optional":true},"applications":{"type":["set","string"],"description_kind":"plain","optional":true},"arn":{"type":"string","description_kind":"plain","computed":true},"autoscaling_role":{"type":"string","description_kind":"plain","optional":true},"cluster_state":{"type":"string","description_kind":"plain","computed":true},"configurations":{"type":"string","description_kind":"plain","optional":true},"configurations_json":{"type":"string","description_kind":"plain","optional":true},"custom_ami_id":{"type":"string","description_kind":"plain","optional":true},"ebs_root_volume_size":{"type":"number","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keep_job_flow_alive_when_no_steps":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"list_steps_states":{"type":["set","string"],"description_kind":"plain","optional":true},"log_encryption_kms_key_id":{"type":"string","description_kind":"plain","optional":true},"log_uri":{"type":"string","description_kind":"plain","optional":true},"master_public_dns":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"release_label":{"type":"string","description_kind":"plain","required":true},"scale_down_behavior":{"type":"string","description_kind":"plain","optional":true,"computed":true},"security_configuration":{"type":"string","description_kind":"plain","optional":true},"service_role":{"type":"string","description_kind":"plain","required":true},"step":{"type":["list",["object",{"action_on_failure":"string","hadoop_jar_step":["list",["object",{"args":["list","string"],"jar":"string","main_class":"string","properties":["map","string"]}]],"name":"string"}]],"description_kind":"plain","optional":true,"computed":true},"step_concurrency_level":{"type":"number","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true},"tags_all":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"termination_protection":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"visible_to_all_users":{"type":"bool","description_kind":"plain","optional":true}},"block_types":{"auto_termination_policy":{"nesting_mode":"list","block":{"attributes":{"idle_timeout":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"bootstrap_action":{"nesting_mode":"list","block":{"attributes":{"args":{"type":["list","string"],"description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","required":true},"path":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"core_instance_fleet":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","optional":true},"provisioned_on_demand_capacity":{"type":"number","description_kind":"plain","computed":true},"provisioned_spot_capacity":{"type":"number","description_kind":"plain","computed":true},"target_on_demand_capacity":{"type":"number","description_kind":"plain","optional":true},"target_spot_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"instance_type_configs":{"nesting_mode":"set","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"bid_price_as_percentage_of_on_demand_price":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"weighted_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"configurations":{"nesting_mode":"set","block":{"attributes":{"classification":{"type":"string","description_kind":"plain","optional":true},"properties":{"type":["map","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}},"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"launch_specifications":{"nesting_mode":"list","block":{"block_types":{"on_demand_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"spot_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true},"block_duration_minutes":{"type":"number","description_kind":"plain","optional":true},"timeout_action":{"type":"string","description_kind":"plain","required":true},"timeout_duration_minutes":{"type":"number","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"core_instance_group":{"nesting_mode":"list","block":{"attributes":{"autoscaling_policy":{"type":"string","description_kind":"plain","optional":true},"bid_price":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"instance_count":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"throughput":{"type":"number","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1},"ec2_attributes":{"nesting_mode":"list","block":{"attributes":{"additional_master_security_groups":{"type":"string","description_kind":"plain","optional":true},"additional_slave_security_groups":{"type":"string","description_kind":"plain","optional":true},"emr_managed_master_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"emr_managed_slave_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instance_profile":{"type":"string","description_kind":"plain","required":true},"key_name":{"type":"string","description_kind":"plain","optional":true},"service_access_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"subnet_id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"subnet_ids":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"},"max_items":1},"kerberos_attributes":{"nesting_mode":"list","block":{"attributes":{"ad_domain_join_password":{"type":"string","description_kind":"plain","optional":true,"sensitive":true},"ad_domain_join_user":{"type":"string","description_kind":"plain","optional":true},"cross_realm_trust_principal_password":{"type":"string","description_kind":"plain","optional":true,"sensitive":true},"kdc_admin_password":{"type":"string","description_kind":"plain","required":true,"sensitive":true},"realm":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"},"max_items":1},"master_instance_fleet":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","optional":true},"provisioned_on_demand_capacity":{"type":"number","description_kind":"plain","computed":true},"provisioned_spot_capacity":{"type":"number","description_kind":"plain","computed":true},"target_on_demand_capacity":{"type":"number","description_kind":"plain","optional":true},"target_spot_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"instance_type_configs":{"nesting_mode":"set","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"bid_price_as_percentage_of_on_demand_price":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"weighted_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"configurations":{"nesting_mode":"set","block":{"attributes":{"classification":{"type":"string","description_kind":"plain","optional":true},"properties":{"type":["map","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}},"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"launch_specifications":{"nesting_mode":"list","block":{"block_types":{"on_demand_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"spot_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true},"block_duration_minutes":{"type":"number","description_kind":"plain","optional":true},"timeout_action":{"type":"string","description_kind":"plain","required":true},"timeout_duration_minutes":{"type":"number","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"master_instance_group":{"nesting_mode":"list","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"instance_count":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"throughput":{"type":"number","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}}}}}} - --- main.go -- -package main - -import ( - "os" - - "test/out/aws/emrcluster" - - "github.com/golingon/lingon/pkg/terra" - "golang.org/x/exp/slog" - - "test/out/aws" -) - -func main() { - err := terra.Export(stack(), terra.WithExportOutputDirectory("out")) - if err != nil { - slog.Error("exporting stack", "err", err) - os.Exit(1) - } -} - -func stack() terra.Exporter { - S := terra.String - SS := terra.SetString - LS := terra.ListString - MS := terra.MapString - emr := aws.NewEmrCluster( - "emrcluster", aws.EmrClusterArgs{ - Applications: SS("app"), - Name: S("emrcluster"), - ReleaseLabel: S("somelabel"), - ServiceRole: S("servicerole"), - Step: []emrcluster.Step{ - { - ActionOnFailure: S("action"), - Name: S("name"), - HadoopJarStep: []emrcluster. - HadoopJarStep{ - { - Args: LS("args"), - Properties: MS( - map[string]string{ - "key": "value", - }, - ), - }, - }, - }, - }, - BootstrapAction: nil, - Ec2Attributes: &emrcluster.Ec2Attributes{ - InstanceProfile: S("instanceprofile"), - }, - }, - ) - return &testStack{ - EmrCluster: emr, - Ref: aws.NewEmrCluster( - "ref", aws.EmrClusterArgs{ - // This is pure nonsense, just testing the Terraform encoder - Name: emr.Attributes().Step().Index(0). - HadoopJarStep().Index(0).Jar(), - ReleaseLabel: S("somerelease"), - ServiceRole: S("servicerole"), - }, - ), - Provider: aws.NewProvider( - aws.ProviderArgs{ - Profile: terra.String("profile"), - }, - ), - } -} - -type testStack struct { - terra.Stack - Provider *aws.Provider `validate:"required"` - EmrCluster *aws.EmrCluster `validate:"required"` - Ref *aws.EmrCluster `validate:"required"` -} - --- expected.tf -- -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "4.49.0" - } - } -} - -// Provider blocks -provider "aws" { - profile = "profile" -} - -// Resource blocks -resource "aws_emr_cluster" "emrcluster" { - applications = ["app"] - name = "emrcluster" - release_label = "somelabel" - service_role = "servicerole" - step { - action_on_failure = "action" - name = "name" - hadoop_jar_step { - args = ["args"] - properties = { - "key" = "value" - } - } - } - ec2_attributes { - instance_profile = "instanceprofile" - } -} - -resource "aws_emr_cluster" "ref" { - name = aws_emr_cluster.emrcluster.step[0].hadoop_jar_step[0].jar - release_label = "somerelease" - service_role = "servicerole" -} - diff --git a/pkg/terragen/testdata/aws_iam_roles.txtar b/pkg/terragen/testdata/aws_iam_roles.txtar deleted file mode 100644 index 00f9ac6..0000000 --- a/pkg/terragen/testdata/aws_iam_roles.txtar +++ /dev/null @@ -1,93 +0,0 @@ -{ - "provider": { - "name": "aws", - "source": "hashicorp/aws", - "version": "4.49.0" - } -} --- schema.json -- -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/hashicorp/aws":{"provider":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"allowed_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"custom_ca_bundle":{"type":"string","description":"File containing custom root and intermediate certificates. Can also be configured using the `AWS_CA_BUNDLE` environment variable. (Setting `ca_bundle` in the shared config file is not supported.)","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint":{"type":"string","description":"Address of the EC2 metadata service endpoint to use. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT` environment variable.","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint_mode":{"type":"string","description":"Protocol to use with EC2 metadata service endpoint.Valid values are `IPv4` and `IPv6`. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE` environment variable.","description_kind":"plain","optional":true},"forbidden_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"http_proxy":{"type":"string","description":"The address of an HTTP proxy to use when accessing the AWS API. Can also be configured using the `HTTP_PROXY` or `HTTPS_PROXY` environment variables.","description_kind":"plain","optional":true},"insecure":{"type":"bool","description":"Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`","description_kind":"plain","optional":true},"max_retries":{"type":"number","description":"The maximum number of times an AWS API request is\nbeing executed. If the API request still fails, an error is\nthrown.","description_kind":"plain","optional":true},"profile":{"type":"string","description":"The profile for API operations. If not set, the default profile\ncreated with `aws configure` will be used.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where AWS operations will take place. Examples\nare us-east-1, us-west-2, etc.","description_kind":"plain","optional":true},"s3_force_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","deprecated":true,"optional":true},"s3_use_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The secret key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"shared_config_files":{"type":["list","string"],"description":"List of paths to shared config files. If not set, defaults to [~/.aws/config].","description_kind":"plain","optional":true},"shared_credentials_file":{"type":"string","description":"The path to the shared credentials file. If not set, defaults to ~/.aws/credentials.","description_kind":"plain","deprecated":true,"optional":true},"shared_credentials_files":{"type":["list","string"],"description":"List of paths to shared credentials files. If not set, defaults to [~/.aws/credentials].","description_kind":"plain","optional":true},"skip_credentials_validation":{"type":"bool","description":"Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available/implemented.","description_kind":"plain","optional":true},"skip_get_ec2_platforms":{"type":"bool","description":"Skip getting the supported EC2 platforms. Used by users that don't have ec2:DescribeAccountAttributes permissions.","description_kind":"plain","deprecated":true,"optional":true},"skip_metadata_api_check":{"type":"string","description":"Skip the AWS Metadata API check. Used for AWS API implementations that do not have a metadata api endpoint.","description_kind":"plain","optional":true},"skip_region_validation":{"type":"bool","description":"Skip static validation of region name. Used by users of alternative AWS-like APIs or users w/ access to regions that are not public (yet).","description_kind":"plain","optional":true},"skip_requesting_account_id":{"type":"bool","description":"Skip requesting the account ID. Used for AWS API implementations that do not have IAM/STS API and/or metadata API.","description_kind":"plain","optional":true},"sts_region":{"type":"string","description":"The region where AWS STS operations will take place. Examples\nare us-east-1 and us-west-2.","description_kind":"plain","optional":true},"token":{"type":"string","description":"session token. A session token is only required if you are\nusing temporary security credentials.","description_kind":"plain","optional":true},"use_dualstack_endpoint":{"type":"bool","description":"Resolve an endpoint with DualStack capability","description_kind":"plain","optional":true},"use_fips_endpoint":{"type":"bool","description":"Resolve an endpoint with FIPS capability","description_kind":"plain","optional":true}},"block_types":{"assume_role":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"duration_seconds":{"type":"number","description":"The duration, in seconds, of the role session.","description_kind":"plain","deprecated":true,"optional":true},"external_id":{"type":"string","description":"A unique identifier that might be required when you assume a role in another account.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"source_identity":{"type":"string","description":"Source identity specified by the principal assuming the role.","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description":"Assume role session tags.","description_kind":"plain","optional":true},"transitive_tag_keys":{"type":["set","string"],"description":"Assume role session tag keys to pass to any subsequent sessions.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"assume_role_with_web_identity":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"web_identity_token":{"type":"string","description_kind":"plain","optional":true},"web_identity_token_file":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"default_tags":{"nesting_mode":"list","block":{"attributes":{"tags":{"type":["map","string"],"description":"Resource tags to default across all resources","description_kind":"plain","optional":true}},"description":"Configuration block with settings to default resource tags across all resources.","description_kind":"plain"}},"endpoints":{"nesting_mode":"set","block":{"attributes":{"accessanalyzer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"account":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acmpca":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"alexaforbusiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amg":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplify":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplifybackend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplifyuibuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewaymanagementapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewayv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfigdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrationsservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationcostprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationdiscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationdiscoveryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationinsights":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appmesh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apprunner":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appstream":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appsync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"athena":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"auditmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"augmentedairuntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscalingplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backup":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backupgateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"batch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"beanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"billingconductor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"braket":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"budgets":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ce":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmeetings":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmessaging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloud9":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrol":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrolapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"clouddirectory":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfront":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsmv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearchdomain":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudtrail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlogs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchrum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeartifact":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codebuild":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecommit":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codedeploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeguruprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codegurureviewer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codepipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestar":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarconnections":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarnotifications":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentityprovider":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitosync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehendmedical":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"computeoptimizer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"config":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"configservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectcontactlens":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectparticipant":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectwisdomservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"controltower":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costandusagereportservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costexplorer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cur":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"customerprofiles":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigration":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigrationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databrew":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dataexchange":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datapipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datasync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dax":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"deploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"detective":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devicefarm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devopsguru":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directoryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"discovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dlm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"drs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodbstreams":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ebs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2instanceconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecrpublic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"efs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticache":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticbeanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticinference":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancingv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elastictranscoder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elbv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrcontainers":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"es":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eventbridge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"events":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"evidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspacedata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"firehose":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecast":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastquery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastqueryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"forecastservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"frauddetector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fsx":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gamelift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glacier":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"globalaccelerator":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glue":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gluedatabrew":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"grafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrass":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrassv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"groundstation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"guardduty":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"health":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"healthlake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"honeycode":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"identitystore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"imagebuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspectorv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickdevices":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickdevicesservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot1clickprojects":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdataplane":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotdeviceadvisor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ioteventsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotfleethub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotjobsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotjobsdataplane":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotsecuretunneling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotsitewise":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotthingsgraph":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iottwinmaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotwireless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivschat":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafka":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafkaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kendra":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"keyspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalyticsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideoarchivedmedia":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideomedia":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideosignaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideosignalingchannels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lakeformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lambda":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lex":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuilding":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuildingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntimeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexruntimev2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2models":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2runtime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"licensemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lightsail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"location":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"locationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"logs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutequipment":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutforvision":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutmetrics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutvision":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"machinelearning":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedblockchain":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedgrafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacecommerceanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplaceentitlement":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplaceentitlementservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"marketplacemetering":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconvert":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"medialive":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackage":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackagevod":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastoredata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediatailor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"memorydb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"meteringmarketplace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mgh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mgn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubrefactorspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubstrategy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"migrationhubstrategyrecommendations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mobile":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mq":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"msk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mturk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mwaa":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"neptune":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkfirewall":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"nimble":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"nimblestudio":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworkscm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"organizations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"panorama":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalize":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalizeevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"personalizeruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpoint":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpointemail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpointsmsvoice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pipes":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"polly":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pricing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheus":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheusservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"proton":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldbsession":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"quicksight":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ram":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rbin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rdsdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rdsdataservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"recyclebin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdataapiservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rekognition":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resiliencehub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourceexplorer2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroups":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstagging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstaggingapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"robomaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rolesanywhere":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53domains":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycluster":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycontrolconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoveryreadiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53resolver":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3api":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3control":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakera2iruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakeredge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakeredgemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakerfeaturestoreruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemakerruntime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"savingsplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"scheduler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"schemas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"secretsmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securityhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapplicationrepository":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapprepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessrepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalogappregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicediscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicequotas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ses":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sesv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sfn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"shield":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"signer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"simpledb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"snowball":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"snowdevicemanagement":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sns":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sqs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmcontacts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmincidents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sso":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssoadmin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssooidc":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"stepfunctions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"storagegateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"support":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"swf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"synthetics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"textract":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamquery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamwrite":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribe":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribestreaming":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribestreamingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transfer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"translate":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"voiceid":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"waf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafregional":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wellarchitected":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wisdom":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workdocs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"worklink":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workmail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workmailmessageflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspacesweb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"xray":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ignore_tags":{"nesting_mode":"list","block":{"attributes":{"key_prefixes":{"type":["set","string"],"description":"Resource tag key prefixes to ignore across all resources.","description_kind":"plain","optional":true},"keys":{"type":["set","string"],"description":"Resource tag keys to ignore across all resources.","description_kind":"plain","optional":true}},"description":"Configuration block with settings to ignore resource tags across all resources.","description_kind":"plain"}}},"description_kind":"plain"}},"resource_schemas":{"aws_iam_role":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"assume_role_policy":{"type":"string","description_kind":"plain","required":true},"create_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"force_detach_policies":{"type":"bool","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"managed_policy_arns":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true},"max_session_duration":{"type":"number","description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name_prefix":{"type":"string","description_kind":"plain","optional":true,"computed":true},"path":{"type":"string","description_kind":"plain","optional":true},"permissions_boundary":{"type":"string","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true},"tags_all":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"unique_id":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"inline_policy":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description_kind":"plain","optional":true},"policy":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}}},"data_source_schemas":{"aws_iam_role":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"assume_role_policy":{"type":"string","description_kind":"plain","computed":true},"create_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_session_duration":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"path":{"type":"string","description_kind":"plain","computed":true},"permissions_boundary":{"type":"string","description_kind":"plain","computed":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"unique_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}}}}}} - --- main.go -- -package main - -import ( - "github.com/golingon/lingon/pkg/terra" - "golang.org/x/exp/slog" - "os" - "test/out/aws" -) - -func main() { - err := terra.Export(stack(), terra.WithExportOutputDirectory("out")) - if err != nil { - slog.Error("exporting stack", "err", err) - os.Exit(1) - } -} - -func stack() terra.Exporter { - return &testStack{ - Role: aws.NewIamRole( - "iam", aws.IamRoleArgs{ - AssumeRolePolicy: terra.String("{}"), - Name: terra.String("iam-role"), - Description: terra.String("description"), - Tags: terra.Map( - map[string]terra.StringValue{ - "test": terra.String("true"), - }, - ), - }, - ), - Provider: aws.NewProvider( - aws.ProviderArgs{ - Profile: terra.String("profile"), - }, - ), - Backend: &testBackend{}, - } -} - -type testStack struct { - terra.Stack - Role *aws.IamRole `validate:"required"` - Provider *aws.Provider `validate:"required"` - Backend *testBackend `validate:"required"` -} - -var _ terra.Backend = (*testBackend)(nil) - -type testBackend struct{} - -func (b testBackend) BackendType() string { - return "test" -} - --- expected.tf -- -terraform { - backend "test" { - } - required_providers { - aws = { - source = "hashicorp/aws" - version = "4.49.0" - } - } -} - -// Provider blocks -provider "aws" { - profile = "profile" -} - -// Resource blocks -resource "aws_iam_role" "iam" { - assume_role_policy = "{}" - description = "description" - name = "iam-role" - tags = { - "test" = "true" - } -} - diff --git a/pkg/terragen/testdata/golden/aws_emr_cluster/provider.txtar b/pkg/terragen/testdata/golden/aws_emr_cluster/provider.txtar new file mode 100644 index 0000000..8909f84 --- /dev/null +++ b/pkg/terragen/testdata/golden/aws_emr_cluster/provider.txtar @@ -0,0 +1,3934 @@ +-- out/provider.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package aws + +import ( + "github.com/golingon/lingon/pkg/terra" + provider "test/out/provider" +) + +func NewProvider(args ProviderArgs) *Provider { + return &Provider{Args: args} +} + +var _ terra.Provider = (*Provider)(nil) + +type Provider struct { + Args ProviderArgs +} + +// LocalName returns the provider local name for [Provider]. +func (p *Provider) LocalName() string { + return "aws" +} + +// Source returns the provider source for [Provider]. +func (p *Provider) Source() string { + return "hashicorp/aws" +} + +// Version returns the provider version for [Provider]. +func (p *Provider) Version() string { + return "5.44.0" +} + +// Configuration returns the configuration (args) for [Provider]. +func (p *Provider) Configuration() interface{} { + return p.Args +} + +// ProviderArgs contains the configurations for provider. +type ProviderArgs struct { + // AccessKey: string, optional + AccessKey terra.StringValue `hcl:"access_key,attr"` + // AllowedAccountIds: set of string, optional + AllowedAccountIds terra.SetValue[terra.StringValue] `hcl:"allowed_account_ids,attr"` + // CustomCaBundle: string, optional + CustomCaBundle terra.StringValue `hcl:"custom_ca_bundle,attr"` + // Ec2MetadataServiceEndpoint: string, optional + Ec2MetadataServiceEndpoint terra.StringValue `hcl:"ec2_metadata_service_endpoint,attr"` + // Ec2MetadataServiceEndpointMode: string, optional + Ec2MetadataServiceEndpointMode terra.StringValue `hcl:"ec2_metadata_service_endpoint_mode,attr"` + // ForbiddenAccountIds: set of string, optional + ForbiddenAccountIds terra.SetValue[terra.StringValue] `hcl:"forbidden_account_ids,attr"` + // HttpProxy: string, optional + HttpProxy terra.StringValue `hcl:"http_proxy,attr"` + // HttpsProxy: string, optional + HttpsProxy terra.StringValue `hcl:"https_proxy,attr"` + // Insecure: bool, optional + Insecure terra.BoolValue `hcl:"insecure,attr"` + // MaxRetries: number, optional + MaxRetries terra.NumberValue `hcl:"max_retries,attr"` + // NoProxy: string, optional + NoProxy terra.StringValue `hcl:"no_proxy,attr"` + // Profile: string, optional + Profile terra.StringValue `hcl:"profile,attr"` + // Region: string, optional + Region terra.StringValue `hcl:"region,attr"` + // RetryMode: string, optional + RetryMode terra.StringValue `hcl:"retry_mode,attr"` + // S3UsEast1RegionalEndpoint: string, optional + S3UsEast1RegionalEndpoint terra.StringValue `hcl:"s3_us_east_1_regional_endpoint,attr"` + // S3UsePathStyle: bool, optional + S3UsePathStyle terra.BoolValue `hcl:"s3_use_path_style,attr"` + // SecretKey: string, optional + SecretKey terra.StringValue `hcl:"secret_key,attr"` + // SharedConfigFiles: list of string, optional + SharedConfigFiles terra.ListValue[terra.StringValue] `hcl:"shared_config_files,attr"` + // SharedCredentialsFiles: list of string, optional + SharedCredentialsFiles terra.ListValue[terra.StringValue] `hcl:"shared_credentials_files,attr"` + // SkipCredentialsValidation: bool, optional + SkipCredentialsValidation terra.BoolValue `hcl:"skip_credentials_validation,attr"` + // SkipMetadataApiCheck: string, optional + SkipMetadataApiCheck terra.StringValue `hcl:"skip_metadata_api_check,attr"` + // SkipRegionValidation: bool, optional + SkipRegionValidation terra.BoolValue `hcl:"skip_region_validation,attr"` + // SkipRequestingAccountId: bool, optional + SkipRequestingAccountId terra.BoolValue `hcl:"skip_requesting_account_id,attr"` + // StsRegion: string, optional + StsRegion terra.StringValue `hcl:"sts_region,attr"` + // Token: string, optional + Token terra.StringValue `hcl:"token,attr"` + // TokenBucketRateLimiterCapacity: number, optional + TokenBucketRateLimiterCapacity terra.NumberValue `hcl:"token_bucket_rate_limiter_capacity,attr"` + // UseDualstackEndpoint: bool, optional + UseDualstackEndpoint terra.BoolValue `hcl:"use_dualstack_endpoint,attr"` + // UseFipsEndpoint: bool, optional + UseFipsEndpoint terra.BoolValue `hcl:"use_fips_endpoint,attr"` + // AssumeRole: min=0 + AssumeRole []provider.AssumeRole `hcl:"assume_role,block" validate:"min=0"` + // AssumeRoleWithWebIdentity: min=0 + AssumeRoleWithWebIdentity []provider.AssumeRoleWithWebIdentity `hcl:"assume_role_with_web_identity,block" validate:"min=0"` + // DefaultTags: min=0 + DefaultTags []provider.DefaultTags `hcl:"default_tags,block" validate:"min=0"` + // Endpoints: min=0 + Endpoints []provider.Endpoints `hcl:"endpoints,block" validate:"min=0"` + // IgnoreTags: min=0 + IgnoreTags []provider.IgnoreTags `hcl:"ignore_tags,block" validate:"min=0"` +} +-- out/provider/provider.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package provider + +import ( + terra "github.com/golingon/lingon/pkg/terra" + hclwrite "github.com/hashicorp/hcl/v2/hclwrite" +) + +type AssumeRole struct { + // Duration: string, optional + Duration terra.StringValue `hcl:"duration,attr"` + // ExternalId: string, optional + ExternalId terra.StringValue `hcl:"external_id,attr"` + // Policy: string, optional + Policy terra.StringValue `hcl:"policy,attr"` + // PolicyArns: set of string, optional + PolicyArns terra.SetValue[terra.StringValue] `hcl:"policy_arns,attr"` + // RoleArn: string, optional + RoleArn terra.StringValue `hcl:"role_arn,attr"` + // SessionName: string, optional + SessionName terra.StringValue `hcl:"session_name,attr"` + // SourceIdentity: string, optional + SourceIdentity terra.StringValue `hcl:"source_identity,attr"` + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` + // TransitiveTagKeys: set of string, optional + TransitiveTagKeys terra.SetValue[terra.StringValue] `hcl:"transitive_tag_keys,attr"` +} + +type AssumeRoleWithWebIdentity struct { + // Duration: string, optional + Duration terra.StringValue `hcl:"duration,attr"` + // Policy: string, optional + Policy terra.StringValue `hcl:"policy,attr"` + // PolicyArns: set of string, optional + PolicyArns terra.SetValue[terra.StringValue] `hcl:"policy_arns,attr"` + // RoleArn: string, optional + RoleArn terra.StringValue `hcl:"role_arn,attr"` + // SessionName: string, optional + SessionName terra.StringValue `hcl:"session_name,attr"` + // WebIdentityToken: string, optional + WebIdentityToken terra.StringValue `hcl:"web_identity_token,attr"` + // WebIdentityTokenFile: string, optional + WebIdentityTokenFile terra.StringValue `hcl:"web_identity_token_file,attr"` +} + +type DefaultTags struct { + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` +} + +type Endpoints struct { + // Accessanalyzer: string, optional + Accessanalyzer terra.StringValue `hcl:"accessanalyzer,attr"` + // Account: string, optional + Account terra.StringValue `hcl:"account,attr"` + // Acm: string, optional + Acm terra.StringValue `hcl:"acm,attr"` + // Acmpca: string, optional + Acmpca terra.StringValue `hcl:"acmpca,attr"` + // Amg: string, optional + Amg terra.StringValue `hcl:"amg,attr"` + // Amp: string, optional + Amp terra.StringValue `hcl:"amp,attr"` + // Amplify: string, optional + Amplify terra.StringValue `hcl:"amplify,attr"` + // Apigateway: string, optional + Apigateway terra.StringValue `hcl:"apigateway,attr"` + // Apigatewayv2: string, optional + Apigatewayv2 terra.StringValue `hcl:"apigatewayv2,attr"` + // Appautoscaling: string, optional + Appautoscaling terra.StringValue `hcl:"appautoscaling,attr"` + // Appconfig: string, optional + Appconfig terra.StringValue `hcl:"appconfig,attr"` + // Appfabric: string, optional + Appfabric terra.StringValue `hcl:"appfabric,attr"` + // Appflow: string, optional + Appflow terra.StringValue `hcl:"appflow,attr"` + // Appintegrations: string, optional + Appintegrations terra.StringValue `hcl:"appintegrations,attr"` + // Appintegrationsservice: string, optional + Appintegrationsservice terra.StringValue `hcl:"appintegrationsservice,attr"` + // Applicationautoscaling: string, optional + Applicationautoscaling terra.StringValue `hcl:"applicationautoscaling,attr"` + // Applicationinsights: string, optional + Applicationinsights terra.StringValue `hcl:"applicationinsights,attr"` + // Appmesh: string, optional + Appmesh terra.StringValue `hcl:"appmesh,attr"` + // Appregistry: string, optional + Appregistry terra.StringValue `hcl:"appregistry,attr"` + // Apprunner: string, optional + Apprunner terra.StringValue `hcl:"apprunner,attr"` + // Appstream: string, optional + Appstream terra.StringValue `hcl:"appstream,attr"` + // Appsync: string, optional + Appsync terra.StringValue `hcl:"appsync,attr"` + // Athena: string, optional + Athena terra.StringValue `hcl:"athena,attr"` + // Auditmanager: string, optional + Auditmanager terra.StringValue `hcl:"auditmanager,attr"` + // Autoscaling: string, optional + Autoscaling terra.StringValue `hcl:"autoscaling,attr"` + // Autoscalingplans: string, optional + Autoscalingplans terra.StringValue `hcl:"autoscalingplans,attr"` + // Backup: string, optional + Backup terra.StringValue `hcl:"backup,attr"` + // Batch: string, optional + Batch terra.StringValue `hcl:"batch,attr"` + // Beanstalk: string, optional + Beanstalk terra.StringValue `hcl:"beanstalk,attr"` + // Bedrock: string, optional + Bedrock terra.StringValue `hcl:"bedrock,attr"` + // Bedrockagent: string, optional + Bedrockagent terra.StringValue `hcl:"bedrockagent,attr"` + // Budgets: string, optional + Budgets terra.StringValue `hcl:"budgets,attr"` + // Ce: string, optional + Ce terra.StringValue `hcl:"ce,attr"` + // Chime: string, optional + Chime terra.StringValue `hcl:"chime,attr"` + // Chimesdkmediapipelines: string, optional + Chimesdkmediapipelines terra.StringValue `hcl:"chimesdkmediapipelines,attr"` + // Chimesdkvoice: string, optional + Chimesdkvoice terra.StringValue `hcl:"chimesdkvoice,attr"` + // Cleanrooms: string, optional + Cleanrooms terra.StringValue `hcl:"cleanrooms,attr"` + // Cloud9: string, optional + Cloud9 terra.StringValue `hcl:"cloud9,attr"` + // Cloudcontrol: string, optional + Cloudcontrol terra.StringValue `hcl:"cloudcontrol,attr"` + // Cloudcontrolapi: string, optional + Cloudcontrolapi terra.StringValue `hcl:"cloudcontrolapi,attr"` + // Cloudformation: string, optional + Cloudformation terra.StringValue `hcl:"cloudformation,attr"` + // Cloudfront: string, optional + Cloudfront terra.StringValue `hcl:"cloudfront,attr"` + // Cloudfrontkeyvaluestore: string, optional + Cloudfrontkeyvaluestore terra.StringValue `hcl:"cloudfrontkeyvaluestore,attr"` + // Cloudhsm: string, optional + Cloudhsm terra.StringValue `hcl:"cloudhsm,attr"` + // Cloudhsmv2: string, optional + Cloudhsmv2 terra.StringValue `hcl:"cloudhsmv2,attr"` + // Cloudsearch: string, optional + Cloudsearch terra.StringValue `hcl:"cloudsearch,attr"` + // Cloudtrail: string, optional + Cloudtrail terra.StringValue `hcl:"cloudtrail,attr"` + // Cloudwatch: string, optional + Cloudwatch terra.StringValue `hcl:"cloudwatch,attr"` + // Cloudwatchevents: string, optional + Cloudwatchevents terra.StringValue `hcl:"cloudwatchevents,attr"` + // Cloudwatchevidently: string, optional + Cloudwatchevidently terra.StringValue `hcl:"cloudwatchevidently,attr"` + // Cloudwatchlog: string, optional + Cloudwatchlog terra.StringValue `hcl:"cloudwatchlog,attr"` + // Cloudwatchlogs: string, optional + Cloudwatchlogs terra.StringValue `hcl:"cloudwatchlogs,attr"` + // Cloudwatchobservabilityaccessmanager: string, optional + Cloudwatchobservabilityaccessmanager terra.StringValue `hcl:"cloudwatchobservabilityaccessmanager,attr"` + // Cloudwatchrum: string, optional + Cloudwatchrum terra.StringValue `hcl:"cloudwatchrum,attr"` + // Codeartifact: string, optional + Codeartifact terra.StringValue `hcl:"codeartifact,attr"` + // Codebuild: string, optional + Codebuild terra.StringValue `hcl:"codebuild,attr"` + // Codecatalyst: string, optional + Codecatalyst terra.StringValue `hcl:"codecatalyst,attr"` + // Codecommit: string, optional + Codecommit terra.StringValue `hcl:"codecommit,attr"` + // Codedeploy: string, optional + Codedeploy terra.StringValue `hcl:"codedeploy,attr"` + // Codeguruprofiler: string, optional + Codeguruprofiler terra.StringValue `hcl:"codeguruprofiler,attr"` + // Codegurureviewer: string, optional + Codegurureviewer terra.StringValue `hcl:"codegurureviewer,attr"` + // Codepipeline: string, optional + Codepipeline terra.StringValue `hcl:"codepipeline,attr"` + // Codestarconnections: string, optional + Codestarconnections terra.StringValue `hcl:"codestarconnections,attr"` + // Codestarnotifications: string, optional + Codestarnotifications terra.StringValue `hcl:"codestarnotifications,attr"` + // Cognitoidentity: string, optional + Cognitoidentity terra.StringValue `hcl:"cognitoidentity,attr"` + // Cognitoidentityprovider: string, optional + Cognitoidentityprovider terra.StringValue `hcl:"cognitoidentityprovider,attr"` + // Cognitoidp: string, optional + Cognitoidp terra.StringValue `hcl:"cognitoidp,attr"` + // Comprehend: string, optional + Comprehend terra.StringValue `hcl:"comprehend,attr"` + // Computeoptimizer: string, optional + Computeoptimizer terra.StringValue `hcl:"computeoptimizer,attr"` + // Config: string, optional + Config terra.StringValue `hcl:"config,attr"` + // Configservice: string, optional + Configservice terra.StringValue `hcl:"configservice,attr"` + // Connect: string, optional + Connect terra.StringValue `hcl:"connect,attr"` + // Connectcases: string, optional + Connectcases terra.StringValue `hcl:"connectcases,attr"` + // Controltower: string, optional + Controltower terra.StringValue `hcl:"controltower,attr"` + // Costandusagereportservice: string, optional + Costandusagereportservice terra.StringValue `hcl:"costandusagereportservice,attr"` + // Costexplorer: string, optional + Costexplorer terra.StringValue `hcl:"costexplorer,attr"` + // Costoptimizationhub: string, optional + Costoptimizationhub terra.StringValue `hcl:"costoptimizationhub,attr"` + // Cur: string, optional + Cur terra.StringValue `hcl:"cur,attr"` + // Customerprofiles: string, optional + Customerprofiles terra.StringValue `hcl:"customerprofiles,attr"` + // Databasemigration: string, optional + Databasemigration terra.StringValue `hcl:"databasemigration,attr"` + // Databasemigrationservice: string, optional + Databasemigrationservice terra.StringValue `hcl:"databasemigrationservice,attr"` + // Dataexchange: string, optional + Dataexchange terra.StringValue `hcl:"dataexchange,attr"` + // Datapipeline: string, optional + Datapipeline terra.StringValue `hcl:"datapipeline,attr"` + // Datasync: string, optional + Datasync terra.StringValue `hcl:"datasync,attr"` + // Datazone: string, optional + Datazone terra.StringValue `hcl:"datazone,attr"` + // Dax: string, optional + Dax terra.StringValue `hcl:"dax,attr"` + // Deploy: string, optional + Deploy terra.StringValue `hcl:"deploy,attr"` + // Detective: string, optional + Detective terra.StringValue `hcl:"detective,attr"` + // Devicefarm: string, optional + Devicefarm terra.StringValue `hcl:"devicefarm,attr"` + // Devopsguru: string, optional + Devopsguru terra.StringValue `hcl:"devopsguru,attr"` + // Directconnect: string, optional + Directconnect terra.StringValue `hcl:"directconnect,attr"` + // Directoryservice: string, optional + Directoryservice terra.StringValue `hcl:"directoryservice,attr"` + // Dlm: string, optional + Dlm terra.StringValue `hcl:"dlm,attr"` + // Dms: string, optional + Dms terra.StringValue `hcl:"dms,attr"` + // Docdb: string, optional + Docdb terra.StringValue `hcl:"docdb,attr"` + // Docdbelastic: string, optional + Docdbelastic terra.StringValue `hcl:"docdbelastic,attr"` + // Ds: string, optional + Ds terra.StringValue `hcl:"ds,attr"` + // Dynamodb: string, optional + Dynamodb terra.StringValue `hcl:"dynamodb,attr"` + // Ec2: string, optional + Ec2 terra.StringValue `hcl:"ec2,attr"` + // Ecr: string, optional + Ecr terra.StringValue `hcl:"ecr,attr"` + // Ecrpublic: string, optional + Ecrpublic terra.StringValue `hcl:"ecrpublic,attr"` + // Ecs: string, optional + Ecs terra.StringValue `hcl:"ecs,attr"` + // Efs: string, optional + Efs terra.StringValue `hcl:"efs,attr"` + // Eks: string, optional + Eks terra.StringValue `hcl:"eks,attr"` + // Elasticache: string, optional + Elasticache terra.StringValue `hcl:"elasticache,attr"` + // Elasticbeanstalk: string, optional + Elasticbeanstalk terra.StringValue `hcl:"elasticbeanstalk,attr"` + // Elasticloadbalancing: string, optional + Elasticloadbalancing terra.StringValue `hcl:"elasticloadbalancing,attr"` + // Elasticloadbalancingv2: string, optional + Elasticloadbalancingv2 terra.StringValue `hcl:"elasticloadbalancingv2,attr"` + // Elasticsearch: string, optional + Elasticsearch terra.StringValue `hcl:"elasticsearch,attr"` + // Elasticsearchservice: string, optional + Elasticsearchservice terra.StringValue `hcl:"elasticsearchservice,attr"` + // Elastictranscoder: string, optional + Elastictranscoder terra.StringValue `hcl:"elastictranscoder,attr"` + // Elb: string, optional + Elb terra.StringValue `hcl:"elb,attr"` + // Elbv2: string, optional + Elbv2 terra.StringValue `hcl:"elbv2,attr"` + // Emr: string, optional + Emr terra.StringValue `hcl:"emr,attr"` + // Emrcontainers: string, optional + Emrcontainers terra.StringValue `hcl:"emrcontainers,attr"` + // Emrserverless: string, optional + Emrserverless terra.StringValue `hcl:"emrserverless,attr"` + // Es: string, optional + Es terra.StringValue `hcl:"es,attr"` + // Eventbridge: string, optional + Eventbridge terra.StringValue `hcl:"eventbridge,attr"` + // Events: string, optional + Events terra.StringValue `hcl:"events,attr"` + // Evidently: string, optional + Evidently terra.StringValue `hcl:"evidently,attr"` + // Finspace: string, optional + Finspace terra.StringValue `hcl:"finspace,attr"` + // Firehose: string, optional + Firehose terra.StringValue `hcl:"firehose,attr"` + // Fis: string, optional + Fis terra.StringValue `hcl:"fis,attr"` + // Fms: string, optional + Fms terra.StringValue `hcl:"fms,attr"` + // Fsx: string, optional + Fsx terra.StringValue `hcl:"fsx,attr"` + // Gamelift: string, optional + Gamelift terra.StringValue `hcl:"gamelift,attr"` + // Glacier: string, optional + Glacier terra.StringValue `hcl:"glacier,attr"` + // Globalaccelerator: string, optional + Globalaccelerator terra.StringValue `hcl:"globalaccelerator,attr"` + // Glue: string, optional + Glue terra.StringValue `hcl:"glue,attr"` + // Grafana: string, optional + Grafana terra.StringValue `hcl:"grafana,attr"` + // Greengrass: string, optional + Greengrass terra.StringValue `hcl:"greengrass,attr"` + // Groundstation: string, optional + Groundstation terra.StringValue `hcl:"groundstation,attr"` + // Guardduty: string, optional + Guardduty terra.StringValue `hcl:"guardduty,attr"` + // Healthlake: string, optional + Healthlake terra.StringValue `hcl:"healthlake,attr"` + // Iam: string, optional + Iam terra.StringValue `hcl:"iam,attr"` + // Identitystore: string, optional + Identitystore terra.StringValue `hcl:"identitystore,attr"` + // Imagebuilder: string, optional + Imagebuilder terra.StringValue `hcl:"imagebuilder,attr"` + // Inspector: string, optional + Inspector terra.StringValue `hcl:"inspector,attr"` + // Inspector2: string, optional + Inspector2 terra.StringValue `hcl:"inspector2,attr"` + // Inspectorv2: string, optional + Inspectorv2 terra.StringValue `hcl:"inspectorv2,attr"` + // Internetmonitor: string, optional + Internetmonitor terra.StringValue `hcl:"internetmonitor,attr"` + // Iot: string, optional + Iot terra.StringValue `hcl:"iot,attr"` + // Iotanalytics: string, optional + Iotanalytics terra.StringValue `hcl:"iotanalytics,attr"` + // Iotevents: string, optional + Iotevents terra.StringValue `hcl:"iotevents,attr"` + // Ivs: string, optional + Ivs terra.StringValue `hcl:"ivs,attr"` + // Ivschat: string, optional + Ivschat terra.StringValue `hcl:"ivschat,attr"` + // Kafka: string, optional + Kafka terra.StringValue `hcl:"kafka,attr"` + // Kafkaconnect: string, optional + Kafkaconnect terra.StringValue `hcl:"kafkaconnect,attr"` + // Kendra: string, optional + Kendra terra.StringValue `hcl:"kendra,attr"` + // Keyspaces: string, optional + Keyspaces terra.StringValue `hcl:"keyspaces,attr"` + // Kinesis: string, optional + Kinesis terra.StringValue `hcl:"kinesis,attr"` + // Kinesisanalytics: string, optional + Kinesisanalytics terra.StringValue `hcl:"kinesisanalytics,attr"` + // Kinesisanalyticsv2: string, optional + Kinesisanalyticsv2 terra.StringValue `hcl:"kinesisanalyticsv2,attr"` + // Kinesisvideo: string, optional + Kinesisvideo terra.StringValue `hcl:"kinesisvideo,attr"` + // Kms: string, optional + Kms terra.StringValue `hcl:"kms,attr"` + // Lakeformation: string, optional + Lakeformation terra.StringValue `hcl:"lakeformation,attr"` + // Lambda: string, optional + Lambda terra.StringValue `hcl:"lambda,attr"` + // Launchwizard: string, optional + Launchwizard terra.StringValue `hcl:"launchwizard,attr"` + // Lex: string, optional + Lex terra.StringValue `hcl:"lex,attr"` + // Lexmodelbuilding: string, optional + Lexmodelbuilding terra.StringValue `hcl:"lexmodelbuilding,attr"` + // Lexmodelbuildingservice: string, optional + Lexmodelbuildingservice terra.StringValue `hcl:"lexmodelbuildingservice,attr"` + // Lexmodels: string, optional + Lexmodels terra.StringValue `hcl:"lexmodels,attr"` + // Lexmodelsv2: string, optional + Lexmodelsv2 terra.StringValue `hcl:"lexmodelsv2,attr"` + // Lexv2Models: string, optional + Lexv2Models terra.StringValue `hcl:"lexv2models,attr"` + // Licensemanager: string, optional + Licensemanager terra.StringValue `hcl:"licensemanager,attr"` + // Lightsail: string, optional + Lightsail terra.StringValue `hcl:"lightsail,attr"` + // Location: string, optional + Location terra.StringValue `hcl:"location,attr"` + // Locationservice: string, optional + Locationservice terra.StringValue `hcl:"locationservice,attr"` + // Logs: string, optional + Logs terra.StringValue `hcl:"logs,attr"` + // Lookoutmetrics: string, optional + Lookoutmetrics terra.StringValue `hcl:"lookoutmetrics,attr"` + // M2: string, optional + M2 terra.StringValue `hcl:"m2,attr"` + // Macie2: string, optional + Macie2 terra.StringValue `hcl:"macie2,attr"` + // Managedgrafana: string, optional + Managedgrafana terra.StringValue `hcl:"managedgrafana,attr"` + // Mediaconnect: string, optional + Mediaconnect terra.StringValue `hcl:"mediaconnect,attr"` + // Mediaconvert: string, optional + Mediaconvert terra.StringValue `hcl:"mediaconvert,attr"` + // Medialive: string, optional + Medialive terra.StringValue `hcl:"medialive,attr"` + // Mediapackage: string, optional + Mediapackage terra.StringValue `hcl:"mediapackage,attr"` + // Mediapackagev2: string, optional + Mediapackagev2 terra.StringValue `hcl:"mediapackagev2,attr"` + // Mediastore: string, optional + Mediastore terra.StringValue `hcl:"mediastore,attr"` + // Memorydb: string, optional + Memorydb terra.StringValue `hcl:"memorydb,attr"` + // Mq: string, optional + Mq terra.StringValue `hcl:"mq,attr"` + // Msk: string, optional + Msk terra.StringValue `hcl:"msk,attr"` + // Mwaa: string, optional + Mwaa terra.StringValue `hcl:"mwaa,attr"` + // Neptune: string, optional + Neptune terra.StringValue `hcl:"neptune,attr"` + // Networkfirewall: string, optional + Networkfirewall terra.StringValue `hcl:"networkfirewall,attr"` + // Networkmanager: string, optional + Networkmanager terra.StringValue `hcl:"networkmanager,attr"` + // Oam: string, optional + Oam terra.StringValue `hcl:"oam,attr"` + // Opensearch: string, optional + Opensearch terra.StringValue `hcl:"opensearch,attr"` + // Opensearchingestion: string, optional + Opensearchingestion terra.StringValue `hcl:"opensearchingestion,attr"` + // Opensearchserverless: string, optional + Opensearchserverless terra.StringValue `hcl:"opensearchserverless,attr"` + // Opensearchservice: string, optional + Opensearchservice terra.StringValue `hcl:"opensearchservice,attr"` + // Opsworks: string, optional + Opsworks terra.StringValue `hcl:"opsworks,attr"` + // Organizations: string, optional + Organizations terra.StringValue `hcl:"organizations,attr"` + // Osis: string, optional + Osis terra.StringValue `hcl:"osis,attr"` + // Outposts: string, optional + Outposts terra.StringValue `hcl:"outposts,attr"` + // Paymentcryptography: string, optional + Paymentcryptography terra.StringValue `hcl:"paymentcryptography,attr"` + // Pcaconnectorad: string, optional + Pcaconnectorad terra.StringValue `hcl:"pcaconnectorad,attr"` + // Pinpoint: string, optional + Pinpoint terra.StringValue `hcl:"pinpoint,attr"` + // Pipes: string, optional + Pipes terra.StringValue `hcl:"pipes,attr"` + // Polly: string, optional + Polly terra.StringValue `hcl:"polly,attr"` + // Pricing: string, optional + Pricing terra.StringValue `hcl:"pricing,attr"` + // Prometheus: string, optional + Prometheus terra.StringValue `hcl:"prometheus,attr"` + // Prometheusservice: string, optional + Prometheusservice terra.StringValue `hcl:"prometheusservice,attr"` + // Qbusiness: string, optional + Qbusiness terra.StringValue `hcl:"qbusiness,attr"` + // Qldb: string, optional + Qldb terra.StringValue `hcl:"qldb,attr"` + // Quicksight: string, optional + Quicksight terra.StringValue `hcl:"quicksight,attr"` + // Ram: string, optional + Ram terra.StringValue `hcl:"ram,attr"` + // Rbin: string, optional + Rbin terra.StringValue `hcl:"rbin,attr"` + // Rds: string, optional + Rds terra.StringValue `hcl:"rds,attr"` + // Recyclebin: string, optional + Recyclebin terra.StringValue `hcl:"recyclebin,attr"` + // Redshift: string, optional + Redshift terra.StringValue `hcl:"redshift,attr"` + // Redshiftdata: string, optional + Redshiftdata terra.StringValue `hcl:"redshiftdata,attr"` + // Redshiftdataapiservice: string, optional + Redshiftdataapiservice terra.StringValue `hcl:"redshiftdataapiservice,attr"` + // Redshiftserverless: string, optional + Redshiftserverless terra.StringValue `hcl:"redshiftserverless,attr"` + // Rekognition: string, optional + Rekognition terra.StringValue `hcl:"rekognition,attr"` + // Resourceexplorer2: string, optional + Resourceexplorer2 terra.StringValue `hcl:"resourceexplorer2,attr"` + // Resourcegroups: string, optional + Resourcegroups terra.StringValue `hcl:"resourcegroups,attr"` + // Resourcegroupstagging: string, optional + Resourcegroupstagging terra.StringValue `hcl:"resourcegroupstagging,attr"` + // Resourcegroupstaggingapi: string, optional + Resourcegroupstaggingapi terra.StringValue `hcl:"resourcegroupstaggingapi,attr"` + // Rolesanywhere: string, optional + Rolesanywhere terra.StringValue `hcl:"rolesanywhere,attr"` + // Route53: string, optional + Route53 terra.StringValue `hcl:"route53,attr"` + // Route53Domains: string, optional + Route53Domains terra.StringValue `hcl:"route53domains,attr"` + // Route53Recoverycontrolconfig: string, optional + Route53Recoverycontrolconfig terra.StringValue `hcl:"route53recoverycontrolconfig,attr"` + // Route53Recoveryreadiness: string, optional + Route53Recoveryreadiness terra.StringValue `hcl:"route53recoveryreadiness,attr"` + // Route53Resolver: string, optional + Route53Resolver terra.StringValue `hcl:"route53resolver,attr"` + // Rum: string, optional + Rum terra.StringValue `hcl:"rum,attr"` + // S3: string, optional + S3 terra.StringValue `hcl:"s3,attr"` + // S3Api: string, optional + S3Api terra.StringValue `hcl:"s3api,attr"` + // S3Control: string, optional + S3Control terra.StringValue `hcl:"s3control,attr"` + // S3Outposts: string, optional + S3Outposts terra.StringValue `hcl:"s3outposts,attr"` + // Sagemaker: string, optional + Sagemaker terra.StringValue `hcl:"sagemaker,attr"` + // Scheduler: string, optional + Scheduler terra.StringValue `hcl:"scheduler,attr"` + // Schemas: string, optional + Schemas terra.StringValue `hcl:"schemas,attr"` + // Sdb: string, optional + Sdb terra.StringValue `hcl:"sdb,attr"` + // Secretsmanager: string, optional + Secretsmanager terra.StringValue `hcl:"secretsmanager,attr"` + // Securityhub: string, optional + Securityhub terra.StringValue `hcl:"securityhub,attr"` + // Securitylake: string, optional + Securitylake terra.StringValue `hcl:"securitylake,attr"` + // Serverlessapplicationrepository: string, optional + Serverlessapplicationrepository terra.StringValue `hcl:"serverlessapplicationrepository,attr"` + // Serverlessapprepo: string, optional + Serverlessapprepo terra.StringValue `hcl:"serverlessapprepo,attr"` + // Serverlessrepo: string, optional + Serverlessrepo terra.StringValue `hcl:"serverlessrepo,attr"` + // Servicecatalog: string, optional + Servicecatalog terra.StringValue `hcl:"servicecatalog,attr"` + // Servicecatalogappregistry: string, optional + Servicecatalogappregistry terra.StringValue `hcl:"servicecatalogappregistry,attr"` + // Servicediscovery: string, optional + Servicediscovery terra.StringValue `hcl:"servicediscovery,attr"` + // Servicequotas: string, optional + Servicequotas terra.StringValue `hcl:"servicequotas,attr"` + // Ses: string, optional + Ses terra.StringValue `hcl:"ses,attr"` + // Sesv2: string, optional + Sesv2 terra.StringValue `hcl:"sesv2,attr"` + // Sfn: string, optional + Sfn terra.StringValue `hcl:"sfn,attr"` + // Shield: string, optional + Shield terra.StringValue `hcl:"shield,attr"` + // Signer: string, optional + Signer terra.StringValue `hcl:"signer,attr"` + // Simpledb: string, optional + Simpledb terra.StringValue `hcl:"simpledb,attr"` + // Sns: string, optional + Sns terra.StringValue `hcl:"sns,attr"` + // Sqs: string, optional + Sqs terra.StringValue `hcl:"sqs,attr"` + // Ssm: string, optional + Ssm terra.StringValue `hcl:"ssm,attr"` + // Ssmcontacts: string, optional + Ssmcontacts terra.StringValue `hcl:"ssmcontacts,attr"` + // Ssmincidents: string, optional + Ssmincidents terra.StringValue `hcl:"ssmincidents,attr"` + // Ssmsap: string, optional + Ssmsap terra.StringValue `hcl:"ssmsap,attr"` + // Sso: string, optional + Sso terra.StringValue `hcl:"sso,attr"` + // Ssoadmin: string, optional + Ssoadmin terra.StringValue `hcl:"ssoadmin,attr"` + // Stepfunctions: string, optional + Stepfunctions terra.StringValue `hcl:"stepfunctions,attr"` + // Storagegateway: string, optional + Storagegateway terra.StringValue `hcl:"storagegateway,attr"` + // Sts: string, optional + Sts terra.StringValue `hcl:"sts,attr"` + // Swf: string, optional + Swf terra.StringValue `hcl:"swf,attr"` + // Synthetics: string, optional + Synthetics terra.StringValue `hcl:"synthetics,attr"` + // Timestreamwrite: string, optional + Timestreamwrite terra.StringValue `hcl:"timestreamwrite,attr"` + // Transcribe: string, optional + Transcribe terra.StringValue `hcl:"transcribe,attr"` + // Transcribeservice: string, optional + Transcribeservice terra.StringValue `hcl:"transcribeservice,attr"` + // Transfer: string, optional + Transfer terra.StringValue `hcl:"transfer,attr"` + // Verifiedpermissions: string, optional + Verifiedpermissions terra.StringValue `hcl:"verifiedpermissions,attr"` + // Vpclattice: string, optional + Vpclattice terra.StringValue `hcl:"vpclattice,attr"` + // Waf: string, optional + Waf terra.StringValue `hcl:"waf,attr"` + // Wafregional: string, optional + Wafregional terra.StringValue `hcl:"wafregional,attr"` + // Wafv2: string, optional + Wafv2 terra.StringValue `hcl:"wafv2,attr"` + // Wellarchitected: string, optional + Wellarchitected terra.StringValue `hcl:"wellarchitected,attr"` + // Worklink: string, optional + Worklink terra.StringValue `hcl:"worklink,attr"` + // Workspaces: string, optional + Workspaces terra.StringValue `hcl:"workspaces,attr"` + // Xray: string, optional + Xray terra.StringValue `hcl:"xray,attr"` +} + +type IgnoreTags struct { + // KeyPrefixes: set of string, optional + KeyPrefixes terra.SetValue[terra.StringValue] `hcl:"key_prefixes,attr"` + // Keys: set of string, optional + Keys terra.SetValue[terra.StringValue] `hcl:"keys,attr"` +} + +type AssumeRoleAttributes struct { + ref terra.Reference +} + +func (ar AssumeRoleAttributes) InternalRef() (terra.Reference, error) { + return ar.ref, nil +} + +func (ar AssumeRoleAttributes) InternalWithRef(ref terra.Reference) AssumeRoleAttributes { + return AssumeRoleAttributes{ref: ref} +} + +func (ar AssumeRoleAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ar.ref.InternalTokens() +} + +func (ar AssumeRoleAttributes) Duration() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("duration")) +} + +func (ar AssumeRoleAttributes) ExternalId() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("external_id")) +} + +func (ar AssumeRoleAttributes) Policy() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("policy")) +} + +func (ar AssumeRoleAttributes) PolicyArns() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ar.ref.Append("policy_arns")) +} + +func (ar AssumeRoleAttributes) RoleArn() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("role_arn")) +} + +func (ar AssumeRoleAttributes) SessionName() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("session_name")) +} + +func (ar AssumeRoleAttributes) SourceIdentity() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("source_identity")) +} + +func (ar AssumeRoleAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ar.ref.Append("tags")) +} + +func (ar AssumeRoleAttributes) TransitiveTagKeys() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ar.ref.Append("transitive_tag_keys")) +} + +type AssumeRoleWithWebIdentityAttributes struct { + ref terra.Reference +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalRef() (terra.Reference, error) { + return arwwi.ref, nil +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalWithRef(ref terra.Reference) AssumeRoleWithWebIdentityAttributes { + return AssumeRoleWithWebIdentityAttributes{ref: ref} +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalTokens() (hclwrite.Tokens, error) { + return arwwi.ref.InternalTokens() +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) Duration() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("duration")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) Policy() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("policy")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) PolicyArns() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](arwwi.ref.Append("policy_arns")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) RoleArn() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("role_arn")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) SessionName() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("session_name")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) WebIdentityToken() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("web_identity_token")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) WebIdentityTokenFile() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("web_identity_token_file")) +} + +type DefaultTagsAttributes struct { + ref terra.Reference +} + +func (dt DefaultTagsAttributes) InternalRef() (terra.Reference, error) { + return dt.ref, nil +} + +func (dt DefaultTagsAttributes) InternalWithRef(ref terra.Reference) DefaultTagsAttributes { + return DefaultTagsAttributes{ref: ref} +} + +func (dt DefaultTagsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return dt.ref.InternalTokens() +} + +func (dt DefaultTagsAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](dt.ref.Append("tags")) +} + +type EndpointsAttributes struct { + ref terra.Reference +} + +func (e EndpointsAttributes) InternalRef() (terra.Reference, error) { + return e.ref, nil +} + +func (e EndpointsAttributes) InternalWithRef(ref terra.Reference) EndpointsAttributes { + return EndpointsAttributes{ref: ref} +} + +func (e EndpointsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return e.ref.InternalTokens() +} + +func (e EndpointsAttributes) Accessanalyzer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("accessanalyzer")) +} + +func (e EndpointsAttributes) Account() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("account")) +} + +func (e EndpointsAttributes) Acm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("acm")) +} + +func (e EndpointsAttributes) Acmpca() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("acmpca")) +} + +func (e EndpointsAttributes) Amg() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amg")) +} + +func (e EndpointsAttributes) Amp() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amp")) +} + +func (e EndpointsAttributes) Amplify() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amplify")) +} + +func (e EndpointsAttributes) Apigateway() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apigateway")) +} + +func (e EndpointsAttributes) Apigatewayv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apigatewayv2")) +} + +func (e EndpointsAttributes) Appautoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appautoscaling")) +} + +func (e EndpointsAttributes) Appconfig() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appconfig")) +} + +func (e EndpointsAttributes) Appfabric() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appfabric")) +} + +func (e EndpointsAttributes) Appflow() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appflow")) +} + +func (e EndpointsAttributes) Appintegrations() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appintegrations")) +} + +func (e EndpointsAttributes) Appintegrationsservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appintegrationsservice")) +} + +func (e EndpointsAttributes) Applicationautoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("applicationautoscaling")) +} + +func (e EndpointsAttributes) Applicationinsights() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("applicationinsights")) +} + +func (e EndpointsAttributes) Appmesh() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appmesh")) +} + +func (e EndpointsAttributes) Appregistry() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appregistry")) +} + +func (e EndpointsAttributes) Apprunner() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apprunner")) +} + +func (e EndpointsAttributes) Appstream() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appstream")) +} + +func (e EndpointsAttributes) Appsync() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appsync")) +} + +func (e EndpointsAttributes) Athena() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("athena")) +} + +func (e EndpointsAttributes) Auditmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("auditmanager")) +} + +func (e EndpointsAttributes) Autoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("autoscaling")) +} + +func (e EndpointsAttributes) Autoscalingplans() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("autoscalingplans")) +} + +func (e EndpointsAttributes) Backup() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("backup")) +} + +func (e EndpointsAttributes) Batch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("batch")) +} + +func (e EndpointsAttributes) Beanstalk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("beanstalk")) +} + +func (e EndpointsAttributes) Bedrock() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("bedrock")) +} + +func (e EndpointsAttributes) Bedrockagent() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("bedrockagent")) +} + +func (e EndpointsAttributes) Budgets() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("budgets")) +} + +func (e EndpointsAttributes) Ce() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ce")) +} + +func (e EndpointsAttributes) Chime() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chime")) +} + +func (e EndpointsAttributes) Chimesdkmediapipelines() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chimesdkmediapipelines")) +} + +func (e EndpointsAttributes) Chimesdkvoice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chimesdkvoice")) +} + +func (e EndpointsAttributes) Cleanrooms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cleanrooms")) +} + +func (e EndpointsAttributes) Cloud9() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloud9")) +} + +func (e EndpointsAttributes) Cloudcontrol() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudcontrol")) +} + +func (e EndpointsAttributes) Cloudcontrolapi() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudcontrolapi")) +} + +func (e EndpointsAttributes) Cloudformation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudformation")) +} + +func (e EndpointsAttributes) Cloudfront() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudfront")) +} + +func (e EndpointsAttributes) Cloudfrontkeyvaluestore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudfrontkeyvaluestore")) +} + +func (e EndpointsAttributes) Cloudhsm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudhsm")) +} + +func (e EndpointsAttributes) Cloudhsmv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudhsmv2")) +} + +func (e EndpointsAttributes) Cloudsearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudsearch")) +} + +func (e EndpointsAttributes) Cloudtrail() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudtrail")) +} + +func (e EndpointsAttributes) Cloudwatch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatch")) +} + +func (e EndpointsAttributes) Cloudwatchevents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchevents")) +} + +func (e EndpointsAttributes) Cloudwatchevidently() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchevidently")) +} + +func (e EndpointsAttributes) Cloudwatchlog() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchlog")) +} + +func (e EndpointsAttributes) Cloudwatchlogs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchlogs")) +} + +func (e EndpointsAttributes) Cloudwatchobservabilityaccessmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchobservabilityaccessmanager")) +} + +func (e EndpointsAttributes) Cloudwatchrum() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchrum")) +} + +func (e EndpointsAttributes) Codeartifact() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codeartifact")) +} + +func (e EndpointsAttributes) Codebuild() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codebuild")) +} + +func (e EndpointsAttributes) Codecatalyst() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codecatalyst")) +} + +func (e EndpointsAttributes) Codecommit() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codecommit")) +} + +func (e EndpointsAttributes) Codedeploy() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codedeploy")) +} + +func (e EndpointsAttributes) Codeguruprofiler() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codeguruprofiler")) +} + +func (e EndpointsAttributes) Codegurureviewer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codegurureviewer")) +} + +func (e EndpointsAttributes) Codepipeline() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codepipeline")) +} + +func (e EndpointsAttributes) Codestarconnections() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codestarconnections")) +} + +func (e EndpointsAttributes) Codestarnotifications() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codestarnotifications")) +} + +func (e EndpointsAttributes) Cognitoidentity() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidentity")) +} + +func (e EndpointsAttributes) Cognitoidentityprovider() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidentityprovider")) +} + +func (e EndpointsAttributes) Cognitoidp() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidp")) +} + +func (e EndpointsAttributes) Comprehend() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("comprehend")) +} + +func (e EndpointsAttributes) Computeoptimizer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("computeoptimizer")) +} + +func (e EndpointsAttributes) Config() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("config")) +} + +func (e EndpointsAttributes) Configservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("configservice")) +} + +func (e EndpointsAttributes) Connect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("connect")) +} + +func (e EndpointsAttributes) Connectcases() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("connectcases")) +} + +func (e EndpointsAttributes) Controltower() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("controltower")) +} + +func (e EndpointsAttributes) Costandusagereportservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costandusagereportservice")) +} + +func (e EndpointsAttributes) Costexplorer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costexplorer")) +} + +func (e EndpointsAttributes) Costoptimizationhub() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costoptimizationhub")) +} + +func (e EndpointsAttributes) Cur() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cur")) +} + +func (e EndpointsAttributes) Customerprofiles() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("customerprofiles")) +} + +func (e EndpointsAttributes) Databasemigration() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("databasemigration")) +} + +func (e EndpointsAttributes) Databasemigrationservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("databasemigrationservice")) +} + +func (e EndpointsAttributes) Dataexchange() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dataexchange")) +} + +func (e EndpointsAttributes) Datapipeline() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datapipeline")) +} + +func (e EndpointsAttributes) Datasync() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datasync")) +} + +func (e EndpointsAttributes) Datazone() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datazone")) +} + +func (e EndpointsAttributes) Dax() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dax")) +} + +func (e EndpointsAttributes) Deploy() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("deploy")) +} + +func (e EndpointsAttributes) Detective() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("detective")) +} + +func (e EndpointsAttributes) Devicefarm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("devicefarm")) +} + +func (e EndpointsAttributes) Devopsguru() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("devopsguru")) +} + +func (e EndpointsAttributes) Directconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("directconnect")) +} + +func (e EndpointsAttributes) Directoryservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("directoryservice")) +} + +func (e EndpointsAttributes) Dlm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dlm")) +} + +func (e EndpointsAttributes) Dms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dms")) +} + +func (e EndpointsAttributes) Docdb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("docdb")) +} + +func (e EndpointsAttributes) Docdbelastic() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("docdbelastic")) +} + +func (e EndpointsAttributes) Ds() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ds")) +} + +func (e EndpointsAttributes) Dynamodb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dynamodb")) +} + +func (e EndpointsAttributes) Ec2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ec2")) +} + +func (e EndpointsAttributes) Ecr() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecr")) +} + +func (e EndpointsAttributes) Ecrpublic() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecrpublic")) +} + +func (e EndpointsAttributes) Ecs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecs")) +} + +func (e EndpointsAttributes) Efs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("efs")) +} + +func (e EndpointsAttributes) Eks() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("eks")) +} + +func (e EndpointsAttributes) Elasticache() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticache")) +} + +func (e EndpointsAttributes) Elasticbeanstalk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticbeanstalk")) +} + +func (e EndpointsAttributes) Elasticloadbalancing() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticloadbalancing")) +} + +func (e EndpointsAttributes) Elasticloadbalancingv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticloadbalancingv2")) +} + +func (e EndpointsAttributes) Elasticsearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticsearch")) +} + +func (e EndpointsAttributes) Elasticsearchservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticsearchservice")) +} + +func (e EndpointsAttributes) Elastictranscoder() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elastictranscoder")) +} + +func (e EndpointsAttributes) Elb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elb")) +} + +func (e EndpointsAttributes) Elbv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elbv2")) +} + +func (e EndpointsAttributes) Emr() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emr")) +} + +func (e EndpointsAttributes) Emrcontainers() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emrcontainers")) +} + +func (e EndpointsAttributes) Emrserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emrserverless")) +} + +func (e EndpointsAttributes) Es() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("es")) +} + +func (e EndpointsAttributes) Eventbridge() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("eventbridge")) +} + +func (e EndpointsAttributes) Events() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("events")) +} + +func (e EndpointsAttributes) Evidently() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("evidently")) +} + +func (e EndpointsAttributes) Finspace() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("finspace")) +} + +func (e EndpointsAttributes) Firehose() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("firehose")) +} + +func (e EndpointsAttributes) Fis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fis")) +} + +func (e EndpointsAttributes) Fms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fms")) +} + +func (e EndpointsAttributes) Fsx() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fsx")) +} + +func (e EndpointsAttributes) Gamelift() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("gamelift")) +} + +func (e EndpointsAttributes) Glacier() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("glacier")) +} + +func (e EndpointsAttributes) Globalaccelerator() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("globalaccelerator")) +} + +func (e EndpointsAttributes) Glue() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("glue")) +} + +func (e EndpointsAttributes) Grafana() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("grafana")) +} + +func (e EndpointsAttributes) Greengrass() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("greengrass")) +} + +func (e EndpointsAttributes) Groundstation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("groundstation")) +} + +func (e EndpointsAttributes) Guardduty() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("guardduty")) +} + +func (e EndpointsAttributes) Healthlake() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("healthlake")) +} + +func (e EndpointsAttributes) Iam() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iam")) +} + +func (e EndpointsAttributes) Identitystore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("identitystore")) +} + +func (e EndpointsAttributes) Imagebuilder() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("imagebuilder")) +} + +func (e EndpointsAttributes) Inspector() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspector")) +} + +func (e EndpointsAttributes) Inspector2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspector2")) +} + +func (e EndpointsAttributes) Inspectorv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspectorv2")) +} + +func (e EndpointsAttributes) Internetmonitor() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("internetmonitor")) +} + +func (e EndpointsAttributes) Iot() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iot")) +} + +func (e EndpointsAttributes) Iotanalytics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iotanalytics")) +} + +func (e EndpointsAttributes) Iotevents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iotevents")) +} + +func (e EndpointsAttributes) Ivs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ivs")) +} + +func (e EndpointsAttributes) Ivschat() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ivschat")) +} + +func (e EndpointsAttributes) Kafka() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kafka")) +} + +func (e EndpointsAttributes) Kafkaconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kafkaconnect")) +} + +func (e EndpointsAttributes) Kendra() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kendra")) +} + +func (e EndpointsAttributes) Keyspaces() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("keyspaces")) +} + +func (e EndpointsAttributes) Kinesis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesis")) +} + +func (e EndpointsAttributes) Kinesisanalytics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisanalytics")) +} + +func (e EndpointsAttributes) Kinesisanalyticsv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisanalyticsv2")) +} + +func (e EndpointsAttributes) Kinesisvideo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisvideo")) +} + +func (e EndpointsAttributes) Kms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kms")) +} + +func (e EndpointsAttributes) Lakeformation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lakeformation")) +} + +func (e EndpointsAttributes) Lambda() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lambda")) +} + +func (e EndpointsAttributes) Launchwizard() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("launchwizard")) +} + +func (e EndpointsAttributes) Lex() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lex")) +} + +func (e EndpointsAttributes) Lexmodelbuilding() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelbuilding")) +} + +func (e EndpointsAttributes) Lexmodelbuildingservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelbuildingservice")) +} + +func (e EndpointsAttributes) Lexmodels() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodels")) +} + +func (e EndpointsAttributes) Lexmodelsv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelsv2")) +} + +func (e EndpointsAttributes) Lexv2Models() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexv2models")) +} + +func (e EndpointsAttributes) Licensemanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("licensemanager")) +} + +func (e EndpointsAttributes) Lightsail() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lightsail")) +} + +func (e EndpointsAttributes) Location() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("location")) +} + +func (e EndpointsAttributes) Locationservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("locationservice")) +} + +func (e EndpointsAttributes) Logs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("logs")) +} + +func (e EndpointsAttributes) Lookoutmetrics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lookoutmetrics")) +} + +func (e EndpointsAttributes) M2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("m2")) +} + +func (e EndpointsAttributes) Macie2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("macie2")) +} + +func (e EndpointsAttributes) Managedgrafana() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("managedgrafana")) +} + +func (e EndpointsAttributes) Mediaconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediaconnect")) +} + +func (e EndpointsAttributes) Mediaconvert() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediaconvert")) +} + +func (e EndpointsAttributes) Medialive() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("medialive")) +} + +func (e EndpointsAttributes) Mediapackage() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediapackage")) +} + +func (e EndpointsAttributes) Mediapackagev2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediapackagev2")) +} + +func (e EndpointsAttributes) Mediastore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediastore")) +} + +func (e EndpointsAttributes) Memorydb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("memorydb")) +} + +func (e EndpointsAttributes) Mq() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mq")) +} + +func (e EndpointsAttributes) Msk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("msk")) +} + +func (e EndpointsAttributes) Mwaa() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mwaa")) +} + +func (e EndpointsAttributes) Neptune() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("neptune")) +} + +func (e EndpointsAttributes) Networkfirewall() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("networkfirewall")) +} + +func (e EndpointsAttributes) Networkmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("networkmanager")) +} + +func (e EndpointsAttributes) Oam() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("oam")) +} + +func (e EndpointsAttributes) Opensearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearch")) +} + +func (e EndpointsAttributes) Opensearchingestion() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchingestion")) +} + +func (e EndpointsAttributes) Opensearchserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchserverless")) +} + +func (e EndpointsAttributes) Opensearchservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchservice")) +} + +func (e EndpointsAttributes) Opsworks() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opsworks")) +} + +func (e EndpointsAttributes) Organizations() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("organizations")) +} + +func (e EndpointsAttributes) Osis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("osis")) +} + +func (e EndpointsAttributes) Outposts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("outposts")) +} + +func (e EndpointsAttributes) Paymentcryptography() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("paymentcryptography")) +} + +func (e EndpointsAttributes) Pcaconnectorad() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pcaconnectorad")) +} + +func (e EndpointsAttributes) Pinpoint() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pinpoint")) +} + +func (e EndpointsAttributes) Pipes() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pipes")) +} + +func (e EndpointsAttributes) Polly() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("polly")) +} + +func (e EndpointsAttributes) Pricing() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pricing")) +} + +func (e EndpointsAttributes) Prometheus() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("prometheus")) +} + +func (e EndpointsAttributes) Prometheusservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("prometheusservice")) +} + +func (e EndpointsAttributes) Qbusiness() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("qbusiness")) +} + +func (e EndpointsAttributes) Qldb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("qldb")) +} + +func (e EndpointsAttributes) Quicksight() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("quicksight")) +} + +func (e EndpointsAttributes) Ram() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ram")) +} + +func (e EndpointsAttributes) Rbin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rbin")) +} + +func (e EndpointsAttributes) Rds() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rds")) +} + +func (e EndpointsAttributes) Recyclebin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("recyclebin")) +} + +func (e EndpointsAttributes) Redshift() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshift")) +} + +func (e EndpointsAttributes) Redshiftdata() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftdata")) +} + +func (e EndpointsAttributes) Redshiftdataapiservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftdataapiservice")) +} + +func (e EndpointsAttributes) Redshiftserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftserverless")) +} + +func (e EndpointsAttributes) Rekognition() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rekognition")) +} + +func (e EndpointsAttributes) Resourceexplorer2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourceexplorer2")) +} + +func (e EndpointsAttributes) Resourcegroups() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroups")) +} + +func (e EndpointsAttributes) Resourcegroupstagging() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroupstagging")) +} + +func (e EndpointsAttributes) Resourcegroupstaggingapi() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroupstaggingapi")) +} + +func (e EndpointsAttributes) Rolesanywhere() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rolesanywhere")) +} + +func (e EndpointsAttributes) Route53() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53")) +} + +func (e EndpointsAttributes) Route53Domains() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53domains")) +} + +func (e EndpointsAttributes) Route53Recoverycontrolconfig() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53recoverycontrolconfig")) +} + +func (e EndpointsAttributes) Route53Recoveryreadiness() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53recoveryreadiness")) +} + +func (e EndpointsAttributes) Route53Resolver() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53resolver")) +} + +func (e EndpointsAttributes) Rum() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rum")) +} + +func (e EndpointsAttributes) S3() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3")) +} + +func (e EndpointsAttributes) S3Api() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3api")) +} + +func (e EndpointsAttributes) S3Control() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3control")) +} + +func (e EndpointsAttributes) S3Outposts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3outposts")) +} + +func (e EndpointsAttributes) Sagemaker() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sagemaker")) +} + +func (e EndpointsAttributes) Scheduler() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("scheduler")) +} + +func (e EndpointsAttributes) Schemas() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("schemas")) +} + +func (e EndpointsAttributes) Sdb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sdb")) +} + +func (e EndpointsAttributes) Secretsmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("secretsmanager")) +} + +func (e EndpointsAttributes) Securityhub() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("securityhub")) +} + +func (e EndpointsAttributes) Securitylake() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("securitylake")) +} + +func (e EndpointsAttributes) Serverlessapplicationrepository() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessapplicationrepository")) +} + +func (e EndpointsAttributes) Serverlessapprepo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessapprepo")) +} + +func (e EndpointsAttributes) Serverlessrepo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessrepo")) +} + +func (e EndpointsAttributes) Servicecatalog() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicecatalog")) +} + +func (e EndpointsAttributes) Servicecatalogappregistry() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicecatalogappregistry")) +} + +func (e EndpointsAttributes) Servicediscovery() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicediscovery")) +} + +func (e EndpointsAttributes) Servicequotas() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicequotas")) +} + +func (e EndpointsAttributes) Ses() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ses")) +} + +func (e EndpointsAttributes) Sesv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sesv2")) +} + +func (e EndpointsAttributes) Sfn() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sfn")) +} + +func (e EndpointsAttributes) Shield() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("shield")) +} + +func (e EndpointsAttributes) Signer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("signer")) +} + +func (e EndpointsAttributes) Simpledb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("simpledb")) +} + +func (e EndpointsAttributes) Sns() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sns")) +} + +func (e EndpointsAttributes) Sqs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sqs")) +} + +func (e EndpointsAttributes) Ssm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssm")) +} + +func (e EndpointsAttributes) Ssmcontacts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmcontacts")) +} + +func (e EndpointsAttributes) Ssmincidents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmincidents")) +} + +func (e EndpointsAttributes) Ssmsap() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmsap")) +} + +func (e EndpointsAttributes) Sso() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sso")) +} + +func (e EndpointsAttributes) Ssoadmin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssoadmin")) +} + +func (e EndpointsAttributes) Stepfunctions() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("stepfunctions")) +} + +func (e EndpointsAttributes) Storagegateway() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("storagegateway")) +} + +func (e EndpointsAttributes) Sts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sts")) +} + +func (e EndpointsAttributes) Swf() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("swf")) +} + +func (e EndpointsAttributes) Synthetics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("synthetics")) +} + +func (e EndpointsAttributes) Timestreamwrite() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("timestreamwrite")) +} + +func (e EndpointsAttributes) Transcribe() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transcribe")) +} + +func (e EndpointsAttributes) Transcribeservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transcribeservice")) +} + +func (e EndpointsAttributes) Transfer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transfer")) +} + +func (e EndpointsAttributes) Verifiedpermissions() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("verifiedpermissions")) +} + +func (e EndpointsAttributes) Vpclattice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("vpclattice")) +} + +func (e EndpointsAttributes) Waf() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("waf")) +} + +func (e EndpointsAttributes) Wafregional() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wafregional")) +} + +func (e EndpointsAttributes) Wafv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wafv2")) +} + +func (e EndpointsAttributes) Wellarchitected() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wellarchitected")) +} + +func (e EndpointsAttributes) Worklink() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("worklink")) +} + +func (e EndpointsAttributes) Workspaces() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("workspaces")) +} + +func (e EndpointsAttributes) Xray() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("xray")) +} + +type IgnoreTagsAttributes struct { + ref terra.Reference +} + +func (it IgnoreTagsAttributes) InternalRef() (terra.Reference, error) { + return it.ref, nil +} + +func (it IgnoreTagsAttributes) InternalWithRef(ref terra.Reference) IgnoreTagsAttributes { + return IgnoreTagsAttributes{ref: ref} +} + +func (it IgnoreTagsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return it.ref.InternalTokens() +} + +func (it IgnoreTagsAttributes) KeyPrefixes() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](it.ref.Append("key_prefixes")) +} + +func (it IgnoreTagsAttributes) Keys() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](it.ref.Append("keys")) +} + +type AssumeRoleState struct { + Duration string `json:"duration"` + ExternalId string `json:"external_id"` + Policy string `json:"policy"` + PolicyArns []string `json:"policy_arns"` + RoleArn string `json:"role_arn"` + SessionName string `json:"session_name"` + SourceIdentity string `json:"source_identity"` + Tags map[string]string `json:"tags"` + TransitiveTagKeys []string `json:"transitive_tag_keys"` +} + +type AssumeRoleWithWebIdentityState struct { + Duration string `json:"duration"` + Policy string `json:"policy"` + PolicyArns []string `json:"policy_arns"` + RoleArn string `json:"role_arn"` + SessionName string `json:"session_name"` + WebIdentityToken string `json:"web_identity_token"` + WebIdentityTokenFile string `json:"web_identity_token_file"` +} + +type DefaultTagsState struct { + Tags map[string]string `json:"tags"` +} + +type EndpointsState struct { + Accessanalyzer string `json:"accessanalyzer"` + Account string `json:"account"` + Acm string `json:"acm"` + Acmpca string `json:"acmpca"` + Amg string `json:"amg"` + Amp string `json:"amp"` + Amplify string `json:"amplify"` + Apigateway string `json:"apigateway"` + Apigatewayv2 string `json:"apigatewayv2"` + Appautoscaling string `json:"appautoscaling"` + Appconfig string `json:"appconfig"` + Appfabric string `json:"appfabric"` + Appflow string `json:"appflow"` + Appintegrations string `json:"appintegrations"` + Appintegrationsservice string `json:"appintegrationsservice"` + Applicationautoscaling string `json:"applicationautoscaling"` + Applicationinsights string `json:"applicationinsights"` + Appmesh string `json:"appmesh"` + Appregistry string `json:"appregistry"` + Apprunner string `json:"apprunner"` + Appstream string `json:"appstream"` + Appsync string `json:"appsync"` + Athena string `json:"athena"` + Auditmanager string `json:"auditmanager"` + Autoscaling string `json:"autoscaling"` + Autoscalingplans string `json:"autoscalingplans"` + Backup string `json:"backup"` + Batch string `json:"batch"` + Beanstalk string `json:"beanstalk"` + Bedrock string `json:"bedrock"` + Bedrockagent string `json:"bedrockagent"` + Budgets string `json:"budgets"` + Ce string `json:"ce"` + Chime string `json:"chime"` + Chimesdkmediapipelines string `json:"chimesdkmediapipelines"` + Chimesdkvoice string `json:"chimesdkvoice"` + Cleanrooms string `json:"cleanrooms"` + Cloud9 string `json:"cloud9"` + Cloudcontrol string `json:"cloudcontrol"` + Cloudcontrolapi string `json:"cloudcontrolapi"` + Cloudformation string `json:"cloudformation"` + Cloudfront string `json:"cloudfront"` + Cloudfrontkeyvaluestore string `json:"cloudfrontkeyvaluestore"` + Cloudhsm string `json:"cloudhsm"` + Cloudhsmv2 string `json:"cloudhsmv2"` + Cloudsearch string `json:"cloudsearch"` + Cloudtrail string `json:"cloudtrail"` + Cloudwatch string `json:"cloudwatch"` + Cloudwatchevents string `json:"cloudwatchevents"` + Cloudwatchevidently string `json:"cloudwatchevidently"` + Cloudwatchlog string `json:"cloudwatchlog"` + Cloudwatchlogs string `json:"cloudwatchlogs"` + Cloudwatchobservabilityaccessmanager string `json:"cloudwatchobservabilityaccessmanager"` + Cloudwatchrum string `json:"cloudwatchrum"` + Codeartifact string `json:"codeartifact"` + Codebuild string `json:"codebuild"` + Codecatalyst string `json:"codecatalyst"` + Codecommit string `json:"codecommit"` + Codedeploy string `json:"codedeploy"` + Codeguruprofiler string `json:"codeguruprofiler"` + Codegurureviewer string `json:"codegurureviewer"` + Codepipeline string `json:"codepipeline"` + Codestarconnections string `json:"codestarconnections"` + Codestarnotifications string `json:"codestarnotifications"` + Cognitoidentity string `json:"cognitoidentity"` + Cognitoidentityprovider string `json:"cognitoidentityprovider"` + Cognitoidp string `json:"cognitoidp"` + Comprehend string `json:"comprehend"` + Computeoptimizer string `json:"computeoptimizer"` + Config string `json:"config"` + Configservice string `json:"configservice"` + Connect string `json:"connect"` + Connectcases string `json:"connectcases"` + Controltower string `json:"controltower"` + Costandusagereportservice string `json:"costandusagereportservice"` + Costexplorer string `json:"costexplorer"` + Costoptimizationhub string `json:"costoptimizationhub"` + Cur string `json:"cur"` + Customerprofiles string `json:"customerprofiles"` + Databasemigration string `json:"databasemigration"` + Databasemigrationservice string `json:"databasemigrationservice"` + Dataexchange string `json:"dataexchange"` + Datapipeline string `json:"datapipeline"` + Datasync string `json:"datasync"` + Datazone string `json:"datazone"` + Dax string `json:"dax"` + Deploy string `json:"deploy"` + Detective string `json:"detective"` + Devicefarm string `json:"devicefarm"` + Devopsguru string `json:"devopsguru"` + Directconnect string `json:"directconnect"` + Directoryservice string `json:"directoryservice"` + Dlm string `json:"dlm"` + Dms string `json:"dms"` + Docdb string `json:"docdb"` + Docdbelastic string `json:"docdbelastic"` + Ds string `json:"ds"` + Dynamodb string `json:"dynamodb"` + Ec2 string `json:"ec2"` + Ecr string `json:"ecr"` + Ecrpublic string `json:"ecrpublic"` + Ecs string `json:"ecs"` + Efs string `json:"efs"` + Eks string `json:"eks"` + Elasticache string `json:"elasticache"` + Elasticbeanstalk string `json:"elasticbeanstalk"` + Elasticloadbalancing string `json:"elasticloadbalancing"` + Elasticloadbalancingv2 string `json:"elasticloadbalancingv2"` + Elasticsearch string `json:"elasticsearch"` + Elasticsearchservice string `json:"elasticsearchservice"` + Elastictranscoder string `json:"elastictranscoder"` + Elb string `json:"elb"` + Elbv2 string `json:"elbv2"` + Emr string `json:"emr"` + Emrcontainers string `json:"emrcontainers"` + Emrserverless string `json:"emrserverless"` + Es string `json:"es"` + Eventbridge string `json:"eventbridge"` + Events string `json:"events"` + Evidently string `json:"evidently"` + Finspace string `json:"finspace"` + Firehose string `json:"firehose"` + Fis string `json:"fis"` + Fms string `json:"fms"` + Fsx string `json:"fsx"` + Gamelift string `json:"gamelift"` + Glacier string `json:"glacier"` + Globalaccelerator string `json:"globalaccelerator"` + Glue string `json:"glue"` + Grafana string `json:"grafana"` + Greengrass string `json:"greengrass"` + Groundstation string `json:"groundstation"` + Guardduty string `json:"guardduty"` + Healthlake string `json:"healthlake"` + Iam string `json:"iam"` + Identitystore string `json:"identitystore"` + Imagebuilder string `json:"imagebuilder"` + Inspector string `json:"inspector"` + Inspector2 string `json:"inspector2"` + Inspectorv2 string `json:"inspectorv2"` + Internetmonitor string `json:"internetmonitor"` + Iot string `json:"iot"` + Iotanalytics string `json:"iotanalytics"` + Iotevents string `json:"iotevents"` + Ivs string `json:"ivs"` + Ivschat string `json:"ivschat"` + Kafka string `json:"kafka"` + Kafkaconnect string `json:"kafkaconnect"` + Kendra string `json:"kendra"` + Keyspaces string `json:"keyspaces"` + Kinesis string `json:"kinesis"` + Kinesisanalytics string `json:"kinesisanalytics"` + Kinesisanalyticsv2 string `json:"kinesisanalyticsv2"` + Kinesisvideo string `json:"kinesisvideo"` + Kms string `json:"kms"` + Lakeformation string `json:"lakeformation"` + Lambda string `json:"lambda"` + Launchwizard string `json:"launchwizard"` + Lex string `json:"lex"` + Lexmodelbuilding string `json:"lexmodelbuilding"` + Lexmodelbuildingservice string `json:"lexmodelbuildingservice"` + Lexmodels string `json:"lexmodels"` + Lexmodelsv2 string `json:"lexmodelsv2"` + Lexv2Models string `json:"lexv2models"` + Licensemanager string `json:"licensemanager"` + Lightsail string `json:"lightsail"` + Location string `json:"location"` + Locationservice string `json:"locationservice"` + Logs string `json:"logs"` + Lookoutmetrics string `json:"lookoutmetrics"` + M2 string `json:"m2"` + Macie2 string `json:"macie2"` + Managedgrafana string `json:"managedgrafana"` + Mediaconnect string `json:"mediaconnect"` + Mediaconvert string `json:"mediaconvert"` + Medialive string `json:"medialive"` + Mediapackage string `json:"mediapackage"` + Mediapackagev2 string `json:"mediapackagev2"` + Mediastore string `json:"mediastore"` + Memorydb string `json:"memorydb"` + Mq string `json:"mq"` + Msk string `json:"msk"` + Mwaa string `json:"mwaa"` + Neptune string `json:"neptune"` + Networkfirewall string `json:"networkfirewall"` + Networkmanager string `json:"networkmanager"` + Oam string `json:"oam"` + Opensearch string `json:"opensearch"` + Opensearchingestion string `json:"opensearchingestion"` + Opensearchserverless string `json:"opensearchserverless"` + Opensearchservice string `json:"opensearchservice"` + Opsworks string `json:"opsworks"` + Organizations string `json:"organizations"` + Osis string `json:"osis"` + Outposts string `json:"outposts"` + Paymentcryptography string `json:"paymentcryptography"` + Pcaconnectorad string `json:"pcaconnectorad"` + Pinpoint string `json:"pinpoint"` + Pipes string `json:"pipes"` + Polly string `json:"polly"` + Pricing string `json:"pricing"` + Prometheus string `json:"prometheus"` + Prometheusservice string `json:"prometheusservice"` + Qbusiness string `json:"qbusiness"` + Qldb string `json:"qldb"` + Quicksight string `json:"quicksight"` + Ram string `json:"ram"` + Rbin string `json:"rbin"` + Rds string `json:"rds"` + Recyclebin string `json:"recyclebin"` + Redshift string `json:"redshift"` + Redshiftdata string `json:"redshiftdata"` + Redshiftdataapiservice string `json:"redshiftdataapiservice"` + Redshiftserverless string `json:"redshiftserverless"` + Rekognition string `json:"rekognition"` + Resourceexplorer2 string `json:"resourceexplorer2"` + Resourcegroups string `json:"resourcegroups"` + Resourcegroupstagging string `json:"resourcegroupstagging"` + Resourcegroupstaggingapi string `json:"resourcegroupstaggingapi"` + Rolesanywhere string `json:"rolesanywhere"` + Route53 string `json:"route53"` + Route53Domains string `json:"route53domains"` + Route53Recoverycontrolconfig string `json:"route53recoverycontrolconfig"` + Route53Recoveryreadiness string `json:"route53recoveryreadiness"` + Route53Resolver string `json:"route53resolver"` + Rum string `json:"rum"` + S3 string `json:"s3"` + S3Api string `json:"s3api"` + S3Control string `json:"s3control"` + S3Outposts string `json:"s3outposts"` + Sagemaker string `json:"sagemaker"` + Scheduler string `json:"scheduler"` + Schemas string `json:"schemas"` + Sdb string `json:"sdb"` + Secretsmanager string `json:"secretsmanager"` + Securityhub string `json:"securityhub"` + Securitylake string `json:"securitylake"` + Serverlessapplicationrepository string `json:"serverlessapplicationrepository"` + Serverlessapprepo string `json:"serverlessapprepo"` + Serverlessrepo string `json:"serverlessrepo"` + Servicecatalog string `json:"servicecatalog"` + Servicecatalogappregistry string `json:"servicecatalogappregistry"` + Servicediscovery string `json:"servicediscovery"` + Servicequotas string `json:"servicequotas"` + Ses string `json:"ses"` + Sesv2 string `json:"sesv2"` + Sfn string `json:"sfn"` + Shield string `json:"shield"` + Signer string `json:"signer"` + Simpledb string `json:"simpledb"` + Sns string `json:"sns"` + Sqs string `json:"sqs"` + Ssm string `json:"ssm"` + Ssmcontacts string `json:"ssmcontacts"` + Ssmincidents string `json:"ssmincidents"` + Ssmsap string `json:"ssmsap"` + Sso string `json:"sso"` + Ssoadmin string `json:"ssoadmin"` + Stepfunctions string `json:"stepfunctions"` + Storagegateway string `json:"storagegateway"` + Sts string `json:"sts"` + Swf string `json:"swf"` + Synthetics string `json:"synthetics"` + Timestreamwrite string `json:"timestreamwrite"` + Transcribe string `json:"transcribe"` + Transcribeservice string `json:"transcribeservice"` + Transfer string `json:"transfer"` + Verifiedpermissions string `json:"verifiedpermissions"` + Vpclattice string `json:"vpclattice"` + Waf string `json:"waf"` + Wafregional string `json:"wafregional"` + Wafv2 string `json:"wafv2"` + Wellarchitected string `json:"wellarchitected"` + Worklink string `json:"worklink"` + Workspaces string `json:"workspaces"` + Xray string `json:"xray"` +} + +type IgnoreTagsState struct { + KeyPrefixes []string `json:"key_prefixes"` + Keys []string `json:"keys"` +} +-- out/emr_cluster.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package aws + +import ( + "encoding/json" + "fmt" + "github.com/golingon/lingon/pkg/terra" + "io" + emrcluster "test/out/emrcluster" +) + +// NewEmrCluster creates a new instance of [EmrCluster]. +func NewEmrCluster(name string, args EmrClusterArgs) *EmrCluster { + return &EmrCluster{ + Args: args, + Name: name, + } +} + +var _ terra.Resource = (*EmrCluster)(nil) + +// EmrCluster represents the Terraform resource aws_emr_cluster. +type EmrCluster struct { + Name string + Args EmrClusterArgs + state *emrClusterState + DependsOn terra.Dependencies + Lifecycle *terra.Lifecycle +} + +// Type returns the Terraform object type for [EmrCluster]. +func (ec *EmrCluster) Type() string { + return "aws_emr_cluster" +} + +// LocalName returns the local name for [EmrCluster]. +func (ec *EmrCluster) LocalName() string { + return ec.Name +} + +// Configuration returns the configuration (args) for [EmrCluster]. +func (ec *EmrCluster) Configuration() interface{} { + return ec.Args +} + +// DependOn is used for other resources to depend on [EmrCluster]. +func (ec *EmrCluster) DependOn() terra.Reference { + return terra.ReferenceResource(ec) +} + +// Dependencies returns the list of resources [EmrCluster] depends_on. +func (ec *EmrCluster) Dependencies() terra.Dependencies { + return ec.DependsOn +} + +// LifecycleManagement returns the lifecycle block for [EmrCluster]. +func (ec *EmrCluster) LifecycleManagement() *terra.Lifecycle { + return ec.Lifecycle +} + +// Attributes returns the attributes for [EmrCluster]. +func (ec *EmrCluster) Attributes() emrClusterAttributes { + return emrClusterAttributes{ref: terra.ReferenceResource(ec)} +} + +// ImportState imports the given attribute values into [EmrCluster]'s state. +func (ec *EmrCluster) ImportState(av io.Reader) error { + ec.state = &emrClusterState{} + if err := json.NewDecoder(av).Decode(ec.state); err != nil { + return fmt.Errorf("decoding state into resource %s.%s: %w", ec.Type(), ec.LocalName(), err) + } + return nil +} + +// State returns the state and a bool indicating if [EmrCluster] has state. +func (ec *EmrCluster) State() (*emrClusterState, bool) { + return ec.state, ec.state != nil +} + +// StateMust returns the state for [EmrCluster]. Panics if the state is nil. +func (ec *EmrCluster) StateMust() *emrClusterState { + if ec.state == nil { + panic(fmt.Sprintf("state is nil for resource %s.%s", ec.Type(), ec.LocalName())) + } + return ec.state +} + +// EmrClusterArgs contains the configurations for aws_emr_cluster. +type EmrClusterArgs struct { + // AdditionalInfo: string, optional + AdditionalInfo terra.StringValue `hcl:"additional_info,attr"` + // Applications: set of string, optional + Applications terra.SetValue[terra.StringValue] `hcl:"applications,attr"` + // AutoscalingRole: string, optional + AutoscalingRole terra.StringValue `hcl:"autoscaling_role,attr"` + // Configurations: string, optional + Configurations terra.StringValue `hcl:"configurations,attr"` + // ConfigurationsJson: string, optional + ConfigurationsJson terra.StringValue `hcl:"configurations_json,attr"` + // CustomAmiId: string, optional + CustomAmiId terra.StringValue `hcl:"custom_ami_id,attr"` + // EbsRootVolumeSize: number, optional + EbsRootVolumeSize terra.NumberValue `hcl:"ebs_root_volume_size,attr"` + // Id: string, optional + Id terra.StringValue `hcl:"id,attr"` + // KeepJobFlowAliveWhenNoSteps: bool, optional + KeepJobFlowAliveWhenNoSteps terra.BoolValue `hcl:"keep_job_flow_alive_when_no_steps,attr"` + // ListStepsStates: set of string, optional + ListStepsStates terra.SetValue[terra.StringValue] `hcl:"list_steps_states,attr"` + // LogEncryptionKmsKeyId: string, optional + LogEncryptionKmsKeyId terra.StringValue `hcl:"log_encryption_kms_key_id,attr"` + // LogUri: string, optional + LogUri terra.StringValue `hcl:"log_uri,attr"` + // Name: string, required + Name terra.StringValue `hcl:"name,attr" validate:"required"` + // ReleaseLabel: string, required + ReleaseLabel terra.StringValue `hcl:"release_label,attr" validate:"required"` + // ScaleDownBehavior: string, optional + ScaleDownBehavior terra.StringValue `hcl:"scale_down_behavior,attr"` + // SecurityConfiguration: string, optional + SecurityConfiguration terra.StringValue `hcl:"security_configuration,attr"` + // ServiceRole: string, required + ServiceRole terra.StringValue `hcl:"service_role,attr" validate:"required"` + // StepConcurrencyLevel: number, optional + StepConcurrencyLevel terra.NumberValue `hcl:"step_concurrency_level,attr"` + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` + // TagsAll: map of string, optional + TagsAll terra.MapValue[terra.StringValue] `hcl:"tags_all,attr"` + // TerminationProtection: bool, optional + TerminationProtection terra.BoolValue `hcl:"termination_protection,attr"` + // UnhealthyNodeReplacement: bool, optional + UnhealthyNodeReplacement terra.BoolValue `hcl:"unhealthy_node_replacement,attr"` + // VisibleToAllUsers: bool, optional + VisibleToAllUsers terra.BoolValue `hcl:"visible_to_all_users,attr"` + // PlacementGroupConfig: min=0 + PlacementGroupConfig []emrcluster.PlacementGroupConfig `hcl:"placement_group_config,block" validate:"min=0"` + // Step: min=0 + Step []emrcluster.Step `hcl:"step,block" validate:"min=0"` + // AutoTerminationPolicy: optional + AutoTerminationPolicy *emrcluster.AutoTerminationPolicy `hcl:"auto_termination_policy,block"` + // BootstrapAction: min=0 + BootstrapAction []emrcluster.BootstrapAction `hcl:"bootstrap_action,block" validate:"min=0"` + // CoreInstanceFleet: optional + CoreInstanceFleet *emrcluster.CoreInstanceFleet `hcl:"core_instance_fleet,block"` + // CoreInstanceGroup: optional + CoreInstanceGroup *emrcluster.CoreInstanceGroup `hcl:"core_instance_group,block"` + // Ec2Attributes: optional + Ec2Attributes *emrcluster.Ec2Attributes `hcl:"ec2_attributes,block"` + // KerberosAttributes: optional + KerberosAttributes *emrcluster.KerberosAttributes `hcl:"kerberos_attributes,block"` + // MasterInstanceFleet: optional + MasterInstanceFleet *emrcluster.MasterInstanceFleet `hcl:"master_instance_fleet,block"` + // MasterInstanceGroup: optional + MasterInstanceGroup *emrcluster.MasterInstanceGroup `hcl:"master_instance_group,block"` +} +type emrClusterAttributes struct { + ref terra.Reference +} + +// AdditionalInfo returns a reference to field additional_info of aws_emr_cluster. +func (ec emrClusterAttributes) AdditionalInfo() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("additional_info")) +} + +// Applications returns a reference to field applications of aws_emr_cluster. +func (ec emrClusterAttributes) Applications() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ec.ref.Append("applications")) +} + +// Arn returns a reference to field arn of aws_emr_cluster. +func (ec emrClusterAttributes) Arn() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("arn")) +} + +// AutoscalingRole returns a reference to field autoscaling_role of aws_emr_cluster. +func (ec emrClusterAttributes) AutoscalingRole() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("autoscaling_role")) +} + +// ClusterState returns a reference to field cluster_state of aws_emr_cluster. +func (ec emrClusterAttributes) ClusterState() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("cluster_state")) +} + +// Configurations returns a reference to field configurations of aws_emr_cluster. +func (ec emrClusterAttributes) Configurations() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("configurations")) +} + +// ConfigurationsJson returns a reference to field configurations_json of aws_emr_cluster. +func (ec emrClusterAttributes) ConfigurationsJson() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("configurations_json")) +} + +// CustomAmiId returns a reference to field custom_ami_id of aws_emr_cluster. +func (ec emrClusterAttributes) CustomAmiId() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("custom_ami_id")) +} + +// EbsRootVolumeSize returns a reference to field ebs_root_volume_size of aws_emr_cluster. +func (ec emrClusterAttributes) EbsRootVolumeSize() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("ebs_root_volume_size")) +} + +// Id returns a reference to field id of aws_emr_cluster. +func (ec emrClusterAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("id")) +} + +// KeepJobFlowAliveWhenNoSteps returns a reference to field keep_job_flow_alive_when_no_steps of aws_emr_cluster. +func (ec emrClusterAttributes) KeepJobFlowAliveWhenNoSteps() terra.BoolValue { + return terra.ReferenceAsBool(ec.ref.Append("keep_job_flow_alive_when_no_steps")) +} + +// ListStepsStates returns a reference to field list_steps_states of aws_emr_cluster. +func (ec emrClusterAttributes) ListStepsStates() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ec.ref.Append("list_steps_states")) +} + +// LogEncryptionKmsKeyId returns a reference to field log_encryption_kms_key_id of aws_emr_cluster. +func (ec emrClusterAttributes) LogEncryptionKmsKeyId() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("log_encryption_kms_key_id")) +} + +// LogUri returns a reference to field log_uri of aws_emr_cluster. +func (ec emrClusterAttributes) LogUri() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("log_uri")) +} + +// MasterPublicDns returns a reference to field master_public_dns of aws_emr_cluster. +func (ec emrClusterAttributes) MasterPublicDns() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("master_public_dns")) +} + +// Name returns a reference to field name of aws_emr_cluster. +func (ec emrClusterAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("name")) +} + +// ReleaseLabel returns a reference to field release_label of aws_emr_cluster. +func (ec emrClusterAttributes) ReleaseLabel() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("release_label")) +} + +// ScaleDownBehavior returns a reference to field scale_down_behavior of aws_emr_cluster. +func (ec emrClusterAttributes) ScaleDownBehavior() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("scale_down_behavior")) +} + +// SecurityConfiguration returns a reference to field security_configuration of aws_emr_cluster. +func (ec emrClusterAttributes) SecurityConfiguration() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("security_configuration")) +} + +// ServiceRole returns a reference to field service_role of aws_emr_cluster. +func (ec emrClusterAttributes) ServiceRole() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("service_role")) +} + +// StepConcurrencyLevel returns a reference to field step_concurrency_level of aws_emr_cluster. +func (ec emrClusterAttributes) StepConcurrencyLevel() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("step_concurrency_level")) +} + +// Tags returns a reference to field tags of aws_emr_cluster. +func (ec emrClusterAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ec.ref.Append("tags")) +} + +// TagsAll returns a reference to field tags_all of aws_emr_cluster. +func (ec emrClusterAttributes) TagsAll() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ec.ref.Append("tags_all")) +} + +// TerminationProtection returns a reference to field termination_protection of aws_emr_cluster. +func (ec emrClusterAttributes) TerminationProtection() terra.BoolValue { + return terra.ReferenceAsBool(ec.ref.Append("termination_protection")) +} + +// UnhealthyNodeReplacement returns a reference to field unhealthy_node_replacement of aws_emr_cluster. +func (ec emrClusterAttributes) UnhealthyNodeReplacement() terra.BoolValue { + return terra.ReferenceAsBool(ec.ref.Append("unhealthy_node_replacement")) +} + +// VisibleToAllUsers returns a reference to field visible_to_all_users of aws_emr_cluster. +func (ec emrClusterAttributes) VisibleToAllUsers() terra.BoolValue { + return terra.ReferenceAsBool(ec.ref.Append("visible_to_all_users")) +} + +func (ec emrClusterAttributes) PlacementGroupConfig() terra.ListValue[emrcluster.PlacementGroupConfigAttributes] { + return terra.ReferenceAsList[emrcluster.PlacementGroupConfigAttributes](ec.ref.Append("placement_group_config")) +} + +func (ec emrClusterAttributes) Step() terra.ListValue[emrcluster.StepAttributes] { + return terra.ReferenceAsList[emrcluster.StepAttributes](ec.ref.Append("step")) +} + +func (ec emrClusterAttributes) AutoTerminationPolicy() terra.ListValue[emrcluster.AutoTerminationPolicyAttributes] { + return terra.ReferenceAsList[emrcluster.AutoTerminationPolicyAttributes](ec.ref.Append("auto_termination_policy")) +} + +func (ec emrClusterAttributes) BootstrapAction() terra.ListValue[emrcluster.BootstrapActionAttributes] { + return terra.ReferenceAsList[emrcluster.BootstrapActionAttributes](ec.ref.Append("bootstrap_action")) +} + +func (ec emrClusterAttributes) CoreInstanceFleet() terra.ListValue[emrcluster.CoreInstanceFleetAttributes] { + return terra.ReferenceAsList[emrcluster.CoreInstanceFleetAttributes](ec.ref.Append("core_instance_fleet")) +} + +func (ec emrClusterAttributes) CoreInstanceGroup() terra.ListValue[emrcluster.CoreInstanceGroupAttributes] { + return terra.ReferenceAsList[emrcluster.CoreInstanceGroupAttributes](ec.ref.Append("core_instance_group")) +} + +func (ec emrClusterAttributes) Ec2Attributes() terra.ListValue[emrcluster.Ec2AttributesAttributes] { + return terra.ReferenceAsList[emrcluster.Ec2AttributesAttributes](ec.ref.Append("ec2_attributes")) +} + +func (ec emrClusterAttributes) KerberosAttributes() terra.ListValue[emrcluster.KerberosAttributesAttributes] { + return terra.ReferenceAsList[emrcluster.KerberosAttributesAttributes](ec.ref.Append("kerberos_attributes")) +} + +func (ec emrClusterAttributes) MasterInstanceFleet() terra.ListValue[emrcluster.MasterInstanceFleetAttributes] { + return terra.ReferenceAsList[emrcluster.MasterInstanceFleetAttributes](ec.ref.Append("master_instance_fleet")) +} + +func (ec emrClusterAttributes) MasterInstanceGroup() terra.ListValue[emrcluster.MasterInstanceGroupAttributes] { + return terra.ReferenceAsList[emrcluster.MasterInstanceGroupAttributes](ec.ref.Append("master_instance_group")) +} + +type emrClusterState struct { + AdditionalInfo string `json:"additional_info"` + Applications []string `json:"applications"` + Arn string `json:"arn"` + AutoscalingRole string `json:"autoscaling_role"` + ClusterState string `json:"cluster_state"` + Configurations string `json:"configurations"` + ConfigurationsJson string `json:"configurations_json"` + CustomAmiId string `json:"custom_ami_id"` + EbsRootVolumeSize float64 `json:"ebs_root_volume_size"` + Id string `json:"id"` + KeepJobFlowAliveWhenNoSteps bool `json:"keep_job_flow_alive_when_no_steps"` + ListStepsStates []string `json:"list_steps_states"` + LogEncryptionKmsKeyId string `json:"log_encryption_kms_key_id"` + LogUri string `json:"log_uri"` + MasterPublicDns string `json:"master_public_dns"` + Name string `json:"name"` + ReleaseLabel string `json:"release_label"` + ScaleDownBehavior string `json:"scale_down_behavior"` + SecurityConfiguration string `json:"security_configuration"` + ServiceRole string `json:"service_role"` + StepConcurrencyLevel float64 `json:"step_concurrency_level"` + Tags map[string]string `json:"tags"` + TagsAll map[string]string `json:"tags_all"` + TerminationProtection bool `json:"termination_protection"` + UnhealthyNodeReplacement bool `json:"unhealthy_node_replacement"` + VisibleToAllUsers bool `json:"visible_to_all_users"` + PlacementGroupConfig []emrcluster.PlacementGroupConfigState `json:"placement_group_config"` + Step []emrcluster.StepState `json:"step"` + AutoTerminationPolicy []emrcluster.AutoTerminationPolicyState `json:"auto_termination_policy"` + BootstrapAction []emrcluster.BootstrapActionState `json:"bootstrap_action"` + CoreInstanceFleet []emrcluster.CoreInstanceFleetState `json:"core_instance_fleet"` + CoreInstanceGroup []emrcluster.CoreInstanceGroupState `json:"core_instance_group"` + Ec2Attributes []emrcluster.Ec2AttributesState `json:"ec2_attributes"` + KerberosAttributes []emrcluster.KerberosAttributesState `json:"kerberos_attributes"` + MasterInstanceFleet []emrcluster.MasterInstanceFleetState `json:"master_instance_fleet"` + MasterInstanceGroup []emrcluster.MasterInstanceGroupState `json:"master_instance_group"` +} +-- out/emrcluster/emr_cluster.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package emrcluster + +import ( + terra "github.com/golingon/lingon/pkg/terra" + hclwrite "github.com/hashicorp/hcl/v2/hclwrite" +) + +type PlacementGroupConfig struct { + // InstanceRole: string, optional + InstanceRole terra.StringValue `hcl:"instance_role,attr"` + // PlacementStrategy: string, optional + PlacementStrategy terra.StringValue `hcl:"placement_strategy,attr"` +} + +type Step struct { + // ActionOnFailure: string, optional + ActionOnFailure terra.StringValue `hcl:"action_on_failure,attr"` + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // HadoopJarStep: min=0 + HadoopJarStep []HadoopJarStep `hcl:"hadoop_jar_step,block" validate:"min=0"` +} + +type HadoopJarStep struct { + // Args: list of string, optional + Args terra.ListValue[terra.StringValue] `hcl:"args,attr"` + // Jar: string, optional + Jar terra.StringValue `hcl:"jar,attr"` + // MainClass: string, optional + MainClass terra.StringValue `hcl:"main_class,attr"` + // Properties: map of string, optional + Properties terra.MapValue[terra.StringValue] `hcl:"properties,attr"` +} + +type AutoTerminationPolicy struct { + // IdleTimeout: number, optional + IdleTimeout terra.NumberValue `hcl:"idle_timeout,attr"` +} + +type BootstrapAction struct { + // Args: list of string, optional + Args terra.ListValue[terra.StringValue] `hcl:"args,attr"` + // Name: string, required + Name terra.StringValue `hcl:"name,attr" validate:"required"` + // Path: string, required + Path terra.StringValue `hcl:"path,attr" validate:"required"` +} + +type CoreInstanceFleet struct { + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // TargetOnDemandCapacity: number, optional + TargetOnDemandCapacity terra.NumberValue `hcl:"target_on_demand_capacity,attr"` + // TargetSpotCapacity: number, optional + TargetSpotCapacity terra.NumberValue `hcl:"target_spot_capacity,attr"` + // CoreInstanceFleetInstanceTypeConfigs: min=0 + InstanceTypeConfigs []CoreInstanceFleetInstanceTypeConfigs `hcl:"instance_type_configs,block" validate:"min=0"` + // CoreInstanceFleetLaunchSpecifications: optional + LaunchSpecifications *CoreInstanceFleetLaunchSpecifications `hcl:"launch_specifications,block"` +} + +type CoreInstanceFleetInstanceTypeConfigs struct { + // BidPrice: string, optional + BidPrice terra.StringValue `hcl:"bid_price,attr"` + // BidPriceAsPercentageOfOnDemandPrice: number, optional + BidPriceAsPercentageOfOnDemandPrice terra.NumberValue `hcl:"bid_price_as_percentage_of_on_demand_price,attr"` + // InstanceType: string, required + InstanceType terra.StringValue `hcl:"instance_type,attr" validate:"required"` + // WeightedCapacity: number, optional + WeightedCapacity terra.NumberValue `hcl:"weighted_capacity,attr"` + // CoreInstanceFleetInstanceTypeConfigsConfigurations: min=0 + Configurations []CoreInstanceFleetInstanceTypeConfigsConfigurations `hcl:"configurations,block" validate:"min=0"` + // CoreInstanceFleetInstanceTypeConfigsEbsConfig: min=0 + EbsConfig []CoreInstanceFleetInstanceTypeConfigsEbsConfig `hcl:"ebs_config,block" validate:"min=0"` +} + +type CoreInstanceFleetInstanceTypeConfigsConfigurations struct { + // Classification: string, optional + Classification terra.StringValue `hcl:"classification,attr"` + // Properties: map of string, optional + Properties terra.MapValue[terra.StringValue] `hcl:"properties,attr"` +} + +type CoreInstanceFleetInstanceTypeConfigsEbsConfig struct { + // Iops: number, optional + Iops terra.NumberValue `hcl:"iops,attr"` + // Size: number, required + Size terra.NumberValue `hcl:"size,attr" validate:"required"` + // Type: string, required + Type terra.StringValue `hcl:"type,attr" validate:"required"` + // VolumesPerInstance: number, optional + VolumesPerInstance terra.NumberValue `hcl:"volumes_per_instance,attr"` +} + +type CoreInstanceFleetLaunchSpecifications struct { + // CoreInstanceFleetLaunchSpecificationsOnDemandSpecification: min=0 + OnDemandSpecification []CoreInstanceFleetLaunchSpecificationsOnDemandSpecification `hcl:"on_demand_specification,block" validate:"min=0"` + // CoreInstanceFleetLaunchSpecificationsSpotSpecification: min=0 + SpotSpecification []CoreInstanceFleetLaunchSpecificationsSpotSpecification `hcl:"spot_specification,block" validate:"min=0"` +} + +type CoreInstanceFleetLaunchSpecificationsOnDemandSpecification struct { + // AllocationStrategy: string, required + AllocationStrategy terra.StringValue `hcl:"allocation_strategy,attr" validate:"required"` +} + +type CoreInstanceFleetLaunchSpecificationsSpotSpecification struct { + // AllocationStrategy: string, required + AllocationStrategy terra.StringValue `hcl:"allocation_strategy,attr" validate:"required"` + // BlockDurationMinutes: number, optional + BlockDurationMinutes terra.NumberValue `hcl:"block_duration_minutes,attr"` + // TimeoutAction: string, required + TimeoutAction terra.StringValue `hcl:"timeout_action,attr" validate:"required"` + // TimeoutDurationMinutes: number, required + TimeoutDurationMinutes terra.NumberValue `hcl:"timeout_duration_minutes,attr" validate:"required"` +} + +type CoreInstanceGroup struct { + // AutoscalingPolicy: string, optional + AutoscalingPolicy terra.StringValue `hcl:"autoscaling_policy,attr"` + // BidPrice: string, optional + BidPrice terra.StringValue `hcl:"bid_price,attr"` + // InstanceCount: number, optional + InstanceCount terra.NumberValue `hcl:"instance_count,attr"` + // InstanceType: string, required + InstanceType terra.StringValue `hcl:"instance_type,attr" validate:"required"` + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // CoreInstanceGroupEbsConfig: min=0 + EbsConfig []CoreInstanceGroupEbsConfig `hcl:"ebs_config,block" validate:"min=0"` +} + +type CoreInstanceGroupEbsConfig struct { + // Iops: number, optional + Iops terra.NumberValue `hcl:"iops,attr"` + // Size: number, required + Size terra.NumberValue `hcl:"size,attr" validate:"required"` + // Throughput: number, optional + Throughput terra.NumberValue `hcl:"throughput,attr"` + // Type: string, required + Type terra.StringValue `hcl:"type,attr" validate:"required"` + // VolumesPerInstance: number, optional + VolumesPerInstance terra.NumberValue `hcl:"volumes_per_instance,attr"` +} + +type Ec2Attributes struct { + // AdditionalMasterSecurityGroups: string, optional + AdditionalMasterSecurityGroups terra.StringValue `hcl:"additional_master_security_groups,attr"` + // AdditionalSlaveSecurityGroups: string, optional + AdditionalSlaveSecurityGroups terra.StringValue `hcl:"additional_slave_security_groups,attr"` + // EmrManagedMasterSecurityGroup: string, optional + EmrManagedMasterSecurityGroup terra.StringValue `hcl:"emr_managed_master_security_group,attr"` + // EmrManagedSlaveSecurityGroup: string, optional + EmrManagedSlaveSecurityGroup terra.StringValue `hcl:"emr_managed_slave_security_group,attr"` + // InstanceProfile: string, required + InstanceProfile terra.StringValue `hcl:"instance_profile,attr" validate:"required"` + // KeyName: string, optional + KeyName terra.StringValue `hcl:"key_name,attr"` + // ServiceAccessSecurityGroup: string, optional + ServiceAccessSecurityGroup terra.StringValue `hcl:"service_access_security_group,attr"` + // SubnetId: string, optional + SubnetId terra.StringValue `hcl:"subnet_id,attr"` + // SubnetIds: set of string, optional + SubnetIds terra.SetValue[terra.StringValue] `hcl:"subnet_ids,attr"` +} + +type KerberosAttributes struct { + // AdDomainJoinPassword: string, optional + AdDomainJoinPassword terra.StringValue `hcl:"ad_domain_join_password,attr"` + // AdDomainJoinUser: string, optional + AdDomainJoinUser terra.StringValue `hcl:"ad_domain_join_user,attr"` + // CrossRealmTrustPrincipalPassword: string, optional + CrossRealmTrustPrincipalPassword terra.StringValue `hcl:"cross_realm_trust_principal_password,attr"` + // KdcAdminPassword: string, required + KdcAdminPassword terra.StringValue `hcl:"kdc_admin_password,attr" validate:"required"` + // Realm: string, required + Realm terra.StringValue `hcl:"realm,attr" validate:"required"` +} + +type MasterInstanceFleet struct { + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // TargetOnDemandCapacity: number, optional + TargetOnDemandCapacity terra.NumberValue `hcl:"target_on_demand_capacity,attr"` + // TargetSpotCapacity: number, optional + TargetSpotCapacity terra.NumberValue `hcl:"target_spot_capacity,attr"` + // MasterInstanceFleetInstanceTypeConfigs: min=0 + InstanceTypeConfigs []MasterInstanceFleetInstanceTypeConfigs `hcl:"instance_type_configs,block" validate:"min=0"` + // MasterInstanceFleetLaunchSpecifications: optional + LaunchSpecifications *MasterInstanceFleetLaunchSpecifications `hcl:"launch_specifications,block"` +} + +type MasterInstanceFleetInstanceTypeConfigs struct { + // BidPrice: string, optional + BidPrice terra.StringValue `hcl:"bid_price,attr"` + // BidPriceAsPercentageOfOnDemandPrice: number, optional + BidPriceAsPercentageOfOnDemandPrice terra.NumberValue `hcl:"bid_price_as_percentage_of_on_demand_price,attr"` + // InstanceType: string, required + InstanceType terra.StringValue `hcl:"instance_type,attr" validate:"required"` + // WeightedCapacity: number, optional + WeightedCapacity terra.NumberValue `hcl:"weighted_capacity,attr"` + // MasterInstanceFleetInstanceTypeConfigsConfigurations: min=0 + Configurations []MasterInstanceFleetInstanceTypeConfigsConfigurations `hcl:"configurations,block" validate:"min=0"` + // MasterInstanceFleetInstanceTypeConfigsEbsConfig: min=0 + EbsConfig []MasterInstanceFleetInstanceTypeConfigsEbsConfig `hcl:"ebs_config,block" validate:"min=0"` +} + +type MasterInstanceFleetInstanceTypeConfigsConfigurations struct { + // Classification: string, optional + Classification terra.StringValue `hcl:"classification,attr"` + // Properties: map of string, optional + Properties terra.MapValue[terra.StringValue] `hcl:"properties,attr"` +} + +type MasterInstanceFleetInstanceTypeConfigsEbsConfig struct { + // Iops: number, optional + Iops terra.NumberValue `hcl:"iops,attr"` + // Size: number, required + Size terra.NumberValue `hcl:"size,attr" validate:"required"` + // Type: string, required + Type terra.StringValue `hcl:"type,attr" validate:"required"` + // VolumesPerInstance: number, optional + VolumesPerInstance terra.NumberValue `hcl:"volumes_per_instance,attr"` +} + +type MasterInstanceFleetLaunchSpecifications struct { + // MasterInstanceFleetLaunchSpecificationsOnDemandSpecification: min=0 + OnDemandSpecification []MasterInstanceFleetLaunchSpecificationsOnDemandSpecification `hcl:"on_demand_specification,block" validate:"min=0"` + // MasterInstanceFleetLaunchSpecificationsSpotSpecification: min=0 + SpotSpecification []MasterInstanceFleetLaunchSpecificationsSpotSpecification `hcl:"spot_specification,block" validate:"min=0"` +} + +type MasterInstanceFleetLaunchSpecificationsOnDemandSpecification struct { + // AllocationStrategy: string, required + AllocationStrategy terra.StringValue `hcl:"allocation_strategy,attr" validate:"required"` +} + +type MasterInstanceFleetLaunchSpecificationsSpotSpecification struct { + // AllocationStrategy: string, required + AllocationStrategy terra.StringValue `hcl:"allocation_strategy,attr" validate:"required"` + // BlockDurationMinutes: number, optional + BlockDurationMinutes terra.NumberValue `hcl:"block_duration_minutes,attr"` + // TimeoutAction: string, required + TimeoutAction terra.StringValue `hcl:"timeout_action,attr" validate:"required"` + // TimeoutDurationMinutes: number, required + TimeoutDurationMinutes terra.NumberValue `hcl:"timeout_duration_minutes,attr" validate:"required"` +} + +type MasterInstanceGroup struct { + // BidPrice: string, optional + BidPrice terra.StringValue `hcl:"bid_price,attr"` + // InstanceCount: number, optional + InstanceCount terra.NumberValue `hcl:"instance_count,attr"` + // InstanceType: string, required + InstanceType terra.StringValue `hcl:"instance_type,attr" validate:"required"` + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // MasterInstanceGroupEbsConfig: min=0 + EbsConfig []MasterInstanceGroupEbsConfig `hcl:"ebs_config,block" validate:"min=0"` +} + +type MasterInstanceGroupEbsConfig struct { + // Iops: number, optional + Iops terra.NumberValue `hcl:"iops,attr"` + // Size: number, required + Size terra.NumberValue `hcl:"size,attr" validate:"required"` + // Throughput: number, optional + Throughput terra.NumberValue `hcl:"throughput,attr"` + // Type: string, required + Type terra.StringValue `hcl:"type,attr" validate:"required"` + // VolumesPerInstance: number, optional + VolumesPerInstance terra.NumberValue `hcl:"volumes_per_instance,attr"` +} + +type PlacementGroupConfigAttributes struct { + ref terra.Reference +} + +func (pgc PlacementGroupConfigAttributes) InternalRef() (terra.Reference, error) { + return pgc.ref, nil +} + +func (pgc PlacementGroupConfigAttributes) InternalWithRef(ref terra.Reference) PlacementGroupConfigAttributes { + return PlacementGroupConfigAttributes{ref: ref} +} + +func (pgc PlacementGroupConfigAttributes) InternalTokens() (hclwrite.Tokens, error) { + return pgc.ref.InternalTokens() +} + +func (pgc PlacementGroupConfigAttributes) InstanceRole() terra.StringValue { + return terra.ReferenceAsString(pgc.ref.Append("instance_role")) +} + +func (pgc PlacementGroupConfigAttributes) PlacementStrategy() terra.StringValue { + return terra.ReferenceAsString(pgc.ref.Append("placement_strategy")) +} + +type StepAttributes struct { + ref terra.Reference +} + +func (s StepAttributes) InternalRef() (terra.Reference, error) { + return s.ref, nil +} + +func (s StepAttributes) InternalWithRef(ref terra.Reference) StepAttributes { + return StepAttributes{ref: ref} +} + +func (s StepAttributes) InternalTokens() (hclwrite.Tokens, error) { + return s.ref.InternalTokens() +} + +func (s StepAttributes) ActionOnFailure() terra.StringValue { + return terra.ReferenceAsString(s.ref.Append("action_on_failure")) +} + +func (s StepAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(s.ref.Append("name")) +} + +func (s StepAttributes) HadoopJarStep() terra.ListValue[HadoopJarStepAttributes] { + return terra.ReferenceAsList[HadoopJarStepAttributes](s.ref.Append("hadoop_jar_step")) +} + +type HadoopJarStepAttributes struct { + ref terra.Reference +} + +func (hjs HadoopJarStepAttributes) InternalRef() (terra.Reference, error) { + return hjs.ref, nil +} + +func (hjs HadoopJarStepAttributes) InternalWithRef(ref terra.Reference) HadoopJarStepAttributes { + return HadoopJarStepAttributes{ref: ref} +} + +func (hjs HadoopJarStepAttributes) InternalTokens() (hclwrite.Tokens, error) { + return hjs.ref.InternalTokens() +} + +func (hjs HadoopJarStepAttributes) Args() terra.ListValue[terra.StringValue] { + return terra.ReferenceAsList[terra.StringValue](hjs.ref.Append("args")) +} + +func (hjs HadoopJarStepAttributes) Jar() terra.StringValue { + return terra.ReferenceAsString(hjs.ref.Append("jar")) +} + +func (hjs HadoopJarStepAttributes) MainClass() terra.StringValue { + return terra.ReferenceAsString(hjs.ref.Append("main_class")) +} + +func (hjs HadoopJarStepAttributes) Properties() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](hjs.ref.Append("properties")) +} + +type AutoTerminationPolicyAttributes struct { + ref terra.Reference +} + +func (atp AutoTerminationPolicyAttributes) InternalRef() (terra.Reference, error) { + return atp.ref, nil +} + +func (atp AutoTerminationPolicyAttributes) InternalWithRef(ref terra.Reference) AutoTerminationPolicyAttributes { + return AutoTerminationPolicyAttributes{ref: ref} +} + +func (atp AutoTerminationPolicyAttributes) InternalTokens() (hclwrite.Tokens, error) { + return atp.ref.InternalTokens() +} + +func (atp AutoTerminationPolicyAttributes) IdleTimeout() terra.NumberValue { + return terra.ReferenceAsNumber(atp.ref.Append("idle_timeout")) +} + +type BootstrapActionAttributes struct { + ref terra.Reference +} + +func (ba BootstrapActionAttributes) InternalRef() (terra.Reference, error) { + return ba.ref, nil +} + +func (ba BootstrapActionAttributes) InternalWithRef(ref terra.Reference) BootstrapActionAttributes { + return BootstrapActionAttributes{ref: ref} +} + +func (ba BootstrapActionAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ba.ref.InternalTokens() +} + +func (ba BootstrapActionAttributes) Args() terra.ListValue[terra.StringValue] { + return terra.ReferenceAsList[terra.StringValue](ba.ref.Append("args")) +} + +func (ba BootstrapActionAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(ba.ref.Append("name")) +} + +func (ba BootstrapActionAttributes) Path() terra.StringValue { + return terra.ReferenceAsString(ba.ref.Append("path")) +} + +type CoreInstanceFleetAttributes struct { + ref terra.Reference +} + +func (cif CoreInstanceFleetAttributes) InternalRef() (terra.Reference, error) { + return cif.ref, nil +} + +func (cif CoreInstanceFleetAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetAttributes { + return CoreInstanceFleetAttributes{ref: ref} +} + +func (cif CoreInstanceFleetAttributes) InternalTokens() (hclwrite.Tokens, error) { + return cif.ref.InternalTokens() +} + +func (cif CoreInstanceFleetAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(cif.ref.Append("id")) +} + +func (cif CoreInstanceFleetAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(cif.ref.Append("name")) +} + +func (cif CoreInstanceFleetAttributes) ProvisionedOnDemandCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(cif.ref.Append("provisioned_on_demand_capacity")) +} + +func (cif CoreInstanceFleetAttributes) ProvisionedSpotCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(cif.ref.Append("provisioned_spot_capacity")) +} + +func (cif CoreInstanceFleetAttributes) TargetOnDemandCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(cif.ref.Append("target_on_demand_capacity")) +} + +func (cif CoreInstanceFleetAttributes) TargetSpotCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(cif.ref.Append("target_spot_capacity")) +} + +func (cif CoreInstanceFleetAttributes) InstanceTypeConfigs() terra.SetValue[CoreInstanceFleetInstanceTypeConfigsAttributes] { + return terra.ReferenceAsSet[CoreInstanceFleetInstanceTypeConfigsAttributes](cif.ref.Append("instance_type_configs")) +} + +func (cif CoreInstanceFleetAttributes) LaunchSpecifications() terra.ListValue[CoreInstanceFleetLaunchSpecificationsAttributes] { + return terra.ReferenceAsList[CoreInstanceFleetLaunchSpecificationsAttributes](cif.ref.Append("launch_specifications")) +} + +type CoreInstanceFleetInstanceTypeConfigsAttributes struct { + ref terra.Reference +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) InternalRef() (terra.Reference, error) { + return itc.ref, nil +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetInstanceTypeConfigsAttributes { + return CoreInstanceFleetInstanceTypeConfigsAttributes{ref: ref} +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return itc.ref.InternalTokens() +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) BidPrice() terra.StringValue { + return terra.ReferenceAsString(itc.ref.Append("bid_price")) +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) BidPriceAsPercentageOfOnDemandPrice() terra.NumberValue { + return terra.ReferenceAsNumber(itc.ref.Append("bid_price_as_percentage_of_on_demand_price")) +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) InstanceType() terra.StringValue { + return terra.ReferenceAsString(itc.ref.Append("instance_type")) +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) WeightedCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(itc.ref.Append("weighted_capacity")) +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) Configurations() terra.SetValue[CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes] { + return terra.ReferenceAsSet[CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes](itc.ref.Append("configurations")) +} + +func (itc CoreInstanceFleetInstanceTypeConfigsAttributes) EbsConfig() terra.SetValue[CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes] { + return terra.ReferenceAsSet[CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes](itc.ref.Append("ebs_config")) +} + +type CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes struct { + ref terra.Reference +} + +func (c CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalRef() (terra.Reference, error) { + return c.ref, nil +} + +func (c CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes { + return CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes{ref: ref} +} + +func (c CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return c.ref.InternalTokens() +} + +func (c CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes) Classification() terra.StringValue { + return terra.ReferenceAsString(c.ref.Append("classification")) +} + +func (c CoreInstanceFleetInstanceTypeConfigsConfigurationsAttributes) Properties() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](c.ref.Append("properties")) +} + +type CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes struct { + ref terra.Reference +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalRef() (terra.Reference, error) { + return ec.ref, nil +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes { + return CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes{ref: ref} +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ec.ref.InternalTokens() +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Iops() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("iops")) +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Size() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("size")) +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Type() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("type")) +} + +func (ec CoreInstanceFleetInstanceTypeConfigsEbsConfigAttributes) VolumesPerInstance() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("volumes_per_instance")) +} + +type CoreInstanceFleetLaunchSpecificationsAttributes struct { + ref terra.Reference +} + +func (ls CoreInstanceFleetLaunchSpecificationsAttributes) InternalRef() (terra.Reference, error) { + return ls.ref, nil +} + +func (ls CoreInstanceFleetLaunchSpecificationsAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetLaunchSpecificationsAttributes { + return CoreInstanceFleetLaunchSpecificationsAttributes{ref: ref} +} + +func (ls CoreInstanceFleetLaunchSpecificationsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ls.ref.InternalTokens() +} + +func (ls CoreInstanceFleetLaunchSpecificationsAttributes) OnDemandSpecification() terra.ListValue[CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes] { + return terra.ReferenceAsList[CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes](ls.ref.Append("on_demand_specification")) +} + +func (ls CoreInstanceFleetLaunchSpecificationsAttributes) SpotSpecification() terra.ListValue[CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes] { + return terra.ReferenceAsList[CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes](ls.ref.Append("spot_specification")) +} + +type CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes struct { + ref terra.Reference +} + +func (ods CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalRef() (terra.Reference, error) { + return ods.ref, nil +} + +func (ods CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes { + return CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes{ref: ref} +} + +func (ods CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ods.ref.InternalTokens() +} + +func (ods CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) AllocationStrategy() terra.StringValue { + return terra.ReferenceAsString(ods.ref.Append("allocation_strategy")) +} + +type CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes struct { + ref terra.Reference +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalRef() (terra.Reference, error) { + return ss.ref, nil +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalWithRef(ref terra.Reference) CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes { + return CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes{ref: ref} +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ss.ref.InternalTokens() +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) AllocationStrategy() terra.StringValue { + return terra.ReferenceAsString(ss.ref.Append("allocation_strategy")) +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) BlockDurationMinutes() terra.NumberValue { + return terra.ReferenceAsNumber(ss.ref.Append("block_duration_minutes")) +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) TimeoutAction() terra.StringValue { + return terra.ReferenceAsString(ss.ref.Append("timeout_action")) +} + +func (ss CoreInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) TimeoutDurationMinutes() terra.NumberValue { + return terra.ReferenceAsNumber(ss.ref.Append("timeout_duration_minutes")) +} + +type CoreInstanceGroupAttributes struct { + ref terra.Reference +} + +func (cig CoreInstanceGroupAttributes) InternalRef() (terra.Reference, error) { + return cig.ref, nil +} + +func (cig CoreInstanceGroupAttributes) InternalWithRef(ref terra.Reference) CoreInstanceGroupAttributes { + return CoreInstanceGroupAttributes{ref: ref} +} + +func (cig CoreInstanceGroupAttributes) InternalTokens() (hclwrite.Tokens, error) { + return cig.ref.InternalTokens() +} + +func (cig CoreInstanceGroupAttributes) AutoscalingPolicy() terra.StringValue { + return terra.ReferenceAsString(cig.ref.Append("autoscaling_policy")) +} + +func (cig CoreInstanceGroupAttributes) BidPrice() terra.StringValue { + return terra.ReferenceAsString(cig.ref.Append("bid_price")) +} + +func (cig CoreInstanceGroupAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(cig.ref.Append("id")) +} + +func (cig CoreInstanceGroupAttributes) InstanceCount() terra.NumberValue { + return terra.ReferenceAsNumber(cig.ref.Append("instance_count")) +} + +func (cig CoreInstanceGroupAttributes) InstanceType() terra.StringValue { + return terra.ReferenceAsString(cig.ref.Append("instance_type")) +} + +func (cig CoreInstanceGroupAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(cig.ref.Append("name")) +} + +func (cig CoreInstanceGroupAttributes) EbsConfig() terra.SetValue[CoreInstanceGroupEbsConfigAttributes] { + return terra.ReferenceAsSet[CoreInstanceGroupEbsConfigAttributes](cig.ref.Append("ebs_config")) +} + +type CoreInstanceGroupEbsConfigAttributes struct { + ref terra.Reference +} + +func (ec CoreInstanceGroupEbsConfigAttributes) InternalRef() (terra.Reference, error) { + return ec.ref, nil +} + +func (ec CoreInstanceGroupEbsConfigAttributes) InternalWithRef(ref terra.Reference) CoreInstanceGroupEbsConfigAttributes { + return CoreInstanceGroupEbsConfigAttributes{ref: ref} +} + +func (ec CoreInstanceGroupEbsConfigAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ec.ref.InternalTokens() +} + +func (ec CoreInstanceGroupEbsConfigAttributes) Iops() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("iops")) +} + +func (ec CoreInstanceGroupEbsConfigAttributes) Size() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("size")) +} + +func (ec CoreInstanceGroupEbsConfigAttributes) Throughput() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("throughput")) +} + +func (ec CoreInstanceGroupEbsConfigAttributes) Type() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("type")) +} + +func (ec CoreInstanceGroupEbsConfigAttributes) VolumesPerInstance() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("volumes_per_instance")) +} + +type Ec2AttributesAttributes struct { + ref terra.Reference +} + +func (ea Ec2AttributesAttributes) InternalRef() (terra.Reference, error) { + return ea.ref, nil +} + +func (ea Ec2AttributesAttributes) InternalWithRef(ref terra.Reference) Ec2AttributesAttributes { + return Ec2AttributesAttributes{ref: ref} +} + +func (ea Ec2AttributesAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ea.ref.InternalTokens() +} + +func (ea Ec2AttributesAttributes) AdditionalMasterSecurityGroups() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("additional_master_security_groups")) +} + +func (ea Ec2AttributesAttributes) AdditionalSlaveSecurityGroups() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("additional_slave_security_groups")) +} + +func (ea Ec2AttributesAttributes) EmrManagedMasterSecurityGroup() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("emr_managed_master_security_group")) +} + +func (ea Ec2AttributesAttributes) EmrManagedSlaveSecurityGroup() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("emr_managed_slave_security_group")) +} + +func (ea Ec2AttributesAttributes) InstanceProfile() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("instance_profile")) +} + +func (ea Ec2AttributesAttributes) KeyName() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("key_name")) +} + +func (ea Ec2AttributesAttributes) ServiceAccessSecurityGroup() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("service_access_security_group")) +} + +func (ea Ec2AttributesAttributes) SubnetId() terra.StringValue { + return terra.ReferenceAsString(ea.ref.Append("subnet_id")) +} + +func (ea Ec2AttributesAttributes) SubnetIds() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ea.ref.Append("subnet_ids")) +} + +type KerberosAttributesAttributes struct { + ref terra.Reference +} + +func (ka KerberosAttributesAttributes) InternalRef() (terra.Reference, error) { + return ka.ref, nil +} + +func (ka KerberosAttributesAttributes) InternalWithRef(ref terra.Reference) KerberosAttributesAttributes { + return KerberosAttributesAttributes{ref: ref} +} + +func (ka KerberosAttributesAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ka.ref.InternalTokens() +} + +func (ka KerberosAttributesAttributes) AdDomainJoinPassword() terra.StringValue { + return terra.ReferenceAsString(ka.ref.Append("ad_domain_join_password")) +} + +func (ka KerberosAttributesAttributes) AdDomainJoinUser() terra.StringValue { + return terra.ReferenceAsString(ka.ref.Append("ad_domain_join_user")) +} + +func (ka KerberosAttributesAttributes) CrossRealmTrustPrincipalPassword() terra.StringValue { + return terra.ReferenceAsString(ka.ref.Append("cross_realm_trust_principal_password")) +} + +func (ka KerberosAttributesAttributes) KdcAdminPassword() terra.StringValue { + return terra.ReferenceAsString(ka.ref.Append("kdc_admin_password")) +} + +func (ka KerberosAttributesAttributes) Realm() terra.StringValue { + return terra.ReferenceAsString(ka.ref.Append("realm")) +} + +type MasterInstanceFleetAttributes struct { + ref terra.Reference +} + +func (mif MasterInstanceFleetAttributes) InternalRef() (terra.Reference, error) { + return mif.ref, nil +} + +func (mif MasterInstanceFleetAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetAttributes { + return MasterInstanceFleetAttributes{ref: ref} +} + +func (mif MasterInstanceFleetAttributes) InternalTokens() (hclwrite.Tokens, error) { + return mif.ref.InternalTokens() +} + +func (mif MasterInstanceFleetAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(mif.ref.Append("id")) +} + +func (mif MasterInstanceFleetAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(mif.ref.Append("name")) +} + +func (mif MasterInstanceFleetAttributes) ProvisionedOnDemandCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(mif.ref.Append("provisioned_on_demand_capacity")) +} + +func (mif MasterInstanceFleetAttributes) ProvisionedSpotCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(mif.ref.Append("provisioned_spot_capacity")) +} + +func (mif MasterInstanceFleetAttributes) TargetOnDemandCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(mif.ref.Append("target_on_demand_capacity")) +} + +func (mif MasterInstanceFleetAttributes) TargetSpotCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(mif.ref.Append("target_spot_capacity")) +} + +func (mif MasterInstanceFleetAttributes) InstanceTypeConfigs() terra.SetValue[MasterInstanceFleetInstanceTypeConfigsAttributes] { + return terra.ReferenceAsSet[MasterInstanceFleetInstanceTypeConfigsAttributes](mif.ref.Append("instance_type_configs")) +} + +func (mif MasterInstanceFleetAttributes) LaunchSpecifications() terra.ListValue[MasterInstanceFleetLaunchSpecificationsAttributes] { + return terra.ReferenceAsList[MasterInstanceFleetLaunchSpecificationsAttributes](mif.ref.Append("launch_specifications")) +} + +type MasterInstanceFleetInstanceTypeConfigsAttributes struct { + ref terra.Reference +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) InternalRef() (terra.Reference, error) { + return itc.ref, nil +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetInstanceTypeConfigsAttributes { + return MasterInstanceFleetInstanceTypeConfigsAttributes{ref: ref} +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return itc.ref.InternalTokens() +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) BidPrice() terra.StringValue { + return terra.ReferenceAsString(itc.ref.Append("bid_price")) +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) BidPriceAsPercentageOfOnDemandPrice() terra.NumberValue { + return terra.ReferenceAsNumber(itc.ref.Append("bid_price_as_percentage_of_on_demand_price")) +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) InstanceType() terra.StringValue { + return terra.ReferenceAsString(itc.ref.Append("instance_type")) +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) WeightedCapacity() terra.NumberValue { + return terra.ReferenceAsNumber(itc.ref.Append("weighted_capacity")) +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) Configurations() terra.SetValue[MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes] { + return terra.ReferenceAsSet[MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes](itc.ref.Append("configurations")) +} + +func (itc MasterInstanceFleetInstanceTypeConfigsAttributes) EbsConfig() terra.SetValue[MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes] { + return terra.ReferenceAsSet[MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes](itc.ref.Append("ebs_config")) +} + +type MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes struct { + ref terra.Reference +} + +func (c MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalRef() (terra.Reference, error) { + return c.ref, nil +} + +func (c MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes { + return MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes{ref: ref} +} + +func (c MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return c.ref.InternalTokens() +} + +func (c MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes) Classification() terra.StringValue { + return terra.ReferenceAsString(c.ref.Append("classification")) +} + +func (c MasterInstanceFleetInstanceTypeConfigsConfigurationsAttributes) Properties() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](c.ref.Append("properties")) +} + +type MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes struct { + ref terra.Reference +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalRef() (terra.Reference, error) { + return ec.ref, nil +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes { + return MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes{ref: ref} +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ec.ref.InternalTokens() +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Iops() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("iops")) +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Size() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("size")) +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) Type() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("type")) +} + +func (ec MasterInstanceFleetInstanceTypeConfigsEbsConfigAttributes) VolumesPerInstance() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("volumes_per_instance")) +} + +type MasterInstanceFleetLaunchSpecificationsAttributes struct { + ref terra.Reference +} + +func (ls MasterInstanceFleetLaunchSpecificationsAttributes) InternalRef() (terra.Reference, error) { + return ls.ref, nil +} + +func (ls MasterInstanceFleetLaunchSpecificationsAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetLaunchSpecificationsAttributes { + return MasterInstanceFleetLaunchSpecificationsAttributes{ref: ref} +} + +func (ls MasterInstanceFleetLaunchSpecificationsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ls.ref.InternalTokens() +} + +func (ls MasterInstanceFleetLaunchSpecificationsAttributes) OnDemandSpecification() terra.ListValue[MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes] { + return terra.ReferenceAsList[MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes](ls.ref.Append("on_demand_specification")) +} + +func (ls MasterInstanceFleetLaunchSpecificationsAttributes) SpotSpecification() terra.ListValue[MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes] { + return terra.ReferenceAsList[MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes](ls.ref.Append("spot_specification")) +} + +type MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes struct { + ref terra.Reference +} + +func (ods MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalRef() (terra.Reference, error) { + return ods.ref, nil +} + +func (ods MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes { + return MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes{ref: ref} +} + +func (ods MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ods.ref.InternalTokens() +} + +func (ods MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationAttributes) AllocationStrategy() terra.StringValue { + return terra.ReferenceAsString(ods.ref.Append("allocation_strategy")) +} + +type MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes struct { + ref terra.Reference +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalRef() (terra.Reference, error) { + return ss.ref, nil +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalWithRef(ref terra.Reference) MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes { + return MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes{ref: ref} +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ss.ref.InternalTokens() +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) AllocationStrategy() terra.StringValue { + return terra.ReferenceAsString(ss.ref.Append("allocation_strategy")) +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) BlockDurationMinutes() terra.NumberValue { + return terra.ReferenceAsNumber(ss.ref.Append("block_duration_minutes")) +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) TimeoutAction() terra.StringValue { + return terra.ReferenceAsString(ss.ref.Append("timeout_action")) +} + +func (ss MasterInstanceFleetLaunchSpecificationsSpotSpecificationAttributes) TimeoutDurationMinutes() terra.NumberValue { + return terra.ReferenceAsNumber(ss.ref.Append("timeout_duration_minutes")) +} + +type MasterInstanceGroupAttributes struct { + ref terra.Reference +} + +func (mig MasterInstanceGroupAttributes) InternalRef() (terra.Reference, error) { + return mig.ref, nil +} + +func (mig MasterInstanceGroupAttributes) InternalWithRef(ref terra.Reference) MasterInstanceGroupAttributes { + return MasterInstanceGroupAttributes{ref: ref} +} + +func (mig MasterInstanceGroupAttributes) InternalTokens() (hclwrite.Tokens, error) { + return mig.ref.InternalTokens() +} + +func (mig MasterInstanceGroupAttributes) BidPrice() terra.StringValue { + return terra.ReferenceAsString(mig.ref.Append("bid_price")) +} + +func (mig MasterInstanceGroupAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(mig.ref.Append("id")) +} + +func (mig MasterInstanceGroupAttributes) InstanceCount() terra.NumberValue { + return terra.ReferenceAsNumber(mig.ref.Append("instance_count")) +} + +func (mig MasterInstanceGroupAttributes) InstanceType() terra.StringValue { + return terra.ReferenceAsString(mig.ref.Append("instance_type")) +} + +func (mig MasterInstanceGroupAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(mig.ref.Append("name")) +} + +func (mig MasterInstanceGroupAttributes) EbsConfig() terra.SetValue[MasterInstanceGroupEbsConfigAttributes] { + return terra.ReferenceAsSet[MasterInstanceGroupEbsConfigAttributes](mig.ref.Append("ebs_config")) +} + +type MasterInstanceGroupEbsConfigAttributes struct { + ref terra.Reference +} + +func (ec MasterInstanceGroupEbsConfigAttributes) InternalRef() (terra.Reference, error) { + return ec.ref, nil +} + +func (ec MasterInstanceGroupEbsConfigAttributes) InternalWithRef(ref terra.Reference) MasterInstanceGroupEbsConfigAttributes { + return MasterInstanceGroupEbsConfigAttributes{ref: ref} +} + +func (ec MasterInstanceGroupEbsConfigAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ec.ref.InternalTokens() +} + +func (ec MasterInstanceGroupEbsConfigAttributes) Iops() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("iops")) +} + +func (ec MasterInstanceGroupEbsConfigAttributes) Size() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("size")) +} + +func (ec MasterInstanceGroupEbsConfigAttributes) Throughput() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("throughput")) +} + +func (ec MasterInstanceGroupEbsConfigAttributes) Type() terra.StringValue { + return terra.ReferenceAsString(ec.ref.Append("type")) +} + +func (ec MasterInstanceGroupEbsConfigAttributes) VolumesPerInstance() terra.NumberValue { + return terra.ReferenceAsNumber(ec.ref.Append("volumes_per_instance")) +} + +type PlacementGroupConfigState struct { + InstanceRole string `json:"instance_role"` + PlacementStrategy string `json:"placement_strategy"` +} + +type StepState struct { + ActionOnFailure string `json:"action_on_failure"` + Name string `json:"name"` + HadoopJarStep []HadoopJarStepState `json:"hadoop_jar_step"` +} + +type HadoopJarStepState struct { + Args []string `json:"args"` + Jar string `json:"jar"` + MainClass string `json:"main_class"` + Properties map[string]string `json:"properties"` +} + +type AutoTerminationPolicyState struct { + IdleTimeout float64 `json:"idle_timeout"` +} + +type BootstrapActionState struct { + Args []string `json:"args"` + Name string `json:"name"` + Path string `json:"path"` +} + +type CoreInstanceFleetState struct { + Id string `json:"id"` + Name string `json:"name"` + ProvisionedOnDemandCapacity float64 `json:"provisioned_on_demand_capacity"` + ProvisionedSpotCapacity float64 `json:"provisioned_spot_capacity"` + TargetOnDemandCapacity float64 `json:"target_on_demand_capacity"` + TargetSpotCapacity float64 `json:"target_spot_capacity"` + InstanceTypeConfigs []CoreInstanceFleetInstanceTypeConfigsState `json:"instance_type_configs"` + LaunchSpecifications []CoreInstanceFleetLaunchSpecificationsState `json:"launch_specifications"` +} + +type CoreInstanceFleetInstanceTypeConfigsState struct { + BidPrice string `json:"bid_price"` + BidPriceAsPercentageOfOnDemandPrice float64 `json:"bid_price_as_percentage_of_on_demand_price"` + InstanceType string `json:"instance_type"` + WeightedCapacity float64 `json:"weighted_capacity"` + Configurations []CoreInstanceFleetInstanceTypeConfigsConfigurationsState `json:"configurations"` + EbsConfig []CoreInstanceFleetInstanceTypeConfigsEbsConfigState `json:"ebs_config"` +} + +type CoreInstanceFleetInstanceTypeConfigsConfigurationsState struct { + Classification string `json:"classification"` + Properties map[string]string `json:"properties"` +} + +type CoreInstanceFleetInstanceTypeConfigsEbsConfigState struct { + Iops float64 `json:"iops"` + Size float64 `json:"size"` + Type string `json:"type"` + VolumesPerInstance float64 `json:"volumes_per_instance"` +} + +type CoreInstanceFleetLaunchSpecificationsState struct { + OnDemandSpecification []CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationState `json:"on_demand_specification"` + SpotSpecification []CoreInstanceFleetLaunchSpecificationsSpotSpecificationState `json:"spot_specification"` +} + +type CoreInstanceFleetLaunchSpecificationsOnDemandSpecificationState struct { + AllocationStrategy string `json:"allocation_strategy"` +} + +type CoreInstanceFleetLaunchSpecificationsSpotSpecificationState struct { + AllocationStrategy string `json:"allocation_strategy"` + BlockDurationMinutes float64 `json:"block_duration_minutes"` + TimeoutAction string `json:"timeout_action"` + TimeoutDurationMinutes float64 `json:"timeout_duration_minutes"` +} + +type CoreInstanceGroupState struct { + AutoscalingPolicy string `json:"autoscaling_policy"` + BidPrice string `json:"bid_price"` + Id string `json:"id"` + InstanceCount float64 `json:"instance_count"` + InstanceType string `json:"instance_type"` + Name string `json:"name"` + EbsConfig []CoreInstanceGroupEbsConfigState `json:"ebs_config"` +} + +type CoreInstanceGroupEbsConfigState struct { + Iops float64 `json:"iops"` + Size float64 `json:"size"` + Throughput float64 `json:"throughput"` + Type string `json:"type"` + VolumesPerInstance float64 `json:"volumes_per_instance"` +} + +type Ec2AttributesState struct { + AdditionalMasterSecurityGroups string `json:"additional_master_security_groups"` + AdditionalSlaveSecurityGroups string `json:"additional_slave_security_groups"` + EmrManagedMasterSecurityGroup string `json:"emr_managed_master_security_group"` + EmrManagedSlaveSecurityGroup string `json:"emr_managed_slave_security_group"` + InstanceProfile string `json:"instance_profile"` + KeyName string `json:"key_name"` + ServiceAccessSecurityGroup string `json:"service_access_security_group"` + SubnetId string `json:"subnet_id"` + SubnetIds []string `json:"subnet_ids"` +} + +type KerberosAttributesState struct { + AdDomainJoinPassword string `json:"ad_domain_join_password"` + AdDomainJoinUser string `json:"ad_domain_join_user"` + CrossRealmTrustPrincipalPassword string `json:"cross_realm_trust_principal_password"` + KdcAdminPassword string `json:"kdc_admin_password"` + Realm string `json:"realm"` +} + +type MasterInstanceFleetState struct { + Id string `json:"id"` + Name string `json:"name"` + ProvisionedOnDemandCapacity float64 `json:"provisioned_on_demand_capacity"` + ProvisionedSpotCapacity float64 `json:"provisioned_spot_capacity"` + TargetOnDemandCapacity float64 `json:"target_on_demand_capacity"` + TargetSpotCapacity float64 `json:"target_spot_capacity"` + InstanceTypeConfigs []MasterInstanceFleetInstanceTypeConfigsState `json:"instance_type_configs"` + LaunchSpecifications []MasterInstanceFleetLaunchSpecificationsState `json:"launch_specifications"` +} + +type MasterInstanceFleetInstanceTypeConfigsState struct { + BidPrice string `json:"bid_price"` + BidPriceAsPercentageOfOnDemandPrice float64 `json:"bid_price_as_percentage_of_on_demand_price"` + InstanceType string `json:"instance_type"` + WeightedCapacity float64 `json:"weighted_capacity"` + Configurations []MasterInstanceFleetInstanceTypeConfigsConfigurationsState `json:"configurations"` + EbsConfig []MasterInstanceFleetInstanceTypeConfigsEbsConfigState `json:"ebs_config"` +} + +type MasterInstanceFleetInstanceTypeConfigsConfigurationsState struct { + Classification string `json:"classification"` + Properties map[string]string `json:"properties"` +} + +type MasterInstanceFleetInstanceTypeConfigsEbsConfigState struct { + Iops float64 `json:"iops"` + Size float64 `json:"size"` + Type string `json:"type"` + VolumesPerInstance float64 `json:"volumes_per_instance"` +} + +type MasterInstanceFleetLaunchSpecificationsState struct { + OnDemandSpecification []MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationState `json:"on_demand_specification"` + SpotSpecification []MasterInstanceFleetLaunchSpecificationsSpotSpecificationState `json:"spot_specification"` +} + +type MasterInstanceFleetLaunchSpecificationsOnDemandSpecificationState struct { + AllocationStrategy string `json:"allocation_strategy"` +} + +type MasterInstanceFleetLaunchSpecificationsSpotSpecificationState struct { + AllocationStrategy string `json:"allocation_strategy"` + BlockDurationMinutes float64 `json:"block_duration_minutes"` + TimeoutAction string `json:"timeout_action"` + TimeoutDurationMinutes float64 `json:"timeout_duration_minutes"` +} + +type MasterInstanceGroupState struct { + BidPrice string `json:"bid_price"` + Id string `json:"id"` + InstanceCount float64 `json:"instance_count"` + InstanceType string `json:"instance_type"` + Name string `json:"name"` + EbsConfig []MasterInstanceGroupEbsConfigState `json:"ebs_config"` +} + +type MasterInstanceGroupEbsConfigState struct { + Iops float64 `json:"iops"` + Size float64 `json:"size"` + Throughput float64 `json:"throughput"` + Type string `json:"type"` + VolumesPerInstance float64 `json:"volumes_per_instance"` +} diff --git a/pkg/terragen/testdata/golden/aws_emr_cluster/schema.json b/pkg/terragen/testdata/golden/aws_emr_cluster/schema.json new file mode 100644 index 0000000..005aabc --- /dev/null +++ b/pkg/terragen/testdata/golden/aws_emr_cluster/schema.json @@ -0,0 +1 @@ +{"provider":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"allowed_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"custom_ca_bundle":{"type":"string","description":"File containing custom root and intermediate certificates. Can also be configured using the `AWS_CA_BUNDLE` environment variable. (Setting `ca_bundle` in the shared config file is not supported.)","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint":{"type":"string","description":"Address of the EC2 metadata service endpoint to use. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT` environment variable.","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint_mode":{"type":"string","description":"Protocol to use with EC2 metadata service endpoint.Valid values are `IPv4` and `IPv6`. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE` environment variable.","description_kind":"plain","optional":true},"forbidden_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"http_proxy":{"type":"string","description":"URL of a proxy to use for HTTP requests when accessing the AWS API. Can also be set using the `HTTP_PROXY` or `http_proxy` environment variables.","description_kind":"plain","optional":true},"https_proxy":{"type":"string","description":"URL of a proxy to use for HTTPS requests when accessing the AWS API. Can also be set using the `HTTPS_PROXY` or `https_proxy` environment variables.","description_kind":"plain","optional":true},"insecure":{"type":"bool","description":"Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`","description_kind":"plain","optional":true},"max_retries":{"type":"number","description":"The maximum number of times an AWS API request is\nbeing executed. If the API request still fails, an error is\nthrown.","description_kind":"plain","optional":true},"no_proxy":{"type":"string","description":"Comma-separated list of hosts that should not use HTTP or HTTPS proxies. Can also be set using the `NO_PROXY` or `no_proxy` environment variables.","description_kind":"plain","optional":true},"profile":{"type":"string","description":"The profile for API operations. If not set, the default profile\ncreated with `aws configure` will be used.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where AWS operations will take place. Examples\nare us-east-1, us-west-2, etc.","description_kind":"plain","optional":true},"retry_mode":{"type":"string","description":"Specifies how retries are attempted. Valid values are `standard` and `adaptive`. Can also be configured using the `AWS_RETRY_MODE` environment variable.","description_kind":"plain","optional":true},"s3_us_east_1_regional_endpoint":{"type":"string","description":"Specifies whether S3 API calls in the `us-east-1` region use the legacy global endpoint or a regional endpoint. Valid values are `legacy` or `regional`. Can also be configured using the `AWS_S3_US_EAST_1_REGIONAL_ENDPOINT` environment variable or the `s3_us_east_1_regional_endpoint` shared config file parameter","description_kind":"plain","optional":true},"s3_use_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The secret key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"shared_config_files":{"type":["list","string"],"description":"List of paths to shared config files. If not set, defaults to [~/.aws/config].","description_kind":"plain","optional":true},"shared_credentials_files":{"type":["list","string"],"description":"List of paths to shared credentials files. If not set, defaults to [~/.aws/credentials].","description_kind":"plain","optional":true},"skip_credentials_validation":{"type":"bool","description":"Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available/implemented.","description_kind":"plain","optional":true},"skip_metadata_api_check":{"type":"string","description":"Skip the AWS Metadata API check. Used for AWS API implementations that do not have a metadata api endpoint.","description_kind":"plain","optional":true},"skip_region_validation":{"type":"bool","description":"Skip static validation of region name. Used by users of alternative AWS-like APIs or users w/ access to regions that are not public (yet).","description_kind":"plain","optional":true},"skip_requesting_account_id":{"type":"bool","description":"Skip requesting the account ID. Used for AWS API implementations that do not have IAM/STS API and/or metadata API.","description_kind":"plain","optional":true},"sts_region":{"type":"string","description":"The region where AWS STS operations will take place. Examples\nare us-east-1 and us-west-2.","description_kind":"plain","optional":true},"token":{"type":"string","description":"session token. A session token is only required if you are\nusing temporary security credentials.","description_kind":"plain","optional":true},"token_bucket_rate_limiter_capacity":{"type":"number","description":"The capacity of the AWS SDK's token bucket rate limiter.","description_kind":"plain","optional":true},"use_dualstack_endpoint":{"type":"bool","description":"Resolve an endpoint with DualStack capability","description_kind":"plain","optional":true},"use_fips_endpoint":{"type":"bool","description":"Resolve an endpoint with FIPS capability","description_kind":"plain","optional":true}},"block_types":{"assume_role":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"external_id":{"type":"string","description":"A unique identifier that might be required when you assume a role in another account.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"source_identity":{"type":"string","description":"Source identity specified by the principal assuming the role.","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description":"Assume role session tags.","description_kind":"plain","optional":true},"transitive_tag_keys":{"type":["set","string"],"description":"Assume role session tag keys to pass to any subsequent sessions.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"assume_role_with_web_identity":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"web_identity_token":{"type":"string","description_kind":"plain","optional":true},"web_identity_token_file":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"default_tags":{"nesting_mode":"list","block":{"attributes":{"tags":{"type":["map","string"],"description":"Resource tags to default across all resources","description_kind":"plain","optional":true}},"description":"Configuration block with settings to default resource tags across all resources.","description_kind":"plain"}},"endpoints":{"nesting_mode":"set","block":{"attributes":{"accessanalyzer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"account":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acmpca":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amg":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplify":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewayv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appfabric":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrationsservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationinsights":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appmesh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apprunner":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appstream":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appsync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"athena":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"auditmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscalingplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backup":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"batch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"beanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"bedrock":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"bedrockagent":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"budgets":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ce":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmediapipelines":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkvoice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cleanrooms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloud9":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrol":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrolapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfront":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfrontkeyvaluestore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsmv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudtrail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlogs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchobservabilityaccessmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchrum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeartifact":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codebuild":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecatalyst":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecommit":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codedeploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeguruprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codegurureviewer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codepipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarconnections":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarnotifications":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentityprovider":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"computeoptimizer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"config":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"configservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectcases":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"controltower":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costandusagereportservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costexplorer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costoptimizationhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cur":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"customerprofiles":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigration":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigrationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dataexchange":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datapipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datasync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datazone":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dax":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"deploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"detective":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devicefarm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devopsguru":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directoryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dlm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdbelastic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecrpublic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"efs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticache":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticbeanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancingv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elastictranscoder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elbv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrcontainers":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"es":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eventbridge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"events":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"evidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"firehose":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fsx":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gamelift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glacier":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"globalaccelerator":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glue":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"grafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrass":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"groundstation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"guardduty":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"healthlake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"identitystore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"imagebuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspectorv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"internetmonitor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivschat":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafka":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafkaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kendra":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"keyspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalyticsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lakeformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lambda":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"launchwizard":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lex":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuilding":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuildingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2models":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"licensemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lightsail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"location":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"locationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"logs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutmetrics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"m2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedgrafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconvert":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"medialive":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackage":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackagev2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"memorydb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mq":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"msk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mwaa":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"neptune":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkfirewall":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"oam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchingestion":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"organizations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"osis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"paymentcryptography":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pcaconnectorad":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpoint":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pipes":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"polly":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pricing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheus":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheusservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qbusiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"quicksight":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ram":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rbin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"recyclebin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdataapiservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rekognition":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourceexplorer2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroups":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstagging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstaggingapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rolesanywhere":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53domains":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycontrolconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoveryreadiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53resolver":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3api":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3control":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"scheduler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"schemas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"secretsmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securityhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securitylake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapplicationrepository":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapprepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessrepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalogappregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicediscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicequotas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ses":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sesv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sfn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"shield":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"signer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"simpledb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sns":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sqs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmcontacts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmincidents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmsap":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sso":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssoadmin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"stepfunctions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"storagegateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"swf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"synthetics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamwrite":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribe":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transfer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"verifiedpermissions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"vpclattice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"waf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafregional":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wellarchitected":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"worklink":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"xray":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ignore_tags":{"nesting_mode":"list","block":{"attributes":{"key_prefixes":{"type":["set","string"],"description":"Resource tag key prefixes to ignore across all resources.","description_kind":"plain","optional":true},"keys":{"type":["set","string"],"description":"Resource tag keys to ignore across all resources.","description_kind":"plain","optional":true}},"description":"Configuration block with settings to ignore resource tags across all resources.","description_kind":"plain"}}},"description_kind":"plain"}},"resource_schemas":{"aws_emr_cluster":{"version":0,"block":{"attributes":{"additional_info":{"type":"string","description_kind":"plain","optional":true},"applications":{"type":["set","string"],"description_kind":"plain","optional":true},"arn":{"type":"string","description_kind":"plain","computed":true},"autoscaling_role":{"type":"string","description_kind":"plain","optional":true},"cluster_state":{"type":"string","description_kind":"plain","computed":true},"configurations":{"type":"string","description_kind":"plain","optional":true},"configurations_json":{"type":"string","description_kind":"plain","optional":true},"custom_ami_id":{"type":"string","description_kind":"plain","optional":true},"ebs_root_volume_size":{"type":"number","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"keep_job_flow_alive_when_no_steps":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"list_steps_states":{"type":["set","string"],"description_kind":"plain","optional":true},"log_encryption_kms_key_id":{"type":"string","description_kind":"plain","optional":true},"log_uri":{"type":"string","description_kind":"plain","optional":true},"master_public_dns":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"placement_group_config":{"type":["list",["object",{"instance_role":"string","placement_strategy":"string"}]],"description_kind":"plain","optional":true},"release_label":{"type":"string","description_kind":"plain","required":true},"scale_down_behavior":{"type":"string","description_kind":"plain","optional":true,"computed":true},"security_configuration":{"type":"string","description_kind":"plain","optional":true},"service_role":{"type":"string","description_kind":"plain","required":true},"step":{"type":["list",["object",{"action_on_failure":"string","hadoop_jar_step":["list",["object",{"args":["list","string"],"jar":"string","main_class":"string","properties":["map","string"]}]],"name":"string"}]],"description_kind":"plain","optional":true,"computed":true},"step_concurrency_level":{"type":"number","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true},"tags_all":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"termination_protection":{"type":"bool","description_kind":"plain","optional":true,"computed":true},"unhealthy_node_replacement":{"type":"bool","description_kind":"plain","optional":true},"visible_to_all_users":{"type":"bool","description_kind":"plain","optional":true}},"block_types":{"auto_termination_policy":{"nesting_mode":"list","block":{"attributes":{"idle_timeout":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"bootstrap_action":{"nesting_mode":"list","block":{"attributes":{"args":{"type":["list","string"],"description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","required":true},"path":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"core_instance_fleet":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","optional":true},"provisioned_on_demand_capacity":{"type":"number","description_kind":"plain","computed":true},"provisioned_spot_capacity":{"type":"number","description_kind":"plain","computed":true},"target_on_demand_capacity":{"type":"number","description_kind":"plain","optional":true},"target_spot_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"instance_type_configs":{"nesting_mode":"set","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"bid_price_as_percentage_of_on_demand_price":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"weighted_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"configurations":{"nesting_mode":"set","block":{"attributes":{"classification":{"type":"string","description_kind":"plain","optional":true},"properties":{"type":["map","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}},"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"launch_specifications":{"nesting_mode":"list","block":{"block_types":{"on_demand_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"spot_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true},"block_duration_minutes":{"type":"number","description_kind":"plain","optional":true},"timeout_action":{"type":"string","description_kind":"plain","required":true},"timeout_duration_minutes":{"type":"number","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"core_instance_group":{"nesting_mode":"list","block":{"attributes":{"autoscaling_policy":{"type":"string","description_kind":"plain","optional":true},"bid_price":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"instance_count":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"throughput":{"type":"number","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1},"ec2_attributes":{"nesting_mode":"list","block":{"attributes":{"additional_master_security_groups":{"type":"string","description_kind":"plain","optional":true},"additional_slave_security_groups":{"type":"string","description_kind":"plain","optional":true},"emr_managed_master_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"emr_managed_slave_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instance_profile":{"type":"string","description_kind":"plain","required":true},"key_name":{"type":"string","description_kind":"plain","optional":true},"service_access_security_group":{"type":"string","description_kind":"plain","optional":true,"computed":true},"subnet_id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"subnet_ids":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"},"max_items":1},"kerberos_attributes":{"nesting_mode":"list","block":{"attributes":{"ad_domain_join_password":{"type":"string","description_kind":"plain","optional":true,"sensitive":true},"ad_domain_join_user":{"type":"string","description_kind":"plain","optional":true},"cross_realm_trust_principal_password":{"type":"string","description_kind":"plain","optional":true,"sensitive":true},"kdc_admin_password":{"type":"string","description_kind":"plain","required":true,"sensitive":true},"realm":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"},"max_items":1},"master_instance_fleet":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","optional":true},"provisioned_on_demand_capacity":{"type":"number","description_kind":"plain","computed":true},"provisioned_spot_capacity":{"type":"number","description_kind":"plain","computed":true},"target_on_demand_capacity":{"type":"number","description_kind":"plain","optional":true},"target_spot_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"instance_type_configs":{"nesting_mode":"set","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"bid_price_as_percentage_of_on_demand_price":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"weighted_capacity":{"type":"number","description_kind":"plain","optional":true}},"block_types":{"configurations":{"nesting_mode":"set","block":{"attributes":{"classification":{"type":"string","description_kind":"plain","optional":true},"properties":{"type":["map","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}},"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"launch_specifications":{"nesting_mode":"list","block":{"block_types":{"on_demand_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"spot_specification":{"nesting_mode":"list","block":{"attributes":{"allocation_strategy":{"type":"string","description_kind":"plain","required":true},"block_duration_minutes":{"type":"number","description_kind":"plain","optional":true},"timeout_action":{"type":"string","description_kind":"plain","required":true},"timeout_duration_minutes":{"type":"number","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"master_instance_group":{"nesting_mode":"list","block":{"attributes":{"bid_price":{"type":"string","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"instance_count":{"type":"number","description_kind":"plain","optional":true},"instance_type":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"ebs_config":{"nesting_mode":"set","block":{"attributes":{"iops":{"type":"number","description_kind":"plain","optional":true},"size":{"type":"number","description_kind":"plain","required":true},"throughput":{"type":"number","description_kind":"plain","optional":true},"type":{"type":"string","description_kind":"plain","required":true},"volumes_per_instance":{"type":"number","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"}}}} diff --git a/pkg/terragen/testdata/golden/aws_iam_role/provider.txtar b/pkg/terragen/testdata/golden/aws_iam_role/provider.txtar new file mode 100644 index 0000000..5cc3f6e --- /dev/null +++ b/pkg/terragen/testdata/golden/aws_iam_role/provider.txtar @@ -0,0 +1,2716 @@ +-- out/provider.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package aws + +import ( + "github.com/golingon/lingon/pkg/terra" + provider "test/out/provider" +) + +func NewProvider(args ProviderArgs) *Provider { + return &Provider{Args: args} +} + +var _ terra.Provider = (*Provider)(nil) + +type Provider struct { + Args ProviderArgs +} + +// LocalName returns the provider local name for [Provider]. +func (p *Provider) LocalName() string { + return "aws" +} + +// Source returns the provider source for [Provider]. +func (p *Provider) Source() string { + return "hashicorp/aws" +} + +// Version returns the provider version for [Provider]. +func (p *Provider) Version() string { + return "5.44.0" +} + +// Configuration returns the configuration (args) for [Provider]. +func (p *Provider) Configuration() interface{} { + return p.Args +} + +// ProviderArgs contains the configurations for provider. +type ProviderArgs struct { + // AccessKey: string, optional + AccessKey terra.StringValue `hcl:"access_key,attr"` + // AllowedAccountIds: set of string, optional + AllowedAccountIds terra.SetValue[terra.StringValue] `hcl:"allowed_account_ids,attr"` + // CustomCaBundle: string, optional + CustomCaBundle terra.StringValue `hcl:"custom_ca_bundle,attr"` + // Ec2MetadataServiceEndpoint: string, optional + Ec2MetadataServiceEndpoint terra.StringValue `hcl:"ec2_metadata_service_endpoint,attr"` + // Ec2MetadataServiceEndpointMode: string, optional + Ec2MetadataServiceEndpointMode terra.StringValue `hcl:"ec2_metadata_service_endpoint_mode,attr"` + // ForbiddenAccountIds: set of string, optional + ForbiddenAccountIds terra.SetValue[terra.StringValue] `hcl:"forbidden_account_ids,attr"` + // HttpProxy: string, optional + HttpProxy terra.StringValue `hcl:"http_proxy,attr"` + // HttpsProxy: string, optional + HttpsProxy terra.StringValue `hcl:"https_proxy,attr"` + // Insecure: bool, optional + Insecure terra.BoolValue `hcl:"insecure,attr"` + // MaxRetries: number, optional + MaxRetries terra.NumberValue `hcl:"max_retries,attr"` + // NoProxy: string, optional + NoProxy terra.StringValue `hcl:"no_proxy,attr"` + // Profile: string, optional + Profile terra.StringValue `hcl:"profile,attr"` + // Region: string, optional + Region terra.StringValue `hcl:"region,attr"` + // RetryMode: string, optional + RetryMode terra.StringValue `hcl:"retry_mode,attr"` + // S3UsEast1RegionalEndpoint: string, optional + S3UsEast1RegionalEndpoint terra.StringValue `hcl:"s3_us_east_1_regional_endpoint,attr"` + // S3UsePathStyle: bool, optional + S3UsePathStyle terra.BoolValue `hcl:"s3_use_path_style,attr"` + // SecretKey: string, optional + SecretKey terra.StringValue `hcl:"secret_key,attr"` + // SharedConfigFiles: list of string, optional + SharedConfigFiles terra.ListValue[terra.StringValue] `hcl:"shared_config_files,attr"` + // SharedCredentialsFiles: list of string, optional + SharedCredentialsFiles terra.ListValue[terra.StringValue] `hcl:"shared_credentials_files,attr"` + // SkipCredentialsValidation: bool, optional + SkipCredentialsValidation terra.BoolValue `hcl:"skip_credentials_validation,attr"` + // SkipMetadataApiCheck: string, optional + SkipMetadataApiCheck terra.StringValue `hcl:"skip_metadata_api_check,attr"` + // SkipRegionValidation: bool, optional + SkipRegionValidation terra.BoolValue `hcl:"skip_region_validation,attr"` + // SkipRequestingAccountId: bool, optional + SkipRequestingAccountId terra.BoolValue `hcl:"skip_requesting_account_id,attr"` + // StsRegion: string, optional + StsRegion terra.StringValue `hcl:"sts_region,attr"` + // Token: string, optional + Token terra.StringValue `hcl:"token,attr"` + // TokenBucketRateLimiterCapacity: number, optional + TokenBucketRateLimiterCapacity terra.NumberValue `hcl:"token_bucket_rate_limiter_capacity,attr"` + // UseDualstackEndpoint: bool, optional + UseDualstackEndpoint terra.BoolValue `hcl:"use_dualstack_endpoint,attr"` + // UseFipsEndpoint: bool, optional + UseFipsEndpoint terra.BoolValue `hcl:"use_fips_endpoint,attr"` + // AssumeRole: min=0 + AssumeRole []provider.AssumeRole `hcl:"assume_role,block" validate:"min=0"` + // AssumeRoleWithWebIdentity: min=0 + AssumeRoleWithWebIdentity []provider.AssumeRoleWithWebIdentity `hcl:"assume_role_with_web_identity,block" validate:"min=0"` + // DefaultTags: min=0 + DefaultTags []provider.DefaultTags `hcl:"default_tags,block" validate:"min=0"` + // Endpoints: min=0 + Endpoints []provider.Endpoints `hcl:"endpoints,block" validate:"min=0"` + // IgnoreTags: min=0 + IgnoreTags []provider.IgnoreTags `hcl:"ignore_tags,block" validate:"min=0"` +} +-- out/provider/provider.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package provider + +import ( + terra "github.com/golingon/lingon/pkg/terra" + hclwrite "github.com/hashicorp/hcl/v2/hclwrite" +) + +type AssumeRole struct { + // Duration: string, optional + Duration terra.StringValue `hcl:"duration,attr"` + // ExternalId: string, optional + ExternalId terra.StringValue `hcl:"external_id,attr"` + // Policy: string, optional + Policy terra.StringValue `hcl:"policy,attr"` + // PolicyArns: set of string, optional + PolicyArns terra.SetValue[terra.StringValue] `hcl:"policy_arns,attr"` + // RoleArn: string, optional + RoleArn terra.StringValue `hcl:"role_arn,attr"` + // SessionName: string, optional + SessionName terra.StringValue `hcl:"session_name,attr"` + // SourceIdentity: string, optional + SourceIdentity terra.StringValue `hcl:"source_identity,attr"` + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` + // TransitiveTagKeys: set of string, optional + TransitiveTagKeys terra.SetValue[terra.StringValue] `hcl:"transitive_tag_keys,attr"` +} + +type AssumeRoleWithWebIdentity struct { + // Duration: string, optional + Duration terra.StringValue `hcl:"duration,attr"` + // Policy: string, optional + Policy terra.StringValue `hcl:"policy,attr"` + // PolicyArns: set of string, optional + PolicyArns terra.SetValue[terra.StringValue] `hcl:"policy_arns,attr"` + // RoleArn: string, optional + RoleArn terra.StringValue `hcl:"role_arn,attr"` + // SessionName: string, optional + SessionName terra.StringValue `hcl:"session_name,attr"` + // WebIdentityToken: string, optional + WebIdentityToken terra.StringValue `hcl:"web_identity_token,attr"` + // WebIdentityTokenFile: string, optional + WebIdentityTokenFile terra.StringValue `hcl:"web_identity_token_file,attr"` +} + +type DefaultTags struct { + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` +} + +type Endpoints struct { + // Accessanalyzer: string, optional + Accessanalyzer terra.StringValue `hcl:"accessanalyzer,attr"` + // Account: string, optional + Account terra.StringValue `hcl:"account,attr"` + // Acm: string, optional + Acm terra.StringValue `hcl:"acm,attr"` + // Acmpca: string, optional + Acmpca terra.StringValue `hcl:"acmpca,attr"` + // Amg: string, optional + Amg terra.StringValue `hcl:"amg,attr"` + // Amp: string, optional + Amp terra.StringValue `hcl:"amp,attr"` + // Amplify: string, optional + Amplify terra.StringValue `hcl:"amplify,attr"` + // Apigateway: string, optional + Apigateway terra.StringValue `hcl:"apigateway,attr"` + // Apigatewayv2: string, optional + Apigatewayv2 terra.StringValue `hcl:"apigatewayv2,attr"` + // Appautoscaling: string, optional + Appautoscaling terra.StringValue `hcl:"appautoscaling,attr"` + // Appconfig: string, optional + Appconfig terra.StringValue `hcl:"appconfig,attr"` + // Appfabric: string, optional + Appfabric terra.StringValue `hcl:"appfabric,attr"` + // Appflow: string, optional + Appflow terra.StringValue `hcl:"appflow,attr"` + // Appintegrations: string, optional + Appintegrations terra.StringValue `hcl:"appintegrations,attr"` + // Appintegrationsservice: string, optional + Appintegrationsservice terra.StringValue `hcl:"appintegrationsservice,attr"` + // Applicationautoscaling: string, optional + Applicationautoscaling terra.StringValue `hcl:"applicationautoscaling,attr"` + // Applicationinsights: string, optional + Applicationinsights terra.StringValue `hcl:"applicationinsights,attr"` + // Appmesh: string, optional + Appmesh terra.StringValue `hcl:"appmesh,attr"` + // Appregistry: string, optional + Appregistry terra.StringValue `hcl:"appregistry,attr"` + // Apprunner: string, optional + Apprunner terra.StringValue `hcl:"apprunner,attr"` + // Appstream: string, optional + Appstream terra.StringValue `hcl:"appstream,attr"` + // Appsync: string, optional + Appsync terra.StringValue `hcl:"appsync,attr"` + // Athena: string, optional + Athena terra.StringValue `hcl:"athena,attr"` + // Auditmanager: string, optional + Auditmanager terra.StringValue `hcl:"auditmanager,attr"` + // Autoscaling: string, optional + Autoscaling terra.StringValue `hcl:"autoscaling,attr"` + // Autoscalingplans: string, optional + Autoscalingplans terra.StringValue `hcl:"autoscalingplans,attr"` + // Backup: string, optional + Backup terra.StringValue `hcl:"backup,attr"` + // Batch: string, optional + Batch terra.StringValue `hcl:"batch,attr"` + // Beanstalk: string, optional + Beanstalk terra.StringValue `hcl:"beanstalk,attr"` + // Bedrock: string, optional + Bedrock terra.StringValue `hcl:"bedrock,attr"` + // Bedrockagent: string, optional + Bedrockagent terra.StringValue `hcl:"bedrockagent,attr"` + // Budgets: string, optional + Budgets terra.StringValue `hcl:"budgets,attr"` + // Ce: string, optional + Ce terra.StringValue `hcl:"ce,attr"` + // Chime: string, optional + Chime terra.StringValue `hcl:"chime,attr"` + // Chimesdkmediapipelines: string, optional + Chimesdkmediapipelines terra.StringValue `hcl:"chimesdkmediapipelines,attr"` + // Chimesdkvoice: string, optional + Chimesdkvoice terra.StringValue `hcl:"chimesdkvoice,attr"` + // Cleanrooms: string, optional + Cleanrooms terra.StringValue `hcl:"cleanrooms,attr"` + // Cloud9: string, optional + Cloud9 terra.StringValue `hcl:"cloud9,attr"` + // Cloudcontrol: string, optional + Cloudcontrol terra.StringValue `hcl:"cloudcontrol,attr"` + // Cloudcontrolapi: string, optional + Cloudcontrolapi terra.StringValue `hcl:"cloudcontrolapi,attr"` + // Cloudformation: string, optional + Cloudformation terra.StringValue `hcl:"cloudformation,attr"` + // Cloudfront: string, optional + Cloudfront terra.StringValue `hcl:"cloudfront,attr"` + // Cloudfrontkeyvaluestore: string, optional + Cloudfrontkeyvaluestore terra.StringValue `hcl:"cloudfrontkeyvaluestore,attr"` + // Cloudhsm: string, optional + Cloudhsm terra.StringValue `hcl:"cloudhsm,attr"` + // Cloudhsmv2: string, optional + Cloudhsmv2 terra.StringValue `hcl:"cloudhsmv2,attr"` + // Cloudsearch: string, optional + Cloudsearch terra.StringValue `hcl:"cloudsearch,attr"` + // Cloudtrail: string, optional + Cloudtrail terra.StringValue `hcl:"cloudtrail,attr"` + // Cloudwatch: string, optional + Cloudwatch terra.StringValue `hcl:"cloudwatch,attr"` + // Cloudwatchevents: string, optional + Cloudwatchevents terra.StringValue `hcl:"cloudwatchevents,attr"` + // Cloudwatchevidently: string, optional + Cloudwatchevidently terra.StringValue `hcl:"cloudwatchevidently,attr"` + // Cloudwatchlog: string, optional + Cloudwatchlog terra.StringValue `hcl:"cloudwatchlog,attr"` + // Cloudwatchlogs: string, optional + Cloudwatchlogs terra.StringValue `hcl:"cloudwatchlogs,attr"` + // Cloudwatchobservabilityaccessmanager: string, optional + Cloudwatchobservabilityaccessmanager terra.StringValue `hcl:"cloudwatchobservabilityaccessmanager,attr"` + // Cloudwatchrum: string, optional + Cloudwatchrum terra.StringValue `hcl:"cloudwatchrum,attr"` + // Codeartifact: string, optional + Codeartifact terra.StringValue `hcl:"codeartifact,attr"` + // Codebuild: string, optional + Codebuild terra.StringValue `hcl:"codebuild,attr"` + // Codecatalyst: string, optional + Codecatalyst terra.StringValue `hcl:"codecatalyst,attr"` + // Codecommit: string, optional + Codecommit terra.StringValue `hcl:"codecommit,attr"` + // Codedeploy: string, optional + Codedeploy terra.StringValue `hcl:"codedeploy,attr"` + // Codeguruprofiler: string, optional + Codeguruprofiler terra.StringValue `hcl:"codeguruprofiler,attr"` + // Codegurureviewer: string, optional + Codegurureviewer terra.StringValue `hcl:"codegurureviewer,attr"` + // Codepipeline: string, optional + Codepipeline terra.StringValue `hcl:"codepipeline,attr"` + // Codestarconnections: string, optional + Codestarconnections terra.StringValue `hcl:"codestarconnections,attr"` + // Codestarnotifications: string, optional + Codestarnotifications terra.StringValue `hcl:"codestarnotifications,attr"` + // Cognitoidentity: string, optional + Cognitoidentity terra.StringValue `hcl:"cognitoidentity,attr"` + // Cognitoidentityprovider: string, optional + Cognitoidentityprovider terra.StringValue `hcl:"cognitoidentityprovider,attr"` + // Cognitoidp: string, optional + Cognitoidp terra.StringValue `hcl:"cognitoidp,attr"` + // Comprehend: string, optional + Comprehend terra.StringValue `hcl:"comprehend,attr"` + // Computeoptimizer: string, optional + Computeoptimizer terra.StringValue `hcl:"computeoptimizer,attr"` + // Config: string, optional + Config terra.StringValue `hcl:"config,attr"` + // Configservice: string, optional + Configservice terra.StringValue `hcl:"configservice,attr"` + // Connect: string, optional + Connect terra.StringValue `hcl:"connect,attr"` + // Connectcases: string, optional + Connectcases terra.StringValue `hcl:"connectcases,attr"` + // Controltower: string, optional + Controltower terra.StringValue `hcl:"controltower,attr"` + // Costandusagereportservice: string, optional + Costandusagereportservice terra.StringValue `hcl:"costandusagereportservice,attr"` + // Costexplorer: string, optional + Costexplorer terra.StringValue `hcl:"costexplorer,attr"` + // Costoptimizationhub: string, optional + Costoptimizationhub terra.StringValue `hcl:"costoptimizationhub,attr"` + // Cur: string, optional + Cur terra.StringValue `hcl:"cur,attr"` + // Customerprofiles: string, optional + Customerprofiles terra.StringValue `hcl:"customerprofiles,attr"` + // Databasemigration: string, optional + Databasemigration terra.StringValue `hcl:"databasemigration,attr"` + // Databasemigrationservice: string, optional + Databasemigrationservice terra.StringValue `hcl:"databasemigrationservice,attr"` + // Dataexchange: string, optional + Dataexchange terra.StringValue `hcl:"dataexchange,attr"` + // Datapipeline: string, optional + Datapipeline terra.StringValue `hcl:"datapipeline,attr"` + // Datasync: string, optional + Datasync terra.StringValue `hcl:"datasync,attr"` + // Datazone: string, optional + Datazone terra.StringValue `hcl:"datazone,attr"` + // Dax: string, optional + Dax terra.StringValue `hcl:"dax,attr"` + // Deploy: string, optional + Deploy terra.StringValue `hcl:"deploy,attr"` + // Detective: string, optional + Detective terra.StringValue `hcl:"detective,attr"` + // Devicefarm: string, optional + Devicefarm terra.StringValue `hcl:"devicefarm,attr"` + // Devopsguru: string, optional + Devopsguru terra.StringValue `hcl:"devopsguru,attr"` + // Directconnect: string, optional + Directconnect terra.StringValue `hcl:"directconnect,attr"` + // Directoryservice: string, optional + Directoryservice terra.StringValue `hcl:"directoryservice,attr"` + // Dlm: string, optional + Dlm terra.StringValue `hcl:"dlm,attr"` + // Dms: string, optional + Dms terra.StringValue `hcl:"dms,attr"` + // Docdb: string, optional + Docdb terra.StringValue `hcl:"docdb,attr"` + // Docdbelastic: string, optional + Docdbelastic terra.StringValue `hcl:"docdbelastic,attr"` + // Ds: string, optional + Ds terra.StringValue `hcl:"ds,attr"` + // Dynamodb: string, optional + Dynamodb terra.StringValue `hcl:"dynamodb,attr"` + // Ec2: string, optional + Ec2 terra.StringValue `hcl:"ec2,attr"` + // Ecr: string, optional + Ecr terra.StringValue `hcl:"ecr,attr"` + // Ecrpublic: string, optional + Ecrpublic terra.StringValue `hcl:"ecrpublic,attr"` + // Ecs: string, optional + Ecs terra.StringValue `hcl:"ecs,attr"` + // Efs: string, optional + Efs terra.StringValue `hcl:"efs,attr"` + // Eks: string, optional + Eks terra.StringValue `hcl:"eks,attr"` + // Elasticache: string, optional + Elasticache terra.StringValue `hcl:"elasticache,attr"` + // Elasticbeanstalk: string, optional + Elasticbeanstalk terra.StringValue `hcl:"elasticbeanstalk,attr"` + // Elasticloadbalancing: string, optional + Elasticloadbalancing terra.StringValue `hcl:"elasticloadbalancing,attr"` + // Elasticloadbalancingv2: string, optional + Elasticloadbalancingv2 terra.StringValue `hcl:"elasticloadbalancingv2,attr"` + // Elasticsearch: string, optional + Elasticsearch terra.StringValue `hcl:"elasticsearch,attr"` + // Elasticsearchservice: string, optional + Elasticsearchservice terra.StringValue `hcl:"elasticsearchservice,attr"` + // Elastictranscoder: string, optional + Elastictranscoder terra.StringValue `hcl:"elastictranscoder,attr"` + // Elb: string, optional + Elb terra.StringValue `hcl:"elb,attr"` + // Elbv2: string, optional + Elbv2 terra.StringValue `hcl:"elbv2,attr"` + // Emr: string, optional + Emr terra.StringValue `hcl:"emr,attr"` + // Emrcontainers: string, optional + Emrcontainers terra.StringValue `hcl:"emrcontainers,attr"` + // Emrserverless: string, optional + Emrserverless terra.StringValue `hcl:"emrserverless,attr"` + // Es: string, optional + Es terra.StringValue `hcl:"es,attr"` + // Eventbridge: string, optional + Eventbridge terra.StringValue `hcl:"eventbridge,attr"` + // Events: string, optional + Events terra.StringValue `hcl:"events,attr"` + // Evidently: string, optional + Evidently terra.StringValue `hcl:"evidently,attr"` + // Finspace: string, optional + Finspace terra.StringValue `hcl:"finspace,attr"` + // Firehose: string, optional + Firehose terra.StringValue `hcl:"firehose,attr"` + // Fis: string, optional + Fis terra.StringValue `hcl:"fis,attr"` + // Fms: string, optional + Fms terra.StringValue `hcl:"fms,attr"` + // Fsx: string, optional + Fsx terra.StringValue `hcl:"fsx,attr"` + // Gamelift: string, optional + Gamelift terra.StringValue `hcl:"gamelift,attr"` + // Glacier: string, optional + Glacier terra.StringValue `hcl:"glacier,attr"` + // Globalaccelerator: string, optional + Globalaccelerator terra.StringValue `hcl:"globalaccelerator,attr"` + // Glue: string, optional + Glue terra.StringValue `hcl:"glue,attr"` + // Grafana: string, optional + Grafana terra.StringValue `hcl:"grafana,attr"` + // Greengrass: string, optional + Greengrass terra.StringValue `hcl:"greengrass,attr"` + // Groundstation: string, optional + Groundstation terra.StringValue `hcl:"groundstation,attr"` + // Guardduty: string, optional + Guardduty terra.StringValue `hcl:"guardduty,attr"` + // Healthlake: string, optional + Healthlake terra.StringValue `hcl:"healthlake,attr"` + // Iam: string, optional + Iam terra.StringValue `hcl:"iam,attr"` + // Identitystore: string, optional + Identitystore terra.StringValue `hcl:"identitystore,attr"` + // Imagebuilder: string, optional + Imagebuilder terra.StringValue `hcl:"imagebuilder,attr"` + // Inspector: string, optional + Inspector terra.StringValue `hcl:"inspector,attr"` + // Inspector2: string, optional + Inspector2 terra.StringValue `hcl:"inspector2,attr"` + // Inspectorv2: string, optional + Inspectorv2 terra.StringValue `hcl:"inspectorv2,attr"` + // Internetmonitor: string, optional + Internetmonitor terra.StringValue `hcl:"internetmonitor,attr"` + // Iot: string, optional + Iot terra.StringValue `hcl:"iot,attr"` + // Iotanalytics: string, optional + Iotanalytics terra.StringValue `hcl:"iotanalytics,attr"` + // Iotevents: string, optional + Iotevents terra.StringValue `hcl:"iotevents,attr"` + // Ivs: string, optional + Ivs terra.StringValue `hcl:"ivs,attr"` + // Ivschat: string, optional + Ivschat terra.StringValue `hcl:"ivschat,attr"` + // Kafka: string, optional + Kafka terra.StringValue `hcl:"kafka,attr"` + // Kafkaconnect: string, optional + Kafkaconnect terra.StringValue `hcl:"kafkaconnect,attr"` + // Kendra: string, optional + Kendra terra.StringValue `hcl:"kendra,attr"` + // Keyspaces: string, optional + Keyspaces terra.StringValue `hcl:"keyspaces,attr"` + // Kinesis: string, optional + Kinesis terra.StringValue `hcl:"kinesis,attr"` + // Kinesisanalytics: string, optional + Kinesisanalytics terra.StringValue `hcl:"kinesisanalytics,attr"` + // Kinesisanalyticsv2: string, optional + Kinesisanalyticsv2 terra.StringValue `hcl:"kinesisanalyticsv2,attr"` + // Kinesisvideo: string, optional + Kinesisvideo terra.StringValue `hcl:"kinesisvideo,attr"` + // Kms: string, optional + Kms terra.StringValue `hcl:"kms,attr"` + // Lakeformation: string, optional + Lakeformation terra.StringValue `hcl:"lakeformation,attr"` + // Lambda: string, optional + Lambda terra.StringValue `hcl:"lambda,attr"` + // Launchwizard: string, optional + Launchwizard terra.StringValue `hcl:"launchwizard,attr"` + // Lex: string, optional + Lex terra.StringValue `hcl:"lex,attr"` + // Lexmodelbuilding: string, optional + Lexmodelbuilding terra.StringValue `hcl:"lexmodelbuilding,attr"` + // Lexmodelbuildingservice: string, optional + Lexmodelbuildingservice terra.StringValue `hcl:"lexmodelbuildingservice,attr"` + // Lexmodels: string, optional + Lexmodels terra.StringValue `hcl:"lexmodels,attr"` + // Lexmodelsv2: string, optional + Lexmodelsv2 terra.StringValue `hcl:"lexmodelsv2,attr"` + // Lexv2Models: string, optional + Lexv2Models terra.StringValue `hcl:"lexv2models,attr"` + // Licensemanager: string, optional + Licensemanager terra.StringValue `hcl:"licensemanager,attr"` + // Lightsail: string, optional + Lightsail terra.StringValue `hcl:"lightsail,attr"` + // Location: string, optional + Location terra.StringValue `hcl:"location,attr"` + // Locationservice: string, optional + Locationservice terra.StringValue `hcl:"locationservice,attr"` + // Logs: string, optional + Logs terra.StringValue `hcl:"logs,attr"` + // Lookoutmetrics: string, optional + Lookoutmetrics terra.StringValue `hcl:"lookoutmetrics,attr"` + // M2: string, optional + M2 terra.StringValue `hcl:"m2,attr"` + // Macie2: string, optional + Macie2 terra.StringValue `hcl:"macie2,attr"` + // Managedgrafana: string, optional + Managedgrafana terra.StringValue `hcl:"managedgrafana,attr"` + // Mediaconnect: string, optional + Mediaconnect terra.StringValue `hcl:"mediaconnect,attr"` + // Mediaconvert: string, optional + Mediaconvert terra.StringValue `hcl:"mediaconvert,attr"` + // Medialive: string, optional + Medialive terra.StringValue `hcl:"medialive,attr"` + // Mediapackage: string, optional + Mediapackage terra.StringValue `hcl:"mediapackage,attr"` + // Mediapackagev2: string, optional + Mediapackagev2 terra.StringValue `hcl:"mediapackagev2,attr"` + // Mediastore: string, optional + Mediastore terra.StringValue `hcl:"mediastore,attr"` + // Memorydb: string, optional + Memorydb terra.StringValue `hcl:"memorydb,attr"` + // Mq: string, optional + Mq terra.StringValue `hcl:"mq,attr"` + // Msk: string, optional + Msk terra.StringValue `hcl:"msk,attr"` + // Mwaa: string, optional + Mwaa terra.StringValue `hcl:"mwaa,attr"` + // Neptune: string, optional + Neptune terra.StringValue `hcl:"neptune,attr"` + // Networkfirewall: string, optional + Networkfirewall terra.StringValue `hcl:"networkfirewall,attr"` + // Networkmanager: string, optional + Networkmanager terra.StringValue `hcl:"networkmanager,attr"` + // Oam: string, optional + Oam terra.StringValue `hcl:"oam,attr"` + // Opensearch: string, optional + Opensearch terra.StringValue `hcl:"opensearch,attr"` + // Opensearchingestion: string, optional + Opensearchingestion terra.StringValue `hcl:"opensearchingestion,attr"` + // Opensearchserverless: string, optional + Opensearchserverless terra.StringValue `hcl:"opensearchserverless,attr"` + // Opensearchservice: string, optional + Opensearchservice terra.StringValue `hcl:"opensearchservice,attr"` + // Opsworks: string, optional + Opsworks terra.StringValue `hcl:"opsworks,attr"` + // Organizations: string, optional + Organizations terra.StringValue `hcl:"organizations,attr"` + // Osis: string, optional + Osis terra.StringValue `hcl:"osis,attr"` + // Outposts: string, optional + Outposts terra.StringValue `hcl:"outposts,attr"` + // Paymentcryptography: string, optional + Paymentcryptography terra.StringValue `hcl:"paymentcryptography,attr"` + // Pcaconnectorad: string, optional + Pcaconnectorad terra.StringValue `hcl:"pcaconnectorad,attr"` + // Pinpoint: string, optional + Pinpoint terra.StringValue `hcl:"pinpoint,attr"` + // Pipes: string, optional + Pipes terra.StringValue `hcl:"pipes,attr"` + // Polly: string, optional + Polly terra.StringValue `hcl:"polly,attr"` + // Pricing: string, optional + Pricing terra.StringValue `hcl:"pricing,attr"` + // Prometheus: string, optional + Prometheus terra.StringValue `hcl:"prometheus,attr"` + // Prometheusservice: string, optional + Prometheusservice terra.StringValue `hcl:"prometheusservice,attr"` + // Qbusiness: string, optional + Qbusiness terra.StringValue `hcl:"qbusiness,attr"` + // Qldb: string, optional + Qldb terra.StringValue `hcl:"qldb,attr"` + // Quicksight: string, optional + Quicksight terra.StringValue `hcl:"quicksight,attr"` + // Ram: string, optional + Ram terra.StringValue `hcl:"ram,attr"` + // Rbin: string, optional + Rbin terra.StringValue `hcl:"rbin,attr"` + // Rds: string, optional + Rds terra.StringValue `hcl:"rds,attr"` + // Recyclebin: string, optional + Recyclebin terra.StringValue `hcl:"recyclebin,attr"` + // Redshift: string, optional + Redshift terra.StringValue `hcl:"redshift,attr"` + // Redshiftdata: string, optional + Redshiftdata terra.StringValue `hcl:"redshiftdata,attr"` + // Redshiftdataapiservice: string, optional + Redshiftdataapiservice terra.StringValue `hcl:"redshiftdataapiservice,attr"` + // Redshiftserverless: string, optional + Redshiftserverless terra.StringValue `hcl:"redshiftserverless,attr"` + // Rekognition: string, optional + Rekognition terra.StringValue `hcl:"rekognition,attr"` + // Resourceexplorer2: string, optional + Resourceexplorer2 terra.StringValue `hcl:"resourceexplorer2,attr"` + // Resourcegroups: string, optional + Resourcegroups terra.StringValue `hcl:"resourcegroups,attr"` + // Resourcegroupstagging: string, optional + Resourcegroupstagging terra.StringValue `hcl:"resourcegroupstagging,attr"` + // Resourcegroupstaggingapi: string, optional + Resourcegroupstaggingapi terra.StringValue `hcl:"resourcegroupstaggingapi,attr"` + // Rolesanywhere: string, optional + Rolesanywhere terra.StringValue `hcl:"rolesanywhere,attr"` + // Route53: string, optional + Route53 terra.StringValue `hcl:"route53,attr"` + // Route53Domains: string, optional + Route53Domains terra.StringValue `hcl:"route53domains,attr"` + // Route53Recoverycontrolconfig: string, optional + Route53Recoverycontrolconfig terra.StringValue `hcl:"route53recoverycontrolconfig,attr"` + // Route53Recoveryreadiness: string, optional + Route53Recoveryreadiness terra.StringValue `hcl:"route53recoveryreadiness,attr"` + // Route53Resolver: string, optional + Route53Resolver terra.StringValue `hcl:"route53resolver,attr"` + // Rum: string, optional + Rum terra.StringValue `hcl:"rum,attr"` + // S3: string, optional + S3 terra.StringValue `hcl:"s3,attr"` + // S3Api: string, optional + S3Api terra.StringValue `hcl:"s3api,attr"` + // S3Control: string, optional + S3Control terra.StringValue `hcl:"s3control,attr"` + // S3Outposts: string, optional + S3Outposts terra.StringValue `hcl:"s3outposts,attr"` + // Sagemaker: string, optional + Sagemaker terra.StringValue `hcl:"sagemaker,attr"` + // Scheduler: string, optional + Scheduler terra.StringValue `hcl:"scheduler,attr"` + // Schemas: string, optional + Schemas terra.StringValue `hcl:"schemas,attr"` + // Sdb: string, optional + Sdb terra.StringValue `hcl:"sdb,attr"` + // Secretsmanager: string, optional + Secretsmanager terra.StringValue `hcl:"secretsmanager,attr"` + // Securityhub: string, optional + Securityhub terra.StringValue `hcl:"securityhub,attr"` + // Securitylake: string, optional + Securitylake terra.StringValue `hcl:"securitylake,attr"` + // Serverlessapplicationrepository: string, optional + Serverlessapplicationrepository terra.StringValue `hcl:"serverlessapplicationrepository,attr"` + // Serverlessapprepo: string, optional + Serverlessapprepo terra.StringValue `hcl:"serverlessapprepo,attr"` + // Serverlessrepo: string, optional + Serverlessrepo terra.StringValue `hcl:"serverlessrepo,attr"` + // Servicecatalog: string, optional + Servicecatalog terra.StringValue `hcl:"servicecatalog,attr"` + // Servicecatalogappregistry: string, optional + Servicecatalogappregistry terra.StringValue `hcl:"servicecatalogappregistry,attr"` + // Servicediscovery: string, optional + Servicediscovery terra.StringValue `hcl:"servicediscovery,attr"` + // Servicequotas: string, optional + Servicequotas terra.StringValue `hcl:"servicequotas,attr"` + // Ses: string, optional + Ses terra.StringValue `hcl:"ses,attr"` + // Sesv2: string, optional + Sesv2 terra.StringValue `hcl:"sesv2,attr"` + // Sfn: string, optional + Sfn terra.StringValue `hcl:"sfn,attr"` + // Shield: string, optional + Shield terra.StringValue `hcl:"shield,attr"` + // Signer: string, optional + Signer terra.StringValue `hcl:"signer,attr"` + // Simpledb: string, optional + Simpledb terra.StringValue `hcl:"simpledb,attr"` + // Sns: string, optional + Sns terra.StringValue `hcl:"sns,attr"` + // Sqs: string, optional + Sqs terra.StringValue `hcl:"sqs,attr"` + // Ssm: string, optional + Ssm terra.StringValue `hcl:"ssm,attr"` + // Ssmcontacts: string, optional + Ssmcontacts terra.StringValue `hcl:"ssmcontacts,attr"` + // Ssmincidents: string, optional + Ssmincidents terra.StringValue `hcl:"ssmincidents,attr"` + // Ssmsap: string, optional + Ssmsap terra.StringValue `hcl:"ssmsap,attr"` + // Sso: string, optional + Sso terra.StringValue `hcl:"sso,attr"` + // Ssoadmin: string, optional + Ssoadmin terra.StringValue `hcl:"ssoadmin,attr"` + // Stepfunctions: string, optional + Stepfunctions terra.StringValue `hcl:"stepfunctions,attr"` + // Storagegateway: string, optional + Storagegateway terra.StringValue `hcl:"storagegateway,attr"` + // Sts: string, optional + Sts terra.StringValue `hcl:"sts,attr"` + // Swf: string, optional + Swf terra.StringValue `hcl:"swf,attr"` + // Synthetics: string, optional + Synthetics terra.StringValue `hcl:"synthetics,attr"` + // Timestreamwrite: string, optional + Timestreamwrite terra.StringValue `hcl:"timestreamwrite,attr"` + // Transcribe: string, optional + Transcribe terra.StringValue `hcl:"transcribe,attr"` + // Transcribeservice: string, optional + Transcribeservice terra.StringValue `hcl:"transcribeservice,attr"` + // Transfer: string, optional + Transfer terra.StringValue `hcl:"transfer,attr"` + // Verifiedpermissions: string, optional + Verifiedpermissions terra.StringValue `hcl:"verifiedpermissions,attr"` + // Vpclattice: string, optional + Vpclattice terra.StringValue `hcl:"vpclattice,attr"` + // Waf: string, optional + Waf terra.StringValue `hcl:"waf,attr"` + // Wafregional: string, optional + Wafregional terra.StringValue `hcl:"wafregional,attr"` + // Wafv2: string, optional + Wafv2 terra.StringValue `hcl:"wafv2,attr"` + // Wellarchitected: string, optional + Wellarchitected terra.StringValue `hcl:"wellarchitected,attr"` + // Worklink: string, optional + Worklink terra.StringValue `hcl:"worklink,attr"` + // Workspaces: string, optional + Workspaces terra.StringValue `hcl:"workspaces,attr"` + // Xray: string, optional + Xray terra.StringValue `hcl:"xray,attr"` +} + +type IgnoreTags struct { + // KeyPrefixes: set of string, optional + KeyPrefixes terra.SetValue[terra.StringValue] `hcl:"key_prefixes,attr"` + // Keys: set of string, optional + Keys terra.SetValue[terra.StringValue] `hcl:"keys,attr"` +} + +type AssumeRoleAttributes struct { + ref terra.Reference +} + +func (ar AssumeRoleAttributes) InternalRef() (terra.Reference, error) { + return ar.ref, nil +} + +func (ar AssumeRoleAttributes) InternalWithRef(ref terra.Reference) AssumeRoleAttributes { + return AssumeRoleAttributes{ref: ref} +} + +func (ar AssumeRoleAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ar.ref.InternalTokens() +} + +func (ar AssumeRoleAttributes) Duration() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("duration")) +} + +func (ar AssumeRoleAttributes) ExternalId() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("external_id")) +} + +func (ar AssumeRoleAttributes) Policy() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("policy")) +} + +func (ar AssumeRoleAttributes) PolicyArns() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ar.ref.Append("policy_arns")) +} + +func (ar AssumeRoleAttributes) RoleArn() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("role_arn")) +} + +func (ar AssumeRoleAttributes) SessionName() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("session_name")) +} + +func (ar AssumeRoleAttributes) SourceIdentity() terra.StringValue { + return terra.ReferenceAsString(ar.ref.Append("source_identity")) +} + +func (ar AssumeRoleAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ar.ref.Append("tags")) +} + +func (ar AssumeRoleAttributes) TransitiveTagKeys() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ar.ref.Append("transitive_tag_keys")) +} + +type AssumeRoleWithWebIdentityAttributes struct { + ref terra.Reference +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalRef() (terra.Reference, error) { + return arwwi.ref, nil +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalWithRef(ref terra.Reference) AssumeRoleWithWebIdentityAttributes { + return AssumeRoleWithWebIdentityAttributes{ref: ref} +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) InternalTokens() (hclwrite.Tokens, error) { + return arwwi.ref.InternalTokens() +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) Duration() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("duration")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) Policy() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("policy")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) PolicyArns() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](arwwi.ref.Append("policy_arns")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) RoleArn() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("role_arn")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) SessionName() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("session_name")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) WebIdentityToken() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("web_identity_token")) +} + +func (arwwi AssumeRoleWithWebIdentityAttributes) WebIdentityTokenFile() terra.StringValue { + return terra.ReferenceAsString(arwwi.ref.Append("web_identity_token_file")) +} + +type DefaultTagsAttributes struct { + ref terra.Reference +} + +func (dt DefaultTagsAttributes) InternalRef() (terra.Reference, error) { + return dt.ref, nil +} + +func (dt DefaultTagsAttributes) InternalWithRef(ref terra.Reference) DefaultTagsAttributes { + return DefaultTagsAttributes{ref: ref} +} + +func (dt DefaultTagsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return dt.ref.InternalTokens() +} + +func (dt DefaultTagsAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](dt.ref.Append("tags")) +} + +type EndpointsAttributes struct { + ref terra.Reference +} + +func (e EndpointsAttributes) InternalRef() (terra.Reference, error) { + return e.ref, nil +} + +func (e EndpointsAttributes) InternalWithRef(ref terra.Reference) EndpointsAttributes { + return EndpointsAttributes{ref: ref} +} + +func (e EndpointsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return e.ref.InternalTokens() +} + +func (e EndpointsAttributes) Accessanalyzer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("accessanalyzer")) +} + +func (e EndpointsAttributes) Account() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("account")) +} + +func (e EndpointsAttributes) Acm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("acm")) +} + +func (e EndpointsAttributes) Acmpca() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("acmpca")) +} + +func (e EndpointsAttributes) Amg() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amg")) +} + +func (e EndpointsAttributes) Amp() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amp")) +} + +func (e EndpointsAttributes) Amplify() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("amplify")) +} + +func (e EndpointsAttributes) Apigateway() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apigateway")) +} + +func (e EndpointsAttributes) Apigatewayv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apigatewayv2")) +} + +func (e EndpointsAttributes) Appautoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appautoscaling")) +} + +func (e EndpointsAttributes) Appconfig() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appconfig")) +} + +func (e EndpointsAttributes) Appfabric() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appfabric")) +} + +func (e EndpointsAttributes) Appflow() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appflow")) +} + +func (e EndpointsAttributes) Appintegrations() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appintegrations")) +} + +func (e EndpointsAttributes) Appintegrationsservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appintegrationsservice")) +} + +func (e EndpointsAttributes) Applicationautoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("applicationautoscaling")) +} + +func (e EndpointsAttributes) Applicationinsights() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("applicationinsights")) +} + +func (e EndpointsAttributes) Appmesh() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appmesh")) +} + +func (e EndpointsAttributes) Appregistry() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appregistry")) +} + +func (e EndpointsAttributes) Apprunner() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("apprunner")) +} + +func (e EndpointsAttributes) Appstream() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appstream")) +} + +func (e EndpointsAttributes) Appsync() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("appsync")) +} + +func (e EndpointsAttributes) Athena() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("athena")) +} + +func (e EndpointsAttributes) Auditmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("auditmanager")) +} + +func (e EndpointsAttributes) Autoscaling() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("autoscaling")) +} + +func (e EndpointsAttributes) Autoscalingplans() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("autoscalingplans")) +} + +func (e EndpointsAttributes) Backup() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("backup")) +} + +func (e EndpointsAttributes) Batch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("batch")) +} + +func (e EndpointsAttributes) Beanstalk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("beanstalk")) +} + +func (e EndpointsAttributes) Bedrock() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("bedrock")) +} + +func (e EndpointsAttributes) Bedrockagent() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("bedrockagent")) +} + +func (e EndpointsAttributes) Budgets() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("budgets")) +} + +func (e EndpointsAttributes) Ce() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ce")) +} + +func (e EndpointsAttributes) Chime() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chime")) +} + +func (e EndpointsAttributes) Chimesdkmediapipelines() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chimesdkmediapipelines")) +} + +func (e EndpointsAttributes) Chimesdkvoice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("chimesdkvoice")) +} + +func (e EndpointsAttributes) Cleanrooms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cleanrooms")) +} + +func (e EndpointsAttributes) Cloud9() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloud9")) +} + +func (e EndpointsAttributes) Cloudcontrol() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudcontrol")) +} + +func (e EndpointsAttributes) Cloudcontrolapi() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudcontrolapi")) +} + +func (e EndpointsAttributes) Cloudformation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudformation")) +} + +func (e EndpointsAttributes) Cloudfront() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudfront")) +} + +func (e EndpointsAttributes) Cloudfrontkeyvaluestore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudfrontkeyvaluestore")) +} + +func (e EndpointsAttributes) Cloudhsm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudhsm")) +} + +func (e EndpointsAttributes) Cloudhsmv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudhsmv2")) +} + +func (e EndpointsAttributes) Cloudsearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudsearch")) +} + +func (e EndpointsAttributes) Cloudtrail() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudtrail")) +} + +func (e EndpointsAttributes) Cloudwatch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatch")) +} + +func (e EndpointsAttributes) Cloudwatchevents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchevents")) +} + +func (e EndpointsAttributes) Cloudwatchevidently() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchevidently")) +} + +func (e EndpointsAttributes) Cloudwatchlog() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchlog")) +} + +func (e EndpointsAttributes) Cloudwatchlogs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchlogs")) +} + +func (e EndpointsAttributes) Cloudwatchobservabilityaccessmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchobservabilityaccessmanager")) +} + +func (e EndpointsAttributes) Cloudwatchrum() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cloudwatchrum")) +} + +func (e EndpointsAttributes) Codeartifact() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codeartifact")) +} + +func (e EndpointsAttributes) Codebuild() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codebuild")) +} + +func (e EndpointsAttributes) Codecatalyst() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codecatalyst")) +} + +func (e EndpointsAttributes) Codecommit() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codecommit")) +} + +func (e EndpointsAttributes) Codedeploy() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codedeploy")) +} + +func (e EndpointsAttributes) Codeguruprofiler() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codeguruprofiler")) +} + +func (e EndpointsAttributes) Codegurureviewer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codegurureviewer")) +} + +func (e EndpointsAttributes) Codepipeline() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codepipeline")) +} + +func (e EndpointsAttributes) Codestarconnections() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codestarconnections")) +} + +func (e EndpointsAttributes) Codestarnotifications() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("codestarnotifications")) +} + +func (e EndpointsAttributes) Cognitoidentity() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidentity")) +} + +func (e EndpointsAttributes) Cognitoidentityprovider() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidentityprovider")) +} + +func (e EndpointsAttributes) Cognitoidp() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cognitoidp")) +} + +func (e EndpointsAttributes) Comprehend() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("comprehend")) +} + +func (e EndpointsAttributes) Computeoptimizer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("computeoptimizer")) +} + +func (e EndpointsAttributes) Config() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("config")) +} + +func (e EndpointsAttributes) Configservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("configservice")) +} + +func (e EndpointsAttributes) Connect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("connect")) +} + +func (e EndpointsAttributes) Connectcases() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("connectcases")) +} + +func (e EndpointsAttributes) Controltower() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("controltower")) +} + +func (e EndpointsAttributes) Costandusagereportservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costandusagereportservice")) +} + +func (e EndpointsAttributes) Costexplorer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costexplorer")) +} + +func (e EndpointsAttributes) Costoptimizationhub() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("costoptimizationhub")) +} + +func (e EndpointsAttributes) Cur() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("cur")) +} + +func (e EndpointsAttributes) Customerprofiles() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("customerprofiles")) +} + +func (e EndpointsAttributes) Databasemigration() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("databasemigration")) +} + +func (e EndpointsAttributes) Databasemigrationservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("databasemigrationservice")) +} + +func (e EndpointsAttributes) Dataexchange() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dataexchange")) +} + +func (e EndpointsAttributes) Datapipeline() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datapipeline")) +} + +func (e EndpointsAttributes) Datasync() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datasync")) +} + +func (e EndpointsAttributes) Datazone() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("datazone")) +} + +func (e EndpointsAttributes) Dax() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dax")) +} + +func (e EndpointsAttributes) Deploy() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("deploy")) +} + +func (e EndpointsAttributes) Detective() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("detective")) +} + +func (e EndpointsAttributes) Devicefarm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("devicefarm")) +} + +func (e EndpointsAttributes) Devopsguru() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("devopsguru")) +} + +func (e EndpointsAttributes) Directconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("directconnect")) +} + +func (e EndpointsAttributes) Directoryservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("directoryservice")) +} + +func (e EndpointsAttributes) Dlm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dlm")) +} + +func (e EndpointsAttributes) Dms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dms")) +} + +func (e EndpointsAttributes) Docdb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("docdb")) +} + +func (e EndpointsAttributes) Docdbelastic() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("docdbelastic")) +} + +func (e EndpointsAttributes) Ds() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ds")) +} + +func (e EndpointsAttributes) Dynamodb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("dynamodb")) +} + +func (e EndpointsAttributes) Ec2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ec2")) +} + +func (e EndpointsAttributes) Ecr() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecr")) +} + +func (e EndpointsAttributes) Ecrpublic() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecrpublic")) +} + +func (e EndpointsAttributes) Ecs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ecs")) +} + +func (e EndpointsAttributes) Efs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("efs")) +} + +func (e EndpointsAttributes) Eks() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("eks")) +} + +func (e EndpointsAttributes) Elasticache() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticache")) +} + +func (e EndpointsAttributes) Elasticbeanstalk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticbeanstalk")) +} + +func (e EndpointsAttributes) Elasticloadbalancing() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticloadbalancing")) +} + +func (e EndpointsAttributes) Elasticloadbalancingv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticloadbalancingv2")) +} + +func (e EndpointsAttributes) Elasticsearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticsearch")) +} + +func (e EndpointsAttributes) Elasticsearchservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elasticsearchservice")) +} + +func (e EndpointsAttributes) Elastictranscoder() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elastictranscoder")) +} + +func (e EndpointsAttributes) Elb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elb")) +} + +func (e EndpointsAttributes) Elbv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("elbv2")) +} + +func (e EndpointsAttributes) Emr() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emr")) +} + +func (e EndpointsAttributes) Emrcontainers() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emrcontainers")) +} + +func (e EndpointsAttributes) Emrserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("emrserverless")) +} + +func (e EndpointsAttributes) Es() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("es")) +} + +func (e EndpointsAttributes) Eventbridge() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("eventbridge")) +} + +func (e EndpointsAttributes) Events() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("events")) +} + +func (e EndpointsAttributes) Evidently() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("evidently")) +} + +func (e EndpointsAttributes) Finspace() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("finspace")) +} + +func (e EndpointsAttributes) Firehose() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("firehose")) +} + +func (e EndpointsAttributes) Fis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fis")) +} + +func (e EndpointsAttributes) Fms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fms")) +} + +func (e EndpointsAttributes) Fsx() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("fsx")) +} + +func (e EndpointsAttributes) Gamelift() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("gamelift")) +} + +func (e EndpointsAttributes) Glacier() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("glacier")) +} + +func (e EndpointsAttributes) Globalaccelerator() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("globalaccelerator")) +} + +func (e EndpointsAttributes) Glue() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("glue")) +} + +func (e EndpointsAttributes) Grafana() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("grafana")) +} + +func (e EndpointsAttributes) Greengrass() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("greengrass")) +} + +func (e EndpointsAttributes) Groundstation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("groundstation")) +} + +func (e EndpointsAttributes) Guardduty() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("guardduty")) +} + +func (e EndpointsAttributes) Healthlake() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("healthlake")) +} + +func (e EndpointsAttributes) Iam() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iam")) +} + +func (e EndpointsAttributes) Identitystore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("identitystore")) +} + +func (e EndpointsAttributes) Imagebuilder() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("imagebuilder")) +} + +func (e EndpointsAttributes) Inspector() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspector")) +} + +func (e EndpointsAttributes) Inspector2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspector2")) +} + +func (e EndpointsAttributes) Inspectorv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("inspectorv2")) +} + +func (e EndpointsAttributes) Internetmonitor() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("internetmonitor")) +} + +func (e EndpointsAttributes) Iot() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iot")) +} + +func (e EndpointsAttributes) Iotanalytics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iotanalytics")) +} + +func (e EndpointsAttributes) Iotevents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("iotevents")) +} + +func (e EndpointsAttributes) Ivs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ivs")) +} + +func (e EndpointsAttributes) Ivschat() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ivschat")) +} + +func (e EndpointsAttributes) Kafka() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kafka")) +} + +func (e EndpointsAttributes) Kafkaconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kafkaconnect")) +} + +func (e EndpointsAttributes) Kendra() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kendra")) +} + +func (e EndpointsAttributes) Keyspaces() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("keyspaces")) +} + +func (e EndpointsAttributes) Kinesis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesis")) +} + +func (e EndpointsAttributes) Kinesisanalytics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisanalytics")) +} + +func (e EndpointsAttributes) Kinesisanalyticsv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisanalyticsv2")) +} + +func (e EndpointsAttributes) Kinesisvideo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kinesisvideo")) +} + +func (e EndpointsAttributes) Kms() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("kms")) +} + +func (e EndpointsAttributes) Lakeformation() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lakeformation")) +} + +func (e EndpointsAttributes) Lambda() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lambda")) +} + +func (e EndpointsAttributes) Launchwizard() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("launchwizard")) +} + +func (e EndpointsAttributes) Lex() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lex")) +} + +func (e EndpointsAttributes) Lexmodelbuilding() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelbuilding")) +} + +func (e EndpointsAttributes) Lexmodelbuildingservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelbuildingservice")) +} + +func (e EndpointsAttributes) Lexmodels() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodels")) +} + +func (e EndpointsAttributes) Lexmodelsv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexmodelsv2")) +} + +func (e EndpointsAttributes) Lexv2Models() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lexv2models")) +} + +func (e EndpointsAttributes) Licensemanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("licensemanager")) +} + +func (e EndpointsAttributes) Lightsail() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lightsail")) +} + +func (e EndpointsAttributes) Location() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("location")) +} + +func (e EndpointsAttributes) Locationservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("locationservice")) +} + +func (e EndpointsAttributes) Logs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("logs")) +} + +func (e EndpointsAttributes) Lookoutmetrics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("lookoutmetrics")) +} + +func (e EndpointsAttributes) M2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("m2")) +} + +func (e EndpointsAttributes) Macie2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("macie2")) +} + +func (e EndpointsAttributes) Managedgrafana() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("managedgrafana")) +} + +func (e EndpointsAttributes) Mediaconnect() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediaconnect")) +} + +func (e EndpointsAttributes) Mediaconvert() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediaconvert")) +} + +func (e EndpointsAttributes) Medialive() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("medialive")) +} + +func (e EndpointsAttributes) Mediapackage() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediapackage")) +} + +func (e EndpointsAttributes) Mediapackagev2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediapackagev2")) +} + +func (e EndpointsAttributes) Mediastore() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mediastore")) +} + +func (e EndpointsAttributes) Memorydb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("memorydb")) +} + +func (e EndpointsAttributes) Mq() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mq")) +} + +func (e EndpointsAttributes) Msk() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("msk")) +} + +func (e EndpointsAttributes) Mwaa() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("mwaa")) +} + +func (e EndpointsAttributes) Neptune() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("neptune")) +} + +func (e EndpointsAttributes) Networkfirewall() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("networkfirewall")) +} + +func (e EndpointsAttributes) Networkmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("networkmanager")) +} + +func (e EndpointsAttributes) Oam() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("oam")) +} + +func (e EndpointsAttributes) Opensearch() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearch")) +} + +func (e EndpointsAttributes) Opensearchingestion() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchingestion")) +} + +func (e EndpointsAttributes) Opensearchserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchserverless")) +} + +func (e EndpointsAttributes) Opensearchservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opensearchservice")) +} + +func (e EndpointsAttributes) Opsworks() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("opsworks")) +} + +func (e EndpointsAttributes) Organizations() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("organizations")) +} + +func (e EndpointsAttributes) Osis() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("osis")) +} + +func (e EndpointsAttributes) Outposts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("outposts")) +} + +func (e EndpointsAttributes) Paymentcryptography() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("paymentcryptography")) +} + +func (e EndpointsAttributes) Pcaconnectorad() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pcaconnectorad")) +} + +func (e EndpointsAttributes) Pinpoint() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pinpoint")) +} + +func (e EndpointsAttributes) Pipes() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pipes")) +} + +func (e EndpointsAttributes) Polly() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("polly")) +} + +func (e EndpointsAttributes) Pricing() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("pricing")) +} + +func (e EndpointsAttributes) Prometheus() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("prometheus")) +} + +func (e EndpointsAttributes) Prometheusservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("prometheusservice")) +} + +func (e EndpointsAttributes) Qbusiness() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("qbusiness")) +} + +func (e EndpointsAttributes) Qldb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("qldb")) +} + +func (e EndpointsAttributes) Quicksight() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("quicksight")) +} + +func (e EndpointsAttributes) Ram() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ram")) +} + +func (e EndpointsAttributes) Rbin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rbin")) +} + +func (e EndpointsAttributes) Rds() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rds")) +} + +func (e EndpointsAttributes) Recyclebin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("recyclebin")) +} + +func (e EndpointsAttributes) Redshift() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshift")) +} + +func (e EndpointsAttributes) Redshiftdata() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftdata")) +} + +func (e EndpointsAttributes) Redshiftdataapiservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftdataapiservice")) +} + +func (e EndpointsAttributes) Redshiftserverless() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("redshiftserverless")) +} + +func (e EndpointsAttributes) Rekognition() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rekognition")) +} + +func (e EndpointsAttributes) Resourceexplorer2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourceexplorer2")) +} + +func (e EndpointsAttributes) Resourcegroups() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroups")) +} + +func (e EndpointsAttributes) Resourcegroupstagging() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroupstagging")) +} + +func (e EndpointsAttributes) Resourcegroupstaggingapi() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("resourcegroupstaggingapi")) +} + +func (e EndpointsAttributes) Rolesanywhere() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rolesanywhere")) +} + +func (e EndpointsAttributes) Route53() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53")) +} + +func (e EndpointsAttributes) Route53Domains() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53domains")) +} + +func (e EndpointsAttributes) Route53Recoverycontrolconfig() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53recoverycontrolconfig")) +} + +func (e EndpointsAttributes) Route53Recoveryreadiness() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53recoveryreadiness")) +} + +func (e EndpointsAttributes) Route53Resolver() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("route53resolver")) +} + +func (e EndpointsAttributes) Rum() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("rum")) +} + +func (e EndpointsAttributes) S3() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3")) +} + +func (e EndpointsAttributes) S3Api() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3api")) +} + +func (e EndpointsAttributes) S3Control() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3control")) +} + +func (e EndpointsAttributes) S3Outposts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("s3outposts")) +} + +func (e EndpointsAttributes) Sagemaker() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sagemaker")) +} + +func (e EndpointsAttributes) Scheduler() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("scheduler")) +} + +func (e EndpointsAttributes) Schemas() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("schemas")) +} + +func (e EndpointsAttributes) Sdb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sdb")) +} + +func (e EndpointsAttributes) Secretsmanager() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("secretsmanager")) +} + +func (e EndpointsAttributes) Securityhub() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("securityhub")) +} + +func (e EndpointsAttributes) Securitylake() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("securitylake")) +} + +func (e EndpointsAttributes) Serverlessapplicationrepository() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessapplicationrepository")) +} + +func (e EndpointsAttributes) Serverlessapprepo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessapprepo")) +} + +func (e EndpointsAttributes) Serverlessrepo() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("serverlessrepo")) +} + +func (e EndpointsAttributes) Servicecatalog() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicecatalog")) +} + +func (e EndpointsAttributes) Servicecatalogappregistry() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicecatalogappregistry")) +} + +func (e EndpointsAttributes) Servicediscovery() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicediscovery")) +} + +func (e EndpointsAttributes) Servicequotas() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("servicequotas")) +} + +func (e EndpointsAttributes) Ses() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ses")) +} + +func (e EndpointsAttributes) Sesv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sesv2")) +} + +func (e EndpointsAttributes) Sfn() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sfn")) +} + +func (e EndpointsAttributes) Shield() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("shield")) +} + +func (e EndpointsAttributes) Signer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("signer")) +} + +func (e EndpointsAttributes) Simpledb() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("simpledb")) +} + +func (e EndpointsAttributes) Sns() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sns")) +} + +func (e EndpointsAttributes) Sqs() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sqs")) +} + +func (e EndpointsAttributes) Ssm() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssm")) +} + +func (e EndpointsAttributes) Ssmcontacts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmcontacts")) +} + +func (e EndpointsAttributes) Ssmincidents() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmincidents")) +} + +func (e EndpointsAttributes) Ssmsap() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssmsap")) +} + +func (e EndpointsAttributes) Sso() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sso")) +} + +func (e EndpointsAttributes) Ssoadmin() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("ssoadmin")) +} + +func (e EndpointsAttributes) Stepfunctions() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("stepfunctions")) +} + +func (e EndpointsAttributes) Storagegateway() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("storagegateway")) +} + +func (e EndpointsAttributes) Sts() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("sts")) +} + +func (e EndpointsAttributes) Swf() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("swf")) +} + +func (e EndpointsAttributes) Synthetics() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("synthetics")) +} + +func (e EndpointsAttributes) Timestreamwrite() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("timestreamwrite")) +} + +func (e EndpointsAttributes) Transcribe() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transcribe")) +} + +func (e EndpointsAttributes) Transcribeservice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transcribeservice")) +} + +func (e EndpointsAttributes) Transfer() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("transfer")) +} + +func (e EndpointsAttributes) Verifiedpermissions() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("verifiedpermissions")) +} + +func (e EndpointsAttributes) Vpclattice() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("vpclattice")) +} + +func (e EndpointsAttributes) Waf() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("waf")) +} + +func (e EndpointsAttributes) Wafregional() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wafregional")) +} + +func (e EndpointsAttributes) Wafv2() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wafv2")) +} + +func (e EndpointsAttributes) Wellarchitected() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("wellarchitected")) +} + +func (e EndpointsAttributes) Worklink() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("worklink")) +} + +func (e EndpointsAttributes) Workspaces() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("workspaces")) +} + +func (e EndpointsAttributes) Xray() terra.StringValue { + return terra.ReferenceAsString(e.ref.Append("xray")) +} + +type IgnoreTagsAttributes struct { + ref terra.Reference +} + +func (it IgnoreTagsAttributes) InternalRef() (terra.Reference, error) { + return it.ref, nil +} + +func (it IgnoreTagsAttributes) InternalWithRef(ref terra.Reference) IgnoreTagsAttributes { + return IgnoreTagsAttributes{ref: ref} +} + +func (it IgnoreTagsAttributes) InternalTokens() (hclwrite.Tokens, error) { + return it.ref.InternalTokens() +} + +func (it IgnoreTagsAttributes) KeyPrefixes() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](it.ref.Append("key_prefixes")) +} + +func (it IgnoreTagsAttributes) Keys() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](it.ref.Append("keys")) +} + +type AssumeRoleState struct { + Duration string `json:"duration"` + ExternalId string `json:"external_id"` + Policy string `json:"policy"` + PolicyArns []string `json:"policy_arns"` + RoleArn string `json:"role_arn"` + SessionName string `json:"session_name"` + SourceIdentity string `json:"source_identity"` + Tags map[string]string `json:"tags"` + TransitiveTagKeys []string `json:"transitive_tag_keys"` +} + +type AssumeRoleWithWebIdentityState struct { + Duration string `json:"duration"` + Policy string `json:"policy"` + PolicyArns []string `json:"policy_arns"` + RoleArn string `json:"role_arn"` + SessionName string `json:"session_name"` + WebIdentityToken string `json:"web_identity_token"` + WebIdentityTokenFile string `json:"web_identity_token_file"` +} + +type DefaultTagsState struct { + Tags map[string]string `json:"tags"` +} + +type EndpointsState struct { + Accessanalyzer string `json:"accessanalyzer"` + Account string `json:"account"` + Acm string `json:"acm"` + Acmpca string `json:"acmpca"` + Amg string `json:"amg"` + Amp string `json:"amp"` + Amplify string `json:"amplify"` + Apigateway string `json:"apigateway"` + Apigatewayv2 string `json:"apigatewayv2"` + Appautoscaling string `json:"appautoscaling"` + Appconfig string `json:"appconfig"` + Appfabric string `json:"appfabric"` + Appflow string `json:"appflow"` + Appintegrations string `json:"appintegrations"` + Appintegrationsservice string `json:"appintegrationsservice"` + Applicationautoscaling string `json:"applicationautoscaling"` + Applicationinsights string `json:"applicationinsights"` + Appmesh string `json:"appmesh"` + Appregistry string `json:"appregistry"` + Apprunner string `json:"apprunner"` + Appstream string `json:"appstream"` + Appsync string `json:"appsync"` + Athena string `json:"athena"` + Auditmanager string `json:"auditmanager"` + Autoscaling string `json:"autoscaling"` + Autoscalingplans string `json:"autoscalingplans"` + Backup string `json:"backup"` + Batch string `json:"batch"` + Beanstalk string `json:"beanstalk"` + Bedrock string `json:"bedrock"` + Bedrockagent string `json:"bedrockagent"` + Budgets string `json:"budgets"` + Ce string `json:"ce"` + Chime string `json:"chime"` + Chimesdkmediapipelines string `json:"chimesdkmediapipelines"` + Chimesdkvoice string `json:"chimesdkvoice"` + Cleanrooms string `json:"cleanrooms"` + Cloud9 string `json:"cloud9"` + Cloudcontrol string `json:"cloudcontrol"` + Cloudcontrolapi string `json:"cloudcontrolapi"` + Cloudformation string `json:"cloudformation"` + Cloudfront string `json:"cloudfront"` + Cloudfrontkeyvaluestore string `json:"cloudfrontkeyvaluestore"` + Cloudhsm string `json:"cloudhsm"` + Cloudhsmv2 string `json:"cloudhsmv2"` + Cloudsearch string `json:"cloudsearch"` + Cloudtrail string `json:"cloudtrail"` + Cloudwatch string `json:"cloudwatch"` + Cloudwatchevents string `json:"cloudwatchevents"` + Cloudwatchevidently string `json:"cloudwatchevidently"` + Cloudwatchlog string `json:"cloudwatchlog"` + Cloudwatchlogs string `json:"cloudwatchlogs"` + Cloudwatchobservabilityaccessmanager string `json:"cloudwatchobservabilityaccessmanager"` + Cloudwatchrum string `json:"cloudwatchrum"` + Codeartifact string `json:"codeartifact"` + Codebuild string `json:"codebuild"` + Codecatalyst string `json:"codecatalyst"` + Codecommit string `json:"codecommit"` + Codedeploy string `json:"codedeploy"` + Codeguruprofiler string `json:"codeguruprofiler"` + Codegurureviewer string `json:"codegurureviewer"` + Codepipeline string `json:"codepipeline"` + Codestarconnections string `json:"codestarconnections"` + Codestarnotifications string `json:"codestarnotifications"` + Cognitoidentity string `json:"cognitoidentity"` + Cognitoidentityprovider string `json:"cognitoidentityprovider"` + Cognitoidp string `json:"cognitoidp"` + Comprehend string `json:"comprehend"` + Computeoptimizer string `json:"computeoptimizer"` + Config string `json:"config"` + Configservice string `json:"configservice"` + Connect string `json:"connect"` + Connectcases string `json:"connectcases"` + Controltower string `json:"controltower"` + Costandusagereportservice string `json:"costandusagereportservice"` + Costexplorer string `json:"costexplorer"` + Costoptimizationhub string `json:"costoptimizationhub"` + Cur string `json:"cur"` + Customerprofiles string `json:"customerprofiles"` + Databasemigration string `json:"databasemigration"` + Databasemigrationservice string `json:"databasemigrationservice"` + Dataexchange string `json:"dataexchange"` + Datapipeline string `json:"datapipeline"` + Datasync string `json:"datasync"` + Datazone string `json:"datazone"` + Dax string `json:"dax"` + Deploy string `json:"deploy"` + Detective string `json:"detective"` + Devicefarm string `json:"devicefarm"` + Devopsguru string `json:"devopsguru"` + Directconnect string `json:"directconnect"` + Directoryservice string `json:"directoryservice"` + Dlm string `json:"dlm"` + Dms string `json:"dms"` + Docdb string `json:"docdb"` + Docdbelastic string `json:"docdbelastic"` + Ds string `json:"ds"` + Dynamodb string `json:"dynamodb"` + Ec2 string `json:"ec2"` + Ecr string `json:"ecr"` + Ecrpublic string `json:"ecrpublic"` + Ecs string `json:"ecs"` + Efs string `json:"efs"` + Eks string `json:"eks"` + Elasticache string `json:"elasticache"` + Elasticbeanstalk string `json:"elasticbeanstalk"` + Elasticloadbalancing string `json:"elasticloadbalancing"` + Elasticloadbalancingv2 string `json:"elasticloadbalancingv2"` + Elasticsearch string `json:"elasticsearch"` + Elasticsearchservice string `json:"elasticsearchservice"` + Elastictranscoder string `json:"elastictranscoder"` + Elb string `json:"elb"` + Elbv2 string `json:"elbv2"` + Emr string `json:"emr"` + Emrcontainers string `json:"emrcontainers"` + Emrserverless string `json:"emrserverless"` + Es string `json:"es"` + Eventbridge string `json:"eventbridge"` + Events string `json:"events"` + Evidently string `json:"evidently"` + Finspace string `json:"finspace"` + Firehose string `json:"firehose"` + Fis string `json:"fis"` + Fms string `json:"fms"` + Fsx string `json:"fsx"` + Gamelift string `json:"gamelift"` + Glacier string `json:"glacier"` + Globalaccelerator string `json:"globalaccelerator"` + Glue string `json:"glue"` + Grafana string `json:"grafana"` + Greengrass string `json:"greengrass"` + Groundstation string `json:"groundstation"` + Guardduty string `json:"guardduty"` + Healthlake string `json:"healthlake"` + Iam string `json:"iam"` + Identitystore string `json:"identitystore"` + Imagebuilder string `json:"imagebuilder"` + Inspector string `json:"inspector"` + Inspector2 string `json:"inspector2"` + Inspectorv2 string `json:"inspectorv2"` + Internetmonitor string `json:"internetmonitor"` + Iot string `json:"iot"` + Iotanalytics string `json:"iotanalytics"` + Iotevents string `json:"iotevents"` + Ivs string `json:"ivs"` + Ivschat string `json:"ivschat"` + Kafka string `json:"kafka"` + Kafkaconnect string `json:"kafkaconnect"` + Kendra string `json:"kendra"` + Keyspaces string `json:"keyspaces"` + Kinesis string `json:"kinesis"` + Kinesisanalytics string `json:"kinesisanalytics"` + Kinesisanalyticsv2 string `json:"kinesisanalyticsv2"` + Kinesisvideo string `json:"kinesisvideo"` + Kms string `json:"kms"` + Lakeformation string `json:"lakeformation"` + Lambda string `json:"lambda"` + Launchwizard string `json:"launchwizard"` + Lex string `json:"lex"` + Lexmodelbuilding string `json:"lexmodelbuilding"` + Lexmodelbuildingservice string `json:"lexmodelbuildingservice"` + Lexmodels string `json:"lexmodels"` + Lexmodelsv2 string `json:"lexmodelsv2"` + Lexv2Models string `json:"lexv2models"` + Licensemanager string `json:"licensemanager"` + Lightsail string `json:"lightsail"` + Location string `json:"location"` + Locationservice string `json:"locationservice"` + Logs string `json:"logs"` + Lookoutmetrics string `json:"lookoutmetrics"` + M2 string `json:"m2"` + Macie2 string `json:"macie2"` + Managedgrafana string `json:"managedgrafana"` + Mediaconnect string `json:"mediaconnect"` + Mediaconvert string `json:"mediaconvert"` + Medialive string `json:"medialive"` + Mediapackage string `json:"mediapackage"` + Mediapackagev2 string `json:"mediapackagev2"` + Mediastore string `json:"mediastore"` + Memorydb string `json:"memorydb"` + Mq string `json:"mq"` + Msk string `json:"msk"` + Mwaa string `json:"mwaa"` + Neptune string `json:"neptune"` + Networkfirewall string `json:"networkfirewall"` + Networkmanager string `json:"networkmanager"` + Oam string `json:"oam"` + Opensearch string `json:"opensearch"` + Opensearchingestion string `json:"opensearchingestion"` + Opensearchserverless string `json:"opensearchserverless"` + Opensearchservice string `json:"opensearchservice"` + Opsworks string `json:"opsworks"` + Organizations string `json:"organizations"` + Osis string `json:"osis"` + Outposts string `json:"outposts"` + Paymentcryptography string `json:"paymentcryptography"` + Pcaconnectorad string `json:"pcaconnectorad"` + Pinpoint string `json:"pinpoint"` + Pipes string `json:"pipes"` + Polly string `json:"polly"` + Pricing string `json:"pricing"` + Prometheus string `json:"prometheus"` + Prometheusservice string `json:"prometheusservice"` + Qbusiness string `json:"qbusiness"` + Qldb string `json:"qldb"` + Quicksight string `json:"quicksight"` + Ram string `json:"ram"` + Rbin string `json:"rbin"` + Rds string `json:"rds"` + Recyclebin string `json:"recyclebin"` + Redshift string `json:"redshift"` + Redshiftdata string `json:"redshiftdata"` + Redshiftdataapiservice string `json:"redshiftdataapiservice"` + Redshiftserverless string `json:"redshiftserverless"` + Rekognition string `json:"rekognition"` + Resourceexplorer2 string `json:"resourceexplorer2"` + Resourcegroups string `json:"resourcegroups"` + Resourcegroupstagging string `json:"resourcegroupstagging"` + Resourcegroupstaggingapi string `json:"resourcegroupstaggingapi"` + Rolesanywhere string `json:"rolesanywhere"` + Route53 string `json:"route53"` + Route53Domains string `json:"route53domains"` + Route53Recoverycontrolconfig string `json:"route53recoverycontrolconfig"` + Route53Recoveryreadiness string `json:"route53recoveryreadiness"` + Route53Resolver string `json:"route53resolver"` + Rum string `json:"rum"` + S3 string `json:"s3"` + S3Api string `json:"s3api"` + S3Control string `json:"s3control"` + S3Outposts string `json:"s3outposts"` + Sagemaker string `json:"sagemaker"` + Scheduler string `json:"scheduler"` + Schemas string `json:"schemas"` + Sdb string `json:"sdb"` + Secretsmanager string `json:"secretsmanager"` + Securityhub string `json:"securityhub"` + Securitylake string `json:"securitylake"` + Serverlessapplicationrepository string `json:"serverlessapplicationrepository"` + Serverlessapprepo string `json:"serverlessapprepo"` + Serverlessrepo string `json:"serverlessrepo"` + Servicecatalog string `json:"servicecatalog"` + Servicecatalogappregistry string `json:"servicecatalogappregistry"` + Servicediscovery string `json:"servicediscovery"` + Servicequotas string `json:"servicequotas"` + Ses string `json:"ses"` + Sesv2 string `json:"sesv2"` + Sfn string `json:"sfn"` + Shield string `json:"shield"` + Signer string `json:"signer"` + Simpledb string `json:"simpledb"` + Sns string `json:"sns"` + Sqs string `json:"sqs"` + Ssm string `json:"ssm"` + Ssmcontacts string `json:"ssmcontacts"` + Ssmincidents string `json:"ssmincidents"` + Ssmsap string `json:"ssmsap"` + Sso string `json:"sso"` + Ssoadmin string `json:"ssoadmin"` + Stepfunctions string `json:"stepfunctions"` + Storagegateway string `json:"storagegateway"` + Sts string `json:"sts"` + Swf string `json:"swf"` + Synthetics string `json:"synthetics"` + Timestreamwrite string `json:"timestreamwrite"` + Transcribe string `json:"transcribe"` + Transcribeservice string `json:"transcribeservice"` + Transfer string `json:"transfer"` + Verifiedpermissions string `json:"verifiedpermissions"` + Vpclattice string `json:"vpclattice"` + Waf string `json:"waf"` + Wafregional string `json:"wafregional"` + Wafv2 string `json:"wafv2"` + Wellarchitected string `json:"wellarchitected"` + Worklink string `json:"worklink"` + Workspaces string `json:"workspaces"` + Xray string `json:"xray"` +} + +type IgnoreTagsState struct { + KeyPrefixes []string `json:"key_prefixes"` + Keys []string `json:"keys"` +} +-- out/iam_role.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package aws + +import ( + "encoding/json" + "fmt" + "github.com/golingon/lingon/pkg/terra" + "io" + iamrole "test/out/iamrole" +) + +// NewIamRole creates a new instance of [IamRole]. +func NewIamRole(name string, args IamRoleArgs) *IamRole { + return &IamRole{ + Args: args, + Name: name, + } +} + +var _ terra.Resource = (*IamRole)(nil) + +// IamRole represents the Terraform resource aws_iam_role. +type IamRole struct { + Name string + Args IamRoleArgs + state *iamRoleState + DependsOn terra.Dependencies + Lifecycle *terra.Lifecycle +} + +// Type returns the Terraform object type for [IamRole]. +func (ir *IamRole) Type() string { + return "aws_iam_role" +} + +// LocalName returns the local name for [IamRole]. +func (ir *IamRole) LocalName() string { + return ir.Name +} + +// Configuration returns the configuration (args) for [IamRole]. +func (ir *IamRole) Configuration() interface{} { + return ir.Args +} + +// DependOn is used for other resources to depend on [IamRole]. +func (ir *IamRole) DependOn() terra.Reference { + return terra.ReferenceResource(ir) +} + +// Dependencies returns the list of resources [IamRole] depends_on. +func (ir *IamRole) Dependencies() terra.Dependencies { + return ir.DependsOn +} + +// LifecycleManagement returns the lifecycle block for [IamRole]. +func (ir *IamRole) LifecycleManagement() *terra.Lifecycle { + return ir.Lifecycle +} + +// Attributes returns the attributes for [IamRole]. +func (ir *IamRole) Attributes() iamRoleAttributes { + return iamRoleAttributes{ref: terra.ReferenceResource(ir)} +} + +// ImportState imports the given attribute values into [IamRole]'s state. +func (ir *IamRole) ImportState(av io.Reader) error { + ir.state = &iamRoleState{} + if err := json.NewDecoder(av).Decode(ir.state); err != nil { + return fmt.Errorf("decoding state into resource %s.%s: %w", ir.Type(), ir.LocalName(), err) + } + return nil +} + +// State returns the state and a bool indicating if [IamRole] has state. +func (ir *IamRole) State() (*iamRoleState, bool) { + return ir.state, ir.state != nil +} + +// StateMust returns the state for [IamRole]. Panics if the state is nil. +func (ir *IamRole) StateMust() *iamRoleState { + if ir.state == nil { + panic(fmt.Sprintf("state is nil for resource %s.%s", ir.Type(), ir.LocalName())) + } + return ir.state +} + +// IamRoleArgs contains the configurations for aws_iam_role. +type IamRoleArgs struct { + // AssumeRolePolicy: string, required + AssumeRolePolicy terra.StringValue `hcl:"assume_role_policy,attr" validate:"required"` + // Description: string, optional + Description terra.StringValue `hcl:"description,attr"` + // ForceDetachPolicies: bool, optional + ForceDetachPolicies terra.BoolValue `hcl:"force_detach_policies,attr"` + // Id: string, optional + Id terra.StringValue `hcl:"id,attr"` + // ManagedPolicyArns: set of string, optional + ManagedPolicyArns terra.SetValue[terra.StringValue] `hcl:"managed_policy_arns,attr"` + // MaxSessionDuration: number, optional + MaxSessionDuration terra.NumberValue `hcl:"max_session_duration,attr"` + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // NamePrefix: string, optional + NamePrefix terra.StringValue `hcl:"name_prefix,attr"` + // Path: string, optional + Path terra.StringValue `hcl:"path,attr"` + // PermissionsBoundary: string, optional + PermissionsBoundary terra.StringValue `hcl:"permissions_boundary,attr"` + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` + // TagsAll: map of string, optional + TagsAll terra.MapValue[terra.StringValue] `hcl:"tags_all,attr"` + // InlinePolicy: min=0 + InlinePolicy []iamrole.InlinePolicy `hcl:"inline_policy,block" validate:"min=0"` +} +type iamRoleAttributes struct { + ref terra.Reference +} + +// Arn returns a reference to field arn of aws_iam_role. +func (ir iamRoleAttributes) Arn() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("arn")) +} + +// AssumeRolePolicy returns a reference to field assume_role_policy of aws_iam_role. +func (ir iamRoleAttributes) AssumeRolePolicy() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("assume_role_policy")) +} + +// CreateDate returns a reference to field create_date of aws_iam_role. +func (ir iamRoleAttributes) CreateDate() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("create_date")) +} + +// Description returns a reference to field description of aws_iam_role. +func (ir iamRoleAttributes) Description() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("description")) +} + +// ForceDetachPolicies returns a reference to field force_detach_policies of aws_iam_role. +func (ir iamRoleAttributes) ForceDetachPolicies() terra.BoolValue { + return terra.ReferenceAsBool(ir.ref.Append("force_detach_policies")) +} + +// Id returns a reference to field id of aws_iam_role. +func (ir iamRoleAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("id")) +} + +// ManagedPolicyArns returns a reference to field managed_policy_arns of aws_iam_role. +func (ir iamRoleAttributes) ManagedPolicyArns() terra.SetValue[terra.StringValue] { + return terra.ReferenceAsSet[terra.StringValue](ir.ref.Append("managed_policy_arns")) +} + +// MaxSessionDuration returns a reference to field max_session_duration of aws_iam_role. +func (ir iamRoleAttributes) MaxSessionDuration() terra.NumberValue { + return terra.ReferenceAsNumber(ir.ref.Append("max_session_duration")) +} + +// Name returns a reference to field name of aws_iam_role. +func (ir iamRoleAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("name")) +} + +// NamePrefix returns a reference to field name_prefix of aws_iam_role. +func (ir iamRoleAttributes) NamePrefix() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("name_prefix")) +} + +// Path returns a reference to field path of aws_iam_role. +func (ir iamRoleAttributes) Path() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("path")) +} + +// PermissionsBoundary returns a reference to field permissions_boundary of aws_iam_role. +func (ir iamRoleAttributes) PermissionsBoundary() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("permissions_boundary")) +} + +// Tags returns a reference to field tags of aws_iam_role. +func (ir iamRoleAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ir.ref.Append("tags")) +} + +// TagsAll returns a reference to field tags_all of aws_iam_role. +func (ir iamRoleAttributes) TagsAll() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ir.ref.Append("tags_all")) +} + +// UniqueId returns a reference to field unique_id of aws_iam_role. +func (ir iamRoleAttributes) UniqueId() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("unique_id")) +} + +func (ir iamRoleAttributes) InlinePolicy() terra.SetValue[iamrole.InlinePolicyAttributes] { + return terra.ReferenceAsSet[iamrole.InlinePolicyAttributes](ir.ref.Append("inline_policy")) +} + +type iamRoleState struct { + Arn string `json:"arn"` + AssumeRolePolicy string `json:"assume_role_policy"` + CreateDate string `json:"create_date"` + Description string `json:"description"` + ForceDetachPolicies bool `json:"force_detach_policies"` + Id string `json:"id"` + ManagedPolicyArns []string `json:"managed_policy_arns"` + MaxSessionDuration float64 `json:"max_session_duration"` + Name string `json:"name"` + NamePrefix string `json:"name_prefix"` + Path string `json:"path"` + PermissionsBoundary string `json:"permissions_boundary"` + Tags map[string]string `json:"tags"` + TagsAll map[string]string `json:"tags_all"` + UniqueId string `json:"unique_id"` + InlinePolicy []iamrole.InlinePolicyState `json:"inline_policy"` +} +-- out/iamrole/iam_role.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package iamrole + +import ( + terra "github.com/golingon/lingon/pkg/terra" + hclwrite "github.com/hashicorp/hcl/v2/hclwrite" +) + +type InlinePolicy struct { + // Name: string, optional + Name terra.StringValue `hcl:"name,attr"` + // Policy: string, optional + Policy terra.StringValue `hcl:"policy,attr"` +} + +type InlinePolicyAttributes struct { + ref terra.Reference +} + +func (ip InlinePolicyAttributes) InternalRef() (terra.Reference, error) { + return ip.ref, nil +} + +func (ip InlinePolicyAttributes) InternalWithRef(ref terra.Reference) InlinePolicyAttributes { + return InlinePolicyAttributes{ref: ref} +} + +func (ip InlinePolicyAttributes) InternalTokens() (hclwrite.Tokens, error) { + return ip.ref.InternalTokens() +} + +func (ip InlinePolicyAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(ip.ref.Append("name")) +} + +func (ip InlinePolicyAttributes) Policy() terra.StringValue { + return terra.ReferenceAsString(ip.ref.Append("policy")) +} + +type InlinePolicyState struct { + Name string `json:"name"` + Policy string `json:"policy"` +} +-- out/data_iam_role.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package aws + +import ( + "github.com/golingon/lingon/pkg/terra" + dataiamrole "test/out/dataiamrole" +) + +// NewDataIamRole creates a new instance of [DataIamRole]. +func NewDataIamRole(name string, args DataIamRoleArgs) *DataIamRole { + return &DataIamRole{ + Args: args, + Name: name, + } +} + +var _ terra.DataResource = (*DataIamRole)(nil) + +// DataIamRole represents the Terraform data resource aws_iam_role. +type DataIamRole struct { + Name string + Args DataIamRoleArgs +} + +// DataSource returns the Terraform object type for [DataIamRole]. +func (ir *DataIamRole) DataSource() string { + return "aws_iam_role" +} + +// LocalName returns the local name for [DataIamRole]. +func (ir *DataIamRole) LocalName() string { + return ir.Name +} + +// Configuration returns the configuration (args) for [DataIamRole]. +func (ir *DataIamRole) Configuration() interface{} { + return ir.Args +} + +// Attributes returns the attributes for [DataIamRole]. +func (ir *DataIamRole) Attributes() dataIamRoleAttributes { + return dataIamRoleAttributes{ref: terra.ReferenceDataResource(ir)} +} + +// DataIamRoleArgs contains the configurations for aws_iam_role. +type DataIamRoleArgs struct { + // Id: string, optional + Id terra.StringValue `hcl:"id,attr"` + // Name: string, required + Name terra.StringValue `hcl:"name,attr" validate:"required"` + // Tags: map of string, optional + Tags terra.MapValue[terra.StringValue] `hcl:"tags,attr"` + // RoleLastUsed: min=0 + RoleLastUsed []dataiamrole.RoleLastUsed `hcl:"role_last_used,block" validate:"min=0"` +} +type dataIamRoleAttributes struct { + ref terra.Reference +} + +// Arn returns a reference to field arn of aws_iam_role. +func (ir dataIamRoleAttributes) Arn() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("arn")) +} + +// AssumeRolePolicy returns a reference to field assume_role_policy of aws_iam_role. +func (ir dataIamRoleAttributes) AssumeRolePolicy() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("assume_role_policy")) +} + +// CreateDate returns a reference to field create_date of aws_iam_role. +func (ir dataIamRoleAttributes) CreateDate() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("create_date")) +} + +// Description returns a reference to field description of aws_iam_role. +func (ir dataIamRoleAttributes) Description() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("description")) +} + +// Id returns a reference to field id of aws_iam_role. +func (ir dataIamRoleAttributes) Id() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("id")) +} + +// MaxSessionDuration returns a reference to field max_session_duration of aws_iam_role. +func (ir dataIamRoleAttributes) MaxSessionDuration() terra.NumberValue { + return terra.ReferenceAsNumber(ir.ref.Append("max_session_duration")) +} + +// Name returns a reference to field name of aws_iam_role. +func (ir dataIamRoleAttributes) Name() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("name")) +} + +// Path returns a reference to field path of aws_iam_role. +func (ir dataIamRoleAttributes) Path() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("path")) +} + +// PermissionsBoundary returns a reference to field permissions_boundary of aws_iam_role. +func (ir dataIamRoleAttributes) PermissionsBoundary() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("permissions_boundary")) +} + +// Tags returns a reference to field tags of aws_iam_role. +func (ir dataIamRoleAttributes) Tags() terra.MapValue[terra.StringValue] { + return terra.ReferenceAsMap[terra.StringValue](ir.ref.Append("tags")) +} + +// UniqueId returns a reference to field unique_id of aws_iam_role. +func (ir dataIamRoleAttributes) UniqueId() terra.StringValue { + return terra.ReferenceAsString(ir.ref.Append("unique_id")) +} + +func (ir dataIamRoleAttributes) RoleLastUsed() terra.ListValue[dataiamrole.RoleLastUsedAttributes] { + return terra.ReferenceAsList[dataiamrole.RoleLastUsedAttributes](ir.ref.Append("role_last_used")) +} +-- out/dataiamrole/iam_role.go -- +// CODE GENERATED BY github.com/golingon/lingon. DO NOT EDIT. + +package dataiamrole + +import ( + terra "github.com/golingon/lingon/pkg/terra" + hclwrite "github.com/hashicorp/hcl/v2/hclwrite" +) + +type RoleLastUsed struct{} + +type RoleLastUsedAttributes struct { + ref terra.Reference +} + +func (rlu RoleLastUsedAttributes) InternalRef() (terra.Reference, error) { + return rlu.ref, nil +} + +func (rlu RoleLastUsedAttributes) InternalWithRef(ref terra.Reference) RoleLastUsedAttributes { + return RoleLastUsedAttributes{ref: ref} +} + +func (rlu RoleLastUsedAttributes) InternalTokens() (hclwrite.Tokens, error) { + return rlu.ref.InternalTokens() +} + +func (rlu RoleLastUsedAttributes) LastUsedDate() terra.StringValue { + return terra.ReferenceAsString(rlu.ref.Append("last_used_date")) +} + +func (rlu RoleLastUsedAttributes) Region() terra.StringValue { + return terra.ReferenceAsString(rlu.ref.Append("region")) +} + +type RoleLastUsedState struct { + LastUsedDate string `json:"last_used_date"` + Region string `json:"region"` +} diff --git a/pkg/terragen/testdata/golden/aws_iam_role/schema.json b/pkg/terragen/testdata/golden/aws_iam_role/schema.json new file mode 100644 index 0000000..543daf3 --- /dev/null +++ b/pkg/terragen/testdata/golden/aws_iam_role/schema.json @@ -0,0 +1 @@ +{"provider":{"version":0,"block":{"attributes":{"access_key":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"allowed_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"custom_ca_bundle":{"type":"string","description":"File containing custom root and intermediate certificates. Can also be configured using the `AWS_CA_BUNDLE` environment variable. (Setting `ca_bundle` in the shared config file is not supported.)","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint":{"type":"string","description":"Address of the EC2 metadata service endpoint to use. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT` environment variable.","description_kind":"plain","optional":true},"ec2_metadata_service_endpoint_mode":{"type":"string","description":"Protocol to use with EC2 metadata service endpoint.Valid values are `IPv4` and `IPv6`. Can also be configured using the `AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE` environment variable.","description_kind":"plain","optional":true},"forbidden_account_ids":{"type":["set","string"],"description_kind":"plain","optional":true},"http_proxy":{"type":"string","description":"URL of a proxy to use for HTTP requests when accessing the AWS API. Can also be set using the `HTTP_PROXY` or `http_proxy` environment variables.","description_kind":"plain","optional":true},"https_proxy":{"type":"string","description":"URL of a proxy to use for HTTPS requests when accessing the AWS API. Can also be set using the `HTTPS_PROXY` or `https_proxy` environment variables.","description_kind":"plain","optional":true},"insecure":{"type":"bool","description":"Explicitly allow the provider to perform \"insecure\" SSL requests. If omitted, default value is `false`","description_kind":"plain","optional":true},"max_retries":{"type":"number","description":"The maximum number of times an AWS API request is\nbeing executed. If the API request still fails, an error is\nthrown.","description_kind":"plain","optional":true},"no_proxy":{"type":"string","description":"Comma-separated list of hosts that should not use HTTP or HTTPS proxies. Can also be set using the `NO_PROXY` or `no_proxy` environment variables.","description_kind":"plain","optional":true},"profile":{"type":"string","description":"The profile for API operations. If not set, the default profile\ncreated with `aws configure` will be used.","description_kind":"plain","optional":true},"region":{"type":"string","description":"The region where AWS operations will take place. Examples\nare us-east-1, us-west-2, etc.","description_kind":"plain","optional":true},"retry_mode":{"type":"string","description":"Specifies how retries are attempted. Valid values are `standard` and `adaptive`. Can also be configured using the `AWS_RETRY_MODE` environment variable.","description_kind":"plain","optional":true},"s3_us_east_1_regional_endpoint":{"type":"string","description":"Specifies whether S3 API calls in the `us-east-1` region use the legacy global endpoint or a regional endpoint. Valid values are `legacy` or `regional`. Can also be configured using the `AWS_S3_US_EAST_1_REGIONAL_ENDPOINT` environment variable or the `s3_us_east_1_regional_endpoint` shared config file parameter","description_kind":"plain","optional":true},"s3_use_path_style":{"type":"bool","description":"Set this to true to enable the request to use path-style addressing,\ni.e., https://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will\nuse virtual hosted bucket addressing when possible\n(https://BUCKET.s3.amazonaws.com/KEY). Specific to the Amazon S3 service.","description_kind":"plain","optional":true},"secret_key":{"type":"string","description":"The secret key for API operations. You can retrieve this\nfrom the 'Security \u0026 Credentials' section of the AWS console.","description_kind":"plain","optional":true},"shared_config_files":{"type":["list","string"],"description":"List of paths to shared config files. If not set, defaults to [~/.aws/config].","description_kind":"plain","optional":true},"shared_credentials_files":{"type":["list","string"],"description":"List of paths to shared credentials files. If not set, defaults to [~/.aws/credentials].","description_kind":"plain","optional":true},"skip_credentials_validation":{"type":"bool","description":"Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available/implemented.","description_kind":"plain","optional":true},"skip_metadata_api_check":{"type":"string","description":"Skip the AWS Metadata API check. Used for AWS API implementations that do not have a metadata api endpoint.","description_kind":"plain","optional":true},"skip_region_validation":{"type":"bool","description":"Skip static validation of region name. Used by users of alternative AWS-like APIs or users w/ access to regions that are not public (yet).","description_kind":"plain","optional":true},"skip_requesting_account_id":{"type":"bool","description":"Skip requesting the account ID. Used for AWS API implementations that do not have IAM/STS API and/or metadata API.","description_kind":"plain","optional":true},"sts_region":{"type":"string","description":"The region where AWS STS operations will take place. Examples\nare us-east-1 and us-west-2.","description_kind":"plain","optional":true},"token":{"type":"string","description":"session token. A session token is only required if you are\nusing temporary security credentials.","description_kind":"plain","optional":true},"token_bucket_rate_limiter_capacity":{"type":"number","description":"The capacity of the AWS SDK's token bucket rate limiter.","description_kind":"plain","optional":true},"use_dualstack_endpoint":{"type":"bool","description":"Resolve an endpoint with DualStack capability","description_kind":"plain","optional":true},"use_fips_endpoint":{"type":"bool","description":"Resolve an endpoint with FIPS capability","description_kind":"plain","optional":true}},"block_types":{"assume_role":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"external_id":{"type":"string","description":"A unique identifier that might be required when you assume a role in another account.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"source_identity":{"type":"string","description":"Source identity specified by the principal assuming the role.","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description":"Assume role session tags.","description_kind":"plain","optional":true},"transitive_tag_keys":{"type":["set","string"],"description":"Assume role session tag keys to pass to any subsequent sessions.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"assume_role_with_web_identity":{"nesting_mode":"list","block":{"attributes":{"duration":{"type":"string","description":"The duration, between 15 minutes and 12 hours, of the role session. Valid time units are ns, us (or µs), ms, s, h, or m.","description_kind":"plain","optional":true},"policy":{"type":"string","description":"IAM Policy JSON describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"policy_arns":{"type":["set","string"],"description":"Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed.","description_kind":"plain","optional":true},"role_arn":{"type":"string","description":"Amazon Resource Name (ARN) of an IAM Role to assume prior to making API calls.","description_kind":"plain","optional":true},"session_name":{"type":"string","description":"An identifier for the assumed role session.","description_kind":"plain","optional":true},"web_identity_token":{"type":"string","description_kind":"plain","optional":true},"web_identity_token_file":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"default_tags":{"nesting_mode":"list","block":{"attributes":{"tags":{"type":["map","string"],"description":"Resource tags to default across all resources","description_kind":"plain","optional":true}},"description":"Configuration block with settings to default resource tags across all resources.","description_kind":"plain"}},"endpoints":{"nesting_mode":"set","block":{"attributes":{"accessanalyzer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"account":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"acmpca":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amg":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"amplify":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apigatewayv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appfabric":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appflow":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appintegrationsservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationautoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"applicationinsights":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appmesh":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"apprunner":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appstream":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"appsync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"athena":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"auditmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscaling":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"autoscalingplans":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"backup":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"batch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"beanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"bedrock":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"bedrockagent":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"budgets":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ce":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chime":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkmediapipelines":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"chimesdkvoice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cleanrooms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloud9":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrol":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudcontrolapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfront":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudfrontkeyvaluestore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudhsmv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudtrail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchevidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchlogs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchobservabilityaccessmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cloudwatchrum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeartifact":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codebuild":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecatalyst":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codecommit":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codedeploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codeguruprofiler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codegurureviewer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codepipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarconnections":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"codestarnotifications":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentity":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidentityprovider":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cognitoidp":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"comprehend":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"computeoptimizer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"config":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"configservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"connectcases":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"controltower":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costandusagereportservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costexplorer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"costoptimizationhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"cur":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"customerprofiles":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigration":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"databasemigrationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dataexchange":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datapipeline":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datasync":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"datazone":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dax":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"deploy":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"detective":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devicefarm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"devopsguru":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"directoryservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dlm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"docdbelastic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"dynamodb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ec2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecrpublic":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ecs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"efs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticache":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticbeanstalk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticloadbalancingv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elasticsearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elastictranscoder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"elbv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emr":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrcontainers":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"emrserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"es":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"eventbridge":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"events":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"evidently":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"finspace":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"firehose":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"fsx":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"gamelift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glacier":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"globalaccelerator":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"glue":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"grafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"greengrass":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"groundstation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"guardduty":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"healthlake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"identitystore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"imagebuilder":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspector2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"inspectorv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"internetmonitor":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iot":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"iotevents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ivschat":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafka":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kafkaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kendra":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"keyspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalytics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisanalyticsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kinesisvideo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"kms":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lakeformation":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lambda":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"launchwizard":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lex":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuilding":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelbuildingservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodels":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexmodelsv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lexv2models":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"licensemanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lightsail":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"location":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"locationservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"logs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"lookoutmetrics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"m2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"macie2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"managedgrafana":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconnect":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediaconvert":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"medialive":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackage":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediapackagev2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mediastore":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"memorydb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mq":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"msk":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"mwaa":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"neptune":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkfirewall":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"networkmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"oam":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearch":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchingestion":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opensearchservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"opsworks":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"organizations":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"osis":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"paymentcryptography":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pcaconnectorad":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pinpoint":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pipes":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"polly":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"pricing":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheus":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"prometheusservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qbusiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"qldb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"quicksight":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ram":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rbin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rds":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"recyclebin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshift":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdata":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftdataapiservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"redshiftserverless":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rekognition":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourceexplorer2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroups":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstagging":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"resourcegroupstaggingapi":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rolesanywhere":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53domains":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoverycontrolconfig":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53recoveryreadiness":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"route53resolver":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"rum":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3api":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3control":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"s3outposts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sagemaker":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"scheduler":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"schemas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sdb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"secretsmanager":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securityhub":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"securitylake":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapplicationrepository":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessapprepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"serverlessrepo":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalog":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicecatalogappregistry":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicediscovery":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"servicequotas":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ses":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sesv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sfn":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"shield":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"signer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"simpledb":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sns":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sqs":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssm":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmcontacts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmincidents":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssmsap":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sso":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"ssoadmin":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"stepfunctions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"storagegateway":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"sts":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"swf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"synthetics":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"timestreamwrite":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribe":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transcribeservice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"transfer":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"verifiedpermissions":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"vpclattice":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"waf":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafregional":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wafv2":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"wellarchitected":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"worklink":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"workspaces":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true},"xray":{"type":"string","description":"Use this to override the default service endpoint URL","description_kind":"plain","optional":true}},"description_kind":"plain"}},"ignore_tags":{"nesting_mode":"list","block":{"attributes":{"key_prefixes":{"type":["set","string"],"description":"Resource tag key prefixes to ignore across all resources.","description_kind":"plain","optional":true},"keys":{"type":["set","string"],"description":"Resource tag keys to ignore across all resources.","description_kind":"plain","optional":true}},"description":"Configuration block with settings to ignore resource tags across all resources.","description_kind":"plain"}}},"description_kind":"plain"}},"resource_schemas":{"aws_iam_role":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"assume_role_policy":{"type":"string","description_kind":"plain","required":true},"create_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","optional":true},"force_detach_policies":{"type":"bool","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"managed_policy_arns":{"type":["set","string"],"description_kind":"plain","optional":true,"computed":true},"max_session_duration":{"type":"number","description_kind":"plain","optional":true},"name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name_prefix":{"type":"string","description_kind":"plain","optional":true,"computed":true},"path":{"type":"string","description_kind":"plain","optional":true},"permissions_boundary":{"type":"string","description_kind":"plain","optional":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true},"tags_all":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"unique_id":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"inline_policy":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description_kind":"plain","optional":true},"policy":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}}},"data_source_schemas":{"aws_iam_role":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"assume_role_policy":{"type":"string","description_kind":"plain","computed":true},"create_date":{"type":"string","description_kind":"plain","computed":true},"description":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"max_session_duration":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description_kind":"plain","required":true},"path":{"type":"string","description_kind":"plain","computed":true},"permissions_boundary":{"type":"string","description_kind":"plain","computed":true},"role_last_used":{"type":["list",["object",{"last_used_date":"string","region":"string"}]],"description_kind":"plain","computed":true},"tags":{"type":["map","string"],"description_kind":"plain","optional":true,"computed":true},"unique_id":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}}}} diff --git a/pkg/terragen/testdata/providerschemas/generate.go b/pkg/terragen/testdata/providerschemas/generate.go deleted file mode 100644 index 8dedaa7..0000000 --- a/pkg/terragen/testdata/providerschemas/generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package providerschemas - -//go:generate go run -mod=readonly github.com/golingon/lingon/cmd/tools/filtersb -out . -provider aws=hashicorp/aws:4.49.0 -include-resources aws_iam_role -include-data-sources aws_iam_role diff --git a/pkg/terragen/tfproviders.go b/pkg/terragen/tfproviders.go index 2e939f5..bc00d0a 100644 --- a/pkg/terragen/tfproviders.go +++ b/pkg/terragen/tfproviders.go @@ -8,6 +8,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "github.com/golingon/lingon/pkg/internal/hcl" @@ -38,10 +39,17 @@ type Provider struct { Version string `cty:"version"` } +// GenerateProviderSchema generates the schema for the given Terraform provider. +// +// The provider schema is generated by calling Terraform as follows: +// +// terraform providers schema --json +// +// The JSON schema is then decoded and returned as a ProviderSchemas struct. func GenerateProviderSchema( ctx context.Context, provider Provider, -) (*tfjson.ProviderSchemas, error) { +) (*tfjson.ProviderSchema, error) { versions := TerraformVersions{ TerraformBlock: TerraformBlock{ RequiredProviders: RequiredProviders{ @@ -90,5 +98,30 @@ func GenerateProviderSchema( return nil, fmt.Errorf("running terraform providers schema: %w", err) } - return providersSchema, nil + return providerSchemaBySource(providersSchema, provider.Source) +} + +// providerSchemaBySource returns the specific provider schema for the given +// source from the full list of provider schemas that is generated by terraform. +func providerSchemaBySource( + schemas *tfjson.ProviderSchemas, + source string, +) (*tfjson.ProviderSchema, error) { + providerSchema, ok := schemas.Schemas[source] + if !ok { + // Try adding registry.terraform.io/ prefix if not already added + if !strings.HasPrefix(source, "registry.terraform.io/") { + absSource := fmt.Sprintf("registry.terraform.io/%s", source) + providerSchema, ok = schemas.Schemas[absSource] + } + // If still not ok, indicate an error + if !ok { + return nil, fmt.Errorf( + "provider source: %q: %w", + source, + ErrProviderSchemaNotFound, + ) + } + } + return providerSchema, nil } diff --git a/pkg/terragen/txtar_test.go b/pkg/terragen/txtar_test.go deleted file mode 100644 index 54d2d33..0000000 --- a/pkg/terragen/txtar_test.go +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2023 Volvo Car Corporation -// SPDX-License-Identifier: Apache-2.0 - -package terragen - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "os/exec" - "path/filepath" - "strings" - "testing" - - tu "github.com/golingon/lingon/pkg/testutil" - tfjson "github.com/hashicorp/terraform-json" - "golang.org/x/tools/txtar" -) - -type TxtarConfig struct { - Provider ProviderConfig `json:"provider"` -} - -type ProviderConfig struct { - Name string `json:"name"` - Source string `json:"source"` - Version string `json:"version"` -} - -func TestTxtar(t *testing.T) { - txtarFiles, err := filepath.Glob("./testdata/*.txtar") - tu.AssertNoError(t, err, "globbing testdata/*.txtar") - for _, txf := range txtarFiles { - ar, err := txtar.ParseFile(txf) - tu.AssertNoError(t, err, "parsing txtar file") - - t.Run( - txf, func(t *testing.T) { - wd := filepath.Join("testdata", "out", filepath.Base(txf)) - if err := RunTest(wd, ar); err != nil { - t.Error(err) - return - } - exp, err := os.ReadFile(filepath.Join(wd, "expected.tf")) - tu.AssertNoError(t, err, "reading expected.tf file") - act, err := os.ReadFile(filepath.Join(wd, "out", "main.tf")) - tu.AssertNoError(t, err, "reading out/main.tf file") - tu.AssertEqual(t, string(act), string(exp)) - }, - ) - } -} - -func RunTest(wd string, ar *txtar.Archive) error { - var cfg TxtarConfig - if err := json.NewDecoder(bytes.NewReader(ar.Comment)).Decode(&cfg); err != nil { - return fmt.Errorf("decoding txtar comment: %w", err) - } - - if err := os.MkdirAll(wd, os.ModePerm); err != nil { - return fmt.Errorf("creating working directory: %s: %w", wd, err) - } - - // Write txtar files to directory - for _, f := range ar.Files { - if err := os.WriteFile( - filepath.Join(wd, f.Name), - f.Data, - os.ModePerm, - ); err != nil { - return fmt.Errorf("writing txtar file: %s: %w", f.Name, err) - } - } - - // Write go.mod file - goMod, err := os.ReadFile("../../go.mod") - if err != nil { - return fmt.Errorf("reading root go.mod file: %w", err) - } - goModStr := strings.Replace( - string(goMod), "module github.com/golingon/lingon", - "module test", 1, - ) - goModStr += "\nreplace github.com/golingon/lingon => ../../../../../\n" - if err := os.WriteFile( - filepath.Join(wd, "go.mod"), - []byte(goModStr), - os.ModePerm, - ); err != nil { - return fmt.Errorf("writing go.mod file: %w", err) - } - - sch, err := os.Open(filepath.Join(wd, "schema.json")) - if err != nil { - return fmt.Errorf("opening schema.json file: %w", err) - } - var ps tfjson.ProviderSchemas - if err := json.NewDecoder(sch).Decode(&ps); err != nil { - return fmt.Errorf("decoding schema.json file: %w", err) - } - genArgs := GenerateGoArgs{ - ProviderName: cfg.Provider.Name, - ProviderSource: cfg.Provider.Source, - ProviderVersion: cfg.Provider.Version, - OutDir: filepath.Join(wd, "out", cfg.Provider.Name), - PkgPath: fmt.Sprintf("test/out/%s", cfg.Provider.Name), - Force: true, - } - if err := GenerateGoCode(genArgs, &ps); err != nil { - return fmt.Errorf("generating Go code: %w", err) - } - - { - cmd := exec.Command("go", "mod", "tidy") - cmd.Dir = wd - b, err := cmd.CombinedOutput() - if err != nil { - fmt.Println(string(b)) - return fmt.Errorf("executing: %s: %w", cmd.String(), err) - } - } - { - cmd := exec.Command("go", "run", ".") - cmd.Dir = wd - b, err := cmd.CombinedOutput() - if err != nil { - fmt.Println(string(b)) - return fmt.Errorf("executing: %s: %w", cmd.String(), err) - } - } - return nil -}