host_vars和group_vars未加载

时间:2017-04-01 22:20:01

标签: vagrant ansible vagrantfile ansible-inventory

我有以下文件夹结构,它似乎使它构建并加载角色,但是没有加载组和主机变量。怎么样?

的/ etc / ansible /

- hosts
- requirements.yml
- group_vars/
    - app/
        - postgres.yml
- host_vars/
    - app1/
        - postgres.yml
- roles

/文档/ ansible /

- playbook.yml
- vagrant

主机文件

# Application servers
[app]
192.168.60.6

# Group multi 
[multi:children]
app


#variables applied to all servers
[multi:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

** vagrant **

# -*- mode: ruby -*-
# vi: set ft=ruby :


Vagrant.configure("2") do |config|

  # Genral Vagrant VM Configuration.
  config.vm.box = "geerlingguy/centos7"
  config.ssh.insert_key = false
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.provider :virtualbox do |v|
    v.memory = 256
    v.linked_clone = true
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

# Application server 1
config.vm.define "app1" do |app|
  app.vm.hostname = "orc-app1.dev"
  app.vm.network :private_network, ip: "192.168.60.6"
end

end

2 个答案:

答案 0 :(得分:1)

默认情况下,Vagrant在.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory中使用自己自动生成的广告资源文件。

Vagrant中有一个选项ansible.inventory_path指向除自动生成的库存文件/目录之外的库存文件/目录,但是您不使用它来指向{{1}中的/etc/ansible/hosts因此,Vagrant完全没有意识到这一点。同样,它不会在Vagrantfile中查找host_varsgroup_vars

另一方面,库存文件不会覆盖角色的路径,因此Vagrant使用自己的路径不会影响角色的路径。

默认情况下,它们从/etc/ansible加载(或者Ansible使用的任何目录作为默认目录,例如macOS上的/etc/ansible/roles)。

答案 1 :(得分:0)

我有部分解决方法可以使用group_vars:

在我的Vagrantfile中(特别是注意ansible.groups行),

 config.vm.provision "ansible" do |ansible|
  ansible.playbook = "provisioning/site.yml"
  # "default" is the name of the VM as in auto-generated
  ansible.groups = { "vagrant" => ["default"] }
end

之后读取group_vars / vagrant中的库存数据 - 作为文件或带文件的目录(我更喜欢这样,所以我可以为我正在使用的每个角色创建一个文件)

然后我在host_vars / vagrant中添加了一个提醒文本文件,所以我不想在那里放东西。

在我的Ansible主机文件(配置/主机)中我也有以下内容,但我已经忘记它解决了什么问题 - 它可能是相关的,

[vagrant]
default