在本地主机上运行ansible剧本,但引用清单的group_var

时间:2019-01-08 05:59:46

标签: ansible

我正在尝试在本地运行剧本,但我希望角色的task / main.yml文件中的所有变量都引用特定清单文件中的group_var。

不幸的是,剧本无法访问group_vars目录,好像无法识别角色中指定的vars。

运行的命令如下:

/usr/local/bin/ansible-playbook --connection=local /opt/ansible/playbooks/create.yml -i ./inventory-file

但无法在清单文件的同一目录级别的/ group_vars目录中找到group_vars

fatal: [127.0.0.1]: FAILED! => {
    "msg": "The task includes an option with an undefined variable. The error was: 'admin_user_name' is undefined\n\nThe error appears to have been in '/opt/roles/create/tasks/main.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: create org\n  ^ here\n"
}

这是我的配置:

ansible-playbook 2.7.5
config file = /etc/ansible/ansible.cfg
configured module search path = ['/opt/ansible-modules']
  ansible python module location = /usr/local/lib/python3.6/dist-packages/ansible
executable location = /usr/local/bin/ansible-playbook
python version = 3.6.3 (default, Oct  3 2017, 21:45:48) [GCC 7.2.0]

感谢您的帮助。

谢谢, dom

2 个答案:

答案 0 :(得分:0)

根据错误,您的ansible无法读取group_vars,请确保您的group_vars具有相同的文件夹localhost。

示例剧本 主机是本地主机

- hosts: localhost become: true roles: - { role: common, tags: [ 'common' ] } - { role: docker, tags: [ 'docker' ] }

因此,在group_vars中,它应该是 localhost ,并且在该文件夹文件中的 main.yml

您可以在 group_vars 中创建一个名为all的文件夹,并创建一个名为 all.yml

的文件。

这应该可以解决问题

答案 1 :(得分:0)

因此,从理论上讲,在清单中添加localhost是一个不错的解决方案,但是在我的特定情况下(通常对于大型部署而言)不是一种选择。

我还添加了--extra-vars "myvar.json",但也没有起作用。

结果(邪恶的细节...)表明,通过命令行添加var文件的正确方法是:--extra-vars "@myvar.json"

将其发布在这里,希望没有其他人为找到解决方案而费劲。

干杯, dom