vagrant - 未找到 group_vars/all 中定义的 Ansible 变量

标签 vagrant ansible ansible-playbook

假设 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 生成的 list 文件:
# 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 

我知道这个 vagrant 库存不在任何组内 - 因为没有任何组 - 但所有组都继承自 全部 , 对?

为什么它不起作用?我错过了什么?

我对 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他们提到了全局变量/全部 :

Site wide defaults should be defined as a ‘group_vars/all’ setting.



即使没有关于如何加载这些默认值的直接引用,我认为我不必显式添加它们(就像@thiago-borges 的答案中所建议的那样)。还是我?

这样做的原因是我打算让组变量继承自 全部 , 像:
.
├── group_vars
│   └── all
│   └── production
│   └── staging
└── site.yml

当我为每个执行 ansible-playbook 时,会加载不同的文件,而无需在播放文件中明确设置它们,例如:
ansible-playbook -i production site.yml
编辑 2

这个问题是 ansible 上的一个错误。更新后,它按记录工作。

那我应该删除这个问题吗?

最佳答案

在您的 site.yml 上,尝试设置 var_files 配置。

- hosts: all
  vars_files:
    - group_vars/all
  tasks:
    - name: Variable test
      debug: msg={{ my_test_variable }}

关于vagrant - 未找到 group_vars/all 中定义的 Ansible 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343753/

相关文章:

ansible - Ansible 中的多个 json_query?

ansible - 使用 jinja 模板中的给定范围在 ansible 中创建 ip 列表

Vagrant 中的语法错误

ruby - 如何解决使用 Puphpet 构建的 vagrant box 上的 'certifcate verify failed' 错误

docker - 在代理后面的 vagrant 中使用 docker

ansible - 如何在ansible中枚举主机?

ansible:将列表中的一个元素过滤为字符串

ssh - Ansible:权限被拒绝

ansible - 保持 Ansible DRY : How to avoid repeating variables?

Vagrant up 返回 "Compressed image is corrupted"