Inventaire dynamique Ansible/Vagrant
Publié le :
Si comme moi vous utilisez Vagrant pour développer, sachez que Vagrant génère
ses propres inventaires. Il le fait déjà, mais vous ne le savez pas. Dès lors
que vous utilisez ansible comme provisionneur, il crée l’inventaire dans le
répertoire suivant .Vagrant/.Vagrant/provisioners/ansible/inventory
. Cet
inventaire porte le nom Vagrant_ansible_inventory
dont le contenu est par
exemple le suivant :
# Generated by Vagrant
builder ansible_host=192.168.121.132 ansible_port=22 ansible_user='Vagrant' ansible_ssh_private_key_file='/home/Vagrant/Projets/ansible/build-containers/.Vagrant/machines/builder/libvirt/private_key'
Vous pouvez utiliser cet inventaire en l’indiquant dans l’option -i
ou en l’ajoutant
dans votre fichier ansible.cfg
local.
ansible -i .vagrant/provisioners/ansible/inventory/ -m ping all
Friday 29 October 2021 09:21:48 +0200 (0:00:00.037) 0:00:00.037 ********builder | SUCCESS => { "changed": false, "ping": "pong"}Friday 29 October 2021 09:21:48 +0200 (0:00:00.328) 0:00:00.365 ********===============================================================================ping -----------------------------------------------------------------------0.33s
Dans votre fichier ansible.cfg :
[defaults]inventory=.vagrant/provisioners/ansible/inventory
Ajouter des variables
Host_vars permet d’ajouter des variables à cet inventaire :
Vagrant.configure("2") do |config| config.vm.define "host1" config.vm.define "host2" config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" ansible.host_vars = { "host1" => {"http_port" => 80, "maxRequestsPerChild" => 808}, "host2" => {"http_port" => 303, "maxRequestsPerChild" => 909} } endend
Ce qui donne :
# Generated by Vagrant
host1 ansible_host=... http_port=80 maxRequestsPerChild=808host2 ansible_host=... http_port=303 maxRequestsPerChild=909
Créer des groupes
On peut regrouper des machines avec groups :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.define "machine1" config.vm.define "machine2"
config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" ansible.groups = { "group1" => ["machine1"], "group2" => ["machine2"], "group3" => ["machine[1:2]"], "group4" => ["other_node-[a:d]"], # silly group definition "all_groups:children" => ["group1", "group2"], "group1:vars" => {"variable1" => 9, "variable2" => "example"} } endend
Ce qui donne :
# Generated by Vagrant
machine1 ansible_host=127.0.0.1 ansible_port=2200 ansible_user='vagrant' ansible_ssh_private_key_file='/home/.../.vagrant/machines/machine1/virtualbox/private_key'machine2 ansible_host=127.0.0.1 ansible_port=2222 ansible_user='vagrant' ansible_ssh_private_key_file='/home/.../.vagrant/machines/machine2/virtualbox/private_key'
[group1]machine1
[group2]machine2
[group3]machine[1:2]
[group4]other_node-[a:d][all_groups:children]group1group2
[group1:vars]variable1=9variable2=example
Voilà qui va vous simplifier la vie et ouvrir d’autres perspectives d’utilisation de Vagrant.
Toutes les infos ici ↗