10000 Refactor reading params into a separate module · coder/coder@dc80543 · GitHub
[go: up one dir, main page]

Skip to content

Commit dc80543

Browse files
committed
Refactor reading params into a separate module
1 parent e69ae31 commit dc80543

File tree

4 files changed

+64
-43
lines changed

4 files changed

+64
-43
lines changed

cli/create.go

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ package cli
22

33
import (
44
"fmt"
5-
"os"
65
"time"
76

87
"github.com/spf13/cobra"
98
"golang.org/x/exp/slices"
109
"golang.org/x/xerrors"
11-
"gopkg.in/yaml.v3"
1210

1311
"github.com/coder/coder/cli/cliflag"
1412
"github.com/coder/coder/cli/cliui"
@@ -120,17 +118,10 @@ func create() *cobra.Command {
120118
return err
121119
}
122120

123-
parameterValues := make(map[string]string)
124-
121+
var parameterMap map[string]string
125122
if parameterFile != "" {
126-
parameterFileContents, err := os.ReadFile(parameterFile)
127-
128-
if err != nil {
129-
return err
130-
}
131-
132-
err = yaml.Unmarshal(parameterFileContents, &parameterValues)
133-
123+
_, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("Attempting to read the variables from the parameter file.")+"\r\n")
124+
parameterMap, err = createParameterMapFromFile(parameterFile)
134125
if err != nil {
135126
return err
136127
}
@@ -146,17 +137,7 @@ func create() *cobra.Command {
146137
_, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("This template has customizable parameters. Values can be changed after create, but may have unintended side effects (like data loss).")+"\r\n")
147138
disclaimerPrinted = true
148139
}
149-
150-
var parameterValue string
151-
if parameterFile != "" {
152-
if parameterValues[parameterSchema.Name] == "" {
153-
return xerrors.Errorf("Parameter value absent in parameter file for %q!", parameterSchema.Name)
154-
}
155-
parameterValue = parameterValues[parameterSchema.Name]
156-
} else {
157-
parameterValue, err = cliui.ParameterSchema(cmd, parameterSchema)
158-
}
159-
140+
parameterValue, err := getParameterValueFromMapOrInput(cmd, parameterMap, parameterSchema)
160141
if err != nil {
161142
return err
162143
}

cli/parameter.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package cli
2+
3+
import (
4+
"os"
5+
6+
"golang.org/x/xerrors"
7+
"gopkg.in/yaml.v3"
8+
9+
"github.com/coder/coder/cli/cliui"
10+
"github.com/coder/coder/codersdk"
11+
"github.com/spf13/cobra"
12+
)
13+
14+
// Reads a YAML file and populates a string -> string map.
15+
// Throws an error if the file name is empty.
16+
func createParameterMapFromFile(parameterFile string) (map[string]string, error) {
17+
if parameterFile != "" {
18+
parameter D7AE Map := make(map[string]string)
19+
20+
parameterFileContents, err := os.ReadFile(parameterFile)
21+
22+
if err != nil {
23+
return nil, err
24+
}
25+
26+
err = yaml.Unmarshal(parameterFileContents, &parameterMap)
27+
28+
if err != nil {
29+
return nil, err
30+
}
31+
32+
return parameterMap, nil
33+
}
34+
35+
return nil, xerrors.Errorf("Parameter file name is not specified")
36+
}
37+
38+
// Returns a parameter value from a given map, if the map exists, else takes input from the user.
39+
// Throws an error if the map exists but does not include a value for the parameter.
40+
func getParameterValueFromMapOrInput(cmd *cobra.Command, parameterMap map[string]string, parameterSchema codersdk.TemplateVersionParameterSchema) (string, error) {
41+
var parameterValue string
42+
if parameterMap != nil {
43+
var ok bool
44+
parameterValue, ok = parameterMap[parameterSchema.Name]
45+
if !ok {
46+
return "", xerrors.Errorf("Parameter value absent in parameter file for %q!", parameterSchema.Name)
47+
}
48+
} else {
49+
var err error
50+
parameterValue, err = cliui.ParameterSchema(cmd, parameterSchema)
51+
if err != nil {
52+
return "", err
53+
}
54+
}
55+
return parameterValue, nil
56+
}

cli/templatecreate.go

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/briandowns/spinner"
1212
"github.com/spf13/cobra"
1313
"golang.org/x/xerrors"
14-
"gopkg.in/yaml.v3"
1514

1615
"github.com/coder/coder/cli/cliui"
1716
"github.com/coder/coder/coderd/database"
@@ -188,31 +187,16 @@ func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, org
188187
}
189188
_, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("This template has required variables! They are scoped to the template, and not viewable after being set.")+"\r\n")
190189

191-
parameterValuesFromFile := make(map[string]string)
190+
var parameterMap map[string]string
192191
if parameterFile != "" {
193192
_, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("Attempting to read the variables from the parameter file.")+"\r\n")
194-
parameterFileContents, err := os.ReadFile(parameterFile)
195-
196-
if err != nil {
197-
return nil, nil, err
198-
}
199-
200-
err = yaml.Unmarshal(parameterFileContents, &parameterValuesFromFile)
201-
193+
parameterMap, err = createParameterMapFromFile(parameterFile)
202194
if err != nil {
203195
return nil, nil, err
204196
}
205197
}
206198
for _, parameterSchema := range missingSchemas {
207-
var parameterValue string
208-
if parameterFile != "" {
209-
if parameterValuesFromFile[parameterSchema.Name] == "" {
210-
return nil, nil, xerrors.Errorf("Required parameter value absent in parameter file for %q!", parameterSchema.Name)
211-
}
212-
parameterValue = parameterValuesFromFile[parameterSchema.Name]
213-
} else {
214-
parameterValue, err = cliui.ParameterSchema(cmd, parameterSchema)
215-
}
199+
parameterValue, err := getParameterValueFromMapOrInput(cmd, parameterMap, parameterSchema)
216200
if err != nil {
217201
return nil, nil, err
218202
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ require (
120120
google.golang.org/protobuf v1.28.0
121121
gopkg.in/DataDog/dd-trace-go.v1 v1.38.1
122122
gopkg.in/natefinch/lumberjack.v2 v2.0.0
123+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
123124
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
124125
nhooyr.io/websocket v1.8.7
125126
storj.io/drpc v0.0.30
@@ -250,5 +251,4 @@ require (
250251
gopkg.in/ini.v1 v1.62.0 // indirect
251252
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
252253
gopkg.in/yaml.v2 v2.4.0 // indirect
253-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
254254
)

0 commit comments

Comments
 (0)
0