Loading search data...

Vagrant - Inventaire dynamique avec ansible

Publié le : 29 octobre 2021 | Mis à jour le : 27 juin 2023

logo

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

Ce qui donne :

# Generated by Vagrant

host1 ansible_host=... http_port=80 maxRequestsPerChild=808
host2 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"}
    }
  end
end

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]
group1
group2

[group1:vars]
variable1=9
variable2=example

Voilà qui va vous simplifier la vie et ouvrir d’autres perspectives d’utilisation de Vagrant.

Toutes les infos ici

Mots clés :

devops tutorials ansible vagrant

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur  Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne vous coûte plus cher, via  ce lien . Vous pouvez aussi partager le lien sur twitter ou Linkedin via les boutons ci-dessous. Je vous remercie pour votre soutien.

Autres Articles


Commentaires: