gpt4 book ai didi

yaml - ansible 将额外变量作为嵌套 json 提供

转载 作者:行者123 更新时间:2023-12-01 03:39:59 29 4
gpt4 key购买 nike

我正在尝试将 ansible 用于参数化的 docker 部署。我希望能够通过命令行指定图像、版本和各种不同的环境变量。

Image、Version等可以直接指定,但是docker模块的env参数需要字典。这是一个简短的剧本示例:

-name: some deployment
docker:
[..]
name: myname
[..]
env:
FOO: bar
ANOTHERFOO: anotherbar

环境变量是在运行时选择的,因此无法直接在提供的额外变量中定义它们。剧本现在看起来像这样:
-name: some deployment
docker:
[..]
name: "{{ name }}"
[..]
env: "{{ env }}"

由于 env 是一个嵌套字典,我们需要提供 --extra-vars 作为嵌套 json。我希望以下工作:
./ansible-playbook [..] --extra-vars '{"name":"myname", "env":{"FOO":"bar", "ANOTHERFOO":"anotherbar"}}' [..]

容器运行后,env 的值就不存在了。
直接在剧本中提供 json 用于测试目的是可行的。

我尝试了以下不同的 json,但没有工作结果:
{"name":"myname", "env":{"FOO":"bar", "ANOTHERFOO":"anotherbar"}}

{"name":"myname", "env":[{"FOO":"bar"}, {"ANOTHERFOO":"anotherbar"}]}

您如何通过命令行提供和使用嵌套字典,或者这是 Jinja2 模板引擎的限制。

最佳答案

如果您需要在 YAML/ansible 剧本中使用 dict,则使用的正确结构是与 --extra-vars 一起提供的嵌套 json,如问题示例中所示:

./ansible-playbook [..] --extra-vars '{"name":"myname", "env":{"FOO":"bar", "ANOTHERFOO":"anotherbar"}}' [..]


-name: some deployment
docker:
[..]
name: "{{ name }}"
[..]
env: "{{ env }}"

出于测试目的,我确实使用了 environment在我缩短为 env 的系统上举个例子。问题是 environmentreserved variable并且总是被覆盖。

关于yaml - ansible 将额外变量作为嵌套 json 提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31558628/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com