Aller au contenu

Exécution d'une opération en détails

Ce chapitre permet de mieux comprendre comment sont préparées et exécutées les opérations par le nœud de contrôle sur les nœuds administrés.

Présentation

La commande pour exécuter une opération est “run”. L’outil dispose d’autres commandes, consulter la section “Outillage”.

Canaux d’exécution (shell/SSH/Wireguard)

“automation-cli” peut utiliser deux canaux pour exécuter des opérations sur un serveur, directement dans une console (localhost) ou bien par SSH pouvant être encapsulé dans un VPN WireGuard.

Le choix est automatique et déterminé selon l’hôte cible :

  • Si l’hôte est “localhost” ou “127.0.0.1”, les opérations sont exécutées dans une console locale, avec votre compte utilisateur. Vous pouvez ajouter le préfixe “sudo”, qui permettra d’exécuter des opérations réservées au compte “root” sur le nœud de contrôle.
  • Dans l’autre cas, il y aura une connexion SSH, pouvant être encapsulée dans un tunnel VPN Wireguard. Toutes les opérations réalisées au travers d’une connexion SSH sont exécutées avec le compte “root”, sudo est cependant supporté.

run

Wireguard [Optional]

Private SSH key

Private SSH key password

SSH Connection

Exécution de la commande

automation-cli

Server

Clé ssh

La clé ssh et son mot de passe peuvent-être fournis au moyen des commutateurs : sshpk et sshpass, ou bien par l’intermédiaire d’un fichier d’inventaire. Quand ces informations ne sont pas spécifiées, essaiera d’utiliser votre clé privée SSH, située dans votre “home directory” (`ls ~/.ssh).

Nœud administré

Ce nœud reçoit du nœud de contrôle, un script bash et un environnement d’exécution. Une fois arrivés sur le nœud administré, l’environnement préparé sera ajouté à l’environnement système (environnement du compte “root”), puis finalement utilisé dans le processus d’exécution du script bash.

Managed_node

ajouté à l'environnement existant, peut donc surcharger les variables existantes

environnement système

exec

environnement reçu du nœud de contrôle

script bash reçu du nœud de contrôle

Nœud de contrôle

Les rôles de ce nœud sont :

  • Lire la description d’une opération pour préparer :
    • L’environnement d’exécution.
    • Le script bash.

Control_node

Préparer

environnement du nœud

Préparer Environnement d'exécution

environnement detécté dans le manifeste operationBook

environnement detécté dans le manifeste operation

environnement detécté dans la ligne de commande

Fichier d'inventaire

Scripts de l'operation

Script bash

  • Envoyer au nœud administré :
    • L’environnement d’exécution.
    • Le script bash.
    • Les ressources associées à une opération : templates, binaires, etc
    • L’ordre d’exécution.

Managed_node

Control_node

send

send

send

send order

Environnement d'exécution

Script bash

Ressources

exec

  • Récupérer, lorsque le nœud administré exécute une opération :
    • Les sorties standard et erreur (stdOut/stdErr)
    • Le code de sortie (exit code).

Managed_node

Control_node

Collecteur

stdOut

stdErr

Exit code

exec

  • Construire le rapport de Post-exécution

Control_node

Construit

Collecteur

Rapport

Préparation de l’environnement d’exécution

Le but de cette préparation est de fournir aux nœuds administrés un environnement d’exécution avec des valeurs finies.

Pour construire ces dernières, vous pouvez utiliser l’environnement système du nœud de contrôle et/ou un fichier d’inventaire.

Le nœud de contrôle n’envoie pas son environnement système aux nœuds administrés. Seules les variables requises, optionnelles (spécifiées dans les manifestes) et éventuellement “register” sont envoyées aux nœuds administrés.

Si vous stipulez le commutateur ‘-e’ (‘-e [VAR]=“valeur”’) avec un nom de variable non spécifié dans le manifeste, cette variable ne sera pas injectée dans l’environnement d’exécution, vous travaillez dans un environnement contrôlé.

Par contre, vous pouvez utiliser cette variable non référencée pour préparer l’environnement d’exécution du nœud administré. Je vous conseille de vous référer aux exemples situés dans le chapitre Autoformation.

L’environnement d’exécution final pour le nœud administré, seront :

  • Les variables requises (parameters.required) avec obligatoirement une valeur.
  • Les variables optionnelles (parameters.optional) avec ou sans valeur. L’important pour ce type de variable, est qu’elle soit déclarée pour bash (utilisation de “set -u” pour l’exécution). Optionnel veut dire : “une variable déclarée avec ou sans valeur”.

Préparation du script bash

Déroulement de la construction d’un script bash :

  • Retrait du “Shebang”.
  • Récupération du template interne.
  • Concaténation des shells de l’opération

Le shell est auto-détruit à son exécution, vous pouvez voir l’intégralité du shell exécuté dans les logs d’exécution.

Rapport de pré-exécution

Exécuter une opération sur un serveur peut entraîner de graves dysfonctionnements. Un rapport de pré-exécution est systématiquement présenté afin que vous confirmiez l’exécution sur le ou les hôtes désirés.

Vous pouvez outrepasser cet affichage en utilisant le commutateur “-y”.

Rapport de post-exécution

Les rapports d’exécution présentent toujours l’association ‘hôte demandé par l’utilisateur’ et ‘hôte utilisé pour la connexion SSH’.

Pour ne pas afficher ce rapport, par exemple dans le cadre d’une exécution par tâche ordonnancée (cron), utiliser le commutateur “-s” (mode silencieux).