diff --git a/cmd/ocm/list/cmd.go b/cmd/ocm/list/cmd.go index ea3a5890..48ccb340 100644 --- a/cmd/ocm/list/cmd.go +++ b/cmd/ocm/list/cmd.go @@ -22,6 +22,7 @@ import ( "github.com/openshift-online/ocm-cli/cmd/ocm/list/org" "github.com/openshift-online/ocm-cli/cmd/ocm/list/quota" "github.com/openshift-online/ocm-cli/cmd/ocm/list/region" + "github.com/openshift-online/ocm-cli/cmd/ocm/list/rhRegion" "github.com/openshift-online/ocm-cli/cmd/ocm/list/upgradepolicy" "github.com/openshift-online/ocm-cli/cmd/ocm/list/user" "github.com/openshift-online/ocm-cli/cmd/ocm/list/version" @@ -46,4 +47,5 @@ func init() { Cmd.AddCommand(upgradepolicy.Cmd) Cmd.AddCommand(user.Cmd) Cmd.AddCommand(version.Cmd) + Cmd.AddCommand(rhRegion.Cmd) } diff --git a/cmd/ocm/list/rhRegion/cmd.go b/cmd/ocm/list/rhRegion/cmd.go new file mode 100644 index 00000000..aee3d60a --- /dev/null +++ b/cmd/ocm/list/rhRegion/cmd.go @@ -0,0 +1,41 @@ +package rhRegion + +import ( + "fmt" + sdk "github.com/openshift-online/ocm-sdk-go" + + "github.com/openshift-online/ocm-cli/pkg/config" + "github.com/spf13/cobra" +) + +var Cmd = &cobra.Command{ + Use: "rh-regions", + Short: "List available OCM regions", + Long: "List available OCM regions", + Example: ` # List all supported OCM regions +ocm list rh-regions`, + RunE: run, + Hidden: true, +} + +func run(cmd *cobra.Command, argv []string) error { + // Load the configuration file: + cfg, err := config.Load() + if err != nil { + return fmt.Errorf("Can't load config file: %v", err) + } + if cfg == nil { + return fmt.Errorf("Not logged in, run the 'login' command") + } + + regions, err := sdk.GetRhRegions(cfg.URL) + if err != nil { + return fmt.Errorf("Failed to get OCM regions: %w", err) + } + + for regionName := range regions { + fmt.Println(regionName) + } + return nil + +} diff --git a/cmd/ocm/login/cmd.go b/cmd/ocm/login/cmd.go index 2f9f6b5c..b5798fd4 100644 --- a/cmd/ocm/login/cmd.go +++ b/cmd/ocm/login/cmd.go @@ -59,6 +59,7 @@ var args struct { token string user string password string + rhRegion string insecure bool persistent bool useAuthCode bool @@ -115,6 +116,13 @@ func init() { "URL of the API gateway. The value can be the complete URL or an alias. The "+ "valid aliases are 'production', 'staging', 'integration' and their shorthands.", ) + flags.StringVar( + &args.rhRegion, + "rh-region", + "", + "OCM region identifier. Takes precedence over the --url flag", + ) + flags.MarkHidden("rh-region") flags.StringVar( &args.token, "token", @@ -322,6 +330,16 @@ func run(cmd *cobra.Command, argv []string) error { cfg.User = "" cfg.Password = "" } + + // If an OCM region is provided, update the config URL with the SDK generated URL + if args.rhRegion != "" { + regValue, err := sdk.GetRhRegion(args.url, args.rhRegion) + if err != nil { + return fmt.Errorf("Can't find region: %w", err) + } + cfg.URL = fmt.Sprintf("https://%s", regValue.URL) + } + err = config.Save(cfg) if err != nil { return fmt.Errorf("Can't save config file: %v", err) diff --git a/go.mod b/go.mod index 2e60a6d3..9e0b67b7 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/openshift-online/ocm-cli -go 1.18 +go 1.21 require ( github.com/AlecAivazis/survey/v2 v2.3.7 @@ -12,7 +12,7 @@ require ( github.com/nwidger/jsoncolor v0.3.2 github.com/onsi/ginkgo/v2 v2.11.0 github.com/onsi/gomega v1.27.8 - github.com/openshift-online/ocm-sdk-go v0.1.395 + github.com/openshift-online/ocm-sdk-go v0.1.398 github.com/openshift/rosa v1.2.24 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 github.com/spf13/cobra v1.7.0 diff --git a/go.sum b/go.sum index 1e584dd1..7fdfe2e4 100644 --- a/go.sum +++ b/go.sum @@ -123,6 +123,7 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -258,6 +259,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -267,6 +269,7 @@ github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ= +github.com/lib/pq v1.10.5/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/m1/go-generate-password v0.2.0 h1:T4IJy8tzv9Svjn7obm+tNmfcWd31WYeTgNxH2BhliyM= github.com/m1/go-generate-password v0.2.0/go.mod h1:QLABVln3jsxIksMUjRv4UXi6f+1cQ3rnfj28nADpCgk= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -309,8 +312,8 @@ github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= -github.com/openshift-online/ocm-sdk-go v0.1.395 h1:Lt4IJLHy+ArpCprZQqh2G8ifQr3wOP1l7yziU/5l7+Q= -github.com/openshift-online/ocm-sdk-go v0.1.395/go.mod h1:tke8vKcE7eHKyRbkJv6qo4ljo919zhx04uyQTcgF5cQ= +github.com/openshift-online/ocm-sdk-go v0.1.398 h1:6C1mDcPxzG4jSduOaWixTTI5gSEO+Jm7OW/00jVoWGI= +github.com/openshift-online/ocm-sdk-go v0.1.398/go.mod h1:tke8vKcE7eHKyRbkJv6qo4ljo919zhx04uyQTcgF5cQ= github.com/openshift/rosa v1.2.24 h1:vv0yYnWHx6CCPEAau/0rS54P2ksaf+uWXb1TQPWxiYE= github.com/openshift/rosa v1.2.24/go.mod h1:MVXB27O3PF8WoOic23I03mmq6/9kVxpFx6FKyLMCyrQ= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -384,6 +387,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -456,6 +460,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=