假设Ansible结构:
.
├── group_vars
│ └── all
└── site.yml
all
包含 my_test_variable: yes
, site.yml
是:
- hosts: all
tasks:
- name: Variable test
debug: msg={{ my_test_variable }}
我正在使用Vagrant在本地运行它,所以命令看起来像:
$ ansible-playbook site.yml -i /path-to-vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=/path-to-vagrant/.vagrant/machines/default/virtualbox/private_key -u vagrant
Vagrant生成的反转文件:
# Generated by Vagrant
default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
并输出:
PLAY: ***************************************************************************
TASK [setup] ********************************************************************
ok: [default]
TASK [Variable test] ************************************************************
fatal: [default]: FAILED! => {"msg": "ERROR! the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'my_test_variable' is undefined", "failed": true}
PLAY RECAP **********************************************************************
default : ok=1 changed=0 unreachable=0 failed=1
我知道这个流浪汉库存不在任何组内 - 因为没有 - 但所有组都继承自 all ,对吧?
为什么不起作用?我错过了什么?
我对Ansible很新 . 阅读了很多文档,几个例子甚至一些SO问题,比如Ansible doesn't pick up group_vars without loading it manually - 不是我的问题 - 和Cannot get ansible to recognize group variables - 关闭但不是那里 .
编辑
我正在遵循Ansible's doc推荐的项目结构,而在variables doc entry中他们提到 global_vars/all :
站点范围默认值应定义为“group_vars / all”设置 .
即使没有关于如何加载这些默认值的直接参考,我认为我不必明确添加它们(如@ thiago-borges的回答中所建议的那样) . 或者我呢?
这样做的原因是我打算从 all 继承组变量,如:
.
├── group_vars
│ └── all
│ └── production
│ └── staging
└── site.yml
当我为每个执行ansible-playbook时,加载不同的文件而不必在播放文件中明确设置它们,例如:
ansible-playbook -i production site.yml
编辑2
问题是关于ansible的错误 . 更新后,它按照记录的方式工作 .
我应该删除这个问题吗?
3 回答
来自Ansible的官方指南:
由于Vagrant在
./.vagrant/provisioners/ansible/inventory/
中生成其库存文件,您需要将group_vars
上的符号链接放入此目录中 .假设您在
Vagrantfile
和.vagrant
所在的目录中有group_vars
:它的结构或代码没有任何问题 . 不工作的原因是ansible的错误 .
虽然我找不到与此问题完全匹配的错误报告,但我相信这个问题Ansible incorrectly constructing paths when running a playbook in a subdirectory和this other issue我报告过自己可能是相关的 .
目前从修订版a1948dd1c151f01ce93d0b76745469a7065ef45e运行ansible,它工作正常:
在您的site.yml上,尝试设置var_files配置 .