Ansible包括每个主机的变量

时间:2016-11-08 15:24:48

标签: ansible

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

我的剧本包含以下内容:

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

我在这里https://galaxy.ansible.com/geerlingguy/使用了MySQL角色,但在本地重命名为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'未定义\ n \ n错误似乎是在'/home/michael/Ansible/Playbooks/roles/mysql/tasks/setup-Debian.yml':第24行第3列,但可能在文件的其他位置,具体取决于确切的语法问题。\ n \ n违规行为line似乎是:\ n \ n \ n- name:删除初始安装后apt包创建的innodb日志文件。\ n ^ here \ n“}

通过命令行传递参数可以正常工作。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

我会尝试执行以下操作:

  • 使用标准目录布局,因此将host_vars移至顶级文件夹
  • 在host_vars目录中,为每个主机放置一个文件,命名完全在库存中定义的主机名后,用“---”启动文件并将变量放在那里。请勿将.yml扩展名添加到文件中!
  • 不要明确“包含”任何内容。这是自动的。 site.yml中没有“任务”。