Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit02f6203

Browse files
defelmnqmafredriEdwardAngertdefelmnq
authored
chore(cli): rename build options to ephemeral parameters in cli (#15030)
This PR aims to rename `build-option` to `ephemeral-parameters` based on#10488 conversation.`build-option` has been renamed `ephemeral-parameter` and can be used todefine a value for an ephemeral parameter in the template.`build-options` has been renamed `prompt-ephemeral-parameters` and canbe used to prompt the user to put values for the ephemeral parameters inthe template.---------Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>Co-authored-by: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com>Co-authored-by: defelmnq <yvincent@coder.com>
1 parent512cbf1 commit02f6203

File tree

16 files changed

+270
-58
lines changed

16 files changed

+270
-58
lines changed

‎cli/create.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,8 +370,8 @@ type prepWorkspaceBuildArgs struct {
370370
LastBuildParameters []codersdk.WorkspaceBuildParameter
371371
SourceWorkspaceParameters []codersdk.WorkspaceBuildParameter
372372

373-
PromptBuildOptionsbool
374-
BuildOptions []codersdk.WorkspaceBuildParameter
373+
PromptEphemeralParametersbool
374+
EphemeralParameters []codersdk.WorkspaceBuildParameter
375375

376376
PromptRichParametersbool
377377
RichParameters []codersdk.WorkspaceBuildParameter
@@ -405,8 +405,8 @@ func prepWorkspaceBuild(inv *serpent.Invocation, client *codersdk.Client, args p
405405
resolver:=new(ParameterResolver).
406406
WithLastBuildParameters(args.LastBuildParameters).
407407
WithSourceWorkspaceParameters(args.SourceWorkspaceParameters).
408-
WithPromptBuildOptions(args.PromptBuildOptions).
409-
WithBuildOptions(args.BuildOptions).
408+
WithPromptEphemeralParameters(args.PromptEphemeralParameters).
409+
WithEphemeralParameters(args.EphemeralParameters).
410410
WithPromptRichParameters(args.PromptRichParameters).
411411
WithRichParameters(args.RichParameters).
412412
WithRichParametersFile(parameterFile).

‎cli/parameter.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import (
1515

1616
// workspaceParameterFlags are used by commands processing rich parameters and/or build options.
1717
typeworkspaceParameterFlagsstruct {
18-
promptBuildOptionsbool
19-
buildOptions []string
18+
promptEphemeralParametersbool
19+
20+
ephemeralParameters []string
2021

2122
richParameterFilestring
2223
richParameters []string
@@ -26,23 +27,39 @@ type workspaceParameterFlags struct {
2627
}
2728

2829
func (wpf*workspaceParameterFlags)allOptions() []serpent.Option {
29-
options:=append(wpf.cliBuildOptions(),wpf.cliParameters()...)
30+
options:=append(wpf.cliEphemeralParameters(),wpf.cliParameters()...)
3031
options=append(options,wpf.cliParameterDefaults()...)
3132
returnappend(options,wpf.alwaysPrompt())
3233
}
3334

34-
func (wpf*workspaceParameterFlags)cliBuildOptions() []serpent.Option {
35+
func (wpf*workspaceParameterFlags)cliEphemeralParameters() []serpent.Option {
3536
return serpent.OptionSet{
37+
// Deprecated - replaced with ephemeral-parameter
3638
{
3739
Flag:"build-option",
3840
Env:"CODER_BUILD_OPTION",
3941
Description:`Build option value in the format "name=value".`,
40-
Value:serpent.StringArrayOf(&wpf.buildOptions),
42+
UseInstead: []serpent.Option{{Flag:"ephemeral-parameter"}},
43+
Value:serpent.StringArrayOf(&wpf.ephemeralParameters),
4144
},
45+
// Deprecated - replaced with prompt-ephemeral-parameters
4246
{
4347
Flag:"build-options",
4448
Description:"Prompt for one-time build options defined with ephemeral parameters.",
45-
Value:serpent.BoolOf(&wpf.promptBuildOptions),
49+
UseInstead: []serpent.Option{{Flag:"prompt-ephemeral-parameters"}},
50+
Value:serpent.BoolOf(&wpf.promptEphemeralParameters),
51+
},
52+
{
53+
Flag:"ephemeral-parameter",
54+
Env:"CODER_EPHEMERAL_PARAMETER",
55+
Description:`Set the value of ephemeral parameters defined in the template. The format is "name=value".`,
56+
Value:serpent.StringArrayOf(&wpf.ephemeralParameters),
57+
},
58+
{
59+
Flag:"prompt-ephemeral-parameters",
60+
Env:"CODER_PROMPT_EPHEMERAL_PARAMETERS",
61+
Description:"Prompt to set values of ephemeral parameters defined in the template. If a value has been set via --ephemeral-parameter, it will not be prompted for.",
62+
Value:serpent.BoolOf(&wpf.promptEphemeralParameters),
4663
},
4764
}
4865
}

‎cli/parameterresolver.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ type ParameterResolver struct {
2929
richParameters []codersdk.WorkspaceBuildParameter
3030
richParametersDefaultsmap[string]string
3131
richParametersFilemap[string]string
32-
buildOptions []codersdk.WorkspaceBuildParameter
32+
ephemeralParameters []codersdk.WorkspaceBuildParameter
3333

34-
promptRichParametersbool
35-
promptBuildOptionsbool
34+
promptRichParametersbool
35+
promptEphemeralParametersbool
3636
}
3737

3838
func (pr*ParameterResolver)WithLastBuildParameters(params []codersdk.WorkspaceBuildParameter)*ParameterResolver {
@@ -50,8 +50,8 @@ func (pr *ParameterResolver) WithRichParameters(params []codersdk.WorkspaceBuild
5050
returnpr
5151
}
5252

53-
func (pr*ParameterResolver)WithBuildOptions(params []codersdk.WorkspaceBuildParameter)*ParameterResolver {
54-
pr.buildOptions=params
53+
func (pr*ParameterResolver)WithEphemeralParameters(params []codersdk.WorkspaceBuildParameter)*ParameterResolver {
54+
pr.ephemeralParameters=params
5555
returnpr
5656
}
5757

@@ -75,8 +75,8 @@ func (pr *ParameterResolver) WithPromptRichParameters(promptRichParameters bool)
7575
returnpr
7676
}
7777

78-
func (pr*ParameterResolver)WithPromptBuildOptions(promptBuildOptionsbool)*ParameterResolver {
79-
pr.promptBuildOptions=promptBuildOptions
78+
func (pr*ParameterResolver)WithPromptEphemeralParameters(promptEphemeralParametersbool)*ParameterResolver {
79+
pr.promptEphemeralParameters=promptEphemeralParameters
8080
returnpr
8181
}
8282

@@ -128,16 +128,16 @@ nextRichParameter:
128128
resolved=append(resolved,richParameter)
129129
}
130130

131-
nextBuildOption:
132-
for_,buildOption:=rangepr.buildOptions {
131+
nextEphemeralParameter:
132+
for_,ephemeralParameter:=rangepr.ephemeralParameters {
133133
fori,r:=rangeresolved {
134-
ifr.Name==buildOption.Name {
135-
resolved[i].Value=buildOption.Value
136-
continuenextBuildOption
134+
ifr.Name==ephemeralParameter.Name {
135+
resolved[i].Value=ephemeralParameter.Value
136+
continuenextEphemeralParameter
137137
}
138138
}
139139

140-
resolved=append(resolved,buildOption)
140+
resolved=append(resolved,ephemeralParameter)
141141
}
142142
returnresolved
143143
}
@@ -209,8 +209,8 @@ func (pr *ParameterResolver) verifyConstraints(resolved []codersdk.WorkspaceBuil
209209
returntemplateVersionParametersNotFound(r.Name,templateVersionParameters)
210210
}
211211

212-
iftvp.Ephemeral&&!pr.promptBuildOptions&&findWorkspaceBuildParameter(tvp.Name,pr.buildOptions)==nil {
213-
returnxerrors.Errorf("ephemeral parameter %q can be used only with --build-options or --build-option flag",r.Name)
212+
iftvp.Ephemeral&&!pr.promptEphemeralParameters&&findWorkspaceBuildParameter(tvp.Name,pr.ephemeralParameters)==nil {
213+
returnxerrors.Errorf("ephemeral parameter %q can be used only with --prompt-ephemeral-parameters or --ephemeral-parameter flag",r.Name)
214214
}
215215

216216
if!tvp.Mutable&&action!=WorkspaceCreate {
@@ -231,7 +231,7 @@ func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuild
231231
firstTimeUse:=pr.isFirstTimeUse(tvp.Name)
232232
promptParameterOption:=pr.isLastBuildParameterInvalidOption(tvp)
233233

234-
if (tvp.Ephemeral&&pr.promptBuildOptions)||
234+
if (tvp.Ephemeral&&pr.promptEphemeralParameters)||
235235
(action==WorkspaceCreate&&tvp.Required)||
236236
(action==WorkspaceCreate&&!tvp.Ephemeral)||
237237
(action==WorkspaceUpdate&&promptParameterOption)||

‎cli/restart_test.go

Lines changed: 110 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,115 @@ func TestRestart(t *testing.T) {
6060
require.NoError(t,err,"execute failed")
6161
})
6262

63-
t.Run("BuildOptions",func(t*testing.T) {
63+
t.Run("PromptEphemeralParameters",func(t*testing.T) {
64+
t.Parallel()
65+
66+
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})
67+
owner:=coderdtest.CreateFirstUser(t,client)
68+
member,memberUser:=coderdtest.CreateAnotherUser(t,client,owner.OrganizationID)
69+
version:=coderdtest.CreateTemplateVersion(t,client,owner.OrganizationID,echoResponses)
70+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
71+
template:=coderdtest.CreateTemplate(t,client,owner.OrganizationID,version.ID)
72+
workspace:=coderdtest.CreateWorkspace(t,member,template.ID)
73+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspace.LatestBuild.ID)
74+
75+
inv,root:=clitest.New(t,"restart",workspace.Name,"--prompt-ephemeral-parameters")
76+
clitest.SetupConfig(t,member,root)
77+
doneChan:=make(chanstruct{})
78+
pty:=ptytest.New(t).Attach(inv)
79+
gofunc() {
80+
deferclose(doneChan)
81+
err:=inv.Run()
82+
assert.NoError(t,err)
83+
}()
84+
85+
matches:= []string{
86+
ephemeralParameterDescription,ephemeralParameterValue,
87+
"Restart workspace?","yes",
88+
"Stopping workspace","",
89+
"Starting workspace","",
90+
"workspace has been restarted","",
91+
}
92+
fori:=0;i<len(matches);i+=2 {
93+
match:=matches[i]
94+
value:=matches[i+1]
95+
pty.ExpectMatch(match)
96+
97+
ifvalue!="" {
98+
pty.WriteLine(value)
99+
}
100+
}
101+
<-doneChan
102+
103+
// Verify if build option is set
104+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitShort)
105+
defercancel()
106+
107+
workspace,err:=client.WorkspaceByOwnerAndName(ctx,memberUser.ID.String(),workspace.Name, codersdk.WorkspaceOptions{})
108+
require.NoError(t,err)
109+
actualParameters,err:=client.WorkspaceBuildParameters(ctx,workspace.LatestBuild.ID)
110+
require.NoError(t,err)
111+
require.Contains(t,actualParameters, codersdk.WorkspaceBuildParameter{
112+
Name:ephemeralParameterName,
113+
Value:ephemeralParameterValue,
114+
})
115+
})
116+
117+
t.Run("EphemeralParameterFlags",func(t*testing.T) {
118+
t.Parallel()
119+
120+
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})
121+
owner:=coderdtest.CreateFirstUser(t,client)
122+
member,memberUser:=coderdtest.CreateAnotherUser(t,client,owner.OrganizationID)
123+
version:=coderdtest.CreateTemplateVersion(t,client,owner.OrganizationID,echoResponses)
124+
coderdtest.AwaitTemplateVersionJobCompleted(t,client,version.ID)
125+
template:=coderdtest.CreateTemplate(t,client,owner.OrganizationID,version.ID)
126+
workspace:=coderdtest.CreateWorkspace(t,member,template.ID)
127+
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspace.LatestBuild.ID)
128+
129+
inv,root:=clitest.New(t,"restart",workspace.Name,
130+
"--ephemeral-parameter",fmt.Sprintf("%s=%s",ephemeralParameterName,ephemeralParameterValue))
131+
clitest.SetupConfig(t,member,root)
132+
doneChan:=make(chanstruct{})
133+
pty:=ptytest.New(t).Attach(inv)
134+
gofunc() {
135+
deferclose(doneChan)
136+
err:=inv.Run()
137+
assert.NoError(t,err)
138+
}()
139+
140+
matches:= []string{
141+
"Restart workspace?","yes",
142+
"Stopping workspace","",
143+
"Starting workspace","",
144+
"workspace has been restarted","",
145+
}
146+
fori:=0;i<len(matches);i+=2 {
147+
match:=matches[i]
148+
value:=matches[i+1]
149+
pty.ExpectMatch(match)
150+
151+
ifvalue!="" {
152+
pty.WriteLine(value)
153+
}
154+
}
155+
<-doneChan
156+
157+
// Verify if build option is set
158+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitShort)
159+
defercancel()
160+
161+
workspace,err:=client.WorkspaceByOwnerAndName(ctx,memberUser.ID.String(),workspace.Name, codersdk.WorkspaceOptions{})
162+
require.NoError(t,err)
163+
actualParameters,err:=client.WorkspaceBuildParameters(ctx,workspace.LatestBuild.ID)
164+
require.NoError(t,err)
165+
require.Contains(t,actualParameters, codersdk.WorkspaceBuildParameter{
166+
Name:ephemeralParameterName,
167+
Value:ephemeralParameterValue,
168+
})
169+
})
170+
171+
t.Run("with deprecated build-options flag",func(t*testing.T) {
64172
t.Parallel()
65173

66174
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})
@@ -114,7 +222,7 @@ func TestRestart(t *testing.T) {
114222
})
115223
})
116224

117-
t.Run("BuildOptionFlags",func(t*testing.T) {
225+
t.Run("with deprecated build-option flag",func(t*testing.T) {
118226
t.Parallel()
119227

120228
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})

‎cli/start.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func buildWorkspaceStartRequest(inv *serpent.Invocation, client *codersdk.Client
9696
return codersdk.CreateWorkspaceBuildRequest{},err
9797
}
9898

99-
buildOptions,err:=asWorkspaceBuildParameters(parameterFlags.buildOptions)
99+
ephemeralParameters,err:=asWorkspaceBuildParameters(parameterFlags.ephemeralParameters)
100100
iferr!=nil {
101101
return codersdk.CreateWorkspaceBuildRequest{},xerrors.Errorf("unable to parse build options: %w",err)
102102
}
@@ -117,12 +117,12 @@ func buildWorkspaceStartRequest(inv *serpent.Invocation, client *codersdk.Client
117117
NewWorkspaceName:workspace.Name,
118118
LastBuildParameters:lastBuildParameters,
119119

120-
PromptBuildOptions:parameterFlags.promptBuildOptions,
121-
BuildOptions:buildOptions,
122-
PromptRichParameters:parameterFlags.promptRichParameters,
123-
RichParameters:cliRichParameters,
124-
RichParameterFile:parameterFlags.richParameterFile,
125-
RichParameterDefaults:cliRichParameterDefaults,
120+
PromptEphemeralParameters:parameterFlags.promptEphemeralParameters,
121+
EphemeralParameters:ephemeralParameters,
122+
PromptRichParameters:parameterFlags.promptRichParameters,
123+
RichParameters:cliRichParameters,
124+
RichParameterFile:parameterFlags.richParameterFile,
125+
RichParameterDefaults:cliRichParameterDefaults,
126126
})
127127
iferr!=nil {
128128
return codersdk.CreateWorkspaceBuildRequest{},err

‎cli/start_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func TestStart(t *testing.T) {
115115
workspaceBuild:=coderdtest.CreateWorkspaceBuild(t,client,workspace,database.WorkspaceTransitionStop)
116116
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspaceBuild.ID)
117117

118-
inv,root:=clitest.New(t,"start",workspace.Name,"--build-options")
118+
inv,root:=clitest.New(t,"start",workspace.Name,"--prompt-ephemeral-parameters")
119119
clitest.SetupConfig(t,member,root)
120120
doneChan:=make(chanstruct{})
121121
pty:=ptytest.New(t).Attach(inv)
@@ -140,7 +140,7 @@ func TestStart(t *testing.T) {
140140
}
141141
<-doneChan
142142

143-
// Verify ifbuild option is set
143+
// Verify ifephemeral parameter is set
144144
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitShort)
145145
defercancel()
146146

@@ -154,7 +154,7 @@ func TestStart(t *testing.T) {
154154
})
155155
})
156156

157-
t.Run("BuildOptionFlags",func(t*testing.T) {
157+
t.Run("EphemeralParameterFlags",func(t*testing.T) {
158158
t.Parallel()
159159

160160
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerDaemon:true})
@@ -170,7 +170,7 @@ func TestStart(t *testing.T) {
170170
coderdtest.AwaitWorkspaceBuildJobCompleted(t,client,workspaceBuild.ID)
171171

172172
inv,root:=clitest.New(t,"start",workspace.Name,
173-
"--build-option",fmt.Sprintf("%s=%s",ephemeralParameterName,ephemeralParameterValue))
173+
"--ephemeral-parameter",fmt.Sprintf("%s=%s",ephemeralParameterName,ephemeralParameterValue))
174174
clitest.SetupConfig(t,member,root)
175175
doneChan:=make(chanstruct{})
176176
pty:=ptytest.New(t).Attach(inv)
@@ -183,7 +183,7 @@ func TestStart(t *testing.T) {
183183
pty.ExpectMatch("workspace has been started")
184184
<-doneChan
185185

186-
// Verify ifbuild option is set
186+
// Verify ifephemeral parameter is set
187187
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitShort)
188188
defercancel()
189189

‎cli/testdata/coder_restart_--help.golden

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,27 @@ OPTIONS:
1212

1313
--build-option string-array, $CODER_BUILD_OPTION
1414
Build option value in the format "name=value".
15+
DEPRECATED: Use --ephemeral-parameter instead.
1516

1617
--build-options bool
1718
Prompt for one-time build options defined with ephemeral parameters.
19+
DEPRECATED: Use --prompt-ephemeral-parameters instead.
20+
21+
--ephemeral-parameter string-array, $CODER_EPHEMERAL_PARAMETER
22+
Set the value of ephemeral parameters defined in the template. The
23+
format is "name=value".
1824

1925
--parameter string-array, $CODER_RICH_PARAMETER
2026
Rich parameter value in the format "name=value".
2127

2228
--parameter-default string-array, $CODER_RICH_PARAMETER_DEFAULT
2329
Rich parameter default values in the format "name=value".
2430

31+
--prompt-ephemeral-parameters bool, $CODER_PROMPT_EPHEMERAL_PARAMETERS
32+
Prompt to set values of ephemeral parameters defined in the template.
33+
If a value has been set via --ephemeral-parameter, it will not be
34+
prompted for.
35+
2536
--rich-parameter-file string, $CODER_RICH_PARAMETER_FILE
2637
Specify a file path with values for rich parameters defined in the
2738
template. The file should be in YAML format, containing key-value

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp