Vous pouvez utiliser Ansible pour automatiser certaines tâches dans votre infrastructure VMware. Vous pouvez déployer et configurer automatiquement des hôtes ESXi, gérer les paramètres réseau, démarrer, arrêter ou supprimer des machines virtuelles, déployer des machines virtuelles à partir de modèles, installer des mises à jour sur des hôtes ESXi, etc. Cet article explique comment démarrer avec Ansible pour gérer votre environnement VMware.
Ansible dispose d'un grand nombre de modules pour gérer l'infrastructure VMware et la plupart d'entre eux sont basés surpyVmomi(un SDK Python qui vous permet de vous connecter à l'API VMware vSphere). Installez pyVmomi avec le gestionnaire pip :
$ sudo pip install pyvmomi


Nous supposons que vous disposez déjà d’un hôte Linux sur lequel Ansible est installé.
Pour autoriser l'utilisation du plug-in d'inventaire dynamique VMware, activez l'optionvmware_vm_inventorydansansible.cfg:
[inventory] enable_plugins = vmware_vm_inventory, host_list, script, auto, yaml, ini, toml vmware_vars plugin: vmware_vm_inventory strict: False hostname: 192.168.13.70 username: [email protected] password: pas1swsew43 validate_certs: False with_tags: True
Ensuite, vous pouvez exécuter la commande inventor et obtenir une liste des machines virtuelles sur votre serveur vCenter ou ESXi.
$ ansible-inventory --list -i /etc/ansible/vmware/vmware.yml
Vous pouvez obtenir une liste hiérarchique des VM :
$ ansible-inventory --graph -i /etc/ansible/vmware/vmware.yml


Ajoutons la liste de vos hôtes ESXi à/etc/ansible/hosts:
[all_esxi_hosts] esxi1 ansible_host=192.168.31.20 esxi2 ansible_host=192.168.31.21 esxi3 ansible_host=192.168.31.22
Définissez les valeurs des variables pour ce groupe d'hôtes :
[all_esxi_hosts:vars] ansible_user=root ansible_python_interpreter=/bin/python ansible_ssh_pass=P1ssw0rd6


Dans cet exemple, le mot de passe root de l'hôte ESXi est spécifié en texte clair. Il est recommandé de configurer l'authentification basée sur la clé SSH sur ESXi dans un environnement de production.
Vous pouvez ensuite vérifier que tous les hôtes ESXi sont accessibles depuis l'hôte Ansible via le réseau :
$ ansible all_esxi_hosts -m ping
Vous pouvez demander de manière interactive le mot de passe si vous ne l'avez pas spécifié dans le fichier hosts :
$ ansible all_esxi_hosts -m ping --ask-pass


Avec Ansible, vous pouvez exécuter n'importe quelle commande sur tous vos hôtes ESXi. Le mode de commande ad hoc d'Ansible est utilisé pour exécuter la commande sur l'ESXi distant. Par exemple, vous souhaiterez peut-être connaître le numéro de version ESXi de tous vos hôtes :
$ ansible all_esxi_hosts -m shell -a "vmware -vl"


De cette façon, vous pouvez exécuter n'importe quelle commande shell sur n'importe lequel des hôtes (SSH doit être activé sur ESXi).
Créons un playbook Ansible simplevm_start.ymlpour allumer une machine virtuelle spécifique dans VMware vCenter. Ce playbook utilise les informations d'identification de connexion devmware_vars.yml.
- name: start vm
hosts: localhost
become: false
gather_facts: false
collections:
- community.vmware
pre_tasks:
- include_vars: vmware_vars.yml
tasks:
- name: power on
vmware_guest_powerstate:
hostname: "{{ hostname }}"
username: "{{ username }}"
password: "{{ password }}"
name: munfs01
validate_certs: "{{ validate_certs }}"
state: powered-on
Exécutez le playbook :
$ ansible-playbook /etc/ansible/vmware/vm_start.yml


Ouvrez vSphere Client et vérifiez que votre VM a démarré avec succès.

Le playbook suivant vous permet d'activer le service ntpd sur un hôte ESXi spécifique. Installez le module community.vmware avant d'utiliser ce Playbook :
$ ansible-galaxy collection install community.vmware
Créez maintenant un playbook (nous avons spécifié les paramètres de connexion directement dans le Playbook pour rendre cela plus facile à comprendre.) :
---
- hosts: localhost
vars:
vcenter_hostname: "192.168.31.20"
vcenter_user: "[email protected]"
vcenter_password: "passwprd123"
esxi_hostname: "192.168.31.50"
esxi_username: "root"
esxi_password: "es-122023"
tasks:
- name: Start Service on esxi host in vcenter
community.vmware.vmware_host_service_manager:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_password }}"
esxi_hostname: "{{ esxi_hostname }}"
service_name: ntpd
state: present #present #absent
service_policy: off
validate_certs: no
delegate_to: localhost
Exécutez votre playbook :
$ ansible-playbook /etc/ansible/vmware/vm_esxi_start_service.yml
Notez que les paramètres gratuits de VMware Hypervisor ne peuvent pas être modifiés depuis Ansible. Les API ESXi sont en lecture seule dans cette version.
Dans cet article, nous avons couvert les bases de l'utilisation d'Ansible pour gérer VMware ESXi, vCenter et les machines virtuelles dans un environnement vSphere.
Dans l'article précédent, nous vous avons montré comment utiliser Ansible pour gérer les hôtes Windows.
Lecture recommandée :VMware contre VirtualBox : Guide complet












