OpsLevel / terraform-provider-opslevel

Terraform provider for OpsLevel.com
https://registry.terraform.io/providers/OpsLevel/opslevel/latest/docs
MIT License
8 stars 5 forks source link

Regression: opslevel_filter type matches requires string value and not a reference #380

Closed bassco closed 1 month ago

bassco commented 1 month ago

When upgrading the provider version from 1.0.0 to 1.1.0 we are no longer able use references, but need to provide string values for id's.

Error: Invalid Attribute Configuration

  with opslevel_filter.all_services_tier1_tier2,
  on filters.tf line 85, in resource "opslevel_filter" "all_services_tier1_tier2":
  85: resource "opslevel_filter" "all_services_tier1_tier2" {

Predicate type 'matches' requires a value

This is solved by setting the string value.

@@ -90,12 +87,12 @@ resource "opslevel_filter" "all_services_tier1_tier2" {
   predicate {
     key   = "filter_id"
     type  = "matches"
-    value = opslevel_filter.all_services.id
+    value = "<REDACTED>" # opslevel_filter.all_services.id
   }
   predicate {
     key   = "filter_id"
     type  = "matches"
-    value = opslevel_filter.tier1_tier2.id
+    value = "<REDACTED>" # opslevel_filter.tier1_tier2.id
   }
   connective = "and"
 }

Snippet of our filters.tf file

resource "opslevel_filter" "all_services" {
  name = "All Services"
  predicate {
    key      = "tags"
    type     = "does_not_exist"
    key_data = "basic"
  }
}

resource "opslevel_filter" "tier1_tier2" {
  name = "All Tier 1 and 2 Services"
  predicate {
    key            = "tier_index"
    type           = "equals"
    value          = "1"
    case_sensitive = true
  }
  predicate {
    key            = "tier_index"
    type           = "equals"
    value          = "2"
    case_sensitive = true
  }
  connective = "or"
}

resource "opslevel_filter" "all_services_tier1_tier2" {
  name = "All Tier 1 and 2 Services which are not basic services"
  predicate {
    key   = "filter_id"
    type  = "matches"
    value = "REDACTED" # opslevel_filter.all_services.id
  }
  predicate {
    key   = "filter_id"
    type  = "matches"
    value = "REDACTED" # opslevel_filter.tier1_tier2.id
  }
  connective = "and"
}

Would be great if we could return to references again and remove the hard-coded strings.

davidbloss commented 1 month ago

Validation on a predicate's value field was not properly handling non-hardcoded values. This has been fixed as of version v1.1.1