Vagrant 未加载主机变量和组变量

Vagrant 未加载主机变量和组变量,vagrant,ansible,vagrantfile,ansible-inventory,Vagrant,Ansible,Vagrantfile,Ansible Inventory,我有下面的文件夹结构,这似乎使它能够构建和加载角色,但没有加载组和主机变量。为什么 /etc/ansible/ - hosts - requirements.yml - group_vars/ - app/ - postgres.yml - host_vars/ - app1/ - postgres.yml - roles - playbook.yml - vagrant /documents/ansible/ - hosts - requir

我有下面的文件夹结构,这似乎使它能够构建和加载角色,但没有加载组和主机变量。为什么

/etc/ansible/

- hosts
- requirements.yml
- group_vars/
    - app/
        - postgres.yml
- host_vars/
    - app1/
        - postgres.yml
- roles
- playbook.yml
- vagrant
/documents/ansible/

- hosts
- requirements.yml
- group_vars/
    - app/
        - postgres.yml
- host_vars/
    - app1/
        - postgres.yml
- roles
- 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
**流浪者**

# -*- 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

默认情况下,Vagrant在
中使用自己自动生成的库存文件。Vagrant/provisioners/ansible/inventory/Vagrant\u ansible\u inventory

Vagrant中有一个选项
ansible.inventory\u path
指向自动生成的清单文件/目录以外的清单文件/目录,但您不使用它指向
Vagrant文件
中的
/etc/ansible/hosts
,因此Vagrant完全不知道它。同样,它不会在
/etc/ansible
中查找
主机变量
组变量


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


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

我有一个部分解决方案,可以使用组变量:

在我的Vagrant文件中(特别注意ansible.groups行)

之后读取组_vars/vagrant中的库存数据-作为文件或包含文件的目录(我更喜欢这样,这样我可以为我使用的每个角色都有一个文件)

然后,我在host_vars/vagrant中添加了一个提醒文本文件,这样我就不想在其中添加内容

在我的Ansible hosts文件(provisioning/hosts)中,我也有以下内容,但我完全忘记了它解决了什么问题-可能与此相关

[vagrant]
default

所以我需要将
主机变量
组变量
复制到playbook.yml文件夹?我如何在vagrant文件中指向
/etc/ansible/hosts
?我不知道你需要什么,因为我不知道你想要什么。乍一看,对一个流浪项目使用全局清单文件是没有意义的,但也许你有自己的原因。我也不确定第二个问题,我在答案中给出了设置的名称-仅仅使用它有什么问题?即使你照样复制
组变量
,流浪汉也不知道
应用程序是什么。它将从
host\u vars
中获取
app1
,因为您在
Vagrantfile
中定义了
app1
,它将反映在自动生成的资源清册中,但不会反映在
app
中。我明白了,不过我只是想,因为我在hosts文件中指定了组,所以您需要使用我提到的选项。