github.com/mponton/terratest@v0.44.0/modules/oci/identity.go (about)

     1  package oci
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/mponton/terratest/modules/logger"
     9  	"github.com/mponton/terratest/modules/random"
    10  	"github.com/mponton/terratest/modules/testing"
    11  	"github.com/oracle/oci-go-sdk/common"
    12  	"github.com/oracle/oci-go-sdk/identity"
    13  )
    14  
    15  // GetRandomAvailabilityDomain gets a randomly chosen availability domain for given compartment.
    16  // The returned value can be overridden by of the environment variable TF_VAR_availability_domain.
    17  func GetRandomAvailabilityDomain(t testing.TestingT, compartmentID string) string {
    18  	ad, err := GetRandomAvailabilityDomainE(t, compartmentID)
    19  	if err != nil {
    20  		t.Fatal(err)
    21  	}
    22  	return ad
    23  }
    24  
    25  // GetRandomAvailabilityDomainE gets a randomly chosen availability domain for given compartment.
    26  // The returned value can be overridden by of the environment variable TF_VAR_availability_domain.
    27  func GetRandomAvailabilityDomainE(t testing.TestingT, compartmentID string) (string, error) {
    28  	adFromEnvVar := os.Getenv(availabilityDomainEnvVar)
    29  	if adFromEnvVar != "" {
    30  		logger.Logf(t, "Using availability domain %s from environment variable %s", adFromEnvVar, availabilityDomainEnvVar)
    31  		return adFromEnvVar, nil
    32  	}
    33  
    34  	allADs, err := GetAllAvailabilityDomainsE(t, compartmentID)
    35  	if err != nil {
    36  		return "", err
    37  	}
    38  
    39  	ad := random.RandomString(allADs)
    40  
    41  	logger.Logf(t, "Using availability domain %s", ad)
    42  	return ad, nil
    43  }
    44  
    45  // GetAllAvailabilityDomains gets the list of availability domains available in the given compartment.
    46  func GetAllAvailabilityDomains(t testing.TestingT, compartmentID string) []string {
    47  	ads, err := GetAllAvailabilityDomainsE(t, compartmentID)
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	}
    51  	return ads
    52  }
    53  
    54  // GetAllAvailabilityDomainsE gets the list of availability domains available in the given compartment.
    55  func GetAllAvailabilityDomainsE(t testing.TestingT, compartmentID string) ([]string, error) {
    56  	configProvider := common.DefaultConfigProvider()
    57  	client, err := identity.NewIdentityClientWithConfigurationProvider(configProvider)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  
    62  	request := identity.ListAvailabilityDomainsRequest{CompartmentId: &compartmentID}
    63  	response, err := client.ListAvailabilityDomains(context.Background(), request)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	if len(response.Items) == 0 {
    69  		return nil, fmt.Errorf("No availability domains found in the %s compartment", compartmentID)
    70  	}
    71  
    72  	return availabilityDomainsNames(response.Items), nil
    73  }
    74  
    75  func availabilityDomainsNames(ads []identity.AvailabilityDomain) []string {
    76  	names := []string{}
    77  	for _, ad := range ads {
    78  		names = append(names, *ad.Name)
    79  	}
    80  	return names
    81  }