Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion rules/ephemeral/aws_write_only_arguments.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ func (r *AwsWriteOnlyArgumentsRule) Check(runner tflint.Runner) error {
if err != nil {
return err
}
return f.InsertTextAfter(attribute.Range, fmt.Sprintf("\n %s = 1", resourceAttribute.writeOnlyVersionAttribute))
if resourceAttribute.writeOnlyVersionAttribute != "" {
err = f.InsertTextAfter(attribute.Range, fmt.Sprintf("\n %s = 1", resourceAttribute.writeOnlyVersionAttribute))
}
return err
},
); err != nil {
return fmt.Errorf("failed to call EmitIssueWithFix(): %w", err)
Expand Down
24 changes: 24 additions & 0 deletions rules/ephemeral/aws_write_only_arguments_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,30 @@ resource "aws_secretsmanager_secret_version" "test" {
`,
Expected: helper.Issues{},
},
{
Name: "without version attribute",
Content: `
resource "aws_transfer_host_key" "test" {
host_key_body = "test"
}
`,
Expected: helper.Issues{
{
Rule: NewAwsWriteOnlyArgumentsRule(),
Message: `"host_key_body" is a non-ephemeral attribute, which means this secret is stored in state. Please use write-only argument "host_key_body_wo".`,
Range: hcl.Range{
Filename: "resource.tf",
Start: hcl.Pos{Line: 3, Column: 19},
End: hcl.Pos{Line: 3, Column: 25},
},
},
},
Fixed: `
resource "aws_transfer_host_key" "test" {
host_key_body_wo = "test"
}
`,
},
}

rule := NewAwsWriteOnlyArgumentsRule()
Expand Down
15 changes: 9 additions & 6 deletions rules/ephemeral/generator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,15 @@ func findReplaceableAttribute(arguments []string, resource *tfjson.Schema) []wri
// Check if the argument ends with "_wo" and if the original attribute without "_wo" suffix exists in the resource schema
attribute := strings.TrimSuffix(argument, "_wo")
versionAttribute := attribute + "_wo_version"
if strings.HasSuffix(argument, "_wo") && resource.Block.Attributes[attribute] != nil && resource.Block.Attributes[versionAttribute] != nil {
writeOnlyArguments = append(writeOnlyArguments, writeOnlyArgument{
OriginalAttribute: attribute,
WriteOnlyAlternative: argument,
WriteOnlyVersionAttribute: versionAttribute,
})
if strings.HasSuffix(argument, "_wo") && resource.Block.Attributes[attribute] != nil {
writeOnlyArgument := writeOnlyArgument{
OriginalAttribute: attribute,
WriteOnlyAlternative: argument,
}
if resource.Block.Attributes[versionAttribute] != nil {
writeOnlyArgument.WriteOnlyVersionAttribute = versionAttribute
}
writeOnlyArguments = append(writeOnlyArguments, writeOnlyArgument)
}
}

Expand Down
14 changes: 14 additions & 0 deletions rules/ephemeral/write_only_arguments_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
package ephemeral

var writeOnlyArguments = map[string][]writeOnlyArgument{
"aws_bedrockagentcore_api_key_credential_provider": {
{
originalAttribute: "api_key",
writeOnlyAlternative: "api_key_wo",
writeOnlyVersionAttribute: "api_key_wo_version",
},
},
"aws_db_instance": {
{
originalAttribute: "password",
Expand Down Expand Up @@ -52,4 +59,11 @@ var writeOnlyArguments = map[string][]writeOnlyArgument{
writeOnlyVersionAttribute: "value_wo_version",
},
},
"aws_transfer_host_key": {
{
originalAttribute: "host_key_body",
writeOnlyAlternative: "host_key_body_wo",
writeOnlyVersionAttribute: "",
},
},
}
2 changes: 1 addition & 1 deletion rules/models/aws-sdk-ruby
Submodule aws-sdk-ruby updated 3552 files
42 changes: 42 additions & 0 deletions rules/models/aws_instance_invalid_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1055,6 +1055,48 @@ func NewAwsInstanceInvalidTypeRule() *AwsInstanceInvalidTypeRule {
"r8gn.48xlarge",
"r8gn.metal-24xl",
"r8gn.metal-48xl",
"c8i.large",
"c8i.xlarge",
"c8i.2xlarge",
"c8i.4xlarge",
"c8i.8xlarge",
"c8i.12xlarge",
"c8i.16xlarge",
"c8i.24xlarge",
"c8i.32xlarge",
"c8i.48xlarge",
"c8i.96xlarge",
"c8i.metal-48xl",
"c8i.metal-96xl",
"c8i-flex.large",
"c8i-flex.xlarge",
"c8i-flex.2xlarge",
"c8i-flex.4xlarge",
"c8i-flex.8xlarge",
"c8i-flex.12xlarge",
"c8i-flex.16xlarge",
"r8gb.medium",
"r8gb.large",
"r8gb.xlarge",
"r8gb.2xlarge",
"r8gb.4xlarge",
"r8gb.8xlarge",
"r8gb.12xlarge",
"r8gb.16xlarge",
"r8gb.24xlarge",
"r8gb.metal-24xl",
"m8a.medium",
"m8a.large",
"m8a.xlarge",
"m8a.2xlarge",
"m8a.4xlarge",
"m8a.8xlarge",
"m8a.12xlarge",
"m8a.16xlarge",
"m8a.24xlarge",
"m8a.48xlarge",
"m8a.metal-24xl",
"m8a.metal-48xl",
},
}
}
Expand Down
3 changes: 3 additions & 0 deletions rules/models/aws_lambda_function_invalid_runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ func NewAwsLambdaFunctionInvalidRuntimeRule() *AwsLambdaFunctionInvalidRuntimeRu
"java21",
"python3.13",
"nodejs22.x",
"java25",
"nodejs24.x",
"python3.14",
},
}
}
Expand Down
42 changes: 42 additions & 0 deletions rules/models/aws_launch_configuration_invalid_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1055,6 +1055,48 @@ func NewAwsLaunchConfigurationInvalidTypeRule() *AwsLaunchConfigurationInvalidTy
"r8gn.48xlarge",
"r8gn.metal-24xl",
"r8gn.metal-48xl",
"c8i.large",
"c8i.xlarge",
"c8i.2xlarge",
"c8i.4xlarge",
"c8i.8xlarge",
"c8i.12xlarge",
"c8i.16xlarge",
"c8i.24xlarge",
"c8i.32xlarge",
"c8i.48xlarge",
"c8i.96xlarge",
"c8i.metal-48xl",
"c8i.metal-96xl",
"c8i-flex.large",
"c8i-flex.xlarge",
"c8i-flex.2xlarge",
"c8i-flex.4xlarge",
"c8i-flex.8xlarge",
"c8i-flex.12xlarge",
"c8i-flex.16xlarge",
"r8gb.medium",
"r8gb.large",
"r8gb.xlarge",
"r8gb.2xlarge",
"r8gb.4xlarge",
"r8gb.8xlarge",
"r8gb.12xlarge",
"r8gb.16xlarge",
"r8gb.24xlarge",
"r8gb.metal-24xl",
"m8a.medium",
"m8a.large",
"m8a.xlarge",
"m8a.2xlarge",
"m8a.4xlarge",
"m8a.8xlarge",
"m8a.12xlarge",
"m8a.16xlarge",
"m8a.24xlarge",
"m8a.48xlarge",
"m8a.metal-24xl",
"m8a.metal-48xl",
},
}
}
Expand Down
42 changes: 42 additions & 0 deletions rules/models/aws_launch_template_invalid_instance_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1055,6 +1055,48 @@ func NewAwsLaunchTemplateInvalidInstanceTypeRule() *AwsLaunchTemplateInvalidInst
"r8gn.48xlarge",
"r8gn.metal-24xl",
"r8gn.metal-48xl",
"c8i.large",
"c8i.xlarge",
"c8i.2xlarge",
"c8i.4xlarge",
"c8i.8xlarge",
"c8i.12xlarge",
"c8i.16xlarge",
"c8i.24xlarge",
"c8i.32xlarge",
"c8i.48xlarge",
"c8i.96xlarge",
"c8i.metal-48xl",
"c8i.metal-96xl",
"c8i-flex.large",
"c8i-flex.xlarge",
"c8i-flex.2xlarge",
"c8i-flex.4xlarge",
"c8i-flex.8xlarge",
"c8i-flex.12xlarge",
"c8i-flex.16xlarge",
"r8gb.medium",
"r8gb.large",
"r8gb.xlarge",
"r8gb.2xlarge",
"r8gb.4xlarge",
"r8gb.8xlarge",
"r8gb.12xlarge",
"r8gb.16xlarge",
"r8gb.24xlarge",
"r8gb.metal-24xl",
"m8a.medium",
"m8a.large",
"m8a.xlarge",
"m8a.2xlarge",
"m8a.4xlarge",
"m8a.8xlarge",
"m8a.12xlarge",
"m8a.16xlarge",
"m8a.24xlarge",
"m8a.48xlarge",
"m8a.metal-24xl",
"m8a.metal-48xl",
},
}
}
Expand Down
7 changes: 7 additions & 0 deletions rules/models/aws_quicksight_data_source_invalid_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ func NewAwsQuicksightDataSourceInvalidTypeRule() *AwsQuicksightDataSourceInvalid
"TRINO",
"BIGQUERY",
"GOOGLESHEETS",
"GOOGLE_DRIVE",
"CONFLUENCE",
"SHAREPOINT",
"ONE_DRIVE",
"WEB_CRAWLER",
"S3_KNOWLEDGE_BASE",
"QBUSINESS",
},
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ func NewAwsRoute53HealthCheckInvalidCloudwatchAlarmRegionRule() *AwsRoute53Healt
"ap-east-2",
"eu-isoe-west-1",
"ap-southeast-6",
"us-isob-west-1",
},
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ func NewAwsRoute53ZoneAssociationInvalidVpcRegionRule() *AwsRoute53ZoneAssociati
"ap-east-2",
"eu-isoe-west-1",
"ap-southeast-6",
"us-isob-west-1",
},
}
}
Expand Down
8 changes: 8 additions & 0 deletions rules/tags/resources.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 16 additions & 16 deletions tools/provider-schema/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tools/provider-schema/schema.json

Large diffs are not rendered by default.

Loading