Allow usage of friendly names in most commands
This change adds the ability to use the repo/org/enterprise names instead of UUID in most garm-cli commands, at the expense of an extra list API call, leveraging the recently added filter options. Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
parent
43a2343828
commit
e92b2c1111
6 changed files with 249 additions and 20 deletions
|
|
@ -112,8 +112,14 @@ var enterpriseShowCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
enterpriseID, err := resolveEnterprise(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
showEnterpriseReq := apiClientEnterprises.NewGetEnterpriseParams()
|
||||
showEnterpriseReq.EnterpriseID = args[0]
|
||||
showEnterpriseReq.EnterpriseID = enterpriseID
|
||||
response, err := apiCli.Enterprises.GetEnterprise(showEnterpriseReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -139,8 +145,14 @@ var enterpriseDeleteCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
enterpriseID, err := resolveEnterprise(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
deleteEnterpriseReq := apiClientEnterprises.NewDeleteEnterpriseParams()
|
||||
deleteEnterpriseReq.EnterpriseID = args[0]
|
||||
deleteEnterpriseReq.EnterpriseID = enterpriseID
|
||||
if err := apiCli.Enterprises.DeleteEnterprise(deleteEnterpriseReq, authToken); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -165,13 +177,18 @@ var enterpriseUpdateCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
enterpriseID, err := resolveEnterprise(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
updateEnterpriseReq := apiClientEnterprises.NewUpdateEnterpriseParams()
|
||||
updateEnterpriseReq.Body = params.UpdateEntityParams{
|
||||
WebhookSecret: repoWebhookSecret,
|
||||
CredentialsName: repoCreds,
|
||||
PoolBalancerType: params.PoolBalancerType(poolBalancerType),
|
||||
}
|
||||
updateEnterpriseReq.EnterpriseID = args[0]
|
||||
updateEnterpriseReq.EnterpriseID = enterpriseID
|
||||
response, err := apiCli.Enterprises.UpdateEnterprise(updateEnterpriseReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -76,8 +76,13 @@ var orgWebhookInstallCmd = &cobra.Command{
|
|||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
installWebhookReq := apiClientOrgs.NewInstallOrgWebhookParams()
|
||||
installWebhookReq.OrgID = args[0]
|
||||
installWebhookReq.OrgID = orgID
|
||||
installWebhookReq.Body.InsecureSSL = insecureOrgWebhook
|
||||
installWebhookReq.Body.WebhookEndpointType = params.WebhookEndpointDirect
|
||||
|
||||
|
|
@ -105,9 +110,12 @@ var orgHookInfoShowCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
showWebhookInfoReq := apiClientOrgs.NewGetOrgWebhookInfoParams()
|
||||
showWebhookInfoReq.OrgID = args[0]
|
||||
showWebhookInfoReq.OrgID = orgID
|
||||
|
||||
response, err := apiCli.Organizations.GetOrgWebhookInfo(showWebhookInfoReq, authToken)
|
||||
if err != nil {
|
||||
|
|
@ -134,10 +142,15 @@ var orgWebhookUninstallCmd = &cobra.Command{
|
|||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
uninstallWebhookReq := apiClientOrgs.NewUninstallOrgWebhookParams()
|
||||
uninstallWebhookReq.OrgID = args[0]
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err := apiCli.Organizations.UninstallOrgWebhook(uninstallWebhookReq, authToken)
|
||||
uninstallWebhookReq := apiClientOrgs.NewUninstallOrgWebhookParams()
|
||||
uninstallWebhookReq.OrgID = orgID
|
||||
|
||||
err = apiCli.Organizations.UninstallOrgWebhook(uninstallWebhookReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -216,13 +229,19 @@ var orgUpdateCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
updateOrgReq := apiClientOrgs.NewUpdateOrgParams()
|
||||
updateOrgReq.Body = params.UpdateEntityParams{
|
||||
WebhookSecret: orgWebhookSecret,
|
||||
CredentialsName: orgCreds,
|
||||
PoolBalancerType: params.PoolBalancerType(poolBalancerType),
|
||||
}
|
||||
updateOrgReq.OrgID = args[0]
|
||||
updateOrgReq.OrgID = orgID
|
||||
response, err := apiCli.Organizations.UpdateOrg(updateOrgReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -270,8 +289,14 @@ var orgShowCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
showOrgReq := apiClientOrgs.NewGetOrgParams()
|
||||
showOrgReq.OrgID = args[0]
|
||||
showOrgReq.OrgID = orgID
|
||||
response, err := apiCli.Organizations.GetOrg(showOrgReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -297,8 +322,14 @@ var orgDeleteCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
orgID, err := resolveOrganization(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
deleteOrgReq := apiClientOrgs.NewDeleteOrgParams()
|
||||
deleteOrgReq.OrgID = args[0]
|
||||
deleteOrgReq.OrgID = orgID
|
||||
deleteOrgReq.KeepWebhook = &keepOrgWebhook
|
||||
if err := apiCli.Organizations.DeleteOrg(deleteOrgReq, authToken); err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -105,14 +105,26 @@ Example:
|
|||
switch len(args) {
|
||||
case 0:
|
||||
if cmd.Flags().Changed("repo") {
|
||||
poolRepository, err = resolveRepository(poolRepository)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listRepoPoolsReq := apiClientRepos.NewListRepoPoolsParams()
|
||||
listRepoPoolsReq.RepoID = poolRepository
|
||||
response, err = apiCli.Repositories.ListRepoPools(listRepoPoolsReq, authToken)
|
||||
} else if cmd.Flags().Changed("org") {
|
||||
poolOrganization, err = resolveOrganization(poolOrganization)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listOrgPoolsReq := apiClientOrgs.NewListOrgPoolsParams()
|
||||
listOrgPoolsReq.OrgID = poolOrganization
|
||||
response, err = apiCli.Organizations.ListOrgPools(listOrgPoolsReq, authToken)
|
||||
} else if cmd.Flags().Changed("enterprise") {
|
||||
poolEnterprise, err = resolveEnterprise(poolEnterprise)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listEnterprisePoolsReq := apiClientEnterprises.NewListEnterprisePoolsParams()
|
||||
listEnterprisePoolsReq.EnterpriseID = poolEnterprise
|
||||
response, err = apiCli.Enterprises.ListEnterprisePools(listEnterprisePoolsReq, authToken)
|
||||
|
|
@ -250,16 +262,28 @@ var poolAddCmd = &cobra.Command{
|
|||
var err error
|
||||
var response poolPayloadGetter
|
||||
if cmd.Flags().Changed("repo") {
|
||||
poolRepository, err = resolveRepository(poolRepository)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newRepoPoolReq := apiClientRepos.NewCreateRepoPoolParams()
|
||||
newRepoPoolReq.RepoID = poolRepository
|
||||
newRepoPoolReq.Body = newPoolParams
|
||||
response, err = apiCli.Repositories.CreateRepoPool(newRepoPoolReq, authToken)
|
||||
} else if cmd.Flags().Changed("org") {
|
||||
poolOrganization, err = resolveOrganization(poolOrganization)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newOrgPoolReq := apiClientOrgs.NewCreateOrgPoolParams()
|
||||
newOrgPoolReq.OrgID = poolOrganization
|
||||
newOrgPoolReq.Body = newPoolParams
|
||||
response, err = apiCli.Organizations.CreateOrgPool(newOrgPoolReq, authToken)
|
||||
} else if cmd.Flags().Changed("enterprise") {
|
||||
poolEnterprise, err = resolveEnterprise(poolEnterprise)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newEnterprisePoolReq := apiClientEnterprises.NewCreateEnterprisePoolParams()
|
||||
newEnterprisePoolReq.EnterpriseID = poolEnterprise
|
||||
newEnterprisePoolReq.Body = newPoolParams
|
||||
|
|
|
|||
|
|
@ -78,8 +78,13 @@ var repoWebhookInstallCmd = &cobra.Command{
|
|||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
installWebhookReq := apiClientRepos.NewInstallRepoWebhookParams()
|
||||
installWebhookReq.RepoID = args[0]
|
||||
installWebhookReq.RepoID = repoID
|
||||
installWebhookReq.Body.InsecureSSL = insecureRepoWebhook
|
||||
installWebhookReq.Body.WebhookEndpointType = params.WebhookEndpointDirect
|
||||
|
||||
|
|
@ -108,8 +113,13 @@ var repoHookInfoShowCmd = &cobra.Command{
|
|||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
showWebhookInfoReq := apiClientRepos.NewGetRepoWebhookInfoParams()
|
||||
showWebhookInfoReq.RepoID = args[0]
|
||||
showWebhookInfoReq.RepoID = repoID
|
||||
|
||||
response, err := apiCli.Repositories.GetRepoWebhookInfo(showWebhookInfoReq, authToken)
|
||||
if err != nil {
|
||||
|
|
@ -136,10 +146,15 @@ var repoWebhookUninstallCmd = &cobra.Command{
|
|||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
uninstallWebhookReq := apiClientRepos.NewUninstallRepoWebhookParams()
|
||||
uninstallWebhookReq.RepoID = args[0]
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err := apiCli.Repositories.UninstallRepoWebhook(uninstallWebhookReq, authToken)
|
||||
uninstallWebhookReq := apiClientRepos.NewUninstallRepoWebhookParams()
|
||||
uninstallWebhookReq.RepoID = repoID
|
||||
|
||||
err = apiCli.Repositories.UninstallRepoWebhook(uninstallWebhookReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -243,13 +258,19 @@ var repoUpdateCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
updateReposReq := apiClientRepos.NewUpdateRepoParams()
|
||||
updateReposReq.Body = params.UpdateEntityParams{
|
||||
WebhookSecret: repoWebhookSecret,
|
||||
CredentialsName: repoCreds,
|
||||
PoolBalancerType: params.PoolBalancerType(poolBalancerType),
|
||||
}
|
||||
updateReposReq.RepoID = args[0]
|
||||
updateReposReq.RepoID = repoID
|
||||
|
||||
response, err := apiCli.Repositories.UpdateRepo(updateReposReq, authToken)
|
||||
if err != nil {
|
||||
|
|
@ -275,8 +296,14 @@ var repoShowCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
showRepoReq := apiClientRepos.NewGetRepoParams()
|
||||
showRepoReq.RepoID = args[0]
|
||||
showRepoReq.RepoID = repoID
|
||||
response, err := apiCli.Repositories.GetRepo(showRepoReq, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -302,8 +329,14 @@ var repoDeleteCmd = &cobra.Command{
|
|||
if len(args) > 1 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
repoID, err := resolveRepository(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
deleteRepoReq := apiClientRepos.NewDeleteRepoParams()
|
||||
deleteRepoReq.RepoID = args[0]
|
||||
deleteRepoReq.RepoID = repoID
|
||||
deleteRepoReq.KeepWebhook = &keepRepoWebhook
|
||||
if err := apiCli.Repositories.DeleteRepo(deleteRepoReq, authToken); err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -105,14 +105,26 @@ Example:
|
|||
switch len(args) {
|
||||
case 0:
|
||||
if cmd.Flags().Changed("repo") {
|
||||
scalesetRepository, err = resolveRepository(scalesetRepository)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listRepoScaleSetsReq := apiClientRepos.NewListRepoScaleSetsParams()
|
||||
listRepoScaleSetsReq.RepoID = scalesetRepository
|
||||
response, err = apiCli.Repositories.ListRepoScaleSets(listRepoScaleSetsReq, authToken)
|
||||
} else if cmd.Flags().Changed("org") {
|
||||
scalesetOrganization, err = resolveOrganization(scalesetOrganization)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listOrgScaleSetsReq := apiClientOrgs.NewListOrgScaleSetsParams()
|
||||
listOrgScaleSetsReq.OrgID = scalesetOrganization
|
||||
response, err = apiCli.Organizations.ListOrgScaleSets(listOrgScaleSetsReq, authToken)
|
||||
} else if cmd.Flags().Changed("enterprise") {
|
||||
scalesetEnterprise, err = resolveEnterprise(scalesetEnterprise)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listEnterpriseScaleSetsReq := apiClientEnterprises.NewListEnterpriseScaleSetsParams()
|
||||
listEnterpriseScaleSetsReq.EnterpriseID = scalesetEnterprise
|
||||
response, err = apiCli.Enterprises.ListEnterpriseScaleSets(listEnterpriseScaleSetsReq, authToken)
|
||||
|
|
@ -244,16 +256,28 @@ var scaleSetAddCmd = &cobra.Command{
|
|||
var err error
|
||||
var response scalesetPayloadGetter
|
||||
if cmd.Flags().Changed("repo") {
|
||||
scalesetRepository, err = resolveRepository(scalesetRepository)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newRepoScaleSetReq := apiClientRepos.NewCreateRepoScaleSetParams()
|
||||
newRepoScaleSetReq.RepoID = scalesetRepository
|
||||
newRepoScaleSetReq.Body = newScaleSetParams
|
||||
response, err = apiCli.Repositories.CreateRepoScaleSet(newRepoScaleSetReq, authToken)
|
||||
} else if cmd.Flags().Changed("org") {
|
||||
scalesetOrganization, err = resolveOrganization(scalesetOrganization)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newOrgScaleSetReq := apiClientOrgs.NewCreateOrgScaleSetParams()
|
||||
newOrgScaleSetReq.OrgID = scalesetOrganization
|
||||
newOrgScaleSetReq.Body = newScaleSetParams
|
||||
response, err = apiCli.Organizations.CreateOrgScaleSet(newOrgScaleSetReq, authToken)
|
||||
} else if cmd.Flags().Changed("enterprise") {
|
||||
scalesetEnterprise, err = resolveEnterprise(scalesetEnterprise)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newEnterpriseScaleSetReq := apiClientEnterprises.NewCreateEnterpriseScaleSetParams()
|
||||
newEnterpriseScaleSetReq.EnterpriseID = scalesetEnterprise
|
||||
newEnterpriseScaleSetReq.Body = newScaleSetParams
|
||||
|
|
|
|||
100
cmd/garm-cli/cmd/util.go
Normal file
100
cmd/garm-cli/cmd/util.go
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
apiClientEnterprises "github.com/cloudbase/garm/client/enterprises"
|
||||
apiClientOrgs "github.com/cloudbase/garm/client/organizations"
|
||||
apiClientRepos "github.com/cloudbase/garm/client/repositories"
|
||||
)
|
||||
|
||||
func resolveRepository(nameOrID string) (string, error) {
|
||||
if nameOrID == "" {
|
||||
return "", fmt.Errorf("missing repository name or ID")
|
||||
}
|
||||
entityID, err := uuid.Parse(nameOrID)
|
||||
if err == nil {
|
||||
return entityID.String(), nil
|
||||
}
|
||||
|
||||
parts := strings.SplitN(nameOrID, "/", 2)
|
||||
if len(parts) < 2 {
|
||||
// format of friendly name is invalid for a repository.
|
||||
// Return the string as is.
|
||||
return nameOrID, nil
|
||||
}
|
||||
|
||||
listReposReq := apiClientRepos.NewListReposParams()
|
||||
listReposReq.Owner = &parts[0]
|
||||
listReposReq.Name = &parts[1]
|
||||
response, err := apiCli.Repositories.ListRepos(listReposReq, authToken)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(response.Payload) == 0 {
|
||||
return "", fmt.Errorf("repository %s was not found", nameOrID)
|
||||
}
|
||||
|
||||
if len(response.Payload) > 1 {
|
||||
return "", fmt.Errorf("multiple repositories with the name %s exist, please use the repository ID", nameOrID)
|
||||
}
|
||||
return response.Payload[0].ID, nil
|
||||
}
|
||||
|
||||
func resolveOrganization(nameOrID string) (string, error) {
|
||||
if nameOrID == "" {
|
||||
return "", fmt.Errorf("missing organization name or ID")
|
||||
}
|
||||
entityID, err := uuid.Parse(nameOrID)
|
||||
if err == nil {
|
||||
return entityID.String(), nil
|
||||
}
|
||||
|
||||
listOrgsReq := apiClientOrgs.NewListOrgsParams()
|
||||
listOrgsReq.Name = &nameOrID
|
||||
response, err := apiCli.Organizations.ListOrgs(listOrgsReq, authToken)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(response.Payload) == 0 {
|
||||
return "", fmt.Errorf("organization %s was not found", nameOrID)
|
||||
}
|
||||
|
||||
if len(response.Payload) > 1 {
|
||||
return "", fmt.Errorf("multiple organizations with the name %s exist, please use the organization ID", nameOrID)
|
||||
}
|
||||
|
||||
return response.Payload[0].ID, nil
|
||||
}
|
||||
|
||||
func resolveEnterprise(nameOrID string) (string, error) {
|
||||
if nameOrID == "" {
|
||||
return "", fmt.Errorf("missing enterprise name or ID")
|
||||
}
|
||||
entityID, err := uuid.Parse(nameOrID)
|
||||
if err == nil {
|
||||
return entityID.String(), nil
|
||||
}
|
||||
|
||||
listEnterprisesReq := apiClientEnterprises.NewListEnterprisesParams()
|
||||
listEnterprisesReq.Name = &enterpriseName
|
||||
listEnterprisesReq.Endpoint = &enterpriseEndpoint
|
||||
response, err := apiCli.Enterprises.ListEnterprises(listEnterprisesReq, authToken)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(response.Payload) == 0 {
|
||||
return "", fmt.Errorf("enterprise %s was not found", nameOrID)
|
||||
}
|
||||
|
||||
if len(response.Payload) > 1 {
|
||||
return "", fmt.Errorf("multiple enterprises with the name %s exist, please use the enterprise ID", nameOrID)
|
||||
}
|
||||
|
||||
return response.Payload[0].ID, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue