Table des matières
2 billet(s) pour janvier 2026
| Git - Duplication d'un dépôt | 2026/01/19 10:22 | Jean-Baptiste |
| Exemple simple de conf Nagios | 2026/01/14 10:07 | Jean-Baptiste |
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, version: "1.2.3" } - { role: webserver, version: ">=2.0.0" } - { role: database, tags: ["database"] } - { role: 'xcode', when: ansible_os_family == 'Darwin' }
AWX - build to run
AWX Resource Requirements
Voir :
| Requirement | Required |
|---|---|
| RAM | 16 GB |
| CPUs | 4 |
| Local disk | 40 GB min (20GB min available under /var/lib/awx) |
| Local disk | 1500 IOPS |
PostgreSQL requirements
Voir :
| Requirement | Required |
|---|---|
| RAM | 16 GB |
| CPUs | 4 |
| Local disk | 20 GB dedicated hard disk space. 150 GB+ recommended |
| Local disk | 1500 IOPS |
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
Voir :
Conf AWX
Voir :
kubectl get AWX -o json | jq '.items[0].spec'
- auto_upgrade
- hostname
- ipv6_disabled
Sauvegarde
De tous les objets AWX :
awx -f yaml export > all.yaml
: prévoir l'export / import de la base
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" ]
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
AWX - ansible-galaxy - need ignore-certs to download roles with ansible-galaxy
Voir :
Voir aussi :
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
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 :
- Déterminer pourquoi libcurl ne fonctionne pas après l'ajout du certificat dans le magasin du système de l'OS. Le certificat est-il bien une CA ?
- Test/audit TLS du bitbucket
- S'assurer que ansible-galaxy ne se connecte pas sur un dépôt public
- Analyser l'erreur HTTP 501 “(Method) Not Implemented”. Quelle est la “method” HTTP appelée ?
- Vérifier que la version de Git est Git >= 1.6.6 Voir : https://confluence.atlassian.com/stashkb/git-commands-return-error-code-501-282988872.html
- Décapsuler TLS séparément avec proxytunnel ou socat
- Regarder comment AWX utilise le credential pour Git (project_update.yml)
- Le serveur ne renvoie pas la chaine complète de certificats (CA + intermédiaire + certificat serveur). Mais seulement un unique certificat qui n'est pas la CA mais seulement. Voir pb_openssl_error_loading_extension_section_v3_ca et aussi le
Key UsageRedHat - Pb curl NSS error -8102 SEC_ERROR_INADEQUATE_KEY_USAGE
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/
Scan de vulnérabilité pour les images de conteneurs
Voir aussi :
Trivy
Voir :
asdf plugin add trivy asdf install trivy latest asdf set --home trivy latest trivy kubernetes --report all | tee trivy.log
Snyk
Voir :
