如何解析 Ansible group_vars 字典中的变量?

Posted

技术标签:

【中文标题】如何解析 Ansible group_vars 字典中的变量?【英文标题】:How to parse variables in Ansible group_vars dictionary? 【发布时间】:2015-10-14 15:32:35 【问题描述】:

我之前一直将我的所有变量放在库存文件中,例如

dse_dir=/app/dse
dse_bin_dir= dse_dir /bin
dse_conf_dir= dse_dir /resources/dse/conf
dse_yaml_loc= dse_conf_dir /dse.yaml
cass_conf_dir= dse_dir /resources/cassandra/conf
cass_yaml_loc= cass_conf_dir /cassandra.yaml
cass_bin_dir= dse_dir /resources/cassandra/bin

我不需要在清单文件中为这些变量使用任何引号,并且效果很好。

现在我正在尝试利用 group_vars 功能来分隔每组主机的变量。这具有不同的格式,即字典。所以现在我有:

dse_dir: "/app/dse"
dse_bin_dir: " dse_dir /bin"
dse_conf_dir: " dse_dir /resources/dse/conf"
dse_yaml_loc: " dse_conf_dir /dse.yaml"
cass_conf_dir: " dse_dir /resources/cassandra/conf"
cass_yaml_loc: " cass_conf_dir /cassandra.yaml"
cass_bin_dir: " dse_dir /resources/cassandra/bin"

为了避免解析抱怨,我需要在这些参数周围加上引号。但是现在当我有如下的剧本时:

---
# Copy CQL files across
- include: subtasks/copy_scripts.yml

- name: Create users
  command: ' cass_bin_dir )/cqlsh'

我收到以下错误。省略单引号或用双引号替换它们也不起作用。

ERROR: There was an error while parsing the task 'command  cass_bin_dir )/cqlsh'.
Make sure quotes are matched or escaped properly

我能找到的所有文档都只显示字典中的硬编码值,即没有包括其他变量在内的变量,但我认为 Ansible 会支持这一点。

关于如何正确解析这些的任何建议?

【问题讨论】:

【参考方案1】:

请参阅“问题”部分 here,了解为什么需要在 group_vars 中添加引号。 (这是 yaml/ansible 有问题的 : 组合。)

要解决您的command 中的错误,请更正错字:您使用的是) 而不是

【讨论】:

以上是关于如何解析 Ansible group_vars 字典中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

在Ansible中,如何连接到Windows主机?

ANSIBLE: 如何从清单组附加变量

ansible--roles

一些ansible roles例子

ansible 流程控制

ansible 流程控制