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

@@ -17,6 +17,11 @@
family: debian
groups: [test]
kind_clusters: []
# перечисли файлы/глобы, которые нужно временно расшифровать
vault_targets:
- /workspace/vault/secrets.yml
- /workspace/vault/secret.yml
tasks:
# =============================================================================
@@ -36,6 +41,63 @@
when: preset_file is file
ignore_errors: true
# =============================================================================
# VAULT CLEANUP - Перешифровка файлов перед удалением контейнеров
# =============================================================================
- name: Vault cleanup operations
debug:
msg: |
================================================================================
VAULT CLEANUP - Перешифровка файлов перед удалением контейнеров
================================================================================
Re-encrypting vault files
================================================================================
- name: Re-encrypt all vault files
community.docker.docker_container_exec:
container: ansible-controller
command: |
bash -c '
VAULT_TARGETS_JSON="{{ vault_targets | to_json }}"
VAULT_PASSWORD_FILE="/workspace/vault/.vault"
echo "=== RE-ENCRYPTING ALL VAULT FILES ==="
if [ ! -f "$VAULT_PASSWORD_FILE" ]; then
echo "Vault password file not found: $VAULT_PASSWORD_FILE"
exit 0
fi
# Парсим JSON массив и перешифровываем каждый файл
echo "$VAULT_TARGETS_JSON" | jq -r ".[]" | while read -r target; do
echo "Processing target: $target"
# Если это glob паттерн, находим файлы
if [[ "$target" == *"*"* ]]; then
for file in $target; do
if [ -f "$file" ] && ! grep -q "ANSIBLE_VAULT" "$file"; then
echo "Re-encrypting file: $file"
ansible-vault encrypt --encrypt-vault-id default --vault-password-file "$VAULT_PASSWORD_FILE" "$file"
fi
done
else
# Обычный файл
if [ -f "$target" ] && ! grep -q "ANSIBLE_VAULT" "$target"; then
echo "Re-encrypting file: $target"
ansible-vault encrypt --encrypt-vault-id default --vault-password-file "$VAULT_PASSWORD_FILE" "$target"
fi
fi
done
echo "All vault files re-encrypted successfully"
# Очистка символических ссылок в vault/
echo "Cleaning up vault symlinks..."
rm -f /workspace/vault/*.decrypted
echo "Vault symlinks cleaned up"
'
ignore_errors: true
# =============================================================================
# УДАЛЕНИЕ КОНТЕЙНЕРОВ - Остановка и удаление контейнеров
# =============================================================================
@@ -114,6 +176,18 @@
vars:
# Используем переменную hosts из загруженного пресета
hosts: "{{ hosts }}"
# =============================================================================
# ДОПОЛНИТЕЛЬНАЯ ОЧИСТКА - Удаление симлинков vault
# =============================================================================
- name: Clean up vault symlinks
file:
path: "{{ item }}"
state: absent
loop:
- /workspace/vault/secrets.yml.decrypted
- /workspace/vault/secret.yml.decrypted
ignore_errors: true
- name: Display cleanup summary
debug:
msg: |