VMware NSX et Ansible

Lors des projets de segmentation avec NSX, il est très fortement (voir indispensable) d’utiliser les Tags. 

Malheureusement, il n’est pas possible de récupérer les Tags venant du vCenter. 

Il peut être intéressant d’automatiser la mise en place de Tag sur NSX en utilisant l’outillage qui réalise déjà la configuration de l’infrastructure à savoir Ansible. 

 

VMware met à disposition une collection Ansible pour cela. 

Les informations concernant cette collection sont disponibles à l’adresse suivante : 

https://github.com/vmware/ansible-for-nsxt  

Il faut au minimum Ansible 2.9, Python 3(.6) et git (et en option PyVmOmi / ovftools si vous voulez aussi automatiser le déploiement des NSX-T Manager)

Installation

La collection n’est pas disponible sur Ansible Galaxy mais il est possible d’installer via la commande suivante :

ansible-galaxy collection install git+https://github.com/vmware/ansible-for-nsxt 

Il est possible en cas de besoin de préciser la version à utiliser en fonction de la version de NSX-T (par exemple pour NSX 3.2) 

ansible-galaxy collection install git+https://github.com/vmware/ansible-for-nsxt.git,v3.2.0 

Configuration

Il n’est pas possible dans NSX de créer des utilisateurs locaux avec un nom d’utilisateur et un mot de passe.  

Il est possible d’utiliser au choix : 

  • Le compte admin (non recommandé), 
  • un compte venant d’un annuaire type LDAP 
  • un compte « Principal Identity » (qui utilise une authentification par certificat).

Pour le compte admin , il suffit dans le début du fichier yaml de préciser les informations : 

        hostname: "192.0.2.23" 
        username: "admin" 
        password: "MyPassword" 

Dans le cas d’un compte LDAP(AD), il suffit son compte (via son adresse mail)  

        hostname: "192.0.2.23" 
        username: "[email protected]" 
        password: "MyLDAPPassword" 

Si on souhaite créer un compte « Principal Identity », il faut passer par openssl  

openssl req -newkey rsa:2048 -sha256 -x509 -days 900 -subj "/CN=alg-ansible" -extensions usr_cert -nodes -keyout alg-ansible.key -out alg-ansible.crt 

Cela génère 2 fichiers alg-ansible.key et alg-ansible.crt qui contient un certificat auto-signé avec un SHA256 (et RSA 2048) valide pour 900 jours pour le CN alg-ansible (avec authentification client). 

Depuis l’interface du NSX Manager, on rajoute le « compte » 

Dans System => Settings => User Management 

Add => Principal Identity Role 

Rajouter le compte avec le certificat crée précédemment (alg-ansible.crt)  

Dans ce cas, il faut utiliser la configuration suivante dans votre fichier playbook 

        hostname: "192.0.2.23" 
        nsx_cert_path: "alg-ansible.crt" 
        nsx_key_path: " alg-ansible.key" 

Playbook : Mise à jour des Tags

Pour mettre à jour un tag, on utilise le playbook suivant : 

- hosts: localhost 
  vars: 
    hostname: "192.0.2.23" 
    username: "[email protected]" 
    password: "MyLDAPPassword" 
  tasks: 
    - name: Update Tags on VMs 
      nsxt_vm_tags: 
        hostname: "{{ hostname }}" 
        username: "{{ username }}" 
        password: "{{ password }}" 
        validate_certs: False 
        virtual_machine_display_name: ALG-ANSIBLE 
        remove_other_tags: False 
        add_tags: 
           - scope: my-scope 
             tag: my-tag 

Il faut préciser le nom de la VM (virtual_machine_display_name), attention le nom est sensible à la case. 

et d’ajouter le tag (et le scope)….

Puis de lancer la commande ansible-playbook tag.yaml 

et si on verifie la VM dans l’inventaire

Il n’ai pas nécessaire de préciser de fichier d’inventaire (-i) en effet le module ansible_for_nsxt utilise comme hosts localhost. C’est le serveur ansible qui fait tourner directement les playbook ansible en utilisant l’API NSX. 

Il est possible parfois d’obtenir l’erreur suivante :

ERROR! couldn't resolve module/action 'nsxt_vm_tags'. This often indicates a misspelling, missing collection, or incorrect module path.

The error appears to be in '/home/alagoutte/ansible_nsxt/tag.yaml': line 4, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - name: Update Tags on VMs
      ^ here

Il faut dans ce cas rajouter la collection au début du fichier playbook

- hosts: localhost
  collections:
    vmware.ansible_for_nsxt
  tasks:
    ...

Il est bien sûr possible de supprimer des tags via la task suivante 

    - name: Remove Tags on VMs
      nsxt_vm_tags:
        hostname: "{{ hostname }}"
        username: "{{ username }}"
        password: "{{ password }}"
        validate_certs: False
        virtual_machine_display_name: ALG-ANSIBLE
        remove_other_tags: True

En cas de besoin, il est possible d’avoir plus de documentation et d’exemple en utilisant la commande suivante : 

ansible-doc -t module vmware.ansible_for_nsxt.nsxt_vm_tags

Voilà une première introduction à l’utilisation d’Ansible pour automatiser son infrastructure et sa sécurité. Il est bien sûr possible d’aller plus loin en créant ses segments ou encore des règles de segmentation mais cela fera parti un autre article ! 

Alexis La Goutte

Rédigé par

Alexis La Goutte

Alexis La Goutte est depuis 8 ans consultant Réseau & Sécurité chez Cheops Technology. Il intervient chez des ETI de l’ouest et quelques grands comptes nationaux. Spécialisé dans le réseau, et plus particulièrement sur les produits Aruba, et dans la virtualisation & sécurisation du réseau VMware NSX. Alexis est certifié Aruba Certified Mobility eXpert (ACMX) et Aruba Certified ClearPass Professional (ACCP) également membre des programmes Aruba Ambassador Partner et MVP Airheads depuis 2017.
Lors qu’il lui reste du temps, il est Core dev pour Wireshark (contributeur au dissector WiFi, TLS, QUIC…) depuis 2011. Il contribue aussi au module PowerNSX qui permet l’automatisation NSX via PowerShell. il y a aussi crée en 2018, PowerAruba qui regroupe différents modules concernant l’automatisation (utilisation des API REST) des produits Aruba/HPE (PowerArubaSW), pour ArubaCX (PowerArubaCX) et enfin pour ClearPass (PowerArubaCP).
Depuis 2020, Alexis est devenu vExpert, et reconnu aussi dans la catégorie vExpert NSX.