我有以下文件夹结构,它似乎使它构建并加载角色,但是没有加载组和主机变量。怎么样?
的/ 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
答案 0 :(得分:1)
默认情况下,Vagrant在.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
中使用自己自动生成的广告资源文件。
Vagrant中有一个选项ansible.inventory_path
指向除自动生成的库存文件/目录之外的库存文件/目录,但是您不使用它来指向{{1}中的/etc/ansible/hosts
因此,Vagrant完全没有意识到这一点。同样,它不会在Vagrantfile
中查找host_vars
和group_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