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  }