Outils pour utilisateurs

Outils du site


blog

Notes ansible-galaxy

Voir :

Install roles

ansible-galaxy role install namespace.role_name

List installed roles

ansible-galaxy role list

Remove an installed role

ansible-galaxy role remove namespace.role_name

Chercher un rôle

ansible-galaxy search plop

Créer un paquet d'un role

tar czvf ./role_name.tar.gz ./role_name

La documentation est dans :

  • meta/main.yml
  • README.md

Afficher les infos d'un rôle

ansible-galaxy info geerlingguy.mysql

Installer un role

ansible-galaxy install ./role_name.tar.gz
ansible-galaxy install role_name

Par défaut dans ~/.ansible/roles/

Voir :

  • ansible-galaxy list
  • ansible-galaxy search
  • ansible-galaxy install
  • ansible-galaxy import
  • ansible-galaxy info

Autres

Dépendances

dependencies:
  - role: common
  - { role: webserver, version: ">=2.0.0" }
  - { role: database, tags: ["database"] }
  - { role: 'xcode', when: ansible_os_family == 'Darwin' }

FIXME

2025/11/13 12:06 · Jean-Baptiste

AWX - build to run

AWX Resource Requirements

Prérequis logiciels

  • have configured an NTP client on all nodes

Architecture

Choix :

  • Base de données sur le hôte ou sur K8S ?
    • Idéalement Postgres dans un conteneur : plus de souplesse avec la gestion des versions

Conf système hôte

  • Réactiver SELinux
  • Après avoir redéfini ipv6_disabled, si OK désactiver l'IPv6 sur le hôte et tester

Changer dans Job settings - Container Run Options

[
  "--network",
  "slirp4netns:enable_ipv6=true"
]

Désactiver le SWAP. Totalement ou memory.swap.max=0 ? Voir

cat /sys/fs/cgroup/memory.swap.max

Conf Podman

Tester le démarrage automatique native Podman

podman update --restart=always kind-control-plane

A la place de ~/.config/systemd/user/container-kind-control-plane.service

Réseau

Conf AWX

Voir :

kubectl get AWX -o json | jq '.items[0].spec'
  • auto_upgrade
  • hostname
  • ipv6_disabled

Sauvegarde / backup

  1. Export de tous les objets AWX en YAML
  2. Export de la base de données
  3. Sauvegarde avec AWX Operator
Export de tous les objets AWX en YAML
awx -f yaml export > all.yaml

NOTE : Les credentials ne sont pas exportés, ni certains objets

Export de la base de données PostgreSQL

Voir :

# retrieve your secret's name, something like awx-postgres-configuration
kubectl get secrets
 
# show secrets 
kubectl get secrets awx-your-instance-postgres-configuration -o yaml
 
kubectl port-forward awx-your-postgre-pod 5432:5432

Source : https://forum.ansible.com/t/need-advices-on-awx-config-import-export/6974/6

Sauvegarde avec AWX Operator

PoC Stockage

Voir :

cluster-config.yml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
    - containerPort: 30000
      hostPort: 30000
      protocol: TCP
  extraMounts:
    - containerPath: /data/files
      hostPath: /data/files

ansible-files-pv.yml

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: awx-ansible-files-volume
spec:
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 2Gi
  storageClassName: local-path
  hostPath:
    path: /data/ansible-files

ansible-files-pvc.yml

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: awx-ansible-files-claim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi
  storageClassName: local-path
kubectl create secret generic awx-custom-certs --from-file=bundle-ca.crt=/etc/ssl/certs/ca-bundle.crt

cluster-config.yml

---

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30000
        hostPort: 30000
        protocol: TCP
    extraMounts:
      - containerPath: /data/ansible-files
        hostPath: /data/ansible-files
      - containerPath: /data/projects
        hostPath: /data/projects
      - containerPath: /data/postgres-13
        hostPath: /data/postgres-13

Fixer la version avec l'option --image

kind create cluster --image kindest/node:v1.34.2

Available tags can be found at https://hub.docker.com/r/kindest/node/tags

kind create cluster --config=cluster-config.yml --name=kind2
 
# kubectl create deployment nginx --image=nginx --port=80
# kubectl create service nodeport nginx --tcp=80:80 --node-port=30000
 
kubectl create service nodeport awx-service --tcp=80:80 --node-port=30000

Dans jobs settings changer :

Paths to expose to isolated jobs

[
  "/etc/pki/ca-trust:/etc/pki/ca-trust:O",
  "/usr/share/pki:/usr/share/pki:O"
]

Debug

2025/11/10 18:15 · Jean-Baptiste

AWX - Changer l'Execution Environment du Control Plane

Changer Control Plane Execution Environment

kubectl edit AWX
spec:
  control_plane_ee_image: registry.test.svc.cluster.local:5000/awx-ee-gts-it:2.19.3-2-1 

Par défaut c'était quay.io/ansible/awx-ee:24.6.1

2025/11/07 22:11 · Jean-Baptiste

AWX - ansible-galaxy - need ignore-certs to download roles with ansible-galaxy

Description

requirements.yml

---

- name: test_jb
  src: https://bitbucket.acme.local/scm/jean/ansible-role-test_jb.git
  scm: git               # <--- Add this line to fix HTTP Error 501 !
  version: master
ansible-galaxy role install -r requirements.yml
- downloading role from https://bitbucket.acme.local/scm/jean/ansible-role-test_jb.git
[ERROR]: failed to download the file: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1147)>
[WARNING]: - test_jb was NOT installed successfully.
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
Méthode Fichier de conf ansible.cfg

STATUS : NOK

need ignore-certs to download roles with ansible-galaxy https://github.com/geerlingguy/ansible-for-kubernetes/issues/62

Erreur :

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>

~/.ansible.cfg

[galaxy]
ignore_certs = yes

Effet : aucun

Méthode par variables d'environement

STATUS : NOK

https://docs.ansible.com/ansible/latest/reference_appendices/config.html

export ANSIBLE_GALAXY_IGNORE=yes
export GALAXY_IGNORE_CERTS=yes

Effet : aucun

Méthode config Libcurl

STATUS : NOK

echo "cacert=/runner/ca.crt" > ~/.curlrc

Effet : ça fonctionne pour curl et git mais aucun effet pour ansible-galaxy

Méthode K8S

STATUS : OK

https://ansible.readthedocs.io/projects/awx-operator/en/latest/user-guide/advanced-configuration/trusting-a-custom-certificate-authority.html

Syntaxe

kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]
kubectl create secret generic awx-custom-certs --from-file=bundle-ca.crt=/etc/ssl/certs/ca-bundle.crt
kubectl edit AWX
spec:
  bundle_cacert_secret: awx-custom-certs
Méthode ajout CA au niveau système

STATUS : NOK

https://virtualhobbit.com/2020/06/19/adding-internal-ca-ssl-chains-to-ansible-awx/

curl -k -w %{certs} https://www.acme.fr > cacert.pem
mv chain.pem /etc/pki/ca-trust/source/anchors/
/etc/pki/ca-trust/source/anchors/
update-ca-trust extract

Effet : C'est étrange, ça fonctionne pour wget mais pas pour curl ni pour ansible-galaxy. C'est comme si libcurl ne parvenait pas à choisir le certificat approprié.

Méthode ajouter le certificat dans /etc/ansible/

STATUS : A confirmer

Voir :

Add the ca cert to /etc/ansible on the system you are running ansible-galaxy from. The file should use a .crt or .pem

Testé en mettant le certificat dans ~/.ansible/ : aucun effet

Méthode par config Git

STATUS : NOK

git config --global http.sslCAInfo ~/ca.crt

ansible-galaxy ignore http.sslCAInfo

Effet : ça fonctionne pour git mais pas pour ansible-galaxy Ça semble ne concerner que la commande gît, mais pas Python (ansible-galaxy)

Méthode par hack wrapper (enveloppe)

STATUS : OK pour HTTPS mais KO pour l'authentification

Pas nécessaire si K8S bundle_cacert_secret

Settings / Extra Environment Variable

{
  "GIT_SSL_NO_VERIFY": "true"
}

ansible-galaxy.sh

#! /bin/bash
 
set -euo pipefail
 
declare -a all_args
 
arg_append() {
    all_args=(${all_args[@]} $1)
}
 
while [ "${1-}" != "" ]; do
    case $1 in
    install)
        arg_append install
        arg_append "-c"
        ;;
    *)
        arg_append "$@"
        ;;
    esac
    shift
done
 
exec /usr/local/bin/ansible-galaxy1 "${all_args[@]}"

execution-environment.yml

---

version: 3

images:
  base_image:
    name: quay.io/ansible/awx-ee:24.6.1

additional_build_files:
  - src: files/ansible-galaxy.sh
    dest: files/

additional_build_steps:
  prepend_base:
    - RUN cp -p /usr/local/bin/ansible-galaxy /usr/local/bin/ansible-galaxy.orig
    - RUN mv /usr/local/bin/ansible-galaxy /usr/local/bin/ansible-galaxy1
    - ADD _build/files/ansible-galaxy.sh /usr/local/bin/ansible-galaxy

options:
  user: '1000'

Comme l'authentification de fonctionne pas, testons : requirements.yml

---

- name: test_jb
  #src: https://bitbucket.acme.local/scm/jean/ansible-role-test_jb.git
  src: https://jean:password@bitbucket.acme.local/scm/jean/ansible-role-test_jb.git
  version: master

Note : le mot de passe doit être en URL encoding si il contient des caractères spéciaux

[ERROR]: failed to download the file: HTTP Error 501:\n[WARNING]: - test_jb was NOT installed successfully.\nERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.",

Effet : Ça ne fonctionne toujours pas, mais pour une autre raison. On a avancé le schmilblick. Le script wrapper fait joue bien son rôle.

Conclusions provisoires

A faire :

Note : vu qu'après avoir corrigé (en bidouillant) le problème de TLS nous tombons sur un 2em problème il y a de fortes probabilités que notre approche ne soit pas la bonne. Nous ne sommes certainement pas les premiers à tenter de faire fonctionner ansible-galaxy avec Bitbucket en HTTPS avec des certificats auto signés.

Idéalement la CA devrait être déployée est fonctionnelle sur l'ensemble des OS.

Il faut ajouter : scm: git

requirements.yml

---

- name: test_jb
  src: https://bitbucket.acme.local/scm/jean/ansible-role-test_jb.git
  scm: git
  version: master

Conclusions définitives

Avec la nouvelle PKI et en définissant le secret bundle_cacert_secret (méthode K8S) ça fonctionne. Avec ajout du certificat dans /etc/ansible/

2025/11/07 21:44 · Jean-Baptiste
blog.txt · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki