mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: implement global flag for org selection (#12276)
* feat: implement global flag for org selection Any command can use '-z' to override org context
This commit is contained in:
@@ -42,4 +42,35 @@ func TestCurrentOrganization(t *testing.T) {
|
||||
require.NoError(t, <-errC)
|
||||
pty.ExpectMatch(first.OrganizationID.String())
|
||||
})
|
||||
|
||||
t.Run("UsingFlag", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ownerClient := coderdtest.New(t, nil)
|
||||
first := coderdtest.CreateFirstUser(t, ownerClient)
|
||||
// Owner is required to make orgs
|
||||
client, _ := coderdtest.CreateAnotherUser(t, ownerClient, first.OrganizationID, rbac.RoleOwner())
|
||||
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
orgs := map[string]codersdk.Organization{
|
||||
"foo": {},
|
||||
"bar": {},
|
||||
}
|
||||
for orgName := range orgs {
|
||||
org, err := client.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
|
||||
Name: orgName,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
orgs[orgName] = org
|
||||
}
|
||||
|
||||
inv, root := clitest.New(t, "organizations", "show", "current", "--only-id", "-z=bar")
|
||||
clitest.SetupConfig(t, client, root)
|
||||
pty := ptytest.New(t).Attach(inv)
|
||||
errC := make(chan error)
|
||||
go func() {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
pty.ExpectMatch(orgs["bar"].ID.String())
|
||||
})
|
||||
}
|
||||
|
||||
+40
-30
@@ -51,20 +51,21 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
varURL = "url"
|
||||
varToken = "token"
|
||||
varAgentToken = "agent-token"
|
||||
varAgentTokenFile = "agent-token-file"
|
||||
varAgentURL = "agent-url"
|
||||
varHeader = "header"
|
||||
varHeaderCommand = "header-command"
|
||||
varNoOpen = "no-open"
|
||||
varNoVersionCheck = "no-version-warning"
|
||||
varNoFeatureWarning = "no-feature-warning"
|
||||
varForceTty = "force-tty"
|
||||
varVerbose = "verbose"
|
||||
varDisableDirect = "disable-direct-connections"
|
||||
notLoggedInMessage = "You are not logged in. Try logging in using 'coder login <url>'."
|
||||
varURL = "url"
|
||||
varToken = "token"
|
||||
varAgentToken = "agent-token"
|
||||
varAgentTokenFile = "agent-token-file"
|
||||
varAgentURL = "agent-url"
|
||||
varHeader = "header"
|
||||
varHeaderCommand = "header-command"
|
||||
varNoOpen = "no-open"
|
||||
varNoVersionCheck = "no-version-warning"
|
||||
varNoFeatureWarning = "no-feature-warning"
|
||||
varForceTty = "force-tty"
|
||||
varVerbose = "verbose"
|
||||
varOrganizationSelect = "organization"
|
||||
varDisableDirect = "disable-direct-connections"
|
||||
notLoggedInMessage = "You are not logged in. Try logging in using 'coder login <url>'."
|
||||
|
||||
envNoVersionCheck = "CODER_NO_VERSION_WARNING"
|
||||
envNoFeatureWarning = "CODER_NO_FEATURE_WARNING"
|
||||
@@ -434,6 +435,14 @@ func (r *RootCmd) Command(subcommands []*clibase.Cmd) (*clibase.Cmd, error) {
|
||||
Value: clibase.StringOf(&r.globalConfig),
|
||||
Group: globalGroup,
|
||||
},
|
||||
{
|
||||
Flag: varOrganizationSelect,
|
||||
FlagShorthand: "z",
|
||||
Env: "CODER_ORGANIZATION",
|
||||
Description: "Select which organization (uuid or name) to use This overrides what is present in the config file.",
|
||||
Value: clibase.StringOf(&r.organizationSelect),
|
||||
Group: globalGroup,
|
||||
},
|
||||
{
|
||||
Flag: "version",
|
||||
// This was requested by a customer to assist with their migration.
|
||||
@@ -455,20 +464,21 @@ func (r *RootCmd) Command(subcommands []*clibase.Cmd) (*clibase.Cmd, error) {
|
||||
|
||||
// RootCmd contains parameters and helpers useful to all commands.
|
||||
type RootCmd struct {
|
||||
clientURL *url.URL
|
||||
token string
|
||||
globalConfig string
|
||||
header []string
|
||||
headerCommand string
|
||||
agentToken string
|
||||
agentTokenFile string
|
||||
agentURL *url.URL
|
||||
forceTTY bool
|
||||
noOpen bool
|
||||
verbose bool
|
||||
versionFlag bool
|
||||
disableDirect bool
|
||||
debugHTTP bool
|
||||
clientURL *url.URL
|
||||
token string
|
||||
globalConfig string
|
||||
header []string
|
||||
headerCommand string
|
||||
agentToken string
|
||||
agentTokenFile string
|
||||
agentURL *url.URL
|
||||
forceTTY bool
|
||||
noOpen bool
|
||||
verbose bool
|
||||
organizationSelect string
|
||||
versionFlag bool
|
||||
disableDirect bool
|
||||
debugHTTP bool
|
||||
|
||||
noVersionCheck bool
|
||||
noFeatureWarning bool
|
||||
@@ -701,8 +711,8 @@ func (r *RootCmd) createAgentClient() (*agentsdk.Client, error) {
|
||||
// CurrentOrganization returns the currently active organization for the authenticated user.
|
||||
func CurrentOrganization(r *RootCmd, inv *clibase.Invocation, client *codersdk.Client) (codersdk.Organization, error) {
|
||||
conf := r.createConfig()
|
||||
selected := ""
|
||||
if conf.Organization().Exists() {
|
||||
selected := r.organizationSelect
|
||||
if selected == "" && conf.Organization().Exists() {
|
||||
org, err := conf.Organization().Read()
|
||||
if err != nil {
|
||||
return codersdk.Organization{}, fmt.Errorf("read selected organization from config file %q: %w", conf.Organization(), err)
|
||||
|
||||
Vendored
+4
@@ -82,6 +82,10 @@ variables or flags.
|
||||
--no-version-warning bool, $CODER_NO_VERSION_WARNING
|
||||
Suppress warning when client and server versions do not match.
|
||||
|
||||
-z, --organization string, $CODER_ORGANIZATION
|
||||
Select which organization (uuid or name) to use This overrides what is
|
||||
present in the config file.
|
||||
|
||||
--token string, $CODER_SESSION_TOKEN
|
||||
Specify an authentication token. For security reasons setting
|
||||
CODER_SESSION_TOKEN is preferred.
|
||||
|
||||
+10
@@ -130,6 +130,16 @@ Suppress warnings about unlicensed features.
|
||||
|
||||
Suppress warning when client and server versions do not match.
|
||||
|
||||
### -z, --organization
|
||||
|
||||
| | |
|
||||
| ----------- | -------------------------------- |
|
||||
| Type | <code>string</code> |
|
||||
| Environment | <code>$CODER_ORGANIZATION</code> |
|
||||
|
||||
Select which organization (uuid or name) to use This overrides what is present
|
||||
in the config file.
|
||||
|
||||
### --token
|
||||
|
||||
| | |
|
||||
|
||||
+4
@@ -48,6 +48,10 @@ variables or flags.
|
||||
--no-version-warning bool, $CODER_NO_VERSION_WARNING
|
||||
Suppress warning when client and server versions do not match.
|
||||
|
||||
-z, --organization string, $CODER_ORGANIZATION
|
||||
Select which organization (uuid or name) to use This overrides what is
|
||||
present in the config file.
|
||||
|
||||
--token string, $CODER_SESSION_TOKEN
|
||||
Specify an authentication token. For security reasons setting
|
||||
CODER_SESSION_TOKEN is preferred.
|
||||
|
||||
Reference in New Issue
Block a user