Configurer une vm avec Ansible
Nous allons configurer la machine virtuelle que nous avons déployer précédemment, et pour ça nous allons utiliser Ansible
Ansible
Dans la premiere partie, nous avons installé Ansible, là nous allons l’utiliser pour déployer Docker sur notre vm.
Sachez qu’il y a de bonnes pratique en ce qui concerne le layout du dossier qui contiendra vos playbooks Ansible. Un petit coup d’œil ici vous en dira plus. dans notre exemple, on se contentera du strict minimum.
Création de dossier racine,
inventoryetroles:Terminal window mkdir tuto-ansiblemkdir tuto-ansible/inventorymkdir tuto-ansible/rolesOn peut aussi créer le bon
layoutpour les roles a la main, mais a la place, utilisons cette commande qui le fera de façon plus complete :Terminal window ansible-galaxy init tuto-ansible/roles/dockerLe résultat ressemblera a ça :
Terminal window roles/docker/tasks/main.ymlhandlers/main.ymltemplates/main.ymlfiles/main.ymlvars/main.ymldefaults/main.ymlmeta/main.yml
Playbook & Tasks
Maintenant que les dossiers ont bien été créés, nous allons passer à la création des
taskset duplaybook. Pour ça, prenons comme exemple la premièretask:- name: install prerequisites # le nom du taskansible.builtin.apt: # la fonction qui sera utiliser par le task, ici ça sera 'apt'name: '{{ item }}' # ici nous avons utilisé une boucle pour déployer les differents packagesupdate_cache: trueloop: '{{ pre_install_packages }}' # c'est ici d'où viendra la valeur du "{{ item }}" vu plus hautbecome: true # option pour passer en mode rootEn ce qui concerne
"{{ pre_install_packages }}", ceci est unevariablequi se trouve dansroles/docker/defaults/main.yml:pre_install_packages:- apt-transport-https- ca-certificates- curl- gnupg-agent- software-properties-commonNotez qu’il est de bonne pratique d’utiliser des
variablesplutôt que tout mettre en dur dans lestasks, ça sera plus pratique pour modifier après coup.Ouvrez le fichier
roles/docker/tasks/main.ymlet ajoutez y :# Install tous les pre-requis avant d'installer docker- name: install prerequisitesansible.builtin.apt:name: '{{ item }}'update_cache: trueloop: '{{ pre_install_packages }}'become: true# Télécharge la clé gpg- name: add apt-keyansible.builtin.apt_key:url: '{{ gpg_key_url }}'become: true# Ajoute la clé gpg au repo docker- name: add docker repoansible.builtin.apt_repository:repo: deb "{{ docker_url }}" focal stablebecome: true#install docker- name: install dockeransible.builtin.apt:name: '{{ item }}'loop: '{{ main_pkg }}'become: trueAjoutez les
variablesdans le fichierroles/docker/defaults/main.yml:---# default file tasks/main.ymlgpg_key_url: https://download.docker.com/linux/ubuntu/gpgdocker_url: https://download.docker.com/linux/ubuntupre_install_packages:- apt-transport-https- ca-certificates- curl- gnupg-agent- software-properties-commonmain_pkg:- docker-ce- docker-ce-cli- docker-compose- containerd.ioAu niveau du dossier
inventory, créez un fichierinventory.ini, c’est ici que nous allons définir comment et quelle vm nous voulons atteindre :[vm]<adresse-ip-de-la-vm> ansible_connection=ssh ansible_user=azureadminEt enfin, au niveau du dossier racine, créez un fichier
playbook.yml. C’est lui qui lancera notre task :---- name: Docker # nom du playbookhosts: vm # le host sur lequel nous allons appliquer le playbook, ici ça sera vm (comme dans le inventory.ini)roles:- docker # le nom du role que nous voulons utiliser
Déploiement
Pour appliquer notre
playbook, il suffit de lancer la commande suivante, en se mettant au niveau du dossier racine :Terminal window ansible-playbook -i inventory/inventory.ini playbook/yml --private-key=@/.ssh/vm_id_rsa -v
Conclusion
Vous voilà avec une machine virtuelle créée via Terraform, avec Docker de déployé dessus via Ansible. le combo Terraform + Ansible est très pratique, ils offrent un grand panel de possibilités et de liberté pour gérer le déploiement des ressources et la configuration de celles-ci.