【问题标题】:Ansible include vars per hostAnsible 包括每个主机的变量
【发布时间】:2017-03-22 07:07:53
【问题描述】:

我在 Ubuntu 中遇到了 Ansible 2.2 的问题。

我的剧本包含以下内容:

---
- hosts: all
  become: yes
  roles:
    - mysql

我从这里使用了 MySQL 角色 https://galaxy.ansible.com/geerlingguy/,但在本地重命名为 MySQL。在 playbook 的 defaults 文件夹中有一个包含参数的文件:

mysql_datadir: /var/lib/mysql

这样,Ansible 工作正常。但现在我想要每个主机的特定配置,如下所述:http://docs.ansible.com/ansible/playbooks_best_practices.html

所以我创建了文件inventories/host_vars/test.yml,删除了任务默认文件夹中的那个,并将剧本更新为以下内容:

  ---
- hosts: all
  become: yes
  roles:
    - mysql
  tasks:
  - name: include vars
    include_vars: inventories/host_vars/test.yml

现在 Ansible 不会接受这一点;它说变量没有设置:

致命:[]:失败! => {"failed": true, "msg": "字段 'args' 的值无效,它似乎包含一个未定义的变量。错误是:'mysql_datadir' is undefined\n\n错误似乎是已在“/home/michael/Ansible/Playbooks/roles/mysql/tasks/setup-Debian.yml”:第 24 行,第 3 列,但可能\n位于文件的其他位置,具体取决于确切的语法问题。\n\ n违规行似乎是:\n\n\n- name: Delete innodb log files created by apt package after initial install.\n ^ here\n"}

通过命令行传递参数没有问题。我该如何解决?

【问题讨论】:

  • 角色在任务之前执行。但如前所述,如果使用正确,host_vars 会自动工作。

标签: ansible


【解决方案1】:

我相信你有多个问题。我建议从标准的、更简单的目录结构开始。

我会尝试执行以下操作:

  • 使用标准目录布局,因此将 host_vars 移动到顶部文件夹
  • 在 host_vars 目录中,为每个主机放置一个文件,该文件完全按照清单中定义的主机名命名,以“---”开始文件并将变量放入其中。不要在文件中添加 .yml 扩展名!
  • 不要明确“包含”任何内容。它是自动的。 site.yml 中没有“任务”。

【讨论】:

  • 我做了一些研究和工作,经过一些尝试和错误,我注意到,host_vars 和 group_vars 文件夹位于同一个目录的深处,将它们向上移动,现在它正在工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多