312 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | ||
| # Основные задачи для роли devops
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| 
 | ||
| - name: "Reset ANSI color codes"
 | ||
|   debug:
 | ||
|     msg: "\033[0m"
 | ||
|   changed_when: false
 | ||
|   tags: [devops, color-reset]
 | ||
| 
 | ||
| - name: "🔍 Проверка входных параметров"
 | ||
|   tags: [devops, validation]
 | ||
|   block:
 | ||
|     - name: "Проверка наличия пароля пользователя devops"
 | ||
|       fail:
 | ||
|         msg: |
 | ||
|           ❌ ОШИБКА: Пароль пользователя devops не определён.
 | ||
| 
 | ||
|           Ожидаемая переменная: vault_devops_password
 | ||
|           Где задавать: roles/devops/vars/main.yml (или переопределить на уровне инвентаря/группы/хоста)
 | ||
| 
 | ||
|           Пример в roles/devops/vars/main.yml:
 | ||
|           vault_devops_password: "ваш_пароль_здесь"
 | ||
|       when: 
 | ||
|         - vault_devops_password is not defined
 | ||
|         - vault_devops_password == ""
 | ||
|         - vault_devops_password is none
 | ||
| 
 | ||
|     - name: "Проверка наличия SSH публичного ключа"
 | ||
|       fail:
 | ||
|         msg: |
 | ||
|           ❌ ОШИБКА: SSH публичный ключ не определён.
 | ||
| 
 | ||
|           Ожидаемая переменная: vault_devops_ssh_public_key
 | ||
|           Где задавать: roles/devops/vars/main.yml (или переопределить на уровне инвентаря/группы/хоста)
 | ||
| 
 | ||
|           Пример в roles/devops/vars/main.yml:
 | ||
|           vault_devops_ssh_public_key: |
 | ||
|             ssh-rsa AAAAB3... user@host
 | ||
|       when: 
 | ||
|         - vault_devops_ssh_public_key is not defined
 | ||
|         - vault_devops_ssh_public_key == ""
 | ||
|         - vault_devops_ssh_public_key is none
 | ||
| 
 | ||
|     - name: "✅ Проверка успешна - все необходимые секреты найдены"
 | ||
|       debug:
 | ||
|         msg: |
 | ||
|           ✅ Все необходимые секреты найдены в переменных роли (vars/main.yml или инвентарь):
 | ||
|           - Пароль пользователя: {{ 'установлен' if vault_devops_password is defined and vault_devops_password != '' else 'НЕ УСТАНОВЛЕН' }}
 | ||
|           - SSH публичный ключ: {{ 'установлен' if vault_devops_ssh_public_key is defined and vault_devops_ssh_public_key != '' else 'НЕ УСТАНОВЛЕН' }}
 | ||
|       when: 
 | ||
|         - vault_devops_password is defined
 | ||
|         - vault_devops_password != ""
 | ||
|         - vault_devops_ssh_public_key is defined
 | ||
|         - vault_devops_ssh_public_key != ""
 | ||
| 
 | ||
|     - name: "🔍 Проверка что пароль не пустой"
 | ||
|       fail:
 | ||
|         msg: "❌ ОШИБКА: Пароль пользователя devops не может быть пустым!"
 | ||
|       when: 
 | ||
|         - vault_devops_password is defined
 | ||
|         - vault_devops_password == ""
 | ||
| 
 | ||
|     - name: "🔍 Проверка что SSH ключ не пустой"
 | ||
|       fail:
 | ||
|         msg: "❌ ОШИБКА: SSH публичный ключ не может быть пустым!"
 | ||
|       when: 
 | ||
|         - vault_devops_ssh_public_key is defined
 | ||
|         - vault_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
 | ||
| 
 | ||
| - 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 |