Aria Automation/vRealize Automation : intégrer un pipeline dans un Cloud Template, exemple avec Ansible.
Aria Automation permet d’intégrer Ansible (Ansible Automation Platform – nouveau nom de Ansible Tower - et aussi AWX) et donc de créer des Cloud Templates qui disposent de non seulement la partie fournie en standard par Aria Automation pour la création de VMs mais aussi de leur contenu via Ansible.
Mais que se passe-t-il quand il s’agit d’effectuer des opérations qui n’ont
pas pour emplacement d’exécution la machine provisionnée ? J’entends par
là les exemples classiques comme l’intégration de la VM au DNS, à la
supervision, à la CMDB, au backup et tout un lot d’outils périphériques qui doivent
prendre connaissance de cette nouvelle VM. Les exécutions de ces scripts se faisant
depuis une machine centralisée (la plupart du temps la machine Ansible elle-même)
et non la VM provisionnée.
Prenons l’exemple du DNS dans une infrastructure avec AWX : c’est la
machine Ansible qui va discuter avec le DNS de manière centralisée pour ajouter
cette nouvelle VM. Or dans le Cloud Template, je ne peux pas ajouter le nœud Ansible
(car sinon Aria Automation va considérer qu’il faut le provisionner et donc faire
un rip and replace… oups). De même dans Aria Automation, quand je sélectionne
un objet Ansible je dois l’attribuer à une machine qui va donc exécuter le
Template Ansible, ce que je ne veux pas puisqu’il doit être exécuter depuis la
machine Ansible. Comment faire ?
La réponse est simple : on ne peut pas le faire en standard dans
le Canvas du Cloud Template (sauf développement très compliqué en Aria
Automation Orchestrator, inmaintenable et illisible). Il y a pourtant un moyen
très simple que je vais vous expliquer.
Pour cela, nous allons tout d’abord utiliser le composant Aria Automation
Pipelines que nous allons intégrer au Cloud Template par la suite.
Hypothèses de départ :
Nous disposons d’un AWX configuré comme il faut et un template
« HelloWorld » qui pointe sur un helloworld2.yml tout simple qui
affiche juste une variable afin d’expliquer aussi comment passer les variables
(histoire de répondre à toutes les problématiques qui vont se poser).
Note importante : pour que Aria Automation Pipelines puisse modifier
les extra_vars, il faut activer l’option « prompt on launch » sur ces
paramètres, sinon il ne pourra pas les remplacer (car c’est un appel
externe/API).
Ansible est joignable et intégré dans Aria Automation comme il faut.
Phase 1, les secrets dans Aria
Automation Pipelines :
On va déjà stocker nos credentials à part dans Aria Automation Pipelines
pour faire plus propre en utilisant la partie « secrets », pour cela,
allez dans « Configure -> Variables » et créez une variable de
type secret avec le token AWX.
Phase 2, le pipeline :
Toutes les étapes sont des étapes de type REST, je ne vous décrie pas
comment créer un pipeline, ajouter une étape et un stage, il y a pléthores de
sites pour cela (comme par exemple : https://docs.vmware.com/en/VMware-Aria-Automation/8.16/Using-Automation-Pipelines/GUID-CA20A21C-DE2A-4D3E-B80E-C1961C0D81BC.html ).
La première chose que l’on va faire c’est créer une variable de type input
(pour pouvoir passer le nom de notre machine en paramètre (extra_vars) au job
Ansible.
Puis on va créer les étapes.
Etape 1 : on va commencer
par déclencher un inventaire
Le plus important ici est l’appel REST qui doit comprendre le Bearer token
pour se connecter à Ansible (token qui est stocké dans les secrets de Aria
Automation Pipelines).
URL : https://awx.domain.local/api/v2/inventories?search=Demo+Inventory
Etape 2 : on va chercher
l’id de notre job Ansible
URL : https://awx.domain.local/api/v2/job_templates?name=helloworld
On a récupéré l’id en output de l’étape précédente (Get Job Id By Name) pour le mettre dans la commande POST pour lance le template.
URL : https://awx.domain.local/api/v2/job_templates/${Stage0.Get
Job Id by Name.output.responseJson.results[0].id}/launch/
Notez le payload :
{
"inventory": 1,
"limit":"localhost",
"extra_vars":
{
"machine_name": “${input.machine_name}”
}
}
c’est ici qu’on ajoute les extra_vars à passer au job Ansible (notamment
pour donner le nom de la machine à passer à l’AD ou au DNS), je récupère ma
variable d’entrée du Pipeline au passage.
Etape 3 : il faut s’assurer
que le travail est bien fait, donc on va attendre le retour du job
URL : https://awx.domain.local/api/v2/jobs/${Stage0.Launch Template.output.responseJson.id}
Le plus important sont les critères de sortie :
Phase 3 : local test et
validation
Après avoir validé le pipeline (et testé puisqu’il peut être lancé
directement depuis Aria Automation Pipeline ou Aria Automation Service Broker),
on récupère son id (on peut le faire par l’API, mais il est plus simple de
regarder dans l’url 😊)
Note : On pourrait aussi s’arrêter là et mettre le pipeline au
catalogue pour s’en servir directement. Le but ici est d’aller plus loin pour
profiter des fonctionnalités avancées des Cloud Template.
Phase 4 : création du Cloud Template dans Aria Automation Assembler
Ici, pas d’objet à déplacer dans le canvas car il n’existe pas, on va
utiliser l’Infrastructure as Code directement :
Name:
type: string
title: Nom de la machine
resources:
pipeline.test:
type: codestream.execution
properties:
pipelineId: e1e42015-bc6d-4f99-b5e2-73d1f0b9f4f4
inputs:
machine_name: ${input.Name}
outputs:
computed: true
J’ai volontairement laissé une partie input afin de montrer que l’on va
pouvoir passer des paramètres aux entrées du pipeline (et donc du template
Ansible) si besoin, comme le nom de la machine.
Dans un Cloud Template plus élaboré, on mettra une ou plusieurs machines
dans le Canvas et on passera les noms ou IP déployées au pipeline.
On peut maintenant lancer le déploiement.
Résultat :
J’ai bien une resource de type pipeline créée dans mon déploiement avec
toutes les informations (input, output).
Dans Aria Automation Pipelines, je constate bien l’exécution de mon pipeline (de même, un tag a été automatiquement ajouté pour préciser qu’il a été lancé via le "catalog").
Et dans AWX, je vois bien l'exécution de mon job avec le passage de variable provenant de mon Cloud Template :
Conclusion :
Vous pouvez maintenant intégrer tout type de Pipelines provenant de Aria
Automation Pipelines (pas que du Ansible en fait) dans un Cloud Template en
bénéficiant des inputs et autres notions disponibles pour les appeler et faire
un Cloud Template qui est complet.
Et voilà, à vous de jouer maintenant !
Références et inspirations :
Using vRealize Automation Cloud Template to execute a pipeline (veducate.co.uk)
Commentaires
Enregistrer un commentaire