Gestion de l'infrastructure VMware avec Ansible

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

Related Posts