diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 033cc1db..05abf562 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -60,7 +60,7 @@ Check [resource_module.go](./env0/resource_module.go) that uses the utilities vs Pay attention to the following caveats: * The utilities leverage golang reflection. And work well for most simple types. Complex types may need additional code to be implemented. -* The golang fields are in CamalCase, while the terraform fields are in snake_case. They must match. E.g., ProjectName (golang) == project_name (Terraform). +* The golang fields are in CamalCase, while the terraform fields are in snake_case. They must match. E.g., ProjectName (golang) == project_name (Terraform). To override the default CamalCase to snake_case conversion you may use the tag `tfschema`. ### Handling drifts diff --git a/client/cloud_credentials.go b/client/cloud_credentials.go index 26809f9b..6b48149a 100644 --- a/client/cloud_credentials.go +++ b/client/cloud_credentials.go @@ -33,7 +33,7 @@ type AwsCredentialsCreatePayload struct { } type AwsCredentialsValuePayload struct { - RoleArn string `json:"roleArn" resource:"arn"` + RoleArn string `json:"roleArn" tfschema:"arn"` ExternalId string `json:"externalId"` AccessKeyId string `json:"accessKeyId"` SecretAccessKey string `json:"secretAccessKey"` diff --git a/env0/resource_aws_credentials.go b/env0/resource_aws_credentials.go index 1dc07801..5c5710cc 100644 --- a/env0/resource_aws_credentials.go +++ b/env0/resource_aws_credentials.go @@ -107,8 +107,9 @@ func resourceAwsCredentialsRead(ctx context.Context, d *schema.ResourceData, met return ResourceGetFailure("aws credentials", d, err) } - d.Set("name", credentials.Name) - d.SetId(credentials.Id) + if err := writeResourceData(&credentials, d); err != nil { + return diag.Errorf("schema resource data serialization failed: %v", err) + } return nil } @@ -133,8 +134,9 @@ func resourceAwsCredentialsImport(ctx context.Context, d *schema.ResourceData, m return nil, err } - d.Set("name", credentials.Name) - d.SetId(credentials.Id) + if err := writeResourceData(&credentials, d); err != nil { + return nil, fmt.Errorf("schema resource data serialization failed: %v", err) + } return []*schema.ResourceData{d}, nil } diff --git a/env0/utils.go b/env0/utils.go index d7a7d569..3d956628 100644 --- a/env0/utils.go +++ b/env0/utils.go @@ -42,9 +42,9 @@ func readResourceData(i interface{}, d *schema.ResourceData) error { for i := 0; i < val.NumField(); i++ { fieldName := val.Type().Field(i).Name // Assumes golang is CamalCase and Terraform is snake_case. - // This behavior can be overrided be used in the 'resource' tag. + // This behavior can be overrided be used in the 'tfschema' tag. fieldNameSC := toSnakeCase(fieldName) - if resFieldName, ok := val.Type().Field(i).Tag.Lookup("resource"); ok { + if resFieldName, ok := val.Type().Field(i).Tag.Lookup("tfschema"); ok { // 'resource' tag found. Override to tag value. fieldNameSC = resFieldName } @@ -107,9 +107,9 @@ func writeResourceData(i interface{}, d *schema.ResourceData) error { for i := 0; i < val.NumField(); i++ { fieldName := val.Type().Field(i).Name // Assumes golang is CamalCase and Terraform is snake_case. - // This behavior can be overrided be used in the 'resource' tag. + // This behavior can be overrided be used in the 'tfschema' tag. fieldNameSC := toSnakeCase(fieldName) - if resFieldName, ok := val.Type().Field(i).Tag.Lookup("resource"); ok { + if resFieldName, ok := val.Type().Field(i).Tag.Lookup("tfschema"); ok { // 'resource' tag found. Override to tag value. fieldNameSC = resFieldName }