diff --git a/roles/deploy.yml b/roles/deploy.yml index 69d00da..58f617b 100644 --- a/roles/deploy.yml +++ b/roles/deploy.yml @@ -6,5 +6,5 @@ - name: Развертывание всех ролей hosts: all roles: - # - ping - - devops + - ping + #- devops diff --git a/roles/devops/QUICKSTART.md b/roles/devops/QUICKSTART.md index 890a5bb..a349008 100644 --- a/roles/devops/QUICKSTART.md +++ b/roles/devops/QUICKSTART.md @@ -12,6 +12,8 @@ 3. ✅ Настраивает SSH доступ по ключу 4. ✅ Добавляет права sudo без пароля 5. ✅ Создает домашнюю директорию +6. ✅ Автоматически определяет ОС и настраивает группы +7. ✅ Поддерживает все ОС из dockerfiles (Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS) ## Быстрый запуск diff --git a/roles/devops/README.md b/roles/devops/README.md index b4687cf..4c384e9 100644 --- a/roles/devops/README.md +++ b/roles/devops/README.md @@ -111,12 +111,22 @@ devops_ssh_keys: ## Поддерживаемые ОС -- Ubuntu (focal, jammy) -- Debian (bullseye, bookworm) -- RHEL (8, 9) -- CentOS (8, 9) -- Rocky Linux (8, 9) -- AlmaLinux (8, 9) +- **Ubuntu** (focal, jammy) +- **Debian** (bullseye, bookworm) +- **RHEL** (8, 9) +- **CentOS** (8, 9) +- **Rocky Linux** (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` ## Теги diff --git a/roles/devops/defaults/main.yml b/roles/devops/defaults/main.yml index 936fc91..49ba1d2 100644 --- a/roles/devops/defaults/main.yml +++ b/roles/devops/defaults/main.yml @@ -8,7 +8,7 @@ devops_user: name: "devops" home: "/home/devops" shell: "/bin/bash" - groups: ["sudo", "docker"] + groups: [] create_home: true state: "present" @@ -32,3 +32,51 @@ devops_ssh: ssh_dir: "/home/devops/.ssh" ssh_dir_mode: "0700" 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" diff --git a/roles/devops/examples.yml b/roles/devops/examples.yml index 4f78209..896b97e 100644 --- a/roles/devops/examples.yml +++ b/roles/devops/examples.yml @@ -27,7 +27,6 @@ devops_user: name: "mydevops" home: "/home/mydevops" - groups: ["sudo", "docker", "wheel"] devops_password: length: 40 min_special: 6 @@ -40,6 +39,28 @@ roles: - 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: С дополнительными группами - name: "Создание пользователя с дополнительными группами" hosts: all diff --git a/roles/devops/meta/main.yml b/roles/devops/meta/main.yml index 30abf18..e7ead9d 100644 --- a/roles/devops/meta/main.yml +++ b/roles/devops/meta/main.yml @@ -18,6 +18,13 @@ galaxy_info: versions: - "8" - "9" + - name: Rocky + versions: + - "8.0" + - "9.0" + - name: "Astra Linux" + versions: + - "1.7" galaxy_tags: - devops - usermanagement diff --git a/roles/devops/tasks/main.yml b/roles/devops/tasks/main.yml index 7fb3c82..652e914 100644 --- a/roles/devops/tasks/main.yml +++ b/roles/devops/tasks/main.yml @@ -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('неизвестная') }} ОС" diff --git a/roles/devops/tests/test.yml b/roles/devops/tests/test.yml index 9a28ed5..472fa7e 100644 --- a/roles/devops/tests/test.yml +++ b/roles/devops/tests/test.yml @@ -86,3 +86,5 @@ ✅ Sudo права настроены ✅ Группы пользователя: {{ user_groups.stdout }} ✅ Shell пользователя: {{ user_shell.stdout.split(':')[-1] }} + ✅ ОС: {{ devops_os_name | default('неизвестная') }} + ✅ Группы для ОС: {{ devops_user_groups | default('не определены') }}