При настройке с помощью ansible в Vagrant я не могу запустить сценарии для конкретного сервера / роли. Для всех хостов существует общий сценарий, и он работает, но при попытке настроить таргетинг на конкретную роль я что-то упускаю. Есть идеи, какой кусок отсутствует?
Доступный вывод:
Running Ansible playbook...
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [common | ensure apt-get is up to date] *********************************
ok: [127.0.0.1]
TASK: [common | ensure build-essential installed] *****************************
changed: [127.0.0.1]
TASK: [common | ensure git is installed] **************************************
changed: [127.0.0.1]
TASK: [common | ensure curl is installed] *************************************
changed: [127.0.0.1]
PLAY [zookeeper_servers] ******************************************************
skipping: no hosts matched
PLAY [kafka_servers] **********************************************************
skipping: no hosts matched
PLAY [storm_servers] **********************************************************
skipping: no hosts matched
PLAY RECAP ********************************************************************
127.0.0.1 : ok=5 changed=3 unreachable=0 failed=0
Со следующей структурой каталогов:
- Vagrantfile
- vagrant
- playbook.yml
- hosts
- roles
- common
- tasks
- main.yml
- kafka_servers
- tasks
- main.yml
- storm_servers
- tasks
- main.yml
- zookeeper_servers
- tasks
- main.yml
# The main playbook
- hosts: all
roles:
- common
- hosts: zookeeper_servers
roles:
- { role: zookeeper_servers }
- hosts: kafka_servers
roles:
- { role: kafka_servers }
- hosts: storm_servers
roles:
- { role: storm_servers }
Файл hosts содержит
[zookeeper_servers]
zookeeper1 zoo_id=1
[storm_servers]
storm1
[kafka_servers]
kafka1
И файл Vagrant содержит
# -*- mode: ruby -*-
# vi: set ft=ruby :
CUSTOM_CONFIG = {
"BOX_NAME" => "precise64",
"BOX_URL" => "http://files.vagrantup.com/precise64.box",
"HEADLESS" => false
}
Vagrant.configure("2") do |config|
config.vm.define "kafka" do |kafka|
kafka.vm.box = CUSTOM_CONFIG['BOX_NAME']
end
config.vm.define "zookeeper" do |zookeeper|
zookeeper.vm.box = CUSTOM_CONFIG['BOX_NAME']
end
config.vm.define "storm" do |storm|
storm.vm.box = CUSTOM_CONFIG['BOX_NAME']
end
if (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM)
# provisioning with ansible on windows
config.vm.provision "shell", path: "./vagrant/ansible-windows.sh"
else
# provisioning with ansible
config.vm.provision :ansible do |ansible|
ansible.playbook = "./vagrant/playbook.yml"
ansible.inventory_path = "./vagrant/roles"
end
end
end
Единственная проблема, которую я обнаружил, заключалась в том, что ansible.inventory_path был установлен в каталог и должен быть в файле hosts.
ansible.inventory_path = "./vagrant/hosts"
вместо каталога, на который он указывал
ansible.inventory_path = "./vagrant/roles"
Теперь я получаю инструкции для конкретных ролей, которые корректно работают на моем Mac. Со стороны окон пока неизвестно, как заставить работать.
Vagrant игнорирует ваш файл инвентаря, он создает его собственный (источник).
Вам необходимо указать группы в Vagrantfile:
ansible.groups = {
"group1" => ["machine1"],
"group2" => ["machine2", "machine3"],
"all_groups:children" => ["group1", "group2", "group3"]
}