在我的all.yml
文件中,我有一些在我的整个项目中使用的全局变量。其中一个是redis主机列表。我的库存文件如下所示:
[dev_redis]
host.abc.com
[prod_redis]
host.xyz.com
所以我想在我的all.yml
文件中做的事情如下:
---
global__:
app_user: root
app_group: root
redis_hosts: "{% for host in groups[{{env}}_redis] %}{{host}}:5544,{% endfor %}"
这不起作用 - 我收到一个错误:
FAILED! => {"failed": true, "msg": "ERROR! template error while templating string: expected token ':', got '}'"}
我的问题是:
(1)为什么我会收到此错误?
(2)如果我没有采购包含我的redis节点的库存文件,我能否这样做?对于每次部署脚本的运行,我引用了哪些库存文件用于该服务类型(这一切都发生在python包装器中) - 所以如果我正在部署除redis之外的服务,我是否仍然可以从redis库存文件?我可以使用-i
传递多个广告资源文件吗?
答案 0 :(得分:0)
我看到你在main yml中使用了循环,这样我们就可以在需要访问模板中的变量时定义循环。
可以访问主机:
---
global__:
app_user: root
app_group: root
redis_hosts: "{{[groups['dev_redis'][0]]}}:5544"
dev可以替换为变量{{env}}
您的问题的答案:
由于某些语法问题,您收到此错误。在使用变量时,它应该在“{}”中给出,在某些地方它应该是一个裸变量。根据var的用法,如果未正确使用,则会出现此错误。
不,那是不可能的。您需要传递要使用的库存/变量文件。
是的,您可以从redis清单文件中访问这些组,即使您正在部署任何其他服务但应该通过
可以使用-i以引用文件夹的方式传递多个库存文件。 例如:ansible-playbook -i / home / ubuntu / inventory / test.yml
在库存目录中可以有多个库存文件。 喜欢/ home / ubuntu / inventory / host1,/ home / ubuntu / inventory / host2,/ home / ubuntu / inventory / var1等。