Convert PredicateModel to types.Object - Terraform handles this better
Add some Predicate type validation. Saves HOURS of guesswork due to opaque API error messages 😞
Update tests
opslevel_check_repository_search.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvU2VhcmNoLzI2MzYx]
opslevel_check_tag_defined.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpUYWdEZWZpbmVkLzI2MzY1]
opslevel_check_service_property.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpTZXJ2aWNlUHJvcGVydHkvMjYzNjA]
opslevel_check_service_ownership.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpIYXNPd25lci8yNjM2Mg]
opslevel_check_alert_source_usage.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpBbGVydFNvdXJjZVVzYWdlLzI2MzYz]
opslevel_check_repository_file.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvRmlsZS8yNjM2Ng]
opslevel_check_repository_grep.example: Refreshing state... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvR3JlcC8yNjM2NA]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# opslevel_check_alert_source_usage.example will be updated in-place
~ resource "opslevel_check_alert_source_usage" "example" {
+ alert_name_predicate = {
+ type = "contains"
+ value = "dev"
}
~ description = "The service is using a PagerDuty alert source." -> (known after apply)
id = "Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpBbGVydFNvdXJjZVVzYWdlLzI2MzYz"
name = "foo"
# (6 unchanged attributes hidden)
}
# opslevel_check_repository_file.example will be updated in-place
~ resource "opslevel_check_repository_file" "example" {
~ description = "Repo file 'tbd' exists." -> (known after apply)
+ file_contents_predicate = {
+ type = "contains"
+ value = "dev"
}
id = "Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvRmlsZS8yNjM2Ng"
name = "foo"
# (8 unchanged attributes hidden)
}
# opslevel_check_service_property.example will be updated in-place
~ resource "opslevel_check_service_property" "example" {
~ description = "The service has a product." -> (known after apply)
id = "Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpTZXJ2aWNlUHJvcGVydHkvMjYzNjA"
name = "foo"
+ predicate = {
+ type = "contains"
+ value = "dev"
}
# (6 unchanged attributes hidden)
}
# opslevel_check_tag_defined.example will be updated in-place
~ resource "opslevel_check_tag_defined" "example" {
~ description = "Verifies that the service has the specified tag defined." -> (known after apply)
id = "Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpUYWdEZWZpbmVkLzI2MzY1"
name = "foo"
+ tag_predicate = {
+ type = "contains"
+ value = "dev"
}
# (6 unchanged attributes hidden)
}
Plan: 0 to add, 4 to change, 0 to destroy.
opslevel_check_tag_defined.example: Modifying... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpUYWdEZWZpbmVkLzI2MzY1]
opslevel_check_service_property.example: Modifying... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpTZXJ2aWNlUHJvcGVydHkvMjYzNjA]
opslevel_check_repository_file.example: Modifying... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvRmlsZS8yNjM2Ng]
opslevel_check_alert_source_usage.example: Modifying... [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpBbGVydFNvdXJjZVVzYWdlLzI2MzYz]
opslevel_check_repository_file.example: Modifications complete after 1s [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpSZXBvRmlsZS8yNjM2Ng]
opslevel_check_alert_source_usage.example: Modifications complete after 1s [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpBbGVydFNvdXJjZVVzYWdlLzI2MzYz]
opslevel_check_service_property.example: Modifications complete after 1s [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpTZXJ2aWNlUHJvcGVydHkvMjYzNjA]
opslevel_check_tag_defined.example: Modifications complete after 1s [id=Z2lkOi8vb3BzbGV2ZWwvQ2hlY2tzOjpUYWdEZWZpbmVkLzI2MzY1]
Apply complete! Resources: 0 added, 4 changed, 0 destroyed.
Issues
Fix Terraform Predicate types across resources
Changelog
Convert
PredicateModel
totypes.Object
- Terraform handles this better Add some Predicate type validation. Saves HOURS of guesswork due to opaque API error messages 😞 Update testschangie
entry,Tophatting
With this config:
Create resources with predicates.
terraform apply
Destroy resources then, update config:
Create resources without optional predicates.
terraform apply
Update config, (add optional predicates)
Update resources, add optional predicates.
terraform apply
Update config (remove optional predicates)
Update resources, remove optional predicates.
terraform apply
Destroy resources
terraform destroy