Ansible não executando o playbook específico do host no provisionamento de várias máquinas do Vagrant

3

Ao aprovisionar com o ansible no Vagrant, não consigo executar playbooks específicos de servidor / função. Há um playbook comum para todos os hosts, e isso está funcionando, mas ao tentar direcionar uma função específica, estou perdendo alguma coisa. Alguma idéia de qual peça está faltando?

A saída ansible é:

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

Com a seguinte estrutura de diretório:

- 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 }

O arquivo hosts contém

[zookeeper_servers]
zookeeper1 zoo_id=1

[storm_servers]
storm1

[kafka_servers]
kafka1

E o arquivo do Vagrant contém

# -*- 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
    
por RyanW 31.03.2014 / 21:54

2 respostas

1

O Vagrant ignora seu arquivo de inventário, cria o seu próprio ( fonte ).

Você precisa especificar grupos no Vagrantfile :

ansible.groups = {
 "group1" => ["machine1"],
 "group2" => ["machine2", "machine3"],
 "all_groups:children" => ["group1", "group2", "group3"]
}
    
por 01.04.2014 / 07:45
1

O único problema que encontrei foi que o ansible.inventory_path estava definido para um diretório e precisava estar no arquivo hosts

  ansible.inventory_path = "./vagrant/hosts"

em vez do diretório que estava apontando para

  ansible.inventory_path = "./vagrant/roles"

Agora, estou recebendo os playbooks específicos de função para serem executados corretamente no meu mac. O lado do Windows ainda é desconhecido como fazê-lo funcionar.

    
por 02.04.2014 / 06:33