2016-11-08 41 views
0

我在Ubuntu中遇到Ansible 2.2的问题。Ansible包含每个主机的变量

我的剧本包含以下内容:

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

我用从这里https://galaxy.ansible.com/geerlingguy/ MySQL的作用,但改名所有MySQL本地。在剧本的默认文件夹是包含参数文件:

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 \ n此问题的行似乎是:\ n \ n \ N-名称:删除后apt软件包创建InnoDB日志文件的初始安装\ n ^这里\ n“}

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

+0

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

回答

2

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

我会尽量做到以下几点:

  • 使用标准的目录结构,所以移动host_vars顶端文件夹
  • 里面的host_vars目录,把一个文件为每台主机,后正好命名在你的清单中定义的主机名,用“---”开始文件并在其中放置变量。不要将.yml扩展名添加到文件中!
  • 不要明确“包含”任何东西。它是自动的。在site.yml中没有“任务”。
+0

我做了一些研究和工作,经过一些尝试和错误,我注意到,host_vars和group_vars文件夹在一个目录中深入,移动它们,现在它正在工作 –

相关问题