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
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:
@@ -6,5 +6,5 @@
|
|||||||
- name: Развертывание всех ролей
|
- name: Развертывание всех ролей
|
||||||
hosts: all
|
hosts: all
|
||||||
roles:
|
roles:
|
||||||
# - ping
|
- ping
|
||||||
- devops
|
#- devops
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
3. ✅ Настраивает SSH доступ по ключу
|
3. ✅ Настраивает SSH доступ по ключу
|
||||||
4. ✅ Добавляет права sudo без пароля
|
4. ✅ Добавляет права sudo без пароля
|
||||||
5. ✅ Создает домашнюю директорию
|
5. ✅ Создает домашнюю директорию
|
||||||
|
6. ✅ Автоматически определяет ОС и настраивает группы
|
||||||
|
7. ✅ Поддерживает все ОС из dockerfiles (Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS)
|
||||||
|
|
||||||
## Быстрый запуск
|
## Быстрый запуск
|
||||||
|
|
||||||
|
|||||||
@@ -111,12 +111,22 @@ devops_ssh_keys:
|
|||||||
|
|
||||||
## Поддерживаемые ОС
|
## Поддерживаемые ОС
|
||||||
|
|
||||||
- Ubuntu (focal, jammy)
|
- **Ubuntu** (focal, jammy)
|
||||||
- Debian (bullseye, bookworm)
|
- **Debian** (bullseye, bookworm)
|
||||||
- RHEL (8, 9)
|
- **RHEL** (8, 9)
|
||||||
- CentOS (8, 9)
|
- **CentOS** (8, 9)
|
||||||
- Rocky Linux (8, 9)
|
- **Rocky Linux** (8, 9)
|
||||||
- AlmaLinux (8, 9)
|
- **AlmaLinux** (8, 9)
|
||||||
|
- **Astra Linux** (1.7)
|
||||||
|
- **ALT Linux** (p9)
|
||||||
|
- **RedOS** (9)
|
||||||
|
|
||||||
|
### Автоматическое определение ОС
|
||||||
|
|
||||||
|
Роль автоматически определяет операционную систему и настраивает:
|
||||||
|
- **Группы пользователя**: `sudo` для Ubuntu/Debian, `wheel` для RHEL-семейства
|
||||||
|
- **Путь к sudoers**: `/etc/sudoers.d/devops`
|
||||||
|
- **Валидация sudoers**: `visudo -cf %s`
|
||||||
|
|
||||||
## Теги
|
## Теги
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ devops_user:
|
|||||||
name: "devops"
|
name: "devops"
|
||||||
home: "/home/devops"
|
home: "/home/devops"
|
||||||
shell: "/bin/bash"
|
shell: "/bin/bash"
|
||||||
groups: ["sudo", "docker"]
|
groups: []
|
||||||
create_home: true
|
create_home: true
|
||||||
state: "present"
|
state: "present"
|
||||||
|
|
||||||
@@ -32,3 +32,51 @@ devops_ssh:
|
|||||||
ssh_dir: "/home/devops/.ssh"
|
ssh_dir: "/home/devops/.ssh"
|
||||||
ssh_dir_mode: "0700"
|
ssh_dir_mode: "0700"
|
||||||
authorized_keys_mode: "0600"
|
authorized_keys_mode: "0600"
|
||||||
|
|
||||||
|
# Настройки для разных ОС
|
||||||
|
devops_os_config:
|
||||||
|
# Ubuntu/Debian
|
||||||
|
ubuntu:
|
||||||
|
groups: ["sudo", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
debian:
|
||||||
|
groups: ["sudo", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
|
||||||
|
# RHEL/CentOS/Rocky/AlmaLinux
|
||||||
|
rhel:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
centos:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
rocky:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
alma:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
|
||||||
|
# Astra Linux
|
||||||
|
astra:
|
||||||
|
groups: ["sudo", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
|
||||||
|
# ALT Linux
|
||||||
|
alt:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
|
||||||
|
# RedOS
|
||||||
|
redos:
|
||||||
|
groups: ["wheel", "docker"]
|
||||||
|
sudo_file: "/etc/sudoers.d/devops"
|
||||||
|
sudo_validate: "visudo -cf %s"
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
devops_user:
|
devops_user:
|
||||||
name: "mydevops"
|
name: "mydevops"
|
||||||
home: "/home/mydevops"
|
home: "/home/mydevops"
|
||||||
groups: ["sudo", "docker", "wheel"]
|
|
||||||
devops_password:
|
devops_password:
|
||||||
length: 40
|
length: 40
|
||||||
min_special: 6
|
min_special: 6
|
||||||
@@ -40,6 +39,28 @@
|
|||||||
roles:
|
roles:
|
||||||
- devops
|
- devops
|
||||||
|
|
||||||
|
# Пример 4: Для конкретной ОС (RHEL/CentOS)
|
||||||
|
- name: "Создание пользователя для RHEL/CentOS"
|
||||||
|
hosts: rhel_servers
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
devops_os_config:
|
||||||
|
rhel:
|
||||||
|
groups: ["wheel", "docker", "adm"]
|
||||||
|
roles:
|
||||||
|
- devops
|
||||||
|
|
||||||
|
# Пример 5: Для Ubuntu/Debian
|
||||||
|
- name: "Создание пользователя для Ubuntu/Debian"
|
||||||
|
hosts: ubuntu_servers
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
devops_os_config:
|
||||||
|
ubuntu:
|
||||||
|
groups: ["sudo", "docker", "adm"]
|
||||||
|
roles:
|
||||||
|
- devops
|
||||||
|
|
||||||
# Пример 4: С дополнительными группами
|
# Пример 4: С дополнительными группами
|
||||||
- name: "Создание пользователя с дополнительными группами"
|
- name: "Создание пользователя с дополнительными группами"
|
||||||
hosts: all
|
hosts: all
|
||||||
|
|||||||
@@ -18,6 +18,13 @@ galaxy_info:
|
|||||||
versions:
|
versions:
|
||||||
- "8"
|
- "8"
|
||||||
- "9"
|
- "9"
|
||||||
|
- name: Rocky
|
||||||
|
versions:
|
||||||
|
- "8.0"
|
||||||
|
- "9.0"
|
||||||
|
- name: "Astra Linux"
|
||||||
|
versions:
|
||||||
|
- "1.7"
|
||||||
galaxy_tags:
|
galaxy_tags:
|
||||||
- devops
|
- devops
|
||||||
- usermanagement
|
- usermanagement
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
# Автор: Сергей Антропов
|
# Автор: Сергей Антропов
|
||||||
# Сайт: https://devops.org.ru
|
# Сайт: 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
|
# Генерация безопасного пароля для пользователя devops
|
||||||
- name: "Генерация безопасного пароля для пользователя devops"
|
- name: "Генерация безопасного пароля для пользователя devops"
|
||||||
set_fact:
|
set_fact:
|
||||||
@@ -15,7 +31,7 @@
|
|||||||
name: "{{ devops_user.name }}"
|
name: "{{ devops_user.name }}"
|
||||||
home: "{{ devops_user.home }}"
|
home: "{{ devops_user.home }}"
|
||||||
shell: "{{ devops_user.shell }}"
|
shell: "{{ devops_user.shell }}"
|
||||||
groups: "{{ devops_user.groups }}"
|
groups: "{{ devops_user_groups }}"
|
||||||
create_home: "{{ devops_user.create_home }}"
|
create_home: "{{ devops_user.create_home }}"
|
||||||
state: "{{ devops_user.state }}"
|
state: "{{ devops_user.state }}"
|
||||||
password: "{{ devops_user_password | password_hash('sha512') }}"
|
password: "{{ devops_user_password | password_hash('sha512') }}"
|
||||||
@@ -44,14 +60,14 @@
|
|||||||
# Настройка sudo для пользователя devops (без пароля)
|
# Настройка sudo для пользователя devops (без пароля)
|
||||||
- name: "Настройка sudo для пользователя devops без пароля"
|
- name: "Настройка sudo для пользователя devops без пароля"
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: /etc/sudoers.d/devops
|
path: "{{ devops_sudo_file }}"
|
||||||
line: "{{ devops_user.name }} ALL=(ALL) NOPASSWD: {{ devops_sudo.commands }}"
|
line: "{{ devops_user.name }} ALL=(ALL) NOPASSWD: {{ devops_sudo.commands }}"
|
||||||
create: true
|
create: true
|
||||||
mode: '0440'
|
mode: '0440'
|
||||||
validate: 'visudo -cf %s'
|
validate: "{{ devops_sudo_validate }}"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
# Логирование успешного создания пользователя
|
# Логирование успешного создания пользователя
|
||||||
- name: "Логирование создания пользователя devops"
|
- name: "Логирование создания пользователя devops"
|
||||||
debug:
|
debug:
|
||||||
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом"
|
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом на {{ devops_os_name | default('неизвестная') }} ОС"
|
||||||
|
|||||||
@@ -86,3 +86,5 @@
|
|||||||
✅ Sudo права настроены
|
✅ Sudo права настроены
|
||||||
✅ Группы пользователя: {{ user_groups.stdout }}
|
✅ Группы пользователя: {{ user_groups.stdout }}
|
||||||
✅ Shell пользователя: {{ user_shell.stdout.split(':')[-1] }}
|
✅ Shell пользователя: {{ user_shell.stdout.split(':')[-1] }}
|
||||||
|
✅ ОС: {{ devops_os_name | default('неизвестная') }}
|
||||||
|
✅ Группы для ОС: {{ devops_user_groups | default('не определены') }}
|
||||||
|
|||||||
Reference in New Issue
Block a user