diff --git a/.go-version b/.go-version index 2af7203..069b921 100644 --- a/.go-version +++ b/.go-version @@ -1,2 +1,2 @@ -1.95.0 +1.95.1 diff --git a/lightstep/resource_alert.go b/lightstep/resource_alert.go index 3f7fb92..d7dd173 100644 --- a/lightstep/resource_alert.go +++ b/lightstep/resource_alert.go @@ -40,6 +40,7 @@ func getQueriesFromUnifiedConditionResourceData( "query_name": q.Name, "query_string": q.QueryString, } + setHiddenQueriesFromResourceData(qs, q) queries = append(queries, qs) } return queries, nil diff --git a/lightstep/resource_alert_test.go b/lightstep/resource_alert_test.go index 64229e4..bea7f40 100644 --- a/lightstep/resource_alert_test.go +++ b/lightstep/resource_alert_test.go @@ -1265,3 +1265,50 @@ resource "lightstep_alert" "test" { }, }) } + +func TestAlertWithHiddenQueries(t *testing.T) { + var condition client.UnifiedCondition + + conditionConfig := ` +resource "lightstep_alert" "test" { + name = "hidden queries spurious diff" + project_name = "` + testProject + `" + + expression { + operand = "below" + thresholds { + critical = "1" + } + } + + query { + display = "line" + hidden = false + // previously, this would result in a spurious diff + hidden_queries = { + b = true + } + query_name = "a" + query_string = "metric cpu.utilization | delta 5m | group_by[], sum" + } +} +` + + resourceName := "lightstep_alert.test" + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccMetricConditionDestroy, + Steps: []resource.TestStep{ + { + Config: conditionConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckLightstepAlertExists(resourceName, &condition), + resource.TestCheckResourceAttr(resourceName, "name", "hidden queries spurious diff"), + resource.TestCheckResourceAttr(resourceName, "query.0.hidden_queries.%", "1"), + resource.TestCheckResourceAttr(resourceName, "query.0.hidden_queries.b", "true"), + ), + }, + }, + }) +} diff --git a/lightstep/resource_dashboard.go b/lightstep/resource_dashboard.go index 2104825..7ee7bea 100644 --- a/lightstep/resource_dashboard.go +++ b/lightstep/resource_dashboard.go @@ -150,19 +150,7 @@ func getQueriesFromUnifiedDashboardResourceData( "query_string": q.QueryString, "dependency_map_options": getDependencyMapOptions(q.DependencyMapOptions), } - if len(q.HiddenQueries) > 0 { - // Note due to Terraform's issues with TypeMap having TypeBool elements, we - // need to use boolean strings - hq := make(map[string]interface{}, len(q.HiddenQueries)+1) - for k, v := range q.HiddenQueries { - // Don't include the top-level query in the TF resource data - if k == q.Name { - continue - } - hq[k] = fmt.Sprintf("%t", v) - } - qs["hidden_queries"] = hq - } + setHiddenQueriesFromResourceData(qs, q) queries = append(queries, qs) } diff --git a/lightstep/util.go b/lightstep/util.go index c832dff..0a07aad 100644 --- a/lightstep/util.go +++ b/lightstep/util.go @@ -1,6 +1,10 @@ package lightstep -import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +import ( + "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/lightstep/terraform-provider-lightstep/client" +) func mergeSchemas(arr ...map[string]*schema.Schema) map[string]*schema.Schema { dst := make(map[string]*schema.Schema) @@ -21,3 +25,21 @@ func convertNestedMapToSchemaSet(opts map[string]interface{}) *schema.Set { } return schema.NewSet(f, []interface{}{opts}) } + +// Note due to Terraform's issues with TypeMap having TypeBool elements, we +// need to use boolean strings +func setHiddenQueriesFromResourceData(qs map[string]interface{}, query client.MetricQueryWithAttributes) { + if len(query.HiddenQueries) == 0 { + // nothing to do + return + } + hq := make(map[string]interface{}, len(query.HiddenQueries)) + for k, v := range query.HiddenQueries { + // Don't include the top-level query in the TF resource data + if k == query.Name { + continue + } + hq[k] = fmt.Sprintf("%t", v) + } + qs["hidden_queries"] = hq +}