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+
parameterMap := 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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy