about summary refs log tree commit diff
path: root/ops/terraform/deploy-nixos
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-03-21T16·06+0200
committerflokli <flokli@flokli.de>2024-03-26T19·04+0000
commit508d67ad49917c293c34f3c9ca59adcea02ea3ef (patch)
tree83029ca2f5d5846f907d2bfef4630584356b2387 /ops/terraform/deploy-nixos
parentf055c75bc0f8f01f0e7b1d397210c62584cd5ec3 (diff)
refactor(ops/terraform/deploy-nixos): argstr -> argstr_json r/7783
At least terraform wants all parameters passed via JSON to be strings.
It can't accept maps.

This means, allowing to pass a `argstr` JSON dict isn't really possible.

However, terraform is perfectly able to JSON-encode a map. So accept a
`argstr_json` argument instead, which `jq` will JSON-decode before
further processing it.

I dropped `argstr` support again so the jq expression still fits on my
screen, if anyone else (started) using this, I'm happy to review a CL
adding this. We should probably move the jq expression to some multiline
format then, though.

Change-Id: I5ab7a1169ab7305d3ab02db31c27732d9d1ab4e8
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11228
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Diffstat (limited to 'ops/terraform/deploy-nixos')
-rwxr-xr-xops/terraform/deploy-nixos/nix-eval.sh6
1 files changed, 3 insertions, 3 deletions
diff --git a/ops/terraform/deploy-nixos/nix-eval.sh b/ops/terraform/deploy-nixos/nix-eval.sh
index 5c7b14f57dc9..65f534180b81 100755
--- a/ops/terraform/deploy-nixos/nix-eval.sh
+++ b/ops/terraform/deploy-nixos/nix-eval.sh
@@ -15,14 +15,14 @@ set -ueo pipefail
 #  - `entrypoint`: the path to the Nix file to invoke.
 #    Optional. If omitted, will shell out to git to determine the repo root,
 #    and Nix will use `default.nix` in there.
-#  - `argstr`: A map containing string keys and values
-#    which are passed to Nix as `--argstr $key $value`
+#  - `argstr_json`: A string JSON-encoding a map containing string keys and
+#    values which should be passed to Nix as `--argstr $key $value`.
 #    command line args. Optional.
 #  - `build`: A boolean (or string being "true" or "false") stating whether the
 #    expression should also be built/substituted on the machine executing this script.
 #
 # jq's @sh format takes care of escaping.
-eval "$(jq -r '@sh "attrpath=\(.attrpath) && entrypoint=\(.entrypoint) && argstr=\((.argstr // {}) | to_entries | map ("--argstr", .key, .value) | join(" ")) build=\(.build)"')"
+eval "$(jq -r '@sh "attrpath=\(.attrpath) && entrypoint=\(.entrypoint) && argstr=\((.argstr_json // "{}"|fromjson) | to_entries | map ("--argstr", .key, .value) | join(" ")) build=\(.build)"')"
 
 # Evaluate the expression.
 [[ -z "$entrypoint" ]] && entrypoint=$(git rev-parse --show-toplevel)