Il y a quelque temps (mois) maintenant, j’ai vu passer sur mon Twitter, un message de mon ami Timo concernant un nouvel outil permettant de récupérer les différents produits VMware (vCenter, NSX, VMware Tools, Tanzu…) directement en ligne de commande.

 

Mais quel est le but de ces commandes, me direz-vous  ?! Dans le cas de VMware Tanzu, cela peut être très intéressant car il est nécessaire de mettre en place une jumpbox (machine de rebond avec les différents outil Tanzu/K8S & co…). Potentiellement, cette jumpbox ne dispose pas d’interface graphique (un linux avec juste un accès SSH) ou encore directement depuis le shell ESXi…. (Pratique pour les MAJ !).

Il existe déjà des outils comme vmw-cli ou Romain Decker avait écrit un article mais l’outil est ecrit en nodejs avec tous ses dependances (et sa lourdeur!) … 

Installation

L’outil est disponible directement sur le Github de VMware Labs sous licence Apache. il est écrit en Go (le langage de Google) et il est donc nativement portable sous Windows, Linux & MacOS (sauf MacOS Silicon/ARM car pas encore de builder Github Action pour faire une image…). 

Pour l’installation, il suffit de récupérer l’outil via Github dans Release

Actuellement la version 1.1.6 est disponible.

J’utilise wget personnellement pour récupérer le fichier.

 

wget https://github.com/vmware-labs/vmware-customer-connect-cli/releases/download/v1.1.6/vcc-linux-v1.1.6
[...]
2023-09-11 16:23:07 (19.7 MB/s) - ‘vcc-linux-v1.1.6’ saved [11511177/11511177]

On bascule l’outil en exécutable mais ce n’est pas obligatoire. On peut le copier dans /usr/bin comme cela, il est toujours disponible (mais il faut être root/sudo). 

chmod ugo+x vcc-linux-v1.1.6
sudo install vcc-linux-v1.1.6 /usr/local/bin/vcc

L’outil est maintenant disponible :

vcc
vcc downloads binaries from customerconnect.vmware.com

Usage:
  vcc [command]

Examples:
  # Download the latest version of release 11 with a file matching the pattern
  # If using a * in the filename value, make sure to wrap the text in single quotes on linux/macos
  vcc download -p vmware_tools -s vmtools -v 11.* -f 'VMware-Tools-darwin-*.zip' --accepteula

  # Download files using a manifest file
  # Show an example manifest using 'vcc get manifestexample'
  vcc download -m manifest.yml --accepteula

  # List of available products
  vcc get products

  # List of available sub-products of product vmware_tools
  vcc get subproducts -p vmware_tools

  # List of available versions of sub-products vmtools of vmware_tools
  vcc get versions -p vmware_tools -s vmtools

  # List of available files of version 11.3.0 of vmware_tools
  vcc get files -p vmware_tools -s vmtools -v 11.3.0

  # Display example manifest file
  vcc get manifestexample

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  download    Download file from VMware
  get         Display responses
  help        Help about any command
  logout      Remove all session cookies

Flags:
  -h, --help          help for vcc
      --pass string   Password used to authenticate [$VCC_PASS]
      --user string   Username used to authenticate [$VCC_USER]
  -v, --version       version for vcc

Use "vcc [command] --help" for more information about a command

Utilisation

Pour récupérer la liste des produits : vcc get products

Cela permet de télécharger la longue liste des produits VMware disponibles sur le portail :

vcc get products

PRODUCT CODE PRODUCT DESCRIPTION
advanced_monitoring_for_vmware_horizon_by_controlup Advanced Monitoring for VMware Horizon by ControlUp
application_transformer_for_vmware_tanzu Application Transformer for VMware Tanzu
nsx_network_detection_and_response NSX Network Detection and Response
vmware_nsx_intelligence VMWare NSX Intelligence
[...]
vmware_tanzu_advanced_edition VMware Tanzu Advanced Edition
vmware_tanzu_basic_edition VMware Tanzu Basic Edition
vmware_tanzu_cli VMware Tanzu CLI
vmware_tanzu_kubernetes_grid VMware Tanzu Kubernetes Grid
vmware_tanzu_kubernetes_grid_integrated_edition VMware Tanzu Kubernetes Grid Integrated Edition
vmware_tanzu_mission_control_self_managed VMware Tanzu Mission Control (Self-Managed)
vmware_tanzu_sql_with_mysql_for_kubernetes VMware Tanzu SQL with MySQL for Kubernetes
vmware_tanzu_sql_with_postgres_for_kubernetes VMware Tanzu SQL with Postgres for Kubernetes
vmware_tanzu_standard_edition VMware Tanzu Standard Edition
vmware_tanzu_toolkit_for_kubernetes VMware Tanzu Toolkit for Kubernetes
[..]

 

On va s’intéresser à maintenant à Tanzu Kubernetes Grid (TKGm). Pour cela, on télécharge la liste des  « sous-produits » (NSX ALB ou Tanzu…) :  vcc get subproducts -p vmware_tanzu_kubernetes_grid

vcc get subproducts -p vmware_tanzu_kubernetes_grid

SUB-PRODUCT CODE        DESCRIPTION
nsx-alb                 VMware NSX Advanced Load Balancer
tkg                     VMware Tanzu Kubernetes Grid

On récupère maintenant les versions disponibles du « sous produit » (tkg/tanzu) dans notre cas :

vcc get versions -p vmware_tanzu_kubernetes_grid -s tkg

 vcc get versions -p vmware_tanzu_kubernetes_grid -s tkg

'2.2.0' '2.1.1' '2.1.0' '1.6.1' '1.6.0' '1.5.4' '1.5.3' '1.5.2' '1.5.1' '1.5.0' '1.4.3' '1.4.2' '1.4.1' '1.4.0' '1.3.1' '1.3.0' '1.2.1' '1.2.0' '1.1.3' '1.1.2' '1.1' '1.0'

Pour la prochaine étape, il faut disposer d’un compte chez VMware (c’est gratuit ! et cela marche même avec une adresse mail personnelle…) et suivant les produits, c’est en accès libre (ESXi, Tanzu…).

On specifie les variables d’environnement avec notre login et mot de passe (c’est possible aussi d’utiliser les arguments –user ou -pass) cf la doc. Attention si vous avez activé le MFA sur votre compte, ce n’est pas encore compatible pour le moment (Issue 6).

export VCC_USER='[email protected]'
export VCC_PASS='MySuperSecureP@ssw0rdVMware1!'

sinon on obtient le message d’erreur assez clair :

Credentials not provided!
You must either provide the username and password as arguements
or you must export them as VCC_USER and VCC_PASS environment variables.

On récupère les fichiers disponibles pour la dernière version (2.2.0) : vcc get files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0

vcc get files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0

Logging in...
Getting DLG Details

Version:               2.2.0
Eula Accepted:         false
Eligable to Download:  true

FILENAME                                                                        SIZE            BUILD NUMBER    DESCRIPTION
tanzu-cli-bundle-darwin-amd64.tar.gz                                            251.44 MB       21752685        VMware Tanzu CLI for Mac
tanzu-cli-bundle-linux-amd64.tar.gz                                             244.94 MB       21752685        VMware Tanzu CLI for Linux
tanzu-cli-bundle-windows-amd64.zip                                              248.96 MB       21752685        VMware Tanzu CLI for Windows
photon-3-kube-v1.25.7+vmware.2-tkg.1-8795debf8031d8e671660af83b673daa.ova       1020.36 MB      21752685        Photon v3 Kubernetes v1.25.7 OVA
photon-3-kube-v1.24.11+vmware.1-tkg.1-23267fd741797cde1d2be365ea5df6b4.ova      1.03 GB         21752685        Photon v3 Kubernetes v1.24.11 OVA
photon-3-kube-v1.23.17+vmware.1-tkg.1-879196c3a566442fc5aeea6ac084766b.ova      1.01 GB         21752685        Photon v3 Kubernetes v1.23.17 OVA
ubuntu-2004-kube-v1.25.7+vmware.2-tkg.1-8a74b9f12e488c54605b3537acb683bc.ova    1.62 GB         21752685        Ubuntu 2004 Kubernetes v1.25.7 OVA
ubuntu-2004-kube-v1.24.11+vmware.1-tkg.1-2ccb2a001f8bd8f15f1bfbc811071830.ova   1.79 GB         21752685        Ubuntu 2004 Kubernetes v1.24.11 OVA
ubuntu-2004-kube-v1.23.17+vmware.1-tkg.1-ee4d95d5d08cd7f31da47d1480571754.ova   1.71 GB         21752685        Ubuntu 2004 Kubernetes v1.23.17 OVA
kubectl-mac-v1.25.7+vmware.2.gz                                                 14.75 MB        21752685        kubectl cli v1.25.7 for Mac
kubectl-linux-v1.25.7+vmware.2.gz                                               13.53 MB        21752685        kubectl cli v1.25.7 for Linux
kubectl-windows-v1.25.7+vmware.2.exe.gz                                         13.71 MB        21752685        kubectl cli v1.25.7 for Windows
photon-4-harbor-v2.7.1+vmware.1-dfd94f1401c510c355438a02521e72ce5e8042b5.ova    1.23 GB                         Photon v4 Harbor v2.7.1 OVA
crashd-darwin-amd64-v0.3.7+vmware.5-4-g59b239d.tar.gz                           9.08 MB         20430856        Crash Recovery and Diagnostics 0.3.7 for Mac for Tanzu Kubernetes Grid
crashd-linux-amd64-v0.3.7+vmware.5-4-g59b239d.tar.gz                            8.26 MB         20430856        Crash Recovery and Diagnostics 0.3.7 for Linux for Tanzu Kubernetes Grid
velero-mac-v1.9.7+vmware.1.gz                                                   30.03 MB        21618693        Velero 1.9.7 for Mac
velero-linux-v1.9.7+vmware.1.gz                                                 29.39 MB        21618693        Velero 1.9.7 for Linux
velero-windows64-v1.9.7+vmware.1.gz                                             29.55 MB        21618693        Velero 1.9.7 for Windows
photon-3-kube-v1.25.7+vmware.1-tiny.2-tkg.1-ac20b3.ova                          600.46 MB                       Photon v3 Kubernetes v1.25.7 Tiny OVA(Technical Preview)
ubuntu-2004-kube-v1.25.7+vmware.1-tiny.2-tkg.1-2319b3.ova                       937.85 MB                       Ubuntu 2004 Kubernetes v1.25.7 Tiny OVA (Technical Preview)

Téléchargement

Pour lancer le téléchargement d’un fichier (le bundle tanzucli , on utilise la commande suivants : vcc download files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0 -f ‘tanzu-cli-bundle-darwin-amd64.tar.gz’

vcc download files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0 -f ‘tanzu-cli-bundle-darwin-amd64.tar.gz’

No output directory set. Downloading to /home/vcc/vcc-downloads
Logging in…
Collecting download payload
Eula has not been accepted for this sub-product


Il faut penser à activer le flag —accepteula sinon pas de téléchargement : vcc download files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0 -f ‘tanzu-cli-bundle-darwin-amd64.tar.gz’ –accepteula


vcc download files -p vmware_tanzu_kubernetes_grid -s tkg -v 2.2.0 -f 'tanzu-cli-bundle-darwin-amd64.tar.gz' --accepteula

No output directory set. Downloading to /home/vcc/vcc-downloads
Logging in...
Collecting download payload

Download started to /home/vcc/tanzu-cli-bundle-darwin-amd64.tar.gz
Downloading... 264 MB complete
Download finished

Ce n’est pas très pratique pour téléchargement mais il est possible d’utiliser un fichier yaml qui contient les différents fichiers à télécharger avec leur version. Pour obtenir le yaml d’exemple : vcc get manifestexample


vcc get manifestexample

---
# This section will download the latest version of vmware_tools
# Each glob pattern will download a single file each
product: vmware_tools
subproduct: vmtools
version: "*"
filename_globs:
  - "VMware-Tools-darwin-*.tar.gz"
  - "VMware-Tools-darwin-*.zip"
---
# This section will download the latest minor release from major version 10
# The single glob pattern will download 2 files
product: vmware_tools
subproduct: vmtools
version: "10.*"
filename_globs:
  - "VMware-Tools-other-*"
---

On remplit notre petit fichier yaml (vcc_tanzu.yaml) pour Tanzu qui permet de récupèrer :

  • le bundle Tanzu Linux,
  • kubectl pour linux
  • les 2 dernières images ova (Ubuntu) (et aussi la Tiny…)
---
product: vmware_tanzu_kubernetes_grid
subproduct: tkg
version: "2.2.0"
filename_globs:
  - "tanzu-cli-bundle-linux-amd64.tar.gz"
  - "kubectl-linux-*.gz"
  - "ubuntu-2004-kube-v1.25.*.ova"
  - "ubuntu-2004-kube-v1.24.*.ova"
---

Puis on lance le téléchargement (cela prends plus ou moins de temps suivant votre connexion internet !) : vcc download -m tanzu_vcc.yaml

vcc download -m tanzu_vcc.yaml

/home/vcc/vcc-downloads does not exist. Creating...
No output directory set. Downloading to /home/vcc/vcc-downloads
Logging in...
Opening manifest file: vcc_tanzu.yaml
/home/vcc
Collecting download payload for [vmware_tanzu_kubernetes_grid] [tkg] [2.2.0] [tanzu-cli-bundle-linux-amd64.tar.gz]
Collecting download payload for [vmware_tanzu_kubernetes_grid] [tkg] [2.2.0] [kubectl-linux-*.gz]
Collecting download payload for [vmware_tanzu_kubernetes_grid] [tkg] [2.2.0] [ubuntu-2004-kube-v1.25.*.ova]
Collecting download payload for [vmware_tanzu_kubernetes_grid] [tkg] [2.2.0] [ubuntu-2004-kube-v1.24.*.ova]

Download started to /home/vcc/vcc-downloads/tanzu-cli-bundle-linux-amd64.tar.gz
Downloading... 257 MB complete
Download finished

Download started to /home/vcc/vcc-downloads/kubectl-linux-v1.25.7+vmware.2.gz
Downloading... 14 MB complete
Download finished

Download started to /home/vcc/vcc-downloads/ubuntu-2004-kube-v1.25.7+vmware.2-tkg.1-8a74b9f12e488c54605b3537acb683bc.ova
Downloading... 1.7 GB complete
Download finished

Download started to /home/vcc/vcc-downloads/ubuntu-2004-kube-v1.25.7+vmware.1-tiny.2-tkg.1-2319b3.ova
Downloading... 983 MB complete
Download finished

Download started to /home/vcc/vcc-downloads/ubuntu-2004-kube-v1.24.11+vmware.1-tkg.1-2ccb2a001f8bd8f15f1bfbc811071830.ova
Downloading... 1.9 GB complete
Download finished

On est prêt à installer Tanzu ! (cf la doc).

Déploiement d’OVA via GOVC

Une dernière astuce, il faut maintenant déployer les OVA pour faire un template dans votre vCenter et pour cela il existe aussi un outil indispensable dans sa boite à outil : govc (de govmoni)

Si vous n’avez pas encore govc, on l’installe en suivant la documentation (attention, pour le tar, il faut être root ou sudo).

curl -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | tar -C /usr/local/bin -xvzf - govc

On définit les variables suivantes pour se connecter :

export GOVC_URL=vcenter.example.com
export [email protected]
export GOVC_PASSWORD=MySecurePasswordVMware1!
export GOVC_INSECURE=true

On vérifie le bon fonctionnement avec govc ls :

govc ls

/DC-TNZ/vm
/DC-TNZ/network
/DC-TNZ/host
/DC-TNZ/datastore

Au besoin, on va créer un dossier pour mettre nos images, on peut lister la liste des dossiers :

govc find / -type f

/DC-TNZ/vm
/DC-TNZ/host
/DC-TNZ/datastore
/DC-TNZ/network
/DC-TNZ/vm/AviSeFolder
/DC-TNZ/vm/Discovered virtual machine
/DC-TNZ/vm/ESX Agents
/DC-TNZ/vm/VCF
/DC-TNZ/vm/packer
/DC-TNZ/vm/VSAN
/DC-TNZ/vm/NSX-T
/DC-TNZ/vm/vCLS
/DC-TNZ/vm/NSX-T/Edge
/DC-TNZ/vm/NSX-T/Manager
/DC-TNZ/vm/NSX-T/MGR

on cree notre dossier : govc folder.create /DNC-TNZ-/vm/TNZ

On liste au besoin la partie Datastore (c’est plus simple quand on as du vSAN !) : govc datastore.info

govc datastore.info

Name:        datastore1
  Path:      /DC-TNZ/datastore/datastore1
  Type:      VMFS
  URL:       ds:///vmfs/volumes/620f759e-c73c18fc-c38c-e4434bed0c50/
  Capacity:  95.2 GB
  Free:      59.3 GB
Name:        datastore1 (1)
  Path:      /DC-TNZ/datastore/datastore1 (1)
  Type:      VMFS
  URL:       ds:///vmfs/volumes/620f751a-008c52f6-437f-e4434bed0c60/
  Capacity:  95.2 GB
  Free:      93.8 GB
Name:        vsanDatastore
  Path:      /DC-TNZ/datastore/vsanDatastore
  Type:      vsan
  URL:       ds:///vmfs/volumes/vsan:52ce24c17aa2b37f-560c971b64143cfc/
  Capacity:  7153.9 GB
  Free:      4367.1 GB

On lance l’import de l’ova avec la commande govc import.ova … en précisant le dossier, le datastore (ds), l’image ova a importé et pour terminer les options !

govc import.ova -folder=/DC-TNZ/vm/TKGM -ds=vsanDatastore -options - vcc-downloads/ubuntu-2004-kube-v1.25.7+vmware.2-tkg.1-8a74b9f12e488c54605b3537acb683bc.ova <<EOF
{
"DiskProvisioning":"thin",
"MarkAsTemplate":true
}
EOF

Si vous obtenez le message d’erreur suivant : govc: default resource pool resolves to multiple instances, please specify

Il faut spécifier le resource pool à utiliser. On peut obtenir la liste des ressources avec la commande suivante : govc ls -l ‘host/*’ govc pool.info | grep ResourcePool

govc ls -l 'host/*' govc pool.info | grep ResourcePool

/DC-TNZ/host/witness.example.com/Resources (ResourcePool)
/DC-TNZ/host/Cluster-TNZ/Resources (ResourcePool)

On recommence avec le paramètre pour spécifier le ressource pool (-pool) :

govc import.ova -folder=/DC-TNZ/vm/TKGM -ds=vsanDatastore -pool=/DC-TNZ/host/Cluster-TNZ/Resources -options - vcc-downloads/ubuntu-2004-kube-v1.25.7+vmware.2-tkg.1-8a74b9f12e488c54605b3537acb683bc.ova <<EOF
{
"DiskProvisioning":"thin",
"MarkAsTemplate":true
}
EOF

[31-07-23 15:57:06] Warning: Line 103: Invalid value 'nic0' for element 'Connection'.
[31-07-23 15:58:15] Uploading ubuntu-2004-efi-kube-v1.25.7+vmware.2-disk1.vmdk... OK
[31-07-23 15:58:15] Marking VM as template...

Et voilà! l’ova est copié sur le vCenter en presque 1 minute sans passer par l’interface graphique du vCenter, il reste plus que à lancer l’installation de Tanzu !

Conclusion

Et vous, comment faites-vous pour déployer VMware Tanzu sur votre Jumpbox ?

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.