github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/quickcreate/oci.go (about)

     1  // Copyright (c) 2023, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package quickcreate
     5  
     6  import (
     7  	"github.com/oracle/oci-go-sdk/v53/common"
     8  	"github.com/oracle/oci-go-sdk/v53/containerengine"
     9  	"github.com/oracle/oci-go-sdk/v53/core"
    10  	"github.com/verrazzano/verrazzano/tests/e2e/pkg/oci"
    11  )
    12  
    13  const (
    14  	OciUserID      = "OCI_USER_ID"
    15  	OciFingerprint = "OCI_CREDENTIALS_FINGERPRINT"
    16  	OciRegion      = "CAPI_CLUSTER_REGION"
    17  	OciCompartment = "OCI_COMPARTMENT_ID"
    18  	OciTenancyID   = "OCI_TENANCY_ID"
    19  	PubKey         = "CAPI_NODE_SSH_KEY_PATH"
    20  	APIKey         = "CAPI_OCI_PRIVATE_KEY_PATH" //nolint:gosec //#gosec G101
    21  	ClusterID      = "CLUSTER_ID"
    22  	OkeVersion     = "OKE_VERSION"
    23  	OcneVersion    = "OCNE_VERSION"
    24  	OcneImageID    = "OCNE_IMAGE_ID"
    25  	OkeImageID     = "OKE_IMAGE_ID"
    26  	OkeCniType     = "CNI_TYPE"
    27  
    28  	B64Key         = "B64_KEY"
    29  	B64Fingerprint = "B64_FINGERPRINT"
    30  	B64Region      = "B64_REGION"
    31  	B64Tenancy     = "B64_TENANCY"
    32  	B64User        = "B64_USER"
    33  )
    34  
    35  type (
    36  	OCIClient struct {
    37  		containerengine.ContainerEngineClient
    38  		core.ComputeClient
    39  	}
    40  )
    41  
    42  func (qc *QCContext) isOCICluster() bool {
    43  	return qc.ClusterType == Ocneoci || qc.ClusterType == Oke
    44  }
    45  
    46  func (i input) prepareOCI(clusterType string) error {
    47  	if err := i.addOCIEnv(); err != nil {
    48  		return err
    49  	}
    50  	ociClient, err := i.newOCIClient()
    51  	if err != nil {
    52  		return err
    53  	}
    54  	if err := i.addOCIValues(ociClient, clusterType); err != nil {
    55  		return err
    56  	}
    57  	return nil
    58  }
    59  
    60  func (i input) addOCIEnv() error {
    61  	keys := []string{
    62  		OciRegion,
    63  		OciCompartment,
    64  		OciFingerprint,
    65  		OciTenancyID,
    66  		OciUserID,
    67  	}
    68  	for _, key := range keys {
    69  		if err := i.addEnvValue(key); err != nil {
    70  			return err
    71  		}
    72  	}
    73  
    74  	i.b64EncodeKV(OciRegion, B64Region)
    75  	i.b64EncodeKV(OciFingerprint, B64Fingerprint)
    76  	i.b64EncodeKV(OciTenancyID, B64Tenancy)
    77  	i.b64EncodeKV(OciUserID, B64User)
    78  	return nil
    79  }
    80  
    81  func (i input) newOCIClient() (OCIClient, error) {
    82  	tenancy := i[OciTenancyID].(string)
    83  	user := i[OciUserID].(string)
    84  	key := i[APIKey].(string)
    85  	fingerprint := i[OciFingerprint].(string)
    86  	region := i[OciRegion].(string)
    87  	provider := common.NewRawConfigurationProvider(tenancy, user, region, fingerprint, key, nil)
    88  	containerEngineClient, err := containerengine.NewContainerEngineClientWithConfigurationProvider(provider)
    89  	if err != nil {
    90  		return OCIClient{}, err
    91  	}
    92  	computeClient, err := core.NewComputeClientWithConfigurationProvider(provider)
    93  	if err != nil {
    94  		return OCIClient{}, err
    95  	}
    96  	return OCIClient{
    97  		ContainerEngineClient: containerEngineClient,
    98  		ComputeClient:         computeClient,
    99  	}, nil
   100  }
   101  
   102  func (i input) addOCIValues(client OCIClient, clusterType string) error {
   103  	compartmentID := i[OciCompartment].(string)
   104  	switch clusterType {
   105  	case Oke:
   106  		// add the latest Oke version
   107  		version, err := oci.GetLatestOKEVersion(client.ContainerEngineClient, compartmentID)
   108  		if err != nil {
   109  			return err
   110  		}
   111  		i[OkeVersion] = version
   112  		imageID, err := oci.GetOKENodeImageForVersion(client.ContainerEngineClient, compartmentID, version)
   113  		if err != nil {
   114  			return err
   115  		}
   116  		i[OkeImageID] = imageID
   117  		if err := i.addEnvValue(OkeCniType); err != nil {
   118  			return err
   119  		}
   120  	case Ocneoci:
   121  		imageID, err := oci.GetOL8ImageID(client.ComputeClient, compartmentID)
   122  		if err != nil {
   123  			return err
   124  		}
   125  		i[OcneImageID] = imageID
   126  	}
   127  
   128  	return nil
   129  }