github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/common/organizations.go (about)

     1  package common
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/kubeshop/testkube/pkg/ui"
     7  
     8  	cloudclient "github.com/kubeshop/testkube/pkg/cloud/client"
     9  )
    10  
    11  type Organization struct {
    12  	Id   string
    13  	Name string
    14  }
    15  
    16  func GetOrganizations(url, token string) ([]cloudclient.Organization, error) {
    17  	c := cloudclient.NewOrganizationsClient(url, token)
    18  	return c.List()
    19  }
    20  
    21  func GetOrgNames(orgs []cloudclient.Organization) []string {
    22  	var names []string
    23  	for _, org := range orgs {
    24  		names = append(names, org.Name)
    25  	}
    26  	return names
    27  }
    28  
    29  func FindOrgId(orgs []cloudclient.Organization, name string) string {
    30  	for _, org := range orgs {
    31  		if org.Name == name {
    32  			return org.Id
    33  		}
    34  	}
    35  	return ""
    36  }
    37  
    38  func UiGetOrganizationId(url, token string) (string, string, error) {
    39  	// Choose organization from orgs available
    40  	orgs, err := GetOrganizations(url, token)
    41  	if err != nil {
    42  		return "", "", fmt.Errorf("failed to get organizations: %s", err.Error())
    43  	}
    44  
    45  	if len(orgs) == 0 {
    46  		return "", "", fmt.Errorf("no organizations available, please create one first")
    47  	}
    48  
    49  	orgNames := GetOrgNames(orgs)
    50  	orgName := ui.Select("Choose organization", orgNames)
    51  	orgId := FindOrgId(orgs, orgName)
    52  
    53  	return orgId, orgName, nil
    54  }