Loading search data...

Ansible et Vagrant sont dans le même bateau

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éé l’inventaire dans le répertoire suivant .Vagrant/.Vagrant/provisioners/ansible/inventory. Cette 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

Voila 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 nous coûte plus cher, via ce lien. Je vous remercie de votre soutien