@@ -15,6 +15,7 @@ const fs = require('fs')
1515
1616const BaseCommand = require ( './base-command' )
1717const { cli } = require ( 'cli-ux' )
18+ const yaml = require ( 'js-yaml' )
1819const { flags } = require ( '@oclif/command' )
1920const { getProgramId, createKeyValueObjectFromFlag, getOutputFormat } = require ( './cloudmanager-helpers' )
2021const commonFlags = require ( './common-flags' )
@@ -126,44 +127,25 @@ class BaseVariablesCommand extends BaseCommand {
126127 }
127128 } )
128129
130+ const getFileData = promisify ( fs . readFile )
131+
129132 if ( flags . jsonStdin ) {
130133 const rawStdinData = await getPipedData ( )
131- this . loadVariablesFromJson ( rawStdinData , currentVariableTypes , variables )
134+ BaseVariablesCommand . loadVariablesFromJson ( rawStdinData , currentVariableTypes , variables )
132135 } else if ( flags . jsonFile ) {
133- const getFileData = promisify ( fs . readFile )
134136 const rawFileData = await getFileData ( flags . jsonFile )
135- this . loadVariablesFromJson ( rawFileData , currentVariableTypes , variables )
137+ BaseVariablesCommand . loadVariablesFromJson ( rawFileData , currentVariableTypes , variables )
138+ } else if ( flags . yamlStdin ) {
139+ const rawStdinData = await getPipedData ( )
140+ BaseVariablesCommand . loadVariablesFromYaml ( rawStdinData , currentVariableTypes , variables )
141+ } else if ( flags . yamlFile ) {
142+ const rawFileData = await getFileData ( flags . yamlFile )
143+ BaseVariablesCommand . loadVariablesFromYaml ( rawFileData , currentVariableTypes , variables )
136144 }
137145
138146 return variables
139147 }
140148
141- loadVariablesFromJson ( rawData , currentVariableTypes , variables ) {
142- let data
143- try {
144- data = JSON . parse ( rawData )
145- } catch ( e ) {
146- throw new validationCodes . VARIABLES_JSON_PARSE_ERROR ( )
147- }
148- if ( ! _ . isArray ( data ) ) {
149- throw new validationCodes . VARIABLES_JSON_NOT_ARRAY ( )
150- }
151- data . forEach ( item => {
152- if ( item . name && ! _ . isUndefined ( item . value ) ) {
153- if ( ! item . type ) {
154- item . type = 'string'
155- }
156- const currentVariableKey = item . service ? `${ item . service } :${ item . name } ` : item . name
157- if ( currentVariableTypes [ currentVariableKey ] && ! item . value ) {
158- item . type = currentVariableTypes [ currentVariableKey ]
159- }
160- if ( ! variables . find ( variable => variable . name === item . name && variables . services === item . service ) ) {
161- variables . push ( item )
162- }
163- }
164- } )
165- }
166-
167149 validateVariables ( flags , variables ) { }
168150}
169151
@@ -190,10 +172,20 @@ BaseVariablesCommand.setterFlags = {
190172 jsonStdin : flags . boolean ( {
191173 default : false ,
192174 description : 'if set, read variables from a JSON array provided as standard input; variables set through --variable or --secret flag will take precedence' ,
175+ exclusive : [ 'jsonFile' , 'yamlStdin' , 'yamlFile' ] ,
193176 } ) ,
194177 jsonFile : flags . string ( {
195178 description : 'if set, read variables from a JSON array provided as a file; variables set through --variable or --secret flag will take precedence' ,
196- exclusive : [ 'jsonStdin' ] ,
179+ exclusive : [ 'jsonStdin' , 'yamlStdin' , 'yamlFile' ] ,
180+ } ) ,
181+ yamlStdin : flags . boolean ( {
182+ default : false ,
183+ description : 'if set, read variables from a YAML array provided as standard input; variables set through --variable or --secret flag will take precedence' ,
184+ exclusive : [ 'jsonStdin' , 'jsonFile' , 'yamlFile' ] ,
185+ } ) ,
186+ yamlFile : flags . string ( {
187+ description : 'if set, read variables from a YAML array provided as a file; variables set through --variable or --secret flag will take precedence' ,
188+ exclusive : [ 'jsonStdin' , 'jsonFile' , 'yamlStdin' ] ,
197189 } ) ,
198190 ...commonFlags . outputFormat ,
199191}
@@ -202,4 +194,47 @@ BaseVariablesCommand.getterFlags = {
202194 ...commonFlags . outputFormat ,
203195}
204196
197+ const loadVariableData = ( array , currentVariableTypes , variables ) => {
198+ array . forEach ( item => {
199+ if ( item . name && ! _ . isUndefined ( item . value ) ) {
200+ if ( ! item . type ) {
201+ item . type = 'string'
202+ }
203+ const currentVariableKey = item . service ? `${ item . service } :${ item . name } ` : item . name
204+ if ( currentVariableTypes [ currentVariableKey ] && ! item . value ) {
205+ item . type = currentVariableTypes [ currentVariableKey ]
206+ }
207+ if ( ! variables . find ( variable => variable . name === item . name && variables . services === item . service ) ) {
208+ variables . push ( item )
209+ }
210+ }
211+ } )
212+ }
213+
214+ BaseVariablesCommand . loadVariablesFromJson = ( rawData , currentVariableTypes , variables ) => {
215+ let data
216+ try {
217+ data = JSON . parse ( rawData )
218+ } catch ( e ) {
219+ throw new validationCodes . VARIABLES_JSON_PARSE_ERROR ( )
220+ }
221+ if ( ! _ . isArray ( data ) ) {
222+ throw new validationCodes . VARIABLES_JSON_NOT_ARRAY ( )
223+ }
224+ loadVariableData ( data , currentVariableTypes , variables )
225+ }
226+
227+ BaseVariablesCommand . loadVariablesFromYaml = ( rawData , currentVariableTypes , variables ) => {
228+ let data
229+ try {
230+ data = yaml . load ( rawData )
231+ } catch ( e ) {
232+ throw new validationCodes . VARIABLES_YAML_PARSE_ERROR ( )
233+ }
234+ if ( ! _ . isArray ( data ) ) {
235+ throw new validationCodes . VARIABLES_YAML_NOT_ARRAY ( )
236+ }
237+ loadVariableData ( data , currentVariableTypes , variables )
238+ }
239+
205240module . exports = BaseVariablesCommand
0 commit comments