1

Vagrant を使用してラックスペース クラウド インスタンスを作成するプロジェクトに取り組んでいます。私は vagrant-rackspace プラグインを使用しています。vagrantfile で作成された新しいラックスペース インスタンスの IP を取得するために必要な部分を除いて、すべて正常に動作します。

Ansible インベントリーファイル (/etc/ansible/hosts) に追加するには、この IP アドレスが必要です。

ここに私のVagrantfileがあります:

Vagrant.configure(2) do |config|
  config.ssh.private_key_path = "rackspace_rsa"
  config.vm.provider :rackspace do |rs|
    rs.username = "rackspace-user"
    rs.api_key  = "a98weqrq3r34ewfadsf43rffa4697cc0036"
    rs.admin_password = "Password1"
    rs.flavor   = /1 GB Performance/
    rs.image    = /Ubuntu 12.04/
    rs.rackspace_region = :dfw
    rs.server_name =  "ansible_server_1"
    rs.public_key_path  = "rackspace_rsa.pub"
  end
end

インスタンスが作成されたら、シェル プロビジョニングを使用してマシンをプロビジョニングし、ansible をインストールします。ansible をインストールした後、新しく作成されたラックスペース インスタンスの IP を反映するようにインベントリ ファイルを更新します。

4

2 に答える 2

1

Custom IP Resolverを使用してVagrant Host Manager プラグインを使用できます

カスタム IP リゾルバーは、各マシンの IP アドレスを自分で計算する機会を提供し、/etc/hosts を更新しているマシンへのアクセスも提供します。例えば:

config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
  if hostname = (vm.ssh_info && vm.ssh_info[:host])
    `host #{hostname}`.split("\n").last[/(\d+\.\d+\.\d+\.\d+)/, 1]
  end
end
于 2015-09-29T06:42:21.150 に答える
0

@FrédéricHenriコメントには長すぎるため、これを回答として追加します。

私の計画は、ラックスペースに 3 台の仮想マシン (VM-ONE、VM-TWO、および VM-THREE) を起動することでした。

-> I installed vagrant on my macbook 
-> Wrote a vagrantfile to spinup the first box(VM-ONE) 
-> install vagrant and ansible on VM-ONE using vagrant shell provisioning 
-> Write vagrantfile to spin up VM-TWO and VM-THREE 
-> Write playbook to provision VM-TWO and VM-THREE 
-> Run "vagrant up" on VM-ONE 
-> Use vagrant ansible to provision VM-TWO and VM-THREE.

ここで障害物にぶつかりました。

VM-TWO と VM-THREE の IP を含むインベントリ ファイルを作成する必要がありました。

私は、Vagrant が作成する 2 つのインスタンスの IP を含むデフォルトのインベントリ ファイルを提供し、プレイブックの実行中に ansible がそのインベントリ ファイルを使用すると考えました。

vagrant によって自動生成されたインベントリ ファイルは、.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory にあります。

だから私の元の問題は今解決されました。ありがとうございました。

于 2015-10-14T16:38:58.063 に答える