mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat(cli): unhide support bundle cmd (#12745)
* chore(cli): add another test to ensure no secret leakage * feat(cli): unhide support bundle cmd
This commit is contained in:
+1
-2
@@ -30,7 +30,6 @@ func (r *RootCmd) support() *serpent.Command {
|
||||
Handler: func(inv *serpent.Invocation) error {
|
||||
return inv.Command.HelpHandler(inv)
|
||||
},
|
||||
Hidden: true, // TODO: un-hide once the must-haves from #12160 are completed.
|
||||
Children: []*serpent.Command{
|
||||
r.supportBundle(),
|
||||
},
|
||||
@@ -40,7 +39,7 @@ func (r *RootCmd) support() *serpent.Command {
|
||||
|
||||
var supportBundleBlurb = cliui.Bold("This will collect the following information:\n") +
|
||||
` - Coder deployment version
|
||||
- Coder deployment Configuration (sanitized), including enabled experiments
|
||||
- Coder deployment Configuration (sanitized), including enabled experiments
|
||||
- Coder deployment health snapshot
|
||||
- Coder deployment Network troubleshooting information
|
||||
- Workspace configuration, parameters, and build logs
|
||||
|
||||
+20
-4
@@ -39,15 +39,19 @@ func TestSupportBundle(t *testing.T) {
|
||||
t.Run("Workspace", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
client, db := coderdtest.NewWithDatabase(t, nil)
|
||||
var dc codersdk.DeploymentConfig
|
||||
secretValue := uuid.NewString()
|
||||
seedSecretDeploymentOptions(t, &dc, secretValue)
|
||||
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
|
||||
DeploymentValues: dc.Values,
|
||||
})
|
||||
owner := coderdtest.CreateFirstUser(t, client)
|
||||
randSecretValue := uuid.NewString()
|
||||
r := dbfake.WorkspaceBuild(t, db, database.Workspace{
|
||||
OrganizationID: owner.OrganizationID,
|
||||
OwnerID: owner.UserID,
|
||||
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
|
||||
// This should not show up in the bundle output
|
||||
agents[0].Env["SECRET_VALUE"] = randSecretValue
|
||||
agents[0].Env["SECRET_VALUE"] = secretValue
|
||||
return agents
|
||||
}).Do()
|
||||
ws, err := client.Workspace(ctx, r.Workspace.ID)
|
||||
@@ -89,7 +93,7 @@ func TestSupportBundle(t *testing.T) {
|
||||
clitest.SetupConfig(t, client, root)
|
||||
err = inv.Run()
|
||||
require.NoError(t, err)
|
||||
assertBundleContents(t, path, randSecretValue)
|
||||
assertBundleContents(t, path, secretValue)
|
||||
})
|
||||
|
||||
t.Run("NoWorkspace", func(t *testing.T) {
|
||||
@@ -263,3 +267,15 @@ func assertDoesNotContain(t *testing.T, f *zip.File, vals ...string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func seedSecretDeploymentOptions(t *testing.T, dc *codersdk.DeploymentConfig, secretValue string) {
|
||||
t.Helper()
|
||||
if dc == nil {
|
||||
dc = &codersdk.DeploymentConfig{}
|
||||
}
|
||||
for _, opt := range dc.Options {
|
||||
if codersdk.IsSecretDeploymentOption(opt) {
|
||||
opt.Value.Set(secretValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
@@ -46,6 +46,8 @@ SUBCOMMANDS:
|
||||
stat Show resource usage for the current workspace.
|
||||
state Manually manage Terraform state to fix broken workspaces
|
||||
stop Stop a workspace
|
||||
support Commands for troubleshooting issues with a Coder
|
||||
deployment.
|
||||
templates Manage templates
|
||||
tokens Manage personal access tokens
|
||||
unfavorite Remove a workspace from your favorites
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
coder v0.0.0-devel
|
||||
|
||||
USAGE:
|
||||
coder support
|
||||
|
||||
Commands for troubleshooting issues with a Coder deployment.
|
||||
|
||||
SUBCOMMANDS:
|
||||
bundle Generate a support bundle to troubleshoot issues connecting to a
|
||||
workspace.
|
||||
|
||||
———
|
||||
Run `coder --help` for a list of global options.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
coder v0.0.0-devel
|
||||
|
||||
USAGE:
|
||||
coder support bundle [flags] <workspace> [<agent>]
|
||||
|
||||
Generate a support bundle to troubleshoot issues connecting to a workspace.
|
||||
|
||||
This command generates a file containing detailed troubleshooting information
|
||||
about the Coder deployment and workspace connections. You must specify a
|
||||
single workspace (and optionally an agent name).
|
||||
|
||||
OPTIONS:
|
||||
-O, --output-file string, $CODER_SUPPORT_BUNDLE_OUTPUT_FILE
|
||||
File path for writing the generated support bundle. Defaults to
|
||||
coder-support-$(date +%s).zip.
|
||||
|
||||
--url-override string, $CODER_SUPPORT_BUNDLE_URL_OVERRIDE
|
||||
Override the URL to your Coder deployment. This may be useful, for
|
||||
example, if you need to troubleshoot a specific Coder replica.
|
||||
|
||||
-y, --yes bool
|
||||
Bypass prompts.
|
||||
|
||||
———
|
||||
Run `coder --help` for a list of global options.
|
||||
Reference in New Issue
Block a user