ssh-certs hosts.
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 0s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 0s
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user