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