Aller au contenu

Mode 'register' dans operationBook

Le mode ‘register’, dans “operationBook” permet de stocker la sortie standard d’une opération dans une variable d’environnement et de communiquer celle-ci aux opérations suivantes (environnement d’exécution nœud administré).

Pré-requis

Suivre le pré-requis global.

Cas basique avec des données au format JSON

Je souhaite réaliser deux opérations séparées, qui affichent la valeur d’un des attributs d’une structure de données au format “JSON”, obtenue auprès d’un service API REST quelconque. Pour cette étape, j’ai crée un lien qui retourne ce contenu : {"x1": "1", "x2": "2"}, et permet de simuler un appel API REST.

La complexité induite dans l’exemple qui suit est volontaire. Ceci permet de mieux comprendre l’enjeu de l’automatisation.

1ʳᵉ option

opération

Les opérations étant réalisées séparemment, la première idée serait de créer une opération unique, dotée d’une variable qui permettrait de faire varier le nom de l’attribut JSON :

  • opération “getAndDisplayJsonAttr”

    • Le script “run.sh” :

      #!/usr/bin/env bash
      # Calling API REST service to get data
      data=$(curl -s "https://automation-doc.mytinydc.com/get/jsonformation.json")
      valueAttr=$(echo "${data}" | jq -r ".${FIELDNAME}")
      echo "Value of attribut ${FIELDNAME}: ${valueAttr}"
    • Le manifeste :

      comment: "get data from API REST and display attribut value"
      scripts:
      - "run.sh"
      dependencies:
      - "jq"
      - "curl"
      parameters:
      required:
      FIELDNAME:
      type: string
      comment: "nom de l'attribut à afficher"

Exécutez :

Fenêtre de terminal
automation-cli run -op "getAndDisplayJsonAttr" -h "localhost" -e FIELDNAME="x1"

L’opération affiche la valeur de l’attribut “x1” de la structure de données obtenue en appelant l’API REST.

operationBook

En créant un “operationBook” (“displayJson2Calls”), appelant successivement la même opération avec un environnement différent, le travail est réalisé :

operations:
- operation: "getAndDisplayJsonAttr"
environment:
FIELDNAME: "x1"
- operation: "getAndDisplayJsonAttr"
environment:
FIELDNAME: "x2"

Exécutez :

Fenêtre de terminal
automation-cli run -ob "displayJson2Calls" -h "localhost"

Inconvénient

Avec cette première option, chacune des opérations réalisées appelle le service API Rest, impliquant donc deux appels réseaux pour une réponse identique.

2ᵉ option

Pour économiser un appel, créons une nouvelle opération qui sera responsable d’appeler le service API REST.

  • Opération “callApiRest” :

    • Le script “run.sh” :

      #!/usr/bin/env bash
      curl -s "https://automation-doc.mytinydc.com/get/jsonformation.json"
    • Le manifeste :

      comment: "call API REST"
      scripts:
      - "run.sh"
      dependencies:
      - "curl"
  • L’opération “displayJsonAttr” :

    • Le script “run.sh” :

      Le processus “register” a capturé la sortie standard (stdout) de l’opération. Dans notre cas, il s’agit d’une structure JSON.

      #!/usr/bin/env bash
      # JSON est requis et provient de register (operationBook)
      # Par conséquent l'opération lancée seule demandera une valeur pour JSON
      # L'attribut à lire sera '.x?'
      valueAttr=$(echo "${JSON}" | jq -r ".${FIELDNAME}")
      echo "Value of attribut ${FIELDNAME}: ${valueAttr}"
    • Le manifeste :

      comment: "display attribut value"
      scripts:
      - "run.sh"
      dependencies:
      - "jq"
      parameters:
      required:
      JSON:
      type: string
      comment: "Jeu de données au format JSON"
      FIELDNAME:
      type: string
      comment: "Nom de l'attribut à afficher"
    • operationBook : “displayJson1Calls”:

      operations:
      - operation: "callApiRest"
      register: "JSON"
      - operation: "displayJsonAttr"
      environment:
      FIELDNAME: "x1"
      - operation: "displayJsonAttr"
      environment:
      FIELDNAME: "x2"

En exécutant cette opération, le travail est également réalisé, et vous économisez un appel réseau :

Fenêtre de terminal
automation-cli run -ob "displayJson1Calls" -h "localhost"

Cas basique avec une chaîne de caractères

Je souhaite réaliser une opération qui affiche la valeur d’un identifiant quelconque (exemple : un id d’instance EC2 AWS) et utiliser cette valeur dans l’opération suivante.

  • Fichier “registerString.yaml”

    operations:
    - command: "echo '-i951133254xx'"
    register: EC2INSTANCEID
    - command: "echo ${EC2INSTANCEID}"
    Fenêtre de terminal
    automation-cli run -ob "./registerString.yaml" -h "localhost"