|
|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package format
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/hashicorp/terraform/internal/lang/marks"
|
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@ -30,6 +31,11 @@ func ObjectValueID(obj cty.Value) (k, v string) {
|
|
|
|
|
|
|
|
|
|
case atys["id"] == cty.String:
|
|
|
|
|
v := obj.GetAttr("id")
|
|
|
|
|
if v.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
v, _ = v.Unmark()
|
|
|
|
|
|
|
|
|
|
if v.IsKnown() && !v.IsNull() {
|
|
|
|
|
return "id", v.AsString()
|
|
|
|
|
}
|
|
|
|
|
@ -38,6 +44,11 @@ func ObjectValueID(obj cty.Value) (k, v string) {
|
|
|
|
|
// "name" isn't always globally unique, but if there isn't also an
|
|
|
|
|
// "id" then it _often_ is, in practice.
|
|
|
|
|
v := obj.GetAttr("name")
|
|
|
|
|
if v.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
v, _ = v.Unmark()
|
|
|
|
|
|
|
|
|
|
if v.IsKnown() && !v.IsNull() {
|
|
|
|
|
return "name", v.AsString()
|
|
|
|
|
}
|
|
|
|
|
@ -77,25 +88,41 @@ func ObjectValueName(obj cty.Value) (k, v string) {
|
|
|
|
|
|
|
|
|
|
case atys["name"] == cty.String:
|
|
|
|
|
v := obj.GetAttr("name")
|
|
|
|
|
if v.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
v, _ = v.Unmark()
|
|
|
|
|
|
|
|
|
|
if v.IsKnown() && !v.IsNull() {
|
|
|
|
|
return "name", v.AsString()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case atys["tags"].IsMapType() && atys["tags"].ElementType() == cty.String:
|
|
|
|
|
tags := obj.GetAttr("tags")
|
|
|
|
|
if tags.IsNull() || !tags.IsWhollyKnown() {
|
|
|
|
|
if tags.IsNull() || !tags.IsWhollyKnown() || tags.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
tags, _ = tags.Unmark()
|
|
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
case tags.HasIndex(cty.StringVal("name")).RawEquals(cty.True):
|
|
|
|
|
v := tags.Index(cty.StringVal("name"))
|
|
|
|
|
if v.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
v, _ = v.Unmark()
|
|
|
|
|
|
|
|
|
|
if v.IsKnown() && !v.IsNull() {
|
|
|
|
|
return "tags.name", v.AsString()
|
|
|
|
|
}
|
|
|
|
|
case tags.HasIndex(cty.StringVal("Name")).RawEquals(cty.True):
|
|
|
|
|
// AWS-style naming convention
|
|
|
|
|
v := tags.Index(cty.StringVal("Name"))
|
|
|
|
|
if v.HasMark(marks.Sensitive) {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
v, _ = v.Unmark()
|
|
|
|
|
|
|
|
|
|
if v.IsKnown() && !v.IsNull() {
|
|
|
|
|
return "tags.Name", v.AsString()
|
|
|
|
|
}
|
|
|
|
|
|