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 !