@@ -2,6 +2,7 @@ package cli
2
2
3
3
import (
4
4
"fmt"
5
+ "io/ioutil"
5
6
"os"
6
7
"path/filepath"
7
8
"sort"
@@ -11,6 +12,7 @@ import (
11
12
"github.com/briandowns/spinner"
12
13
"github.com/spf13/cobra"
13
14
"golang.org/x/xerrors"
15
+ "gopkg.in/yaml.v3"
14
16
15
17
"github.com/coder/coder/cli/cliui"
16
18
"github.com/coder/coder/coderd/database"
@@ -21,9 +23,10 @@ import (
21
23
22
24
func templateCreate () * cobra.Command {
23
25
var (
24
- yes bool
25
- directory string
26
- provisioner string
26
+ yes bool
27
+ directory string
28
+ provisioner string
29
+ parameterFile string
27
30
)
28
31
cmd := & cobra.Command {
29
32
Use : "create [name]" ,
@@ -79,7 +82,7 @@ func templateCreate() *cobra.Command {
79
82
}
80
83
spin .Stop ()
81
84
82
- job , parameters , err := createValidTemplateVersion (cmd , client , organization , database .ProvisionerType (provisioner ), resp .Hash )
85
+ job , parameters , err := createValidTemplateVersion (cmd , client , organization , database .ProvisionerType (provisioner ), resp .Hash , parameterFile )
83
86
if err != nil {
84
87
return err
85
88
}
@@ -116,6 +119,7 @@ func templateCreate() *cobra.Command {
116
119
currentDirectory , _ := os .Getwd ()
117
120
cmd .Flags ().StringVarP (& directory , "directory" , "d" , currentDirectory , "Specify the directory to create from" )
118
121
cmd .Flags ().StringVarP (& provisioner , "test.provisioner" , "" , "terraform" , "Customize the provisioner backend" )
122
+ cmd .Flags ().StringVarP (& parameterFile , "parameter-file" , "" , "" , "Specify a file path with parameter values." )
119
123
// This is for testing!
120
124
err := cmd .Flags ().MarkHidden ("test.provisioner" )
121
125
if err != nil {
@@ -125,7 +129,7 @@ func templateCreate() *cobra.Command {
125
129
return cmd
126
130
}
127
131
128
- func createValidTemplateVersion (cmd * cobra.Command , client * codersdk.Client , organization codersdk.Organization , provisioner database.ProvisionerType , hash string , parameters ... codersdk.CreateParameterRequest ) (* codersdk.TemplateVersion , []codersdk.CreateParameterRequest , error ) {
132
+ func createValidTemplateVersion (cmd * cobra.Command , client * codersdk.Client , organization codersdk.Organization , provisioner database.ProvisionerType , hash string , parameterFile string , parameters ... codersdk.CreateParameterRequest ) (* codersdk.TemplateVersion , []codersdk.CreateParameterRequest , error ) {
129
133
before := time .Now ()
130
134
version , err := client .CreateTemplateVersion (cmd .Context (), organization .ID , codersdk.CreateTemplateVersionRequest {
131
135
StorageMethod : database .ProvisionerStorageMethodFile ,
@@ -184,20 +188,44 @@ func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, org
184
188
missingSchemas = append (missingSchemas , parameterSchema )
185
189
}
186
190
_ , _ = 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 " )
191
+
192
+ parameterValuesFromFile := make (map [string ]string )
193
+ if parameterFile != "" {
194
+ _ , _ = fmt .Fprintln (cmd .OutOrStdout (), cliui .Styles .Paragraph .Render ("Attempting to read the variables from the parameter file." )+ "\r \n " )
195
+ parameterFileContents , err := ioutil .ReadFile (parameterFile )
196
+
197
+ if err != nil {
198
+ return nil , nil , err
199
+ }
200
+
201
+ err = yaml .Unmarshal (parameterFileContents , & parameterValuesFromFile )
202
+
203
+ if err != nil {
204
+ return nil , nil , err
205
+ }
206
+ }
187
207
for _ , parameterSchema := range missingSchemas {
188
- value , err := cliui .ParameterSchema (cmd , parameterSchema )
208
+ var parameterValue string
209
+ if parameterFile != "" {
210
+ if parameterValuesFromFile [parameterSchema .Name ] == "" {
211
+ return nil , nil , xerrors .Errorf ("Required parameter value absent in parameter file for %q!" , parameterSchema .Name )
212
+ }
213
+ parameterValue = parameterValuesFromFile [parameterSchema .Name ]
214
+ } else {
215
+ parameterValue , err = cliui .ParameterSchema (cmd , parameterSchema )
216
+ }
189
217
if err != nil {
190
218
return nil , nil , err
191
219
}
192
220
parameters = append (parameters , codersdk.CreateParameterRequest {
193
221
Name : parameterSchema .Name ,
194
- SourceValue : value ,
222
+ SourceValue : parameterValue ,
195
223
SourceScheme : database .ParameterSourceSchemeData ,
196
224
DestinationScheme : parameterSchema .DefaultDestinationScheme ,
197
225
})
198
226
_ , _ = fmt .Fprintln (cmd .OutOrStdout ())
199
227
}
200
- return createValidTemplateVersion (cmd , client , organization , provisioner , hash , parameters ... )
228
+ return createValidTemplateVersion (cmd , client , organization , provisioner , hash , parameterFile , parameters ... )
201
229
}
202
230
203
231
if version .Job .Status != codersdk .ProvisionerJobSucceeded {
0 commit comments