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:
Adam Belkacemi 2026-10-08 09:35:16 +02:00
parent 30e14b1c54
commit 8742bde807
30 changed files with 1103 additions and 6 deletions

View 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"

View 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

View 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

View 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

View 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

View file

@ -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 }}

View file

@ -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