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 }