Ansible包括每个主机的变量

Ansible包括每个主机的变量,ansible,Ansible,我对Ubuntu中的Ansible 2.2有一个问题 我的剧本包含以下内容: --- - hosts: all become: yes roles: - mysql --- - hosts: all become: yes roles: - mysql tasks: - name: include vars include_vars: inventories/host_vars/test.yml 我在这里使用了MySQL角色,但在本地将al

我对Ubuntu中的Ansible 2.2有一个问题

我的剧本包含以下内容:

---
- hosts: all
  become: yes
  roles:
    - mysql
  ---
- hosts: all
  become: yes
  roles:
    - mysql
  tasks:
  - name: include vars
    include_vars: inventories/host_vars/test.yml
我在这里使用了MySQL角色,但在本地将all重命名为
MySQL
。playbook的默认文件夹中有一个包含以下参数的文件:

mysql_datadir: /var/lib/mysql
有了这些,Ansible工作得很好。但现在我需要每个主机的特定配置,如下所述:

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

---
- hosts: all
  become: yes
  roles:
    - mysql
  ---
- hosts: all
  become: yes
  roles:
    - mysql
  tasks:
  - name: include vars
    include_vars: inventories/host_vars/test.yml
现在Ansible不会接受这一点;表示未设置变量:

致命:[]:失败!=>{“failed”:true,“msg”:"字段“args”有一个无效值,该值似乎包含一个未定义的变量。错误是:“mysql\u datadir”未定义\n\n错误似乎出现在“/home/michael/Ansible/Playbooks/roles/mysql/tasks/setup Debian.yml”:第24行第3列,但根据确切的语法问题,\n可能位于文件的其他位置。\n\n offen第一行似乎是:\n\n\n-name:删除初始安装后由apt软件包创建的innodb日志文件。\n^此处\n“}


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

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

我会尽量做到以下几点:

---
- hosts: all
  become: yes
  roles:
    - mysql
  ---
- hosts: all
  become: yes
  roles:
    - mysql
  tasks:
  - name: include vars
    include_vars: inventories/host_vars/test.yml
  • 使用标准目录布局,因此将主机变量移动到顶部文件夹
  • 在host_vars目录中,为每个主机放置一个文件,该文件完全按照清单中定义的主机名命名,以“---”开头,并在其中放置变量。不要将.yml扩展名添加到该文件中
  • 不要明确地“包含”任何内容。它是自动的。site.yml中没有“任务”

在执行任务之前先执行角色。但正如前面提到的,如果使用正确,主机变量会自动工作。我做了一些研究和工作,在尝试和出错后,我注意到主机变量和组变量文件夹位于一个目录中,并将它们向上移动,现在它可以工作了