我正在试图添加一个新的variables到一个现有的充分的Ansible文件,大量使用angular色的git仓库。 所以,无论哪里foo被引用,在下面
vars_files: - vars/aws.yml - vars/aws-credentials.yml
我已经添加了新的一行
- vars/rpm-repo.yml
我创build了内容为vars/rpm-repo.yml :
--- yum_rpm_dir: https://example.com/repo/noarch
这个YAML是根据这个答案给出的命令来检查一个文件是否是有效的YAML。
而在roles/foo/tasks/main.yml我已经改变了一个yum任务来安装这个:
name: "{{ yum_rpm_dir }}/rest-api-{{ rest_api_version }}-1.noarch.rpm"
(这个明确的URL的目的是解决我们RPM存储库中的一个错误。)
但是我得到:
fatal: [1.2.3.4]: FAILED! => {"failed": true, "msg": "'yum_rpm_dir' is undefined"}
所以我想,显然我还没有理解variables如何与Ansible中的angular色交互的复杂性,所以我将它添加为默认值,并且肯定会起作用。
所以我把上面的文件复制到了roles/foo/defaults/main.yml中。
这工作,但它是一个黑客。 把它变成一个variables的重点是它的价值可以被多个angular色使用而不被复制和粘贴。
tl; dr:如何正确设置Ansible中的一个variables,以便它可以被angular色接收?
你没有指定你正在使用哪个版本的ansible ,而且有从1.x到2.x的重要变化。
从在线文档 ,答案
如何正确设置Ansible中的variables以便可以通过angular色来获取?
将会:
在1.x中,优先级如下(最后列出的variables获得优先级):
在2.x中,优先顺序更具体(最后列出的variables获得优先级):
对特定用例的回答要求您提供var文件的位置(因为它不能从所提供的数据中推断)在目录结构中。 根据放置的文件的位置,它们具有不同的优先级。
我个人更喜欢将group_vars下的数据group_vars (查看首选布局的最佳实践文档),因此我可以将数据分配给主机组,这主要是因为这通常直接映射到angular色。
问题只是我错过了一个使用fooangular色的文件。
对foo的引用不是这样的:
roles: - foo
但是像这样:
roles: - { role: foo, rest_api_version: "{{ blah_version }}" }
所以我忽略了它。 一旦我在fooangular色“调用”之前将相同的引用添加到了vars文件中,它就没有默认文件。