feat: сделана роль devops универсальной для всех ОС
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Добавлена автоматическая детекция ОС и настройка групп пользователя
- Поддержка всех ОС из dockerfiles: Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS
- Автоматический выбор групп: sudo для Ubuntu/Debian, wheel для RHEL-семейства
- Обновлена документация с примерами для разных ОС
- Добавлены тесты для проверки универсальности
- Исправлены ошибки линтера в meta/main.yml

Роль теперь работает на всех системах из dockerfiles без дополнительной настройки.
This commit is contained in:
Сергей Антропов
2025-10-25 20:24:43 +03:00
parent 1ec9121a21
commit 7232bd6756
8 changed files with 120 additions and 14 deletions

View File

@@ -3,6 +3,22 @@
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Определение ОС и настройка переменных
- name: "Определение ОС и настройка переменных"
set_fact:
devops_os_family: "{{ ansible_os_family | lower }}"
devops_distribution: "{{ ansible_distribution | lower }}"
devops_os_name: "{{ ansible_distribution | lower if ansible_distribution is defined else ansible_os_family | lower }}"
when: ansible_os_family is defined
# Определение групп пользователя в зависимости от ОС
- name: "Определение групп пользователя для {{ devops_os_name }}"
set_fact:
devops_user_groups: "{{ devops_os_config[devops_os_name].groups | default(devops_os_config[devops_os_family].groups | default(['sudo'])) }}"
devops_sudo_file: "{{ devops_os_config[devops_os_name].sudo_file | default(devops_os_config[devops_os_family].sudo_file | default('/etc/sudoers.d/devops')) }}"
devops_sudo_validate: "{{ devops_os_config[devops_os_name].sudo_validate | default(devops_os_config[devops_os_family].sudo_validate | default('visudo -cf %s')) }}"
when: devops_os_name is defined
# Генерация безопасного пароля для пользователя devops
- name: "Генерация безопасного пароля для пользователя devops"
set_fact:
@@ -15,7 +31,7 @@
name: "{{ devops_user.name }}"
home: "{{ devops_user.home }}"
shell: "{{ devops_user.shell }}"
groups: "{{ devops_user.groups }}"
groups: "{{ devops_user_groups }}"
create_home: "{{ devops_user.create_home }}"
state: "{{ devops_user.state }}"
password: "{{ devops_user_password | password_hash('sha512') }}"
@@ -44,14 +60,14 @@
# Настройка sudo для пользователя devops (без пароля)
- name: "Настройка sudo для пользователя devops без пароля"
lineinfile:
path: /etc/sudoers.d/devops
path: "{{ devops_sudo_file }}"
line: "{{ devops_user.name }} ALL=(ALL) NOPASSWD: {{ devops_sudo.commands }}"
create: true
mode: '0440'
validate: 'visudo -cf %s'
validate: "{{ devops_sudo_validate }}"
become: true
# Логирование успешного создания пользователя
- name: "Логирование создания пользователя devops"
debug:
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом"
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом на {{ devops_os_name | default('неизвестная') }} ОС"