github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/cloudstack/compute/adapt.go (about) 1 package compute 2 3 import ( 4 "encoding/base64" 5 6 "github.com/khulnasoft-lab/defsec/pkg/types" 7 8 "github.com/khulnasoft-lab/defsec/pkg/terraform" 9 10 "github.com/khulnasoft-lab/defsec/pkg/providers/cloudstack/compute" 11 ) 12 13 func Adapt(modules terraform.Modules) compute.Compute { 14 return compute.Compute{ 15 Instances: adaptInstances(modules), 16 } 17 } 18 19 func adaptInstances(modules terraform.Modules) []compute.Instance { 20 var instances []compute.Instance 21 for _, module := range modules { 22 for _, resource := range module.GetResourcesByType("cloudstack_instance") { 23 instances = append(instances, adaptInstance(resource)) 24 } 25 } 26 return instances 27 } 28 29 func adaptInstance(resource *terraform.Block) compute.Instance { 30 userDataAttr := resource.GetAttribute("user_data") 31 var encoded []byte 32 var err error 33 34 if userDataAttr.IsNotNil() && userDataAttr.IsString() { 35 encoded, err = base64.StdEncoding.DecodeString(userDataAttr.Value().AsString()) 36 if err != nil { 37 encoded = []byte(userDataAttr.Value().AsString()) 38 } 39 return compute.Instance{ 40 Metadata: resource.GetMetadata(), 41 UserData: types.String(string(encoded), userDataAttr.GetMetadata()), 42 } 43 } 44 45 return compute.Instance{ 46 Metadata: resource.GetMetadata(), 47 UserData: types.StringDefault("", resource.GetMetadata()), 48 } 49 }