Ansible with Vagrant:从 Vagrantfile "extra_vars"读取库存



我们的本地开发盒正在运行Virtualbox/Vagrant,并由ansible提供。现在我们为盒子设置了一个固定的IP地址,我们需要在三个不同的地方使用它。我们的流浪者档案是这样的:

# Set the Vagrantbox IP address
VAGRANT_NETWORK_IP = "10.0.0.10"
# Set the Ansible configuration environment variable
ENV['ANSIBLE_CONFIG'] = "./ansible/.ansible.cfg"
Vagrant.configure("2") do |config|
  config.vm.box     = "ubuntu-precise-64"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network :private_network, ip: VAGRANT_NETWORK_IP
  config.vm.synced_folder ".", "/var/www"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook       = "ansible/playbook.yml"
    ansible.limit          = "all"
    ansible.inventory_path = "ansible/hosts/vagrant"
    ansible.extra_vars     = {target: VAGRANT_NETWORK_IP}
  end
end

以及我们可靠的战术手册:

---
- hosts: "{{ target }}"
  sudo: yes
  roles:
    # ...

我们的库存文件:

10.0.0.10 ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

我们使用变量VAGRANT_NETWORK_IP重用了Vagrantfile中的IP地址。但是,我们仍然需要在库存中设置此IP地址是否可以在库存文件中使用易解析变量作为主机?简单地在库存中使用{{target}}是行不通的。

或者,有没有其他方法可以让这件事变得更容易?如果可能的话,我们希望在一个文件中配置这些盒子的IP地址。

Vagrantfile只是一个普通的ruby文件,因此您可以从中生成库存文件:

File.open('ansible/hosts/vagrant' ,'w') do |f|
  f.write "[default]n"
  f.write "#{VAGRANT_NETWORK_IP} ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_keyn"
end

默认情况下,"流浪者"框以名称"default"开头,所以我通常将可解析的托管主机限制为流浪者的主机(您可以将ansible.limit="default")。

如果你想有几个带有一个库存的流浪箱子,你可以在一个流浪文件中定义这些箱子,并为其生成库存。

最新更新