github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/management/v1alpha1/Environment.go (about) 1 /* 2 * This file is automatically generated 3 */ 4 5 package management 6 7 import ( 8 "encoding/json" 9 10 apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 11 12 "github.com/Axway/agent-sdk/pkg/util/log" 13 ) 14 15 var ( 16 EnvironmentCtx log.ContextField = "environment" 17 18 _EnvironmentGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "management", 21 Kind: "Environment", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 EnvironmentScopes = []string{""} 27 ) 28 29 const ( 30 EnvironmentResourceName = "environments" 31 EnvironmentCompliancetasksSubResourceName = "compliancetasks" 32 EnvironmentPoliciesSubResourceName = "policies" 33 EnvironmentReferencesSubResourceName = "references" 34 EnvironmentStagesSubResourceName = "stages" 35 ) 36 37 func EnvironmentGVK() apiv1.GroupVersionKind { 38 return _EnvironmentGVK 39 } 40 41 func init() { 42 apiv1.RegisterGVK(_EnvironmentGVK, EnvironmentScopes[0], EnvironmentResourceName) 43 log.RegisterContextField(EnvironmentCtx) 44 } 45 46 // Environment Resource 47 type Environment struct { 48 apiv1.ResourceMeta 49 Compliancetasks EnvironmentCompliancetasks `json:"compliancetasks"` 50 Owner *apiv1.Owner `json:"owner"` 51 Policies EnvironmentPolicies `json:"policies"` 52 References EnvironmentReferences `json:"references"` 53 Spec EnvironmentSpec `json:"spec"` 54 Stages EnvironmentStages `json:"stages"` 55 } 56 57 // NewEnvironment creates an empty *Environment 58 func NewEnvironment(name string) *Environment { 59 return &Environment{ 60 ResourceMeta: apiv1.ResourceMeta{ 61 Name: name, 62 GroupVersionKind: _EnvironmentGVK, 63 }, 64 } 65 } 66 67 // EnvironmentFromInstanceArray converts a []*ResourceInstance to a []*Environment 68 func EnvironmentFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*Environment, error) { 69 newArray := make([]*Environment, 0) 70 for _, item := range fromArray { 71 res := &Environment{} 72 err := res.FromInstance(item) 73 if err != nil { 74 return make([]*Environment, 0), err 75 } 76 newArray = append(newArray, res) 77 } 78 79 return newArray, nil 80 } 81 82 // AsInstance converts a Environment to a ResourceInstance 83 func (res *Environment) AsInstance() (*apiv1.ResourceInstance, error) { 84 meta := res.ResourceMeta 85 meta.GroupVersionKind = EnvironmentGVK() 86 res.ResourceMeta = meta 87 88 m, err := json.Marshal(res) 89 if err != nil { 90 return nil, err 91 } 92 93 instance := apiv1.ResourceInstance{} 94 err = json.Unmarshal(m, &instance) 95 if err != nil { 96 return nil, err 97 } 98 99 return &instance, nil 100 } 101 102 // FromInstance converts a ResourceInstance to a Environment 103 func (res *Environment) FromInstance(ri *apiv1.ResourceInstance) error { 104 if ri == nil { 105 res = nil 106 return nil 107 } 108 var err error 109 rawResource := ri.GetRawResource() 110 if rawResource == nil { 111 rawResource, err = json.Marshal(ri) 112 if err != nil { 113 return err 114 } 115 } 116 err = json.Unmarshal(rawResource, res) 117 return err 118 } 119 120 // MarshalJSON custom marshaller to handle sub resources 121 func (res *Environment) MarshalJSON() ([]byte, error) { 122 m, err := json.Marshal(&res.ResourceMeta) 123 if err != nil { 124 return nil, err 125 } 126 127 var out map[string]interface{} 128 err = json.Unmarshal(m, &out) 129 if err != nil { 130 return nil, err 131 } 132 133 out["compliancetasks"] = res.Compliancetasks 134 out["owner"] = res.Owner 135 out["policies"] = res.Policies 136 out["references"] = res.References 137 out["spec"] = res.Spec 138 out["stages"] = res.Stages 139 140 return json.Marshal(out) 141 } 142 143 // UnmarshalJSON custom unmarshaller to handle sub resources 144 func (res *Environment) UnmarshalJSON(data []byte) error { 145 var err error 146 147 aux := &apiv1.ResourceInstance{} 148 err = json.Unmarshal(data, aux) 149 if err != nil { 150 return err 151 } 152 153 res.ResourceMeta = aux.ResourceMeta 154 res.Owner = aux.Owner 155 156 // ResourceInstance holds the spec as a map[string]interface{}. 157 // Convert it to bytes, then convert to the spec type for the resource. 158 sr, err := json.Marshal(aux.Spec) 159 if err != nil { 160 return err 161 } 162 163 err = json.Unmarshal(sr, &res.Spec) 164 if err != nil { 165 return err 166 } 167 168 // marshalling subresource Compliancetasks 169 if v, ok := aux.SubResources["compliancetasks"]; ok { 170 sr, err = json.Marshal(v) 171 if err != nil { 172 return err 173 } 174 175 delete(aux.SubResources, "compliancetasks") 176 err = json.Unmarshal(sr, &res.Compliancetasks) 177 if err != nil { 178 return err 179 } 180 } 181 182 // marshalling subresource Policies 183 if v, ok := aux.SubResources["policies"]; ok { 184 sr, err = json.Marshal(v) 185 if err != nil { 186 return err 187 } 188 189 delete(aux.SubResources, "policies") 190 err = json.Unmarshal(sr, &res.Policies) 191 if err != nil { 192 return err 193 } 194 } 195 196 // marshalling subresource References 197 if v, ok := aux.SubResources["references"]; ok { 198 sr, err = json.Marshal(v) 199 if err != nil { 200 return err 201 } 202 203 delete(aux.SubResources, "references") 204 err = json.Unmarshal(sr, &res.References) 205 if err != nil { 206 return err 207 } 208 } 209 210 // marshalling subresource Stages 211 if v, ok := aux.SubResources["stages"]; ok { 212 sr, err = json.Marshal(v) 213 if err != nil { 214 return err 215 } 216 217 delete(aux.SubResources, "stages") 218 err = json.Unmarshal(sr, &res.Stages) 219 if err != nil { 220 return err 221 } 222 } 223 224 return nil 225 } 226 227 // PluralName returns the plural name of the resource 228 func (res *Environment) PluralName() string { 229 return EnvironmentResourceName 230 }