github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/pkg/oci/containerengine.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 oci 5 6 import ( 7 "context" 8 "fmt" 9 "github.com/oracle/oci-go-sdk/v53/common" 10 "github.com/oracle/oci-go-sdk/v53/containerengine" 11 "github.com/verrazzano/verrazzano/pkg/semver" 12 "strings" 13 ) 14 15 // GetLatestOKEVersion returns the latest Kubernetes Version from the OKE service 16 func GetLatestOKEVersion(client containerengine.ContainerEngineClient, compartmentID string) (string, error) { 17 options, err := client.GetClusterOptions(context.Background(), containerengine.GetClusterOptionsRequest{ 18 ClusterOptionId: common.String("all"), 19 CompartmentId: &compartmentID, 20 }) 21 if err != nil { 22 return "", err 23 } 24 var version *semver.SemVersion 25 var idx int 26 for i, opt := range options.KubernetesVersions { 27 v2, err := semver.NewSemVersion(opt) 28 if err != nil { 29 return "", err 30 } 31 if version == nil || v2.IsGreaterThanOrEqualTo(version) { 32 version = v2 33 idx = i 34 } 35 } 36 return options.KubernetesVersions[idx], nil 37 } 38 39 // GetOKENodeImageForVersion returns the latest OKE node image for a given OKE version and compartment 40 func GetOKENodeImageForVersion(client containerengine.ContainerEngineClient, compartmentID string, version string) (string, error) { 41 options, err := client.GetNodePoolOptions(context.Background(), containerengine.GetNodePoolOptionsRequest{ 42 NodePoolOptionId: common.String("all"), 43 CompartmentId: &compartmentID, 44 }) 45 if err != nil { 46 return "", err 47 } 48 if version[0] == 'v' { 49 version = version[1:] 50 } 51 var filteredImages []string 52 for _, item := range options.Sources { 53 name := *item.GetSourceName() 54 if strings.Contains(name, version) && 55 !strings.Contains(name, "GPU") && 56 !strings.Contains(name, "aarch64") { 57 id := *item.(containerengine.NodeSourceViaImageOption).ImageId 58 filteredImages = append(filteredImages, id) 59 } 60 } 61 if len(filteredImages) < 1 { 62 return "", fmt.Errorf("no node images found for OKE version %s", version) 63 } 64 return filteredImages[0], nil 65 }