déploie OpenStack 2025.2 avec Kolla-Ansible (tout-en-un, API sur dummy0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-07 15:50:54 +02:00
parent 87c8aac5f5
commit db2842689a
12 changed files with 978 additions and 3 deletions

6
.gitignore vendored
View file

@ -1,2 +1,8 @@
.env .env
.DS_Store .DS_Store
# Secrets Kolla : ne vivent que sur le serveur (/etc/kolla)
passwords.yml
clouds.yaml
admin-openrc.sh
*-openrc.sh

10
ansible/kolla.yml Normal file
View file

@ -0,0 +1,10 @@
---
# Étape 5 du déploiement Syllabus : préparation de Kolla-Ansible (venv,
# globals.yml, inventaire, mots de passe). Ne déploie pas OpenStack lui-même :
# voir docs/runbooks/openstack.md pour bootstrap-servers / prechecks / deploy.
- name: Préparation de Kolla-Ansible
hosts: syllabus
become: true
gather_facts: true
roles:
- kolla

View file

@ -5,6 +5,15 @@
state: restarted state: restarted
enabled: true enabled: true
# Le rechargement commence par `flush ruleset`, qui efface aussi la table de
# fail2ban (f2b-table) : on relance fail2ban juste après pour qu'il la
# reconstruise et rebannisse les IP encore en cours de bannissement.
- name: relancer fail2ban après le pare-feu
listen: recharger nftables
ansible.builtin.systemd:
name: fail2ban
state: restarted
- name: recharger ssh - name: recharger ssh
ansible.builtin.service: ansible.builtin.service:
name: ssh name: ssh

View file

@ -95,6 +95,14 @@
validate: "nft -c -f %s" validate: "nft -c -f %s"
notify: recharger nftables notify: recharger nftables
# Recharge même si nftables.conf n'a pas changé, pour effacer des tables
# ajoutées par un autre logiciel (ex. Docker) : -e durcissement_forcer_rechargement=true
- name: forcer le rechargement du pare-feu (sur demande)
ansible.builtin.command: /bin/true
changed_when: true
notify: recharger nftables
when: durcissement_forcer_rechargement | default(false) | bool
- name: appliquer le pare-feu immédiatement - name: appliquer le pare-feu immédiatement
ansible.builtin.meta: flush_handlers ansible.builtin.meta: flush_handlers

View file

@ -0,0 +1,4 @@
---
kolla_serie: "2025.2"
kolla_venv: /opt/kolla-venv
kolla_config_dir: /etc/kolla

View file

@ -0,0 +1,120 @@
---
# Étape 5 : prépare Kolla-Ansible (venv, configuration, mots de passe).
# Les commandes longues (bootstrap-servers, prechecks, deploy) se lancent à la
# main, voir docs/runbooks/openstack.md.
- name: installer les dépendances système de Kolla-Ansible
tags: [installation]
ansible.builtin.apt:
name:
- git
- python3-dev
- libffi-dev
- gcc
- libssl-dev
- libdbus-glib-1-dev
- python3-venv
state: present
update_cache: true
cache_valid_time: 3600
- name: créer le venv et mettre pip à jour
tags: [installation]
ansible.builtin.pip:
name: pip
state: latest
virtualenv: "{{ kolla_venv }}"
virtualenv_command: python3 -m venv
- name: installer Kolla-Ansible {{ kolla_serie }}
tags: [installation]
ansible.builtin.pip:
name: "git+https://opendev.org/openstack/kolla-ansible@stable/{{ kolla_serie }}"
virtualenv: "{{ kolla_venv }}"
# Kolla exécute ses modules avec le Python du venv (connexion locale) : les
# bibliothèques docker et dbus doivent donc y être, pas seulement dans le système.
- name: installer les SDK docker et dbus dans le venv (contraintes {{ kolla_serie }})
tags: [installation]
ansible.builtin.pip:
name:
- docker
- dbus-python
extra_args: "-c https://releases.openstack.org/constraints/upper/{{ kolla_serie }}"
virtualenv: "{{ kolla_venv }}"
- name: installer le client openstack (contraintes {{ kolla_serie }})
tags: [installation]
ansible.builtin.pip:
name: python-openstackclient
extra_args: "-c https://releases.openstack.org/constraints/upper/{{ kolla_serie }}"
virtualenv: "{{ kolla_venv }}"
- name: rendre les commandes du venv accessibles dans le PATH
tags: [installation]
ansible.builtin.file:
src: "{{ kolla_venv }}/bin/{{ item }}"
dest: "/usr/local/bin/{{ item }}"
state: link
loop:
- kolla-ansible
- kolla-genpwd
- openstack
- name: créer {{ kolla_config_dir }}
ansible.builtin.file:
path: "{{ kolla_config_dir }}"
state: directory
owner: root
group: root
mode: "0750"
- name: déployer globals.yml (versionné dans le dépôt, sans secret)
ansible.builtin.copy:
src: "{{ playbook_dir }}/../kolla/globals.yml"
dest: "{{ kolla_config_dir }}/globals.yml"
owner: root
group: root
mode: "0640"
- name: déployer l'inventaire all-in-one
ansible.builtin.copy:
src: "{{ playbook_dir }}/../kolla/all-in-one"
dest: "{{ kolla_config_dir }}/all-in-one"
owner: root
group: root
mode: "0640"
# passwords.yml n'existe que sur le serveur : jamais dans Git. On copie le
# modèle vide une seule fois, puis kolla-genpwd le remplit.
- name: copier le modèle passwords.yml s'il n'existe pas encore
ansible.builtin.copy:
src: "{{ kolla_venv }}/share/kolla-ansible/etc_examples/kolla/passwords.yml"
dest: "{{ kolla_config_dir }}/passwords.yml"
remote_src: true
force: false
owner: root
group: root
mode: "0600"
register: kolla_passwords_modele
- name: générer les mots de passe (première fois seulement)
ansible.builtin.command:
cmd: "{{ kolla_venv }}/bin/kolla-genpwd -p {{ kolla_config_dir }}/passwords.yml"
when: kolla_passwords_modele.changed
# kolla-genpwd réécrit le fichier en 640 : on reforce 600 à chaque passage.
- name: restreindre passwords.yml à root seul
ansible.builtin.file:
path: "{{ kolla_config_dir }}/passwords.yml"
owner: root
group: root
mode: "0600"
- name: installer les dépendances Ansible de Kolla (collections Galaxy)
ansible.builtin.command:
cmd: "{{ kolla_venv }}/bin/kolla-ansible install-deps"
environment:
PATH: "{{ kolla_venv }}/bin:{{ ansible_env.PATH }}"
register: kolla_install_deps
changed_when: "'Installing' in kolla_install_deps.stdout"

View file

@ -1,3 +0,0 @@
# Géré par Ansible (rôle reseau-openstack) — ne pas modifier à la main.
# Nécessaire pour que le NAT masquerade du réseau externe OpenStack fonctionne.
net.ipv4.ip_forward = 1

View file

@ -0,0 +1,43 @@
# ADR 0001 — Kolla-Ansible 2025.2 sur Debian 12, sans HAProxy ni Cinder
- **Date** : 2026-10-07
- **Statut** : accepté
## Contexte
Le serveur Syllabus (Dedibox Start-2-L) est installé en Debian 12 (bookworm),
avec une seule IP publique et deux SSD entièrement utilisés par un RAID 1
logiciel pour `/`. Il faut un OpenStack tout-en-un, maintenu, dont aucune API
n'est exposée sur l'IP publique.
## Décision
1. **Kolla-Ansible série 2025.2 (Flamingo).** C'est la plus récente qui
supporte encore Debian 12 comme hôte : 2026.1 ne supporte plus que
Debian 13. 2025.1 n'est plus maintenue depuis le 2 octobre 2026, alors
que 2025.2 l'est jusqu'en avril 2027 (fin de vie estimée).
Sources : support matrix 2025.2 et 2026.1, releases.openstack.org.
2. **Images `debian` (`2025.2-debian-bookworm`)**, cohérentes avec l'hôte.
3. **Pas de HAProxy ni de keepalived** : un seul nœud, donc aucune VIP à faire
flotter. Toutes les API écoutent sur `dummy0` (10.10.0.1).
4. **Neutron OVN**, réseau externe sur une paire veth NATée (étape 4), jamais
sur `eno1`.
5. **Pas de Cinder pour l'instant.** Il n'y a aucun espace disque libre pour
un groupe de volumes LVM. Une alternative (fichier en loopback sur `/`)
serait fragile et lente pour un gain nul : les labs n'ont besoin que de
disques éphémères Nova.
6. **Kolla ne gère pas le pare-feu.** Il est écrit dans le rôle Ansible
`durcissement`, et Docker est configuré pour ne créer aucune règle.
## Conséquences
- Il faudra passer à Debian 13 pour suivre les séries suivantes (2026.1 et
au-delà) : c'est un sujet de la montée de version (semaine 7 du bloc A),
à prévoir avant avril 2027.
- Kolla est installé depuis la branche `stable/2025.2` (version
`21.3.1.dev4` au moment de l'installation), comme le recommande la
documentation. Pour une reproductibilité stricte, il faudra figer un tag
de version.
- Pas de volumes persistants pour les VM tant que Cinder (ou Ceph, bloc C)
n'est pas en place. Les travaux des élèves devront donc être sauvegardés
ailleurs (S3, bloc B).

View file

@ -149,3 +149,43 @@ OpenStack a besoin de deux réseaux en plus de l'accès public : un réseau inte
**Suite** **Suite**
Étape 5 : Kolla-Ansible 2025.2 tout-en-un. `bootstrap-servers` peut toucher au pare-feu et à Docker : vérifier avant, rejouer `durcissement` après, et demander l'accord d'Adam pour ce qui touche au pare-feu. Étape 5 : Kolla-Ansible 2025.2 tout-en-un. `bootstrap-servers` peut toucher au pare-feu et à Docker : vérifier avant, rejouer `durcissement` après, et demander l'accord d'Adam pour ce qui touche au pare-feu.
## 2026-10-07 — Étape 5 : OpenStack avec Kolla-Ansible 2025.2
**Fait**
- Rôle Ansible `kolla` + playbook `ansible/kolla.yml` : dépendances système, venv `/opt/kolla-venv` (Kolla-Ansible `stable/2025.2`, version `21.3.1.dev4`, ansible-core 2.19, client `openstack` 8.2.0, SDK `docker` et `dbus-python`), `/etc/kolla/globals.yml` et `all-in-one` copiés depuis le dépôt (`kolla/`), `passwords.yml` généré par `kolla-genpwd` **sur le serveur uniquement** (`600 root:root`, jamais dans Git), `install-deps`.
- `kolla/globals.yml` : images Debian bookworm (tag vérifié sur quay.io), API sur `dummy0`, réseau externe `veth-ext-ovs`, OVN, sans HAProxy, keepalived, ProxySQL, Horizon ni Cinder ; avec Heat, console série, KVM, Prometheus, Grafana. `disable_firewall: false`. Docker sans iptables ni ip6tables.
- Avant de lancer `bootstrap-servers`, j'ai lu son code installé localement pour savoir s'il touchait au pare-feu. Sur Debian, il ne fait qu'essayer de désactiver `ufw` (absent) et ne touche ni à nftables ni à l'heure.
- `bootstrap-servers`, `prechecks`, `deploy` (lancé comme service `systemd-run` pour survivre à une coupure SSH, 22 min), `post-deploy`.
- ADR `docs/adr/0001-kolla-2025-2-sur-debian-12.md`, runbook `docs/runbooks/openstack.md`.
- Correction fail2ban validée par Adam à l'étape 4 : le handler `recharger nftables` relance aussi fail2ban (handler `listen`), et une option `-e durcissement_forcer_rechargement=true` force un rechargement du pare-feu.
**Problèmes rencontrés et solution**
1. `install-deps` : `No such file or directory: 'ansible-galaxy'` → le `bin` du venv doit être dans le `PATH`.
2. **`bootstrap-servers` a modifié le pare-feu** (arrêt et accord d'Adam). Docker 29 a créé des tables `ip6 nat` et `ip6 filter` malgré `iptables: false` : depuis Docker 27, l'IPv6 a son propre réglage. Aucun impact sur la sécurité, car notre chaîne `forward` en `drop` l'emporte. Correction : `docker_custom_config: {ip6tables: false}`, puis un rechargement forcé du pare-feu sous filet anti-coupure. J'ai vérifié qu'un redémarrage de Docker ne recrée plus les tables.
3. `prechecks` : `No module named 'docker'` → Kolla utilise le Python du venv ; `docker` et `dbus-python` ajoutés au venv.
4. **1er `deploy` en échec** : MariaDB `Bind on TCP/IP port. Got error: 98: Address already in use`. ProxySQL écoute sur la VIP:3306, et sans HAProxy la VIP est l'IP du nœud, donc il occupait le port de MariaDB. Correction : `enable_proxysql: "no"`. Le conteneur et le volume `proxysql` ont été supprimés avec l'accord d'Adam. Le volume `proxysql_socket` est encore présent (non validé, à supprimer avec son accord). Au 2ᵉ `deploy`, MariaDB a démarré sans qu'il faille réinitialiser son volume.
**Critère vérifié**
- `openstack service list` : keystone, glance, nova, neutron, placement, heat, heat-cfn.
- `openstack compute service list` : nova-scheduler, nova-conductor, nova-compute `up`. Agents OVN (Controller Gateway, Metadata) vivants.
- `nmap` depuis le Mac sur les ports OpenStack (5000, 8774, 8775, 8778, 9292, 9696, 6080-6083, 3000, 9090, 9091, 9093, 9100, 3306, 5672, 15672, 11211, 6641, 6642, 16509…) + 1-1024 : **seul 22 est ouvert**.
- Pare-feu identique à la référence ; seule `f2b-table` (fail2ban) en plus.
- Correction fail2ban testée : bannissement de l'adresse de test `192.0.2.10` (plage réservée à la documentation), rechargement forcé du pare-feu ; `f2b-table` recréée et le bannissement toujours en place. Adresse débannie ensuite.
- 46 conteneurs ; RAM utilisée 11 Gio sur 31 (19 Gio disponibles) avant toute VM.
**Dettes notées**
- Les bases OVN (`ovsdb-server`, 6641/6642) écoutent sur `0.0.0.0`. Le pare-feu les bloque, mais il faudrait les restreindre à `10.10.0.1` (défense en profondeur).
- Kolla est installé depuis une branche, pas un tag : figer la version pour la reproductibilité (ADR 0001).
**Comprendre**
Kolla-Ansible déploie OpenStack sous forme de conteneurs Docker : chaque service (Keystone, Nova, Neutron…) tourne dans son propre conteneur, configuré par Ansible à partir d'un seul fichier, `globals.yml`. Les deux incidents de cette étape viennent de valeurs par défaut prévues pour un vrai cluster de plusieurs serveurs. Docker crée des règles de pare-feu IPv6 pour ses réseaux, et ProxySQL suppose une adresse virtuelle distincte de celle du serveur. Sur un seul nœud, ces mécanismes ne servent à rien et se gênent entre eux. La leçon : lire le code de l'outil avant de le lancer, et comparer le pare-feu avant et après, plutôt que de faire confiance aux options. C'est ce qui a permis de repérer les tables Docker en quelques secondes.
**Suite**
Étape 6 : projet `paillasse`, utilisateur de service avec application credentials, image `paillasse-debian` (virt-customize), flavor `eleve.petit`, première VM et console série par WebSocket.

View file

@ -0,0 +1,88 @@
# Runbook — OpenStack (Kolla-Ansible 2025.2, tout-en-un)
## Où sont les choses
| Élément | Emplacement |
|---|---|
| venv Kolla-Ansible + client `openstack` | `/opt/kolla-venv` (liens dans `/usr/local/bin`) |
| Configuration | `/etc/kolla/globals.yml` (copie de `kolla/globals.yml` du dépôt) |
| Inventaire | `/etc/kolla/all-in-one` (copie de `kolla/all-in-one`) |
| Mots de passe | `/etc/kolla/passwords.yml` — **serveur uniquement**, `600 root:root`, jamais dans Git |
| Accès admin | `/etc/kolla/clouds.yaml`, `/etc/kolla/admin-openrc.sh` (générés par `post-deploy`) |
| Collections Ansible de Kolla | `/root/.ansible/collections/` (installées par `install-deps`) |
| Journaux des déploiements | `/var/log/kolla-*.log` |
Tout ce qui précède (sauf les mots de passe et les fichiers générés) est
préparé par le playbook `ansible/kolla.yml` depuis le Mac :
```
cd ansible && script -q /dev/null ansible-playbook kolla.yml -i inventory.ini
```
## Choix de configuration (résumé de `kolla/globals.yml`)
- Images `debian` (tag `2025.2-debian-bookworm`).
- Toutes les API sur `dummy0` (10.10.0.1), jamais sur `eno1`. Pas de HAProxy ni keepalived (un seul nœud).
- Réseau externe Neutron : `veth-ext-ovs` (paire veth de l'étape 4), OVN.
- Heat, console série (`nova-serialproxy`), KVM, Prometheus, Grafana activés. Horizon désactivé.
- Cinder désactivé : pas de place pour un groupe de volumes LVM (disques entièrement en RAID 1).
- `disable_firewall: false` et Docker en `iptables: false`, `ip6tables: false`, `bridge: none`, `ip-forward: false` : **ni Kolla ni Docker ne touchent au pare-feu**, géré uniquement par le rôle `durcissement`.
## Déployer / redéployer
Sur le serveur, en root :
```
sudo -i
export PATH=/opt/kolla-venv/bin:$PATH
cd /etc/kolla
kolla-ansible bootstrap-servers -i all-in-one # installe Docker, /etc/hosts…
kolla-ansible prechecks -i all-in-one
kolla-ansible deploy -i all-in-one # 20 à 60 min la première fois
kolla-ansible post-deploy -i all-in-one # génère clouds.yaml et admin-openrc.sh
```
Pour un `deploy` long, le lancer comme service pour survivre à une coupure SSH :
```
sudo systemd-run --unit=kolla-deploy \
--setenv=PATH=/opt/kolla-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
--setenv=HOME=/root --working-directory=/etc/kolla \
bash -c 'kolla-ansible deploy -i /etc/kolla/all-in-one > /var/log/kolla-deploy.log 2>&1'
journalctl -fu kolla-deploy # ou : tail -f /var/log/kolla-deploy.log
```
## Après chaque opération Kolla : vérifier le pare-feu
Kolla et Docker ne doivent créer aucune table nftables. Référence enregistrée
dans `/tmp/nft-reference.txt` (à refaire après un changement voulu) :
```
sudo nft list tables # attendu : table inet filter, table ip nat
```
Si une table étrangère apparaît, comprendre d'où elle vient, puis recharger le
pare-feu depuis le Mac (sous filet anti-coupure) :
```
cd ansible && script -q /dev/null ansible-playbook reseau-openstack.yml -i inventory.ini \
-e durcissement_forcer_rechargement=true
```
## Utiliser le client openstack
```
sudo -i
export OS_CLOUD=kolla-admin
export OS_CLIENT_CONFIG_FILE=/etc/kolla/clouds.yaml
openstack service list
openstack compute service list
openstack network agent list
```
## Pièges rencontrés
- `kolla-ansible install-deps` : `No such file or directory: 'ansible-galaxy'` si le `bin` du venv n'est pas dans le `PATH`.
- `prechecks` : `No module named 'docker'` — Kolla utilise le Python du venv, il faut `docker` et `dbus-python` **dans le venv** (fait par le rôle `kolla`).
- Docker 29 crée des tables `ip6 nat` / `ip6 filter` malgré `iptables: false` : ajouter `ip6tables: false` (`docker_custom_config` dans `globals.yml`).
- `kolla-genpwd` réécrit `passwords.yml` en `640` : le rôle remet `600`.

597
kolla/all-in-one Normal file
View file

@ -0,0 +1,597 @@
# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[control]
localhost ansible_connection=local
[network]
localhost ansible_connection=local
[compute]
localhost ansible_connection=local
[storage]
localhost ansible_connection=local
[monitoring]
localhost ansible_connection=local
[deployment]
localhost ansible_connection=local
# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.
[common:children]
control
network
compute
storage
monitoring
[collectd:children]
compute
[baremetal:children]
control
[tls-backend:children]
control
network
[grafana:children]
monitoring
[etcd:children]
control
[telegraf:children]
compute
control
monitoring
network
storage
[hacluster:children]
control
[hacluster-remote:children]
compute
[loadbalancer:children]
network
[mariadb:children]
control
[rabbitmq:children]
control
[keystone:children]
control
[glance:children]
control
[nova:children]
control
[neutron:children]
network
[openvswitch:children]
network
compute
manila-share
[cinder:children]
control
[cloudkitty:children]
control
[memcached:children]
control
[horizon:children]
control
[barbican:children]
control
[heat:children]
control
[ironic:children]
control
[influxdb:children]
monitoring
[prometheus:children]
monitoring
[magnum:children]
control
[mistral:children]
control
[manila:children]
control
[gnocchi:children]
control
[ceilometer:children]
control
[aodh:children]
control
[cyborg:children]
control
[tacker:children]
control
[trove:children]
control
[watcher:children]
control
[octavia:children]
control
[designate:children]
control
[placement:children]
control
[bifrost:children]
deployment
[zun:children]
control
[skyline:children]
control
# TODO(vurmil): Remove after G/2026.1 release as Redis migration is no longer required
[redis:children]
control
[valkey:children]
control
[blazar:children]
control
[letsencrypt:children]
loadbalancer
# Additional control implemented here. These groups allow you to control which
# services run on which hosts at a per-service level.
#
# Word of caution: Some services are required to run on the same host to
# function appropriately. For example, neutron-metadata-agent must run on the
# same host as the l3-agent and (depending on configuration) the dhcp-agent.
# Common
[cron:children]
common
[fluentd:children]
common
[kolla-logs:children]
common
[kolla-toolbox:children]
common
[opensearch:children]
control
# Opensearch dashboards
[opensearch-dashboards:children]
opensearch
# Glance
[glance-api:children]
glance
# Nova
[nova-api:children]
nova
[nova-conductor:children]
nova
[nova-metadata:children]
nova
[nova-super-conductor:children]
nova
[nova-novncproxy:children]
nova
[nova-scheduler:children]
nova
[nova-spicehtml5proxy:children]
nova
[nova-compute-ironic:children]
nova
[nova-serialproxy:children]
nova
# Neutron
[ironic-neutron-agent:children]
neutron
[neutron-bgp-dragent:children]
neutron
[neutron-dhcp-agent:children]
neutron
[neutron-infoblox-ipam-agent:children]
neutron
[neutron-l3-agent:children]
neutron
[neutron-metadata-agent:children]
neutron
[neutron-metering-agent:children]
neutron
[neutron-periodic-worker:children]
control
[neutron-rpc-server:children]
control
[neutron-server:children]
control
[neutron-ovn-agent:children]
compute
network
[neutron-ovn-maintenance-worker:children]
control
[neutron-ovn-metadata-agent:children]
compute
network
# Cinder
[cinder-api:children]
cinder
[cinder-backup:children]
storage
[cinder-scheduler:children]
cinder
[cinder-volume:children]
storage
# Cloudkitty
[cloudkitty-api:children]
cloudkitty
[cloudkitty-processor:children]
cloudkitty
# iSCSI
[iscsid:children]
compute
storage
ironic
[tgtd:children]
storage
# Manila
[manila-api:children]
manila
[manila-scheduler:children]
manila
[manila-share:children]
network
[manila-data:children]
manila
# Barbican
[barbican-api:children]
barbican
[barbican-keystone-listener:children]
barbican
[barbican-worker:children]
barbican
# Trove
[trove-api:children]
trove
[trove-conductor:children]
trove
[trove-taskmanager:children]
trove
# Heat
[heat-api:children]
heat
[heat-api-cfn:children]
heat
[heat-engine:children]
heat
# Ironic
[ironic-api:children]
ironic
[ironic-conductor:children]
ironic
[ironic-dnsmasq:children]
ironic
[ironic-tftp:children]
ironic
[ironic-http:children]
ironic
# Magnum
[magnum-api:children]
magnum
[magnum-conductor:children]
magnum
# Mistral
[mistral-api:children]
mistral
[mistral-executor:children]
mistral
[mistral-engine:children]
mistral
[mistral-event-engine:children]
mistral
# Aodh
[aodh-api:children]
aodh
[aodh-evaluator:children]
aodh
[aodh-listener:children]
aodh
[aodh-notifier:children]
aodh
# Cyborg
[cyborg-api:children]
cyborg
[cyborg-agent:children]
compute
[cyborg-conductor:children]
cyborg
# Gnocchi
[gnocchi-api:children]
gnocchi
[gnocchi-statsd:children]
gnocchi
[gnocchi-metricd:children]
gnocchi
# Ceilometer
[ceilometer-central:children]
ceilometer
[ceilometer-notification:children]
ceilometer
[ceilometer-compute:children]
compute
[ceilometer-ipmi:children]
compute
# Multipathd
[multipathd:children]
compute
storage
# Watcher
[watcher-api:children]
watcher
[watcher-engine:children]
watcher
[watcher-applier:children]
watcher
# Octavia
[octavia-api:children]
octavia
[octavia-driver-agent:children]
octavia
[octavia-health-manager:children]
octavia
[octavia-housekeeping:children]
octavia
[octavia-worker:children]
octavia
# Designate
[designate-api:children]
designate
[designate-central:children]
designate
[designate-producer:children]
designate
[designate-mdns:children]
network
[designate-worker:children]
designate
[designate-sink:children]
designate
[designate-backend-bind9:children]
designate
# Placement
[placement-api:children]
placement
# Zun
[zun-api:children]
zun
[zun-wsproxy:children]
zun
[zun-compute:children]
compute
[zun-cni-daemon:children]
compute
# Skyline
[skyline-apiserver:children]
skyline
[skyline-console:children]
skyline
# Tacker
[tacker-server:children]
tacker
[tacker-conductor:children]
tacker
# Blazar
[blazar-api:children]
blazar
[blazar-manager:children]
blazar
# Prometheus
[prometheus-node-exporter:children]
monitoring
control
compute
network
storage
[prometheus-mysqld-exporter:children]
mariadb
[prometheus-memcached-exporter:children]
memcached
[prometheus-cadvisor:children]
monitoring
control
compute
network
storage
[prometheus-alertmanager:children]
monitoring
[prometheus-openstack-exporter:children]
monitoring
[prometheus-elasticsearch-exporter:children]
opensearch
[prometheus-blackbox-exporter:children]
monitoring
[prometheus-libvirt-exporter:children]
compute
[masakari-api:children]
control
[masakari-engine:children]
control
[masakari-hostmonitor:children]
control
[masakari-instancemonitor:children]
compute
[ovn-controller:children]
ovn-controller-compute
ovn-controller-network
[ovn-controller-compute:children]
compute
[ovn-controller-network:children]
network
[ovn-database:children]
control
[ovn-northd:children]
ovn-database
[ovn-nb-db:children]
ovn-database
[ovn-sb-db:children]
ovn-database
[ovn-sb-db-relay:children]
ovn-database
[letsencrypt-webserver:children]
letsencrypt
[letsencrypt-lego:children]
letsencrypt

53
kolla/globals.yml Normal file
View file

@ -0,0 +1,53 @@
---
# Configuration Kolla-Ansible 2025.2 (Flamingo) — Syllabus, serveur tout-en-un.
# Noms d'options vérifiés dans etc/kolla/globals.yml de la branche stable/2025.2.
# Aucun secret ici : les mots de passe sont dans /etc/kolla/passwords.yml,
# uniquement sur le serveur (chmod 600, jamais dans Git).
workaround_ansible_issue_8743: yes
# Images : Debian bookworm (tag quay.io « 2025.2-debian-bookworm », vérifié).
kolla_base_distro: "debian"
openstack_release: "2025.2"
# Réseau (voir étape 4 et docs/journal.md) :
# - dummy0 (10.10.0.1) porte toutes les API et services internes : rien sur eno1.
# - veth-ext-ovs est le bout de la paire veth donné à Neutron comme réseau externe.
network_interface: "dummy0"
neutron_external_interface: "veth-ext-ovs"
kolla_internal_vip_address: "10.10.0.1"
# Un seul nœud : pas de VIP flottante, donc ni HAProxy ni keepalived.
enable_haproxy: "no"
enable_keepalived: "no"
# ProxySQL écoute sur la VIP:3306. Sans HAProxy, la VIP est l'IP du nœud :
# il prenait le port de MariaDB (« Address already in use », 2026-10-07).
enable_proxysql: "no"
# Neutron avec OVN (choix de CLAUDE.md, section 3).
neutron_plugin_agent: "ovn"
# Services.
enable_horizon: "no" # pas d'interface web OpenStack : le portail Syllabus la remplace
enable_heat: "yes" # chaque lab est un modèle Heat
enable_nova_serialconsole_proxy: "yes" # console élève (nova-serialproxy)
nova_compute_virt_type: "kvm" # VT-x vérifié à l'étape 1
enable_prometheus: "yes" # supervision (étape 7)
enable_grafana: "yes"
# Cinder désactivé pour l'instant : les deux disques sont entièrement pris par
# le RAID 1 (/), il n'y a pas de place pour un groupe de volumes LVM dédié.
# Les VM élèves utilisent des disques éphémères Nova. À revoir (Ceph, bloc C).
enable_cinder: "no"
# Kolla ne doit pas toucher au pare-feu : il est géré par le rôle Ansible
# `durcissement` (nftables). Sur Debian, cette option ne ferait qu'essayer de
# désactiver ufw (absent ici), mais on la fixe explicitement.
disable_firewall: false
# Docker (installé par bootstrap-servers) : Kolla fixe déjà iptables: false,
# mais depuis Docker 27 l'IPv6 a son propre réglage, activé par défaut. Sans
# cette ligne, Docker crée des tables « ip6 nat » et « ip6 filter » dans
# nftables (constaté le 2026-10-07). Fusionné dans /etc/docker/daemon.json.
docker_custom_config:
ip6tables: false