- Обновлен README.md с новыми возможностями COD preset и роли devops - Добавлена документация по COD preset (docs/cod-preset.md) - Добавлена документация по роли devops (docs/devops-role.md) - Обновлена документация по ARM64 поддержке (docs/arm64-support.md) - Обновлены примеры использования (docs/examples.md) - Исправлен Dockerfile для RHEL с Python 3.11 из EPEL - Обновлен COD preset с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL) - Улучшена роль devops с поддержкой российских ОС - Добавлен CHANGELOG.md с историей изменений - Все изменения протестированы на ARM64 архитектуре
269 lines
9.8 KiB
YAML
269 lines
9.8 KiB
YAML
---
|
||
# Основные задачи для роли devops
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
|
||
- name: "🔍 Проверка входных параметров"
|
||
tags: [devops, validation]
|
||
block:
|
||
- name: "Проверка наличия пароля пользователя devops"
|
||
fail:
|
||
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
|
||
when:
|
||
- vault_file_path is defined
|
||
- devops_password == ""
|
||
|
||
- name: "Проверка наличия SSH публичного ключа"
|
||
fail:
|
||
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
|
||
when:
|
||
- vault_file_path is defined
|
||
- devops_ssh_public_key == ""
|
||
|
||
- name: "Логирование начала выполнения роли"
|
||
debug:
|
||
msg: "Начинаем настройку пользователя {{ devops_user }} на {{ ansible_distribution }} {{ ansible_distribution_version }}"
|
||
when: false
|
||
|
||
- name: "📦 Установка необходимых пакетов"
|
||
tags: [devops, packages]
|
||
block:
|
||
- name: "Обновление кеша пакетов (Debian/Ubuntu)"
|
||
apt:
|
||
update_cache: yes
|
||
cache_valid_time: 3600
|
||
when: devops_os_family == "debian"
|
||
|
||
- name: "Установка необходимых пакетов"
|
||
package:
|
||
name: "{{ devops_packages_to_install }}"
|
||
state: present
|
||
become: true
|
||
register: package_install_result
|
||
|
||
- name: "Логирование установки пакетов"
|
||
debug:
|
||
msg: "Установлены пакеты: {{ package_install_result.changed_packages | default('нет изменений') }}"
|
||
when: false
|
||
|
||
- name: "👤 Создание группы devops"
|
||
tags: [devops, group]
|
||
block:
|
||
- name: "Проверка существования группы {{ devops_group }}"
|
||
group:
|
||
name: "{{ devops_group }}"
|
||
state: present
|
||
gid: "{{ devops_gid }}"
|
||
become: true
|
||
register: group_create_result
|
||
|
||
- name: "Логирование создания группы"
|
||
debug:
|
||
msg: "Группа {{ devops_group }} создана/существует"
|
||
when: false
|
||
|
||
- name: "👥 Создание недостающих групп"
|
||
tags: [devops, groups, additional]
|
||
block:
|
||
- name: "Создание группы wheel (если не существует)"
|
||
group:
|
||
name: wheel
|
||
state: present
|
||
become: true
|
||
when: "'wheel' in devops_final_additional_groups"
|
||
ignore_errors: true
|
||
|
||
- name: "Создание группы sudo (если не существует)"
|
||
group:
|
||
name: sudo
|
||
state: present
|
||
become: true
|
||
when: "'sudo' in devops_final_additional_groups"
|
||
ignore_errors: true
|
||
|
||
- name: "Создание группы systemd-journal (если не существует)"
|
||
group:
|
||
name: systemd-journal
|
||
state: present
|
||
become: true
|
||
when: "'systemd-journal' in devops_final_additional_groups"
|
||
ignore_errors: true
|
||
|
||
- name: "Создание группы docker (если не существует)"
|
||
group:
|
||
name: docker
|
||
state: present
|
||
become: true
|
||
when: "'docker' in devops_final_additional_groups"
|
||
ignore_errors: true
|
||
|
||
- name: "👤 Создание пользователя devops"
|
||
tags: [devops, user, password]
|
||
block:
|
||
- name: "Проверка существования пользователя {{ devops_user }}"
|
||
user:
|
||
name: "{{ devops_user }}"
|
||
group: "{{ devops_group }}"
|
||
uid: "{{ devops_uid }}"
|
||
home: "{{ devops_home }}"
|
||
shell: "{{ devops_shell }}"
|
||
state: present
|
||
create_home: "{{ devops_create_home }}"
|
||
system: "{{ devops_system_user }}"
|
||
groups: "{{ devops_final_additional_groups }}"
|
||
append: yes
|
||
become: true
|
||
register: user_create_result
|
||
|
||
- name: "Установка пароля для пользователя {{ devops_user }}"
|
||
user:
|
||
name: "{{ devops_user }}"
|
||
password: "{{ devops_password | password_hash('sha512') }}"
|
||
update_password: always
|
||
become: true
|
||
no_log: true
|
||
register: password_set_result
|
||
|
||
- name: "Логирование создания пользователя"
|
||
debug:
|
||
msg: "Пользователь {{ devops_user }} создан/обновлен с паролем"
|
||
when: false
|
||
|
||
- name: "🔑 Настройка SSH ключей"
|
||
tags: [devops, ssh, keys]
|
||
block:
|
||
- name: "Создание директории .ssh для пользователя {{ devops_user }}"
|
||
file:
|
||
path: "{{ devops_ssh_dir }}"
|
||
state: directory
|
||
owner: "{{ devops_user }}"
|
||
group: "{{ devops_group }}"
|
||
mode: "{{ devops_ssh_dir_mode }}"
|
||
become: true
|
||
|
||
- name: "Добавление SSH публичного ключа в authorized_keys"
|
||
authorized_key:
|
||
user: "{{ devops_user }}"
|
||
key: "{{ devops_ssh_public_key }}"
|
||
state: present
|
||
manage_dir: no
|
||
become: true
|
||
register: ssh_key_result
|
||
when: devops_ssh_public_key != ""
|
||
|
||
- name: "Установка правильных прав на authorized_keys"
|
||
file:
|
||
path: "{{ devops_ssh_authorized_keys }}"
|
||
owner: "{{ devops_user }}"
|
||
group: "{{ devops_group }}"
|
||
mode: "{{ devops_ssh_keys_mode }}"
|
||
become: true
|
||
when: devops_ssh_public_key != ""
|
||
|
||
- name: "Логирование настройки SSH"
|
||
debug:
|
||
msg: "SSH ключ для пользователя {{ devops_user }} настроен"
|
||
when: false
|
||
|
||
- name: "🔐 Настройка sudo прав"
|
||
tags: [devops, sudo, permissions]
|
||
block:
|
||
- name: "Создание файла sudoers для пользователя {{ devops_user }}"
|
||
template:
|
||
src: "{{ devops_sudoers_template }}"
|
||
dest: "{{ devops_sudoers_file }}"
|
||
owner: root
|
||
group: root
|
||
mode: '0440'
|
||
backup: yes
|
||
become: true
|
||
register: sudoers_result
|
||
|
||
- name: "Проверка синтаксиса sudoers файла"
|
||
command: "visudo -c -f {{ devops_sudoers_file }}"
|
||
become: true
|
||
register: sudoers_check
|
||
changed_when: false
|
||
failed_when: sudoers_check.rc != 0
|
||
|
||
- name: "Логирование настройки sudo"
|
||
debug:
|
||
msg: "Sudo права для пользователя {{ devops_user }} настроены"
|
||
when: false
|
||
|
||
- name: "🔧 Настройка дополнительных параметров"
|
||
tags: [devops, config, additional]
|
||
block:
|
||
- name: "Установка umask для пользователя {{ devops_user }}"
|
||
lineinfile:
|
||
path: "{{ devops_home }}/.bashrc"
|
||
line: "umask {{ devops_umask }}"
|
||
owner: "{{ devops_user }}"
|
||
group: "{{ devops_group }}"
|
||
mode: '0644'
|
||
create: yes
|
||
backup: yes
|
||
become: true
|
||
|
||
- name: "Создание SSH конфигурации для пользователя {{ devops_user }}"
|
||
template:
|
||
src: "devops_ssh_config.j2"
|
||
dest: "{{ devops_ssh_config }}"
|
||
owner: "{{ devops_user }}"
|
||
group: "{{ devops_group }}"
|
||
mode: "0600"
|
||
backup: yes
|
||
become: true
|
||
|
||
- name: "Логирование дополнительных настроек"
|
||
debug:
|
||
msg: "Дополнительные настройки для пользователя {{ devops_user }} применены"
|
||
when: false
|
||
|
||
- name: "✅ Проверка настройки пользователя devops"
|
||
when: devops_verify_user
|
||
tags: [devops, verification, check]
|
||
block:
|
||
- name: "Проверка существования пользователя {{ devops_user }}"
|
||
command: "id {{ devops_user }}"
|
||
register: user_check
|
||
changed_when: false
|
||
failed_when: user_check.rc != 0
|
||
|
||
- name: "Проверка SSH ключа пользователя {{ devops_user }}"
|
||
stat:
|
||
path: "{{ devops_ssh_authorized_keys }}"
|
||
register: ssh_key_check
|
||
|
||
- name: "Проверка sudo прав пользователя {{ devops_user }}"
|
||
command: "sudo -l -U {{ devops_user }}"
|
||
become: true
|
||
register: sudo_check
|
||
changed_when: false
|
||
failed_when: sudo_check.rc != 0
|
||
|
||
- name: "Логирование результатов проверки"
|
||
debug:
|
||
msg: |
|
||
Результаты проверки пользователя {{ devops_user }}:
|
||
- Пользователь существует: {{ user_check.rc == 0 }}
|
||
- SSH ключ настроен: {{ ssh_key_check.stat.exists }}
|
||
- Sudo права настроены: {{ sudo_check.rc == 0 }}
|
||
|
||
- name: "📝 Уведомления о завершении"
|
||
tags: [devops, notification, success]
|
||
block:
|
||
- name: "Уведомление об успешном завершении"
|
||
debug:
|
||
msg: "✅ Пользователь {{ devops_user }} успешно настроен на {{ ansible_hostname }}"
|
||
when: devops_notify_on_success
|
||
|
||
- name: "Уведомление о настройке SSH"
|
||
debug:
|
||
msg: "🔑 SSH ключ для пользователя {{ devops_user }} настроен"
|
||
when: devops_notify_on_success and devops_verify_ssh
|
||
|
||
- name: "Уведомление о настройке sudo"
|
||
debug:
|
||
msg: "🔐 Sudo права для пользователя {{ devops_user }} настроены"
|
||
when: devops_notify_on_success and devops_verify_sudo |