--- # É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: créer le dossier des surcharges nova ansible.builtin.file: path: "{{ kolla_config_dir }}/config/nova" state: directory owner: root group: root mode: "0750" - name: déployer la surcharge de nova-compute (versionnée, sans secret) ansible.builtin.copy: src: "{{ playbook_dir }}/../kolla/config/nova/nova-compute.conf" dest: "{{ kolla_config_dir }}/config/nova/nova-compute.conf" owner: root group: root mode: "0640" register: kolla_surcharge_nova - name: rappeler de reconfigurer nova si la surcharge a changé ansible.builtin.debug: msg: > Surcharge nova-compute modifiée : lancer `kolla-ansible reconfigure -i {{ kolla_config_dir }}/all-in-one --tags nova` sur le serveur (voir docs/runbooks/openstack.md). when: kolla_surcharge_nova.changed # Kolla ne retire pas l'unité systemd d'un service qu'on désactive ensuite # dans globals.yml : proxysql (désactivé à l'étape 5) échouait à chaque # démarrage et polluait `systemctl --failed`. Unité déplacée, pas supprimée. - name: vérifier la présence d'unités Kolla de services désactivés ansible.builtin.stat: path: "/etc/systemd/system/kolla-{{ item }}-container.service" loop: "{{ kolla_services_retires }}" register: kolla_unites_retirees - name: arrêter et désactiver ces unités ansible.builtin.systemd: name: "kolla-{{ item.item }}-container.service" state: stopped enabled: false loop: "{{ kolla_unites_retirees.results }}" when: item.stat.exists failed_when: false - name: créer le dossier des unités retirées ansible.builtin.file: path: /root/unites-retirees state: directory mode: "0700" - name: déplacer ces unités hors de systemd ansible.builtin.command: cmd: "mv /etc/systemd/system/kolla-{{ item.item }}-container.service /root/unites-retirees/" loop: "{{ kolla_unites_retirees.results }}" when: item.stat.exists register: kolla_unites_deplacees - name: recharger systemd et oublier leurs échecs ansible.builtin.shell: systemctl daemon-reload && systemctl reset-failed when: kolla_unites_deplacees.changed - 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" - name: appliquer les correctifs post-déploiement ansible.builtin.import_tasks: corrections.yml tags: [corrections]