--- # Основные задачи для роли 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