From e9a42c90fcf0a99abef6a8b09a7afc4ef2fa562f Mon Sep 17 00:00:00 2001 From: Ethan Clark Date: Mon, 18 May 2026 17:01:46 -0500 Subject: [PATCH 1/4] feature(cloud-init): Added the ability to inject extra variables Signed-off-by: Ethan Clark --- cmd/cloud_init/group/render.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cmd/cloud_init/group/render.go b/cmd/cloud_init/group/render.go index 83175351..28bea463 100644 --- a/cmd/cloud_init/group/render.go +++ b/cmd/cloud_init/group/render.go @@ -90,6 +90,25 @@ See ochami-cloud-init(1) for more details.`, os.Exit(1) } dsWrapper["ds"] = map[string]interface{}{"meta_data": ciData} + + // Read any extra variables specified (This is mostly copy-pasted from cli.HandlePayload) + // The primary difference is the flag name + extraVarsMap := make(map[string]interface{}) + if cmd.Flag("extra-vars").Changed { + extraVars := cmd.Flag("extra-vars").Value.String() + if err := client.ReadPayload(extraVars, cli.FormatInput, &extraVarsMap); err != nil { + log.Logger.Error().Err(err).Msg("unable to read extra variable data or file") + cli.LogHelpError(cmd) + os.Exit(1) + } + } + + // Apply extra variables to the context + for k, v := range extraVarsMap { + dsWrapper[k] = v + } + + // Construct the context for the template refData := exec.NewContext(dsWrapper) // Render @@ -111,5 +130,8 @@ See ochami-cloud-init(1) for more details.`, }, } + // Create flags + groupRenderCmd.Flags().StringP("extra-vars", "", "", "extra variables to be passed to the template renderer or (if starting with @) file containing extra variables to be passed to the template renderer (can be - to read from stdin)") + return groupRenderCmd } From 701db8a7a6dc2f27c748820edf373c53f7ff6b39 Mon Sep 17 00:00:00 2001 From: Ethan Clark Date: Mon, 18 May 2026 17:02:54 -0500 Subject: [PATCH 2/4] forgot the `format-input` arg Signed-off-by: Ethan Clark --- cmd/cloud_init/group/render.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/cloud_init/group/render.go b/cmd/cloud_init/group/render.go index 28bea463..0509b348 100644 --- a/cmd/cloud_init/group/render.go +++ b/cmd/cloud_init/group/render.go @@ -131,7 +131,10 @@ See ochami-cloud-init(1) for more details.`, } // Create flags + groupRenderCmd.Flags().VarP(&cli.FormatInput, "format-input", "f", "format of input payload data (json,json-pretty,yaml)") groupRenderCmd.Flags().StringP("extra-vars", "", "", "extra variables to be passed to the template renderer or (if starting with @) file containing extra variables to be passed to the template renderer (can be - to read from stdin)") + groupRenderCmd.RegisterFlagCompletionFunc("format-input", cli.CompletionFormatData) + return groupRenderCmd } From cba0c9fa28b313342504da830b0e55267c465893 Mon Sep 17 00:00:00 2001 From: Ethan Clark Date: Tue, 19 May 2026 10:39:33 -0500 Subject: [PATCH 3/4] Add shorthand flag to `--extra-vars` and shorten the usage Signed-off-by: Ethan Clark --- cmd/cloud_init/group/render.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cloud_init/group/render.go b/cmd/cloud_init/group/render.go index 0509b348..af7e2ba9 100644 --- a/cmd/cloud_init/group/render.go +++ b/cmd/cloud_init/group/render.go @@ -132,7 +132,7 @@ See ochami-cloud-init(1) for more details.`, // Create flags groupRenderCmd.Flags().VarP(&cli.FormatInput, "format-input", "f", "format of input payload data (json,json-pretty,yaml)") - groupRenderCmd.Flags().StringP("extra-vars", "", "", "extra variables to be passed to the template renderer or (if starting with @) file containing extra variables to be passed to the template renderer (can be - to read from stdin)") + groupRenderCmd.Flags().StringP("extra-vars", "e", "", "extra variables to be passed to the template renderer or (if starting with @) file containing extra variables (can be - to read from stdin)") groupRenderCmd.RegisterFlagCompletionFunc("format-input", cli.CompletionFormatData) From 6cd1e2854abdfd9297a7ce1f410ffc2ccc7c35c6 Mon Sep 17 00:00:00 2001 From: Ethan Clark Date: Tue, 19 May 2026 10:46:51 -0500 Subject: [PATCH 4/4] Update `cloud-init(1)` man page Signed-off-by: Ethan Clark --- man/ochami-cloud-init.1.sc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/man/ochami-cloud-init.1.sc b/man/ochami-cloud-init.1.sc index 2fcec2e4..2aebc7c5 100644 --- a/man/ochami-cloud-init.1.sc +++ b/man/ochami-cloud-init.1.sc @@ -13,7 +13,7 @@ ochami cloud-init group delete [OPTIONS] ([-d (_data_ | @_path_)] [-f _format_]) ochami cloud-init group get [OPTIONS] raw [_id_...]++ ochami cloud-init group get [OPTIONS] config [_id_...]++ ochami cloud-init group get [OPTIONS] meta-data [_id_...]++ -ochami cloud-init group render _group_ _id_++ +ochami cloud-init group render ([-e (_extra-variables_ | @_path_)] [-f _format_]) _group_ _id_++ ochami cloud-init group set [OPTIONS]++ ochami cloud-init node get group [OPTIONS] _group_ _id_...++ ochami cloud-init node get meta-data [OPTIONS] _id_...++ @@ -427,6 +427,21 @@ Subcommands for this command are as follows: - */cloud-init/admin/impersonation/{id}/{group}.yaml* - */cloud-init/admin/impersonation/{id}/meta-data* + This command accepts the following options: + + *-e, --extra-vars* (_extra-vars_ | @_path_ | @-) + Specify _extra-vars_ to be passed to the template, the _path_ to a + file to read extra variables from, or to read the extra variables from + standard input (@-). The format of the extra variables read in any of + these forms is JSON by default unless *-f* is specified to change it. + + *-f, --format-input* _format_ + Format of the extra variables being used by *-e*. Supported formats are: + + - _json_ (default) + - _json-pretty_ + - _yaml_ + *set* [-f _format_] < _file_++ *set* [-f _format_] -d @_file_++ *set* [-f _format_] -d @- < _file_++