feat: улучшения роли devops и тестирования

- Убрана подстановка значений по умолчанию для devops_password и devops_ssh_public_key
- Добавлена строгая валидация секретов из vault/secrets.yml с детальными сообщениями об ошибках
- Убран подробный вывод установки пакетов в тасках
- Исправлена проблема с созданием симлинков в vault/ при тестировании
- Обновлена логика загрузки vault переменных в molecule тестах
- Добавлена очистка симлинков в destroy.yml для дополнительной безопасности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-29 18:53:52 +03:00
parent f6d1182193
commit cb5045fb79
23 changed files with 821 additions and 679 deletions

View File

@@ -15,17 +15,17 @@
tags:
- color-reset
#- name: Установка роли devops
# hosts: all
# become: true
# roles:
# - devops
- name: Установка роли python
- name: Установка роли devops
hosts: all
become: true
roles:
- python
- devops
#- name: Установка роли python
# hosts: all
# become: true
# roles:
# - python
#- name: Установка роли docker
# hosts: all

View File

@@ -149,16 +149,16 @@
```bash
# Только создание пользователя и группы
ansible-playbook -i inventory site.yml --tags "user,group"
ansible-playbook -i inventory run.yml --tags "user,group"
# Только настройка SSH
ansible-playbook -i inventory site.yml --tags "ssh,keys"
ansible-playbook -i inventory run.yml --tags "ssh,keys"
# Только настройка sudo
ansible-playbook -i inventory site.yml --tags "sudo,permissions"
ansible-playbook -i inventory run.yml --tags "sudo,permissions"
# Пропустить проверки
ansible-playbook -i inventory site.yml --skip-tags "verification"
ansible-playbook -i inventory run.yml --skip-tags "verification"
```
## Обработчики

View File

@@ -9,11 +9,11 @@ devops_group: "devops"
devops_home: "/home/{{ devops_user }}"
devops_shell: "/bin/bash"
# Настройки пароля (берется из vault/secrets.yml)
devops_password: "{{ vault_devops_password | default('') }}"
# Настройки пароля (обязательно из vault/secrets.yml)
devops_password: "{{ vault_devops_password }}"
# Настройки SSH ключа (берется из vault/secrets.yml)
devops_ssh_public_key: "{{ vault_devops_ssh_public_key | default('') }}"
# Настройки SSH ключа (обязательно из vault/secrets.yml)
devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}"
# Настройки sudo
devops_sudo_nopasswd: true

View File

@@ -12,25 +12,67 @@
- name: "🔍 Проверка входных параметров"
tags: [devops, validation]
block:
- name: "Установка значений по умолчанию для тестирования"
set_fact:
devops_password: "{{ vault_devops_password | default('123123') }}"
devops_ssh_public_key: "{{ vault_devops_ssh_public_key | default('ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... devops@devops.org.ru') }}"
when: devops_password == "" or devops_ssh_public_key == ""
- name: "Проверка наличия пароля пользователя devops"
fail:
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
when:
- vault_file_path is defined
- devops_password == ""
msg: |
❌ ОШИБКА: Пароль пользователя devops не найден в vault/secrets.yml!
Для корректной работы роли необходимо установить переменную vault_devops_password в файле vault/secrets.yml.
Пример содержимого vault/secrets.yml:
vault_devops_password: "ваш_пароль_здесь"
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... devops@devops.org.ru"
Для шифрования файла используйте:
ansible-vault encrypt vault/secrets.yml
when:
- vault_devops_password is not defined
- vault_devops_password == ""
- vault_devops_password is none
- name: "Проверка наличия SSH публичного ключа"
fail:
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
when:
- vault_file_path is defined
- devops_ssh_public_key == ""
msg: |
❌ ОШИБКА: SSH публичный ключ не найден в vault/secrets.yml!
Для корректной работы роли необходимо установить переменную vault_devops_ssh_public_key в файле vault/secrets.yml.
Пример содержимого vault/secrets.yml:
vault_devops_password: "ваш_пароль_здесь"
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... devops@devops.org.ru"
Для шифрования файла используйте:
ansible-vault encrypt vault/secrets.yml
when:
- vault_devops_ssh_public_key is not defined
- vault_devops_ssh_public_key == ""
- vault_devops_ssh_public_key is none
- name: "✅ Проверка успешна - все необходимые секреты найдены"
debug:
msg: |
Все необходимые секреты найдены в vault/secrets.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:
@@ -51,12 +93,6 @@
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]

View File

@@ -235,6 +235,7 @@ devops_system_checks:
path: "{{ devops_sudoers_file }}"
register: "devops_sudoers_check"
# Настройки для логирования
devops_log_config:
level: "{{ devops_log_level }}"