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 }