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  }