[Ansible] Liste des valeurs disponibles pour ansible_os_family

Petit pense-bête, pour éviter de perdre plusieurs dizaines de minutes à retrouver la liste des valeurs possibles pour la variable ansible_os_family dans ansible, après plusieurs semaines ou mois sans pratiquer.

La liste est par là:
ansible/ansible/module_utils/facts/system/distribution.py#L511

Erreur 401 à l’installation d’une dépendance depuis le registre privé de GitHub avec npm v7

Au quotidien, sur l’une des briques logicielles sur laquelle je travaille, nous avons dans les dépendances de notre projet Node, une bibliothèque partagée à partir du registre privé de GitHub. Après une mise à jour de npm de la version 6 à la version 7, j’ai commencé à voir apparaître des erreurs 401 à l’exécution de la commande npm install. Ayant d’autres sujets plus urgents à traiter, nous avons donc pris la décision de rester sur la version 6 de npm.

Quelques mois après, avec le passage de Node 16 en version LTS et la publication de npm version 8, je me suis penché une nouvelle fois sur la question. En changeant la syntaxe de mon fichier .npmrc et en utilisant le nouveau format de token GitHub déployé il y a plusieurs semaines, les erreurs ont fini par disparaître. Voici donc la syntaxe utilisée:

//npm.pkg.github.com/:_authToken=ghp_xxxxxxxxxxxxxxxxxxxx
@scope:registry=https://npm.pkg.github.com

J’ai été devancé alors que je m’apprêtais à partager la disparition des erreurs avec cette configuration dans le ticket de bug dédié, où nous apprenons que cette correction fonctionne correctement pour les versions 6, 7 et 8 de npm.

Utiliser buildah dans Cloud Build

L’astuce consiste en l’utilisation d’une image buildah officielle, disponible à l’adresse quay.io/buildah/stable. Je distingue trois étapes dans mon build: la construction de l’image, la récupération de la clef de chiffrement depuis le Secret Manager et enfin, le stockage dans le Container Registry. Ce qui nous donne donc la configuration ci-dessous.

Construction de l’image

# Build image with buildah
- id: 'build'
  name: 'quay.io/buildah/stable'
  args: ['buildah', 'bud', '-t', 'mon-image', '.']
  volumes:
    - name: varlibcontainers
      path: '/var/lib/containers'

Récupération de la clef

# Get public key from secret manager
- id: 'get public key'
  name: gcr.io/cloud-builders/gcloud
  entrypoint: 'bash'
  args: [ '-c', "gcloud secrets versions access latest --secret=pub-key --format='get(payload.data)' | tr '_-' '/+' | base64 -d > pub-key.pem" ]

Stockage de l’image

# Push image with buildah
- id: 'push'
  name: 'quay.io/buildah/stable'
  args: ['buildah', 'push', '--encryption-key', 'jwe:./pub-key.pem', 'mon-image', 'eu.gcr.io/$PROJECT_ID/mon-image']
  volumes:
    - name: varlibcontainers
      path: '/var/lib/containers'

Note

Précisons que ce Cloud Build est déclenché en cas de push sur une branche particulière d’un dépôt git, ici hébergé chez GitHub et connecté à la GCP. Ce dépôt contient bien entendu un fichier Dockerfile à sa racine.

[Bash] Test chaîne vide ou non

Vérification qu’une variable est non vide en Bash.

if [[ -n "$PARAMETERS_FILE" ]]; then
  METADATA="${METADATA},parameters_file=${PARAMETERS_FILE}"
fi

En d’autres termes, si la variable PARAMETERS_FILE n’est pas vide, on la concatène dans METADATA. Pour vérifier qu’une variable est vide, utiliser -z.

Soit au final :

  • -z : retourne vrai si la taille de la chaîne vaut zéro.
  • -n : retourne vrai si la taille de la chaîne n’est pas zéro.

Source : Shellcheck – SC2236 : Use -n instead of ! -z