web-dev-qa-db-ja.com

Vagrantマルチマシンプロビジョニングでホスト固有のプレイブックを実行していないAnsible

Vagrantでansibleを使用してプロビジョニングする場合、サーバー/ロール固有のプレイブックを実行できません。すべてのホストに共通のプレイブックが実行されており、それは機能していますが、特定の役割をターゲットにしようとすると、何かが足りません。どの部分が欠けているのか?

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

次のディレクトリ構造を使用します。

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

ホストファイルには

[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
3
RyanW

Vagrantはインベントリファイルを無視し、独自のファイルを作成します( source )。

Vagrantfileでグループを指定する必要があります:

ansible.groups = {
 "group1" => ["machine1"],
 "group2" => ["machine2", "machine3"],
 "all_groups:children" => ["group1", "group2", "group3"]
}
1
neutrinus

私が見つけた1つの問題は、ansible.inventory_pathがディレクトリに設定されており、hostsファイルに設定する必要があることでした。

  ansible.inventory_path = "./vagrant/hosts"

それが指していたディレクトリの代わりに

  ansible.inventory_path = "./vagrant/roles"

今、私は自分のMacで適切に実行するための役割固有のプレイブックを取得しています。窓側はまだそれを動作させる方法が不明です。

1
RyanW