La fonctionnalité du système de diagnostic en ligne (ODS) automatise le débogage de NSX lors de l'exécution. ODS est implémenté via des manuels d'exécution intégrés NSX. Les manuels d'exécution contiennent des procédures de débogage et disposent d'une observabilité complète des composants NSX. Un manuel d'exécution génère un rapport de débogage. Il génère également des artefacts d'exécution d'un problème tel que la capture de paquets, le vidage de mémoire en direct du processus utilisateur et la sortie des scripts et des outils. Ces artefacts peuvent être collectés ultérieurement et utilisés pour l'analyse et le débogage hors ligne. Notez que vous ne pouvez pas modifier un manuel d'exécution prédéfini.
Vous pouvez utiliser des API pour effectuer les opérations de manuel d'exécution suivantes :
- Appeler un manuel d'exécution pour lancer le débogage d'exécution
- Vérifier le rapport de débogage
- Télécharger les artefacts générés par le manuel d'exécution appelé
- Gérer le cycle de vie d'un manuel d'exécution
Manuels d'exécution prédéfinis
À partir de NSX 4.1.1, ODS est également pris en charge pour Unified Appliance (UA). Le tableau suivant répertorie les manuels d'exécution et également les nœuds sur lesquels vous pouvez les exécuter.
Manuel d'exécution | Description | Nœud | Version | |
---|---|---|---|---|
PnicPerf | Ce manuel d'exécution peut identifier les problèmes de performances TX et RX de la carte réseau physique. Ce manuel d'exécution utilise l'ID du port logique à diagnostiquer comme argument d'entrée. |
ESXi | 4.1 | |
OverlayTunnel | Ce manuel d'exécution peut identifier les échecs du tunnel de superposition tels qu'un tunnel d'erreur de configuration de la passerelle manquant ou un tunnel inactif. Ce manuel d'exécution utilise l'adresse IP du VTEP source et l'adresse IP du VTEP de destination comme arguments d'entrée. |
ESXi | 4.1 | |
PortBlock | Ce manuel d'exécution peut identifier les causes du blocage d'un port, par exemple un DVPort peut être bloqué en raison d'une configuration LSP/LS incorrecte. | ESXi | 4.1 | |
AdfCollect | Ce manuel d'exécution collecte les données de performances du chemin de données ESXi via le collecteur ADF. Ce manuel d'exécution prend les arguments d'entrée suivants :
|
ESXi | 4.1 | |
ControllerConn | Ce manuel d'exécution peut identifier les problèmes de connectivité du contrôleur causés par une panne du contrôleur, une panne de proxy, une panne du réseau de sous-couche ou un échec de résolution du nom de domaine complet. Ce manuel d'exécution utilise l'adresse IP de l'hôte ESXi et l'adresse IP du contrôleur comme arguments d'entrée. |
ESXi | 4.1 | |
NxgiPlatform | Ce manuel d'exécution diagnostique les problèmes dans le chemin de données de la plate-forme NXGI qui alimente diverses fonctionnalités, telles que MPS distribué, protection de point de terminaison, IDFW, IDS et Intelligence. Ce manuel d'exécution utilise la fonctionnalité comme argument d'entrée. Il s'agit de la fonctionnalité dépendante spécifique de NXGI (une de MPS, IDFW, IDS, EPP et Intelligence avec EPP comme valeur par défaut) qui doit être vérifiée ou déboguée. |
ESXi | 4.1.1 | |
VifInfo | Ce manuel d'exécution obtient des informations détaillées sur une interface virtuelle, qui peuvent être utilisées comme entrée dans d'autres manuels d'exécution. Ce manuel d'exécution prend VIF comme argument d'entrée. |
ESXi | 4.1.1 | |
EdgeHealth |
Ce manuel d'exécution exécute les fonctions suivantes :
Ce manuel d'exécution n'a pas d'argument d'entrée. |
Edge | 4.1.1 | |
MacAddressInfo |
Ce manuel d'exécution diagnostique les problèmes liés à une adresse MAC spécifique et vérifie et corrige les problèmes de performances sur un commutateur hôte. Il exécute les fonctions suivantes :
Ce manuel d'exécution prend le nom du commutateur hôte et l'adresse mac comme arguments d'entrée. |
ESXi | 4.1.1 | |
EdgeDpBfd | Ce manuel d'exécution trie les problèmes NSX Edge BFD. Ce manuel d'exécution prend l'adresse IP source et l'adresse IP de destination de la session BFD comme arguments d'entrée. Il prend également la capture comme argument facultatif pour s'assurer que seuls les paquets BFD spécifiques à la session sont filtrés et capturés. |
Edge | 4.1.1 | |
DistributedMps | Ce manuel d'exécution vérifie la santé du pipeline du service de protection contre les programmes malveillants (MPS) et diagnostique tous les problèmes rencontrés avec MPS, par exemple si la protection ne fonctionne pas sur une machine virtuelle spécifique ou si certains fichiers n'ont pas été analysés. L'argument d'entrée de ce manuel d'exécution est l'UUID de la machine virtuelle à diagnostiquer pour la protection. |
ESXi | 4.1.1 | |
DuplicateVtepDetectorProvider | Ce manuel d'exécution détecte les adresses IP ou libellés en double dans les VTEP. Ce manuel d'exécution n'a pas d'argument d'entrée. |
UA | 4.1.1 | |
LspStaleInfo | Ce manuel d'exécution extrait les ports logiques périmés. Ce manuel d'exécution n'a pas d'argument d'entrée. |
UA | ||
BgpNeighborState | Ce manuel d'exécution diagnostique divers flux qui peuvent entraîner l'inactivité du voisin BGP. Le manuel d'exécution collecte également les artefacts de prise en charge suivants pour le débogage hors ligne.
Ce manuel d'exécution prend les arguments d'entrée suivants :
|
Edge | 4.1.1 | |
PimMrouteState | Ce manuel d'exécution trie la perte de trafic multicast qui peut se produire pour diverses raisons. Compte tenu de l'adresse IP source de l'expéditeur du trafic multicast et de l'adresse IP du groupe du trafic multicast, ce manuel d'exécution permet d'identifier la cause principale du problème et de collecter les artefacts de prise en charge pour le débogage hors ligne. Ce manuel d'exécution prend l'adresse IP source, l'adresse IP de groupe et la direction du trafic comme arguments d'entrée. |
Edge | 4.1.1 | |
OspfNbrState | Ce manuel d'exécution trie les problèmes d'état de voisin OSPF en diagnostiquant divers flux logiques. Ce manuel d'exécution prend l'adresse IP du voisin comme argument d'entrée. |
Edge | 4.1.1 | |
IdpsDpStatus | Ce manuel d'exécution vérifie l'état du module IDPS/IDS (moteur contextuel) et du moteur IDPS. Il compare également les profils, les règles, les signatures et les événements capturés chargés dans le module IDPS et le module moteur IDPS. Ce manuel d'exécution n'a pas d'argument d'entrée. |
ESXi | 4.1.1 | |
NxgiPlatformUA | Ce manuel d'exécution diagnostique les problèmes dans le plan de gestion de la plate-forme NXGI, qui alimente diverses fonctionnalités, telles que MPS distribué, protection de point de terminaison, IDFW, IDS et Intelligence. Ce manuel d'exécution peut être utilisé conjointement avec le manuel d'exécution NxgiPlatform qui s'exécute sur les nœuds de transport. Ce manuel d'exécution prend l'ID du nœud de transport comme argument d'entrée facultatif. |
UA | 4.1.1 | |
CorfuServer | Ce manuel d'exécution vérifie la stabilité de la disposition du serveur Corfu, le ping de l'infrastructure et la condition d'E/S de disque, ainsi que la santé du compacteur. Pour remplacer les jours ou heures de récupération par défaut des événements de journaux, ce manuel d'exécution prend les jours et les heures de recherche en tant qu'arguments d'entrée. |
UA | 4.1.1 | |
EdgeIDPS | Ce manuel d'exécution vérifie et récupère les statistiques de la signature IDS/IPS présente dans le dispositif Edge. Ce manuel d'exécution utilise l'ID de signature comme argument d'entrée. |
Edge | 4.1.1 | |
EdgeRouting | Ce manuel d'exécution vérifie plusieurs aspects de la santé d'un routeur logique donné et fournit une liste des processus Edge qui ne sont pas en bonne santé. Le manuel d'exécution fournit des instructions de dépannage pour les problèmes courants de routage nord/sud. Le manuel d'exécution rassemble diverses informations et indique l'état des protocoles de routage, des tunnels et des ports. Il effectue un contrôle de santé pour la pile de routage et différents démons utilisés par le routage sur le dispositif Edge. Pour l'adresse IP de destination fournie, il vérifie les tables RIB, FIB et ARP. Il exécutera également un test ping et de traceroute à l'aide des adresses IP source et de destination.
Ce manuel d'exécution prend les arguments d'entrée suivants :
|
Edge | 4.1.1 | |
PimConfigCheck |
Ce manuel d'exécution fournit plus de détails sur ce qui a échoué exactement lorsque le dispositif Edge génère une erreur routing_config_error. Il aide également à trier le problème. Ce manuel d'exécution n'a pas d'argument d'entrée. |
Edge | 4.1.1 | |
NCPPendingPod | Ce manuel d'exécution débogue l'espace bloqué dans un état d'attente. Ce manuel d'exécution prend l'espace de noms et le nom de l'espace en attente comme arguments d'entrée. |
ESXi | 4.1.2 |
Étapes de débogage lors de l'exécution
Pour déboguer lors de l'exécution, procédez comme suit :
- Étape 1 : extrayez une liste de manuels d'exécution prédéfinis.
-
Exécutez l'API suivante pour extraire une liste de manuels d'exécution prédéfinis.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/pre-defined-runbooks
Cette API renvoie une liste de manuels d'exécution prédéfinis avec les informations suivantes :
- Détails de la configuration.
- Type de nœud sur lequel le manuel d'exécution est pris en charge.
- Détails généraux du manuel d'exécution tels que l'ID, le nom et le chemin d'accès.
- Détails du paramètre, le cas échéant, au moment de l'appel du manuel d'exécution.
Exemple de réponse :
{ "results": [ { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 300, "threshold_number": 5, "throttle_cycle": 10 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "advanced", "optional": true, "parameter_type": "BOOLEAN", "default_value": "False" }, { "name": "cycle", "optional": false, "parameter_type": "INTEGER", "max": "20", "min": "1" }, { "name": "interval", "optional": true, "parameter_type": "INTEGER", "max": "300", "min": "1" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-4164-6643-6f6c6c656374", "display_name": "AdfCollect", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-4164-6643-6f6c6c656374", "relative_path": "00000000-0000-4164-6643-6f6c6c656374", "parent_path": "/infra", "remote_path": "", "unique_id": "069a4c7b-532a-4926-a402-6a7986a306b2", "realization_id": "069a4c7b-532a-4926-a402-6a7986a306b2", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880454, "_create_user": "system", "_last_modified_time": 1669600880454, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 60, "threshold_number": 5, "throttle_cycle": 3 }, "supported_node_types": [ "nsx-esx" ], "resource_type": "OdsPredefinedRunbook", "id": "0000436f-6e74-726f-6c6c-6572436f6e6e", "display_name": "ControllerConn", "path": "/infra/sha/pre-defined-runbooks/0000436f-6e74-726f-6c6c-6572436f6e6e", "relative_path": "0000436f-6e74-726f-6c6c-6572436f6e6e", "parent_path": "/infra", "remote_path": "", "unique_id": "3914cbe4-41b4-45f1-9dad-2bd96a2de0d8", "realization_id": "3914cbe4-41b4-45f1-9dad-2bd96a2de0d8", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880493, "_create_user": "system", "_last_modified_time": 1669600880493, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 120, "threshold_number": 5, "throttle_cycle": 5 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "src", "optional": false, "parameter_type": "COMPOUND" }, { "name": "dst", "optional": false, "parameter_type": "COMPOUND" } ], "resource_type": "OdsPredefinedRunbook", "id": "0000004f-7665-726c-6179-54756e6e656c", "display_name": "OverlayTunnel", "path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "relative_path": "0000004f-7665-726c-6179-54756e6e656c", "parent_path": "/infra", "remote_path": "", "unique_id": "3597af28-e670-456e-8347-4d1a53a5cb90", "realization_id": "3597af28-e670-456e-8347-4d1a53a5cb90", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880518, "_create_user": "system", "_last_modified_time": 1669600880518, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 120, "threshold_number": 5, "throttle_cycle": 5 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "lsp", "optional": false, "parameter_type": "STRING" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-0000-506e-696350657266", "display_name": "PnicPerf", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-0000-506e-696350657266", "relative_path": "00000000-0000-0000-506e-696350657266", "parent_path": "/infra", "remote_path": "", "unique_id": "53f29b77-dcf5-4561-85ec-8f35280e3f3a", "realization_id": "53f29b77-dcf5-4561-85ec-8f35280e3f3a", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880553, "_create_user": "system", "_last_modified_time": 1669600880553, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 }, { "version": { "major": 1, "minor": 0 }, "default_config": { "enabled": true, "timeout": 60, "threshold_number": 5, "throttle_cycle": 3 }, "supported_node_types": [ "nsx-esx" ], "parameters": [ { "name": "vif", "optional": false, "parameter_type": "STRING" } ], "resource_type": "OdsPredefinedRunbook", "id": "00000000-0000-0050-6f72-74426c6f636b", "display_name": "PortBlock", "path": "/infra/sha/pre-defined-runbooks/00000000-0000-0050-6f72-74426c6f636b", "relative_path": "00000000-0000-0050-6f72-74426c6f636b", "parent_path": "/infra", "remote_path": "", "unique_id": "6f411a92-30c0-4838-9758-c00220cb5fab", "realization_id": "6f411a92-30c0-4838-9758-c00220cb5fab", "owner_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "origin_site_id": "f2a2a9e1-2578-435d-877d-47e01eb04954", "marked_for_delete": false, "overridden": false, "_create_time": 1669600880572, "_create_user": "system", "_last_modified_time": 1669600880572, "_last_modified_user": "system", "_system_owned": false, "_revision": 0 } ], "result_count": 5, "sort_by": "display_name", "sort_ascending": true }
Dans la réponse ci-dessus, les manuels d'exécution prédéfinis suivants sont renvoyés.- AdfCollect
- ControllerConn
- OverlayTunnel
- PnicPerf
- PortBlock
Si un manuel d'exécution nécessite un paramètre au moment de l'appel, les détails du paramètre sont spécifiés dans la clé parameters. Par exemple, le manuel d'exécution du tunnel de superposition nécessite deux paramètres, source et destination, qui sont des adresses IP VTEP locales et distantes du tunnel à diagnostiquer.
- Étape 2 : appelez le manuel d'exécution.
-
Exécutez l'API suivante pour appeler un manuel d'exécution.
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>
Exemple de demande : appel du manuel d'exécution du tunnel de superposition.
POST https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/OverlayTunnel { "runbook_path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "target_node": "6c7a9374-459d-46b2-9ea6-c63b37c7cc38", "arguments": [ { "key": "src", "value": "192.168.0.11" }, { "key": "dst", "value": "192.168.0.10" } ] }
- Étape 3 : vérifiez le rapport du manuel d'exécution appelé
-
Exécutez l'API suivante pour obtenir le rapport du manuel d'exécution appelé.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/report
Exemple de demande :
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/OverlayTunnel/report
Exemple de réponse :
{ "invocation_id": "70527fed-1e5e-4fed-a880-28cde04a66b1", "target_node": "6c7a9374-459d-46b2-9ea6-c63b37c7cc38", "timestamp": 1662469099, "sys_info": { "host_name": "sc2-10-185-4-158.eng.vmware.com", "os_name": "VMkernel", "os_version": "7.0.3" }, "result_message": "Tunnel 192.168.0.11 -> 192.168.0.10 is in up state", "recommendation_message": "No changes required as the tunnel is in up state.", "step_details": [ { "step_id": 1, "action_summary": "Check the status of tunnel for the given source/destination VTEPs.", "action_result": "Tunnel 192.168.0.11 -> 192.168.0.10 is in state up" } ], "status": { "request_status": "SUCCESS", "operation_state": "FINISHED" } }
La réponse renvoie des informations sur les métadonnées telles que l'état et les détails du système (le nom d'hôte et le système d'exploitation par exemple). Le rapport renvoie également le résultat du débogage, la suggestion de correction, le cas échéant, ainsi que les étapes exécutées pour le débogage avec le résumé des actions et le résultat de l'action de chaque étape. Si le débogage est interrompu pour une raison quelconque, le champ operation_state contient une valeur pour définir la raison de l'interruption. Si l'invocation du manuel d'exécution échoue, le rapport fournit des détails sur l'erreur et n'affiche pas les champs associés au débogage.
- Étape 4 : téléchargez les artefacts.
-
- Exécutez l'API suivante pour collecter des artefacts.
POST https://{{mgr-ip}}/policy/api/v1/infra/sha/runbook-invocations/{{invocation-name}}
Exemple de demande :POST https://{{mgr-ip}}/policy/api/v1/infra/sha/runbook-invocations/{{invocation-name}} { "runbook_path": "/infra/sha/pre-defined-runbooks/00000000-0000-4164-6643-6f6c6c656374", "target_node": "{{target-node}}", "arguments": [ { "key": "advanced", "value": "{{advanced-mode}}" }, { "key": "cycle", "value": "{{cycle-count}}" }, { "key": "interval", "value": "{{interval-in-sec}}" } ] }
Si le paramètre advanced est défini sur false au moment de l'appel, le manuel d'exécution collecte des informations de topologie, des statistiques réseau, des statistiques NSX DP et des informations de liaison montante. Si le paramètre advanced est défini sur true, le manuel d'exécution exécute également des outils de performances avancés tels que vmkstats (disponible uniquement sur la machine physique).
Le paramètre cycle définit le nombre de fois où le collecteur ADF est exécuté dans un appel.
Le paramètre interval définit l'intervalle d'attente entre les exécutions consécutives du collecteur ADF. Il prend effet uniquement lorsque le paramètre cycle est défini sur une valeur supérieure à 1.
Exemple de réponse :
{ "invocation_id": "80a0037a-52e1-48d7-b28e-c3bfb8475e8c", "target_node": "b794f78f-7eb0-433f-8f11-63e6b3121c28", "timestamp": 1668674073, "sys_info": { "host_name": "sc2-rdops-vm06-dhcp-204-101.eng.vmware.com", "os_name": "VMkernel", "os_version": "7.0.3" }, "result_message": "ADF data collection runbook completes.", "recommendation_message": "No action needs to be taken.", "step_details": [ { "step_id": 1, "action_summary": "Run ADF collector.", "action_result": "ADF data collection is successfully performed in the following time point(s) along with the following artifact(s): [(2022-11-17 08:35:30, a44f0446-0ac3-4e7f-8513-fb1248985d9e.tar)]", "artifacts": [ "a44f0446-0ac3-4e7f-8513-fb1248985d9e" ] } ], "status": { "request_status": "SUCCESS", "operation_state": "FINISHED" } }
- Exécutez l'API suivante pour télécharger les artefacts.
GET https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-invocations/<invoke-name>/artifact
Si le manuel d'exécution a généré les artefacts, l'API renvoie un fichier groupé. Sinon, elle renvoie un message d'erreur. Enregistrez la réponse binaire dans un fichier tar.gz. Ce fichier contient un rapport d'appel de manuel d'exécution (au format JSON) ainsi qu'un fichier tar pour la collecte ADF effectuée.
- Exécutez l'API suivante pour collecter des artefacts.
Modification d'une configuration de manuel d'exécution
Un groupe de nœuds de transport (TN) est d'abord créé puis un profil de manuel d'exécution lui est lié. Si vous modifiez la configuration d'un manuel d'exécution, elle est modifiée sur tous les nœuds auxquels le profil de manuel d'exécution est lié. Vous pouvez configurer si un manuel d'exécution est activé ou non, le délai d'expiration du débogage et la fréquence à laquelle le manuel d'exécution peut être appelé à l'aide du mécanisme de cycle de limitation. Le mécanisme de cycle de limitation spécifie le nombre de fois qu'un manuel d'exécution peut être exécuté à une heure spécifique.
Notez qu'un manuel d'exécution ne peut avoir qu'un seul profil, mais qu'un nœud peut avoir plusieurs profils de manuel d'exécution basés sur les groupes TN auxquels il appartient. Dans ce cas, le profil ayant la priorité la plus élevée est appliqué sur le nœud.
Pour modifier le configuration d'un manuel d'exécution, procédez comme suit :
- Étape 1 : créez un groupe TN d'ESXi.
-
Exécutez l'API suivante pour créer un groupe TN.
PATCH https://<nsx-mgr>/policy/api/v1/infra/domains/default/groups/<group-name>
Exemple de demande :
PATCH https://<nsx-mgr>/policy/api/v1/infra/domains/default/groups/<group-name> { "expression": [ { "paths": [ "/infra/sites/default/enforcement-points/default/host-transport-nodes/TN1" ], "resource_type": "PathExpression" } ], "extended_expression": [], "reference": false, "group_type": [], "resource_type": "Group" }
- Étape 2 : modifiez la configuration du profil de manuel d'exécution et liez le groupe TN au profil.
-
Exécutez l'API suivante pour modifier la configuration,
PATCH https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-profiles/<profile-name>
Exemple de demande :
PATCH https://<nsx-mgr>/policy/api/v1/infra/sha/runbook-profiles/<profile-name> { "runbook_path": "/infra/sha/pre-defined-runbooks/0000004f-7665-726c-6179-54756e6e656c", "applied_to_group_path": "/infra/domains/default/groups/tngroup2", "config": { "enabled": true, "timeout": 120, "threshold_number": 2, "throttle_cycle": 6 } }
Dans cet exemple, le throttle_cycle est de 6 minutes et le hreshold_number est 2, ce qui signifie qu'en 6 minutes, le manuel d'exécution ne peut pas être appelé plus de deux fois.
Pour obtenir des informations complètes sur les API ODS, reportez-vous au Guide de l'API de NSX Intelligence et de NSX Application Platform.