ajoute le proxy console Go et le relais WebSocket vers nova-serialproxy
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
30e14b1c54
commit
8742bde807
30 changed files with 1103 additions and 6 deletions
|
|
@ -81,6 +81,36 @@
|
|||
portail_app_url: "http://{{ ansible_host }}"
|
||||
when: not portail_env_stat.stat.exists
|
||||
|
||||
# Variables ajoutées après le premier déploiement (étape 9) : mises à jour
|
||||
# ligne par ligne, pour ne jamais retoucher le reste d'un .env déjà en place
|
||||
# (APP_KEY en particulier, qui ne doit jamais changer sans le vouloir).
|
||||
- name: lire l'application credential OpenStack du portail (étape 6)
|
||||
ansible.builtin.slurp:
|
||||
src: /etc/kolla/clouds-paillasse.yaml
|
||||
register: portail_clouds_brut
|
||||
|
||||
- name: extraire l'id et le secret de l'application credential
|
||||
ansible.builtin.set_fact:
|
||||
portail_os_application_credential_id: "{{ portail_clouds_contenu | regex_search('application_credential_id:\\s*\"?([^\"\\n]+)', '\\1') | first }}"
|
||||
portail_os_application_credential_secret: "{{ portail_clouds_contenu | regex_search('application_credential_secret:\\s*\"?([^\"\\n]+)', '\\1') | first }}"
|
||||
vars:
|
||||
portail_clouds_contenu: "{{ portail_clouds_brut.content | b64decode }}"
|
||||
no_log: true
|
||||
|
||||
- name: ajouter/mettre à jour les variables OpenStack dans .env
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ portail_dossier_app }}/.env"
|
||||
regexp: "^{{ item.cle }}="
|
||||
line: "{{ item.cle }}={{ item.valeur }}"
|
||||
loop:
|
||||
- { cle: "OS_AUTH_URL", valeur: "http://10.10.0.1:5000" }
|
||||
- { cle: "OS_NOVA_URL", valeur: "http://10.10.0.1:8774/v2.1" }
|
||||
- { cle: "OS_APPLICATION_CREDENTIAL_ID", valeur: "{{ portail_os_application_credential_id }}" }
|
||||
- { cle: "OS_APPLICATION_CREDENTIAL_SECRET", valeur: "{{ portail_os_application_credential_secret }}" }
|
||||
- { cle: "REDIS_PREFIX", valeur: "" }
|
||||
no_log: true
|
||||
register: portail_env_mis_a_jour
|
||||
|
||||
- name: installer les dépendances JS (npm)
|
||||
ansible.builtin.command:
|
||||
cmd: npm ci
|
||||
|
|
|
|||
|
|
@ -12,6 +12,17 @@ server {
|
|||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
# Relaie la console série (étape 9) en WebSocket vers le proxy Go. Le
|
||||
# jeton après /console/ est à usage court (5 min), jamais l'URL Nova.
|
||||
location /console/ {
|
||||
proxy_pass http://127.0.0.1:8081/console/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_read_timeout 1h;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/run/php/php{{ portail_php_version }}-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
|
|
|
|||
6
ansible/roles/proxy-console/defaults/main.yml
Normal file
6
ansible/roles/proxy-console/defaults/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
proxy_console_go_version: "1.27.1"
|
||||
proxy_console_go_sha256: "63d339f0da5ab53635a56f2490a7984dfe12dfcff22ad749f63edaf590168445"
|
||||
proxy_console_dossier: /opt/proxy-console
|
||||
proxy_console_ecoute: "127.0.0.1:8081"
|
||||
proxy_console_redis: "127.0.0.1:6380"
|
||||
10
ansible/roles/proxy-console/handlers/main.yml
Normal file
10
ansible/roles/proxy-console/handlers/main.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
- name: recharger systemd
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: true
|
||||
|
||||
- name: redémarrer proxy-console
|
||||
ansible.builtin.systemd:
|
||||
name: proxy-console
|
||||
state: restarted
|
||||
enabled: true
|
||||
32
ansible/roles/proxy-console/tasks/01-go.yml
Normal file
32
ansible/roles/proxy-console/tasks/01-go.yml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
- name: télécharger Go {{ proxy_console_go_version }} (archive officielle, somme vérifiée)
|
||||
ansible.builtin.get_url:
|
||||
url: "https://go.dev/dl/go{{ proxy_console_go_version }}.linux-amd64.tar.gz"
|
||||
dest: "/tmp/go{{ proxy_console_go_version }}.linux-amd64.tar.gz"
|
||||
checksum: "sha256:{{ proxy_console_go_sha256 }}"
|
||||
mode: "0644"
|
||||
|
||||
- name: vérifier si Go est déjà installé dans cette version
|
||||
ansible.builtin.command: /usr/local/go/bin/go version
|
||||
register: proxy_console_go_deja_installe
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
|
||||
- name: supprimer une éventuelle ancienne version de Go
|
||||
ansible.builtin.file:
|
||||
path: /usr/local/go
|
||||
state: absent
|
||||
when: proxy_console_go_version not in (proxy_console_go_deja_installe.stdout | default(''))
|
||||
|
||||
- name: extraire Go dans /usr/local
|
||||
ansible.builtin.unarchive:
|
||||
src: "/tmp/go{{ proxy_console_go_version }}.linux-amd64.tar.gz"
|
||||
dest: /usr/local
|
||||
remote_src: true
|
||||
creates: /usr/local/go/bin/go
|
||||
|
||||
- name: rendre go accessible dans le PATH
|
||||
ansible.builtin.file:
|
||||
src: /usr/local/go/bin/go
|
||||
dest: /usr/local/bin/go
|
||||
state: link
|
||||
98
ansible/roles/proxy-console/tasks/02-service.yml
Normal file
98
ansible/roles/proxy-console/tasks/02-service.yml
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
---
|
||||
- name: créer l'utilisateur système dédié
|
||||
ansible.builtin.user:
|
||||
name: proxyconsole
|
||||
system: true
|
||||
shell: /usr/sbin/nologin
|
||||
home: "{{ proxy_console_dossier }}"
|
||||
create_home: false
|
||||
|
||||
- name: créer le dossier de l'application
|
||||
ansible.builtin.file:
|
||||
path: "{{ proxy_console_dossier }}"
|
||||
state: directory
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "{{ ansible_user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: synchroniser le code source
|
||||
become: false
|
||||
ansible.posix.synchronize:
|
||||
src: "{{ playbook_dir }}/../proxy-console/"
|
||||
dest: "{{ proxy_console_dossier }}/"
|
||||
delete: true
|
||||
rsync_opts:
|
||||
- "--exclude=proxy-console-linux-amd64"
|
||||
- "--exclude=proxy-console"
|
||||
- "--exclude=.cache"
|
||||
- "--exclude=go"
|
||||
register: proxy_console_code_synchronise
|
||||
|
||||
- name: compiler le binaire
|
||||
ansible.builtin.command:
|
||||
cmd: /usr/local/bin/go build -o {{ proxy_console_dossier }}/proxy-console .
|
||||
args:
|
||||
chdir: "{{ proxy_console_dossier }}"
|
||||
environment:
|
||||
HOME: "{{ proxy_console_dossier }}"
|
||||
register: proxy_console_build
|
||||
changed_when: true
|
||||
notify: redémarrer proxy-console
|
||||
|
||||
- name: donner la propriété du binaire à l'utilisateur dédié
|
||||
ansible.builtin.file:
|
||||
path: "{{ proxy_console_dossier }}/proxy-console"
|
||||
owner: proxyconsole
|
||||
group: proxyconsole
|
||||
mode: "0750"
|
||||
|
||||
# Le mot de passe Redis est déjà généré par le rôle `portail` (même Redis,
|
||||
# partagé) : on le relit plutôt que d'en gérer un second.
|
||||
- name: lire le mot de passe Redis de l'app
|
||||
ansible.builtin.slurp:
|
||||
src: /etc/portail/.env
|
||||
register: proxy_console_env_portail_brut
|
||||
|
||||
- name: extraire le mot de passe Redis
|
||||
ansible.builtin.set_fact:
|
||||
proxy_console_redis_mot_de_passe: "{{ proxy_console_env_portail_contenu | regex_search('REDIS_PASSWORD=(.*)', '\\1') | first }}"
|
||||
vars:
|
||||
proxy_console_env_portail_contenu: "{{ proxy_console_env_portail_brut.content | b64decode }}"
|
||||
no_log: true
|
||||
|
||||
- name: déployer le fichier d'environnement du service
|
||||
ansible.builtin.template:
|
||||
src: proxy-console.env.j2
|
||||
dest: /etc/proxy-console.env
|
||||
owner: root
|
||||
group: proxyconsole
|
||||
mode: "0640"
|
||||
no_log: true
|
||||
notify: redémarrer proxy-console
|
||||
|
||||
- name: déployer le service systemd
|
||||
ansible.builtin.template:
|
||||
src: proxy-console.service.j2
|
||||
dest: /etc/systemd/system/proxy-console.service
|
||||
mode: "0644"
|
||||
notify:
|
||||
- recharger systemd
|
||||
- redémarrer proxy-console
|
||||
|
||||
- name: appliquer les changements
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: vérifier que le service tourne
|
||||
ansible.builtin.systemd:
|
||||
name: proxy-console
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
- name: déployer les scripts de test manuel de la console
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../proxy-console/{{ item }}"
|
||||
dest: "/opt/construction-image/{{ item }}"
|
||||
mode: "0644"
|
||||
loop:
|
||||
- test-manuel.py
|
||||
- test-duplication.py
|
||||
6
ansible/roles/proxy-console/tasks/main.yml
Normal file
6
ansible/roles/proxy-console/tasks/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
- name: installer Go
|
||||
ansible.builtin.import_tasks: 01-go.yml
|
||||
|
||||
- name: déployer et démarrer le service
|
||||
ansible.builtin.import_tasks: 02-service.yml
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# Géré par Ansible (rôle proxy-console) — ne pas modifier à la main.
|
||||
PROXY_CONSOLE_ECOUTE={{ proxy_console_ecoute }}
|
||||
PROXY_CONSOLE_REDIS={{ proxy_console_redis }}
|
||||
PROXY_CONSOLE_REDIS_MOT_DE_PASSE={{ proxy_console_redis_mot_de_passe }}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
[Unit]
|
||||
Description=Proxy console série Syllabus (étape 9)
|
||||
# Géré par Ansible (rôle proxy-console) — ne pas modifier à la main.
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=proxyconsole
|
||||
Group=proxyconsole
|
||||
EnvironmentFile=/etc/proxy-console.env
|
||||
ExecStart={{ proxy_console_dossier }}/proxy-console
|
||||
Restart=on-failure
|
||||
RestartSec=2
|
||||
|
||||
NoNewPrivileges=true
|
||||
ProtectSystem=strict
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
Add table
Add a link
Reference in a new issue