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

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
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
ansible.builtin.service:
name: ssh

View file

@ -95,6 +95,14 @@
validate: "nft -c -f %s"
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
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