ssh-certs hosts.
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 0s

This commit is contained in:
hogweed1
2026-05-21 03:38:35 +10:00
parent 22cef715ff
commit 6342914794

View File

@@ -5,40 +5,27 @@
local_ssh_user_ca_pub_path: "/etc/step-ca/ssh_user_ca_key.pub" local_ssh_user_ca_pub_path: "/etc/step-ca/ssh_user_ca_key.pub"
pre_tasks: pre_tasks:
- name: Динамический сбор и мерж пользователей изо всех групп хоста - name: Инициализация пустых списков перед сбором
set_fact: set_fact:
# Ищем переменные вида *_users (alpha_users, beta_users) для групп текущего хоста _raw_users: []
project_users: >- _raw_projects: []
{{
group_names - name: Сбор пользователей из всех активных групп хоста
| map('extract', hostvars[inventory_hostname])
| select('defined')
| map('dict2items') | flatten
| selectattr('key', 'match', '.*_users$')
| map(attribute='value') | flatten
| unique
}}
# Ищем переменные вида *_projects (alpha_projects, beta_projects) и склеиваем в один список принципалов
allowed_projects: >-
{{
group_names
| map('extract', hostvars[inventory_hostname])
| select('defined')
| map('dict2items') | flatten
| selectattr('key', 'match', '.*_projects$')
| map(attribute='value') | flatten
| unique
}}
- name: Проверка на случай отсутствия переменных
set_fact: set_fact:
project_users: "{{ project_users | default([]) }}" _raw_users: "{{ _raw_users + (hostvars[inventory_hostname][item ~ '_users'] | default([])) }}"
allowed_projects: "{{ allowed_projects | default([]) }}" loop: "{{ group_names }}"
when: hostvars[inventory_hostname][item ~ '_users'] is defined
- name: Сбор проектов из всех активных групп хоста
set_fact:
_raw_projects: "{{ _raw_projects + (hostvars[inventory_hostname][item ~ '_projects'] | default([])) }}"
loop: "{{ group_names }}"
when: hostvars[inventory_hostname][item ~ '_projects'] is defined
- name: Фиксация уникальных массивов
set_fact:
project_users: "{{ _raw_users | unique }}"
allowed_projects: "{{ _raw_projects | unique }}"
- name: Дебаг получившейся матрицы доступов (Опционально) - name: Дебаг получившейся матрицы доступов (Опционально)
debug: debug:
@@ -104,6 +91,21 @@
marker: "# {mark} ANSIBLE MANAGED USER CERTIFICATE BLOCK #" marker: "# {mark} ANSIBLE MANAGED USER CERTIFICATE BLOCK #"
notify: Restart SSH notify: Restart SSH
- name: Получить список всех файлов принципалов на машине
find:
paths: /etc/ssh/auth_principals
file_type: file
register: found_principals_files
- name: Удаление файлов принципалов для пользователей, которые выбыли из проекта
file:
path: "{{ item.path }}"
state: absent
loop: "{{ found_principals_files.files }}"
# Фильтр проверяет: если имя файла на диске НЕ входит в текущий список project_users, файл удаляется
when: item.path | basename not in (project_users | map(attribute='name') | list)
handlers: handlers:
- name: Restart SSH - name: Restart SSH
service: service: