github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/command/jsonchecks/objects.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package jsonchecks 5 6 import ( 7 "fmt" 8 9 "github.com/terramate-io/tf/addrs" 10 ) 11 12 type staticObjectAddr map[string]interface{} 13 14 func makeStaticObjectAddr(addr addrs.ConfigCheckable) staticObjectAddr { 15 ret := map[string]interface{}{ 16 "to_display": addr.String(), 17 } 18 19 switch addr := addr.(type) { 20 case addrs.ConfigResource: 21 if kind := addr.CheckableKind(); kind != addrs.CheckableResource { 22 // Something has gone very wrong 23 panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind)) 24 } 25 26 ret["kind"] = "resource" 27 switch addr.Resource.Mode { 28 case addrs.ManagedResourceMode: 29 ret["mode"] = "managed" 30 case addrs.DataResourceMode: 31 ret["mode"] = "data" 32 default: 33 panic(fmt.Sprintf("unsupported resource mode %#v", addr.Resource.Mode)) 34 } 35 ret["type"] = addr.Resource.Type 36 ret["name"] = addr.Resource.Name 37 if !addr.Module.IsRoot() { 38 ret["module"] = addr.Module.String() 39 } 40 case addrs.ConfigOutputValue: 41 if kind := addr.CheckableKind(); kind != addrs.CheckableOutputValue { 42 // Something has gone very wrong 43 panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind)) 44 } 45 46 ret["kind"] = "output_value" 47 ret["name"] = addr.OutputValue.Name 48 if !addr.Module.IsRoot() { 49 ret["module"] = addr.Module.String() 50 } 51 case addrs.ConfigCheck: 52 if kind := addr.CheckableKind(); kind != addrs.CheckableCheck { 53 // Something has gone very wrong 54 panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind)) 55 } 56 57 ret["kind"] = "check" 58 ret["name"] = addr.Check.Name 59 if !addr.Module.IsRoot() { 60 ret["module"] = addr.Module.String() 61 } 62 case addrs.ConfigInputVariable: 63 if kind := addr.CheckableKind(); kind != addrs.CheckableInputVariable { 64 // Something has gone very wrong 65 panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind)) 66 } 67 68 ret["kind"] = "var" 69 ret["name"] = addr.Variable.Name 70 if !addr.Module.IsRoot() { 71 ret["module"] = addr.Module.String() 72 } 73 default: 74 panic(fmt.Sprintf("unsupported ConfigCheckable implementation %T", addr)) 75 } 76 77 return ret 78 } 79 80 type dynamicObjectAddr map[string]interface{} 81 82 func makeDynamicObjectAddr(addr addrs.Checkable) dynamicObjectAddr { 83 ret := map[string]interface{}{ 84 "to_display": addr.String(), 85 } 86 87 switch addr := addr.(type) { 88 case addrs.AbsResourceInstance: 89 if !addr.Module.IsRoot() { 90 ret["module"] = addr.Module.String() 91 } 92 if addr.Resource.Key != addrs.NoKey { 93 ret["instance_key"] = addr.Resource.Key 94 } 95 case addrs.AbsOutputValue: 96 if !addr.Module.IsRoot() { 97 ret["module"] = addr.Module.String() 98 } 99 case addrs.AbsCheck: 100 if !addr.Module.IsRoot() { 101 ret["module"] = addr.Module.String() 102 } 103 case addrs.AbsInputVariableInstance: 104 if !addr.Module.IsRoot() { 105 ret["module"] = addr.Module.String() 106 } 107 default: 108 panic(fmt.Sprintf("unsupported Checkable implementation %T", addr)) 109 } 110 111 return ret 112 }