Обновление проекта
This commit is contained in:
@@ -8,16 +8,6 @@
|
||||
# Получаем preset из переменной окружения или используем default
|
||||
preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}"
|
||||
preset_file: "/workspace/molecule/presets/{{ preset_name }}.yml"
|
||||
|
||||
# перечисли файлы/глобы, которые нужно временно расшифровать
|
||||
vault_targets:
|
||||
- /workspace/vault/secrets.yml
|
||||
- /workspace/vault/secret.yml
|
||||
# - /workspace/files/playbooks/group_vars/*/vault.yml
|
||||
# - /workspace/files/playbooks/host_vars/*/vault.yml
|
||||
# - /workspace/roles/**/vars/vault.yml
|
||||
# - /workspace/roles/*/defaults/*.yml
|
||||
# - /workspace/files/**/*secret*.yml
|
||||
|
||||
tasks:
|
||||
# =============================================================================
|
||||
@@ -38,262 +28,197 @@
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# VAULT - Работа с зашифрованными файлами
|
||||
# НАСТРОЙКА ЗАВЕРШЕНА - Переходим к подготовке контейнеров
|
||||
# =============================================================================
|
||||
- name: Vault operations
|
||||
- name: Configuration loaded and proceed to container preparation
|
||||
debug:
|
||||
msg: |
|
||||
================================================================================
|
||||
VAULT - Работа с зашифрованными файлами
|
||||
НАСТРОЙКА ЗАВЕРШЕНА
|
||||
================================================================================
|
||||
Files: {{ vault_targets | length }} targets
|
||||
Конфигурация загружена. Далее выполняется подготовка контейнеров (ранее была в run.yml)
|
||||
================================================================================
|
||||
|
||||
- name: Check vault files encryption status
|
||||
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 "=== CHECKING VAULT FILES ENCRYPTION STATUS ==="
|
||||
|
||||
# Парсим JSON массив и проверяем каждый файл
|
||||
echo "$VAULT_TARGETS_JSON" | jq -r ".[]" | while read -r target; do
|
||||
echo "Checking target: $target"
|
||||
|
||||
# Если это glob паттерн, находим файлы
|
||||
if [[ "$target" == *"*"* ]]; then
|
||||
for file in $target; do
|
||||
if [ -f "$file" ]; then
|
||||
echo "Found file: $file"
|
||||
if grep -q "ANSIBLE_VAULT" "$file"; then
|
||||
echo "ENCRYPTED: $file"
|
||||
else
|
||||
echo "PLAINTEXT: $file"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Обычный файл
|
||||
if [ -f "$target" ]; then
|
||||
echo "Found file: $target"
|
||||
if grep -q "ANSIBLE_VAULT" "$target"; then
|
||||
echo "ENCRYPTED: $target"
|
||||
else
|
||||
echo "PLAINTEXT: $target"
|
||||
fi
|
||||
else
|
||||
echo "NOT_FOUND: $target"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
'
|
||||
register: vault_status_check
|
||||
ignore_errors: true
|
||||
|
||||
- name: Encrypt plaintext 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 "=== ENCRYPTING PLAINTEXT VAULT FILES ==="
|
||||
|
||||
if [ ! -f "$VAULT_PASSWORD_FILE" ]; then
|
||||
echo "Vault password file not found: $VAULT_PASSWORD_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Парсим JSON массив и шифруем каждый plaintext файл
|
||||
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 "Encrypting plaintext 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 "Encrypting plaintext file: $target"
|
||||
ansible-vault encrypt --encrypt-vault-id default --vault-password-file "$VAULT_PASSWORD_FILE" "$target"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
'
|
||||
ignore_errors: true
|
||||
|
||||
- name: Decrypt vault files for processing
|
||||
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 "=== DECRYPTING VAULT FILES FOR PROCESSING ==="
|
||||
|
||||
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 "Decrypting encrypted file: $file"
|
||||
ansible-vault decrypt --vault-password-file "$VAULT_PASSWORD_FILE" "$file"
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Обычный файл
|
||||
if [ -f "$target" ] && grep -q "ANSIBLE_VAULT" "$target"; then
|
||||
echo "Decrypting encrypted file: $target"
|
||||
ansible-vault decrypt --vault-password-file "$VAULT_PASSWORD_FILE" "$target"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
'
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# VAULT LOADING - Загрузка vault переменных из vault_targets
|
||||
# =============================================================================
|
||||
- name: Load vault variables from vault_targets
|
||||
community.docker.docker_container_exec:
|
||||
container: ansible-controller
|
||||
command: |
|
||||
bash -c '
|
||||
VAULT_PASSWORD_FILE="/workspace/vault/.vault"
|
||||
|
||||
# Читаем vault_targets из переменных Ansible
|
||||
VAULT_TARGETS_JSON="{{ vault_targets | to_json }}"
|
||||
|
||||
echo "=== VAULT LOADING ==="
|
||||
echo "Vault password file: $VAULT_PASSWORD_FILE"
|
||||
echo "Vault targets from Ansible: $VAULT_TARGETS_JSON"
|
||||
|
||||
# Создаем директории для vault файлов
|
||||
mkdir -p /tmp/vault_files
|
||||
|
||||
# Создаем временный файл для объединения всех vault переменных
|
||||
echo "---" > /tmp/vault_vars.yml
|
||||
|
||||
# Счетчик для обработки конфликтов
|
||||
declare -A variable_sources
|
||||
|
||||
# Парсим JSON массив и обрабатываем каждый target
|
||||
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" ]; then
|
||||
echo "Found vault file: $file"
|
||||
|
||||
# Создаем копию файла в /tmp/vault_files для прямых ссылок
|
||||
filename=$(basename "$file")
|
||||
cp "$file" "/tmp/vault_files/$filename"
|
||||
|
||||
# Расшифровываем файл если нужно
|
||||
if [ -f "$VAULT_PASSWORD_FILE" ]; then
|
||||
echo "Loading encrypted vault file: $file"
|
||||
ansible-vault view --vault-password-file "$VAULT_PASSWORD_FILE" "$file" > "/tmp/vault_files/${filename}.decrypted"
|
||||
|
||||
# Добавляем в объединенный файл с проверкой конфликтов
|
||||
echo "---" >> /tmp/vault_vars.yml
|
||||
echo "# From: $file" >> /tmp/vault_vars.yml
|
||||
ansible-vault view --vault-password-file "$VAULT_PASSWORD_FILE" "$file" >> /tmp/vault_vars.yml
|
||||
else
|
||||
echo "Loading plain vault file: $file"
|
||||
cp "$file" "/tmp/vault_files/${filename}.decrypted"
|
||||
|
||||
# Добавляем в объединенный файл с проверкой конфликтов
|
||||
echo "---" >> /tmp/vault_vars.yml
|
||||
echo "# From: $file" >> /tmp/vault_vars.yml
|
||||
cat "$file" >> /tmp/vault_vars.yml
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
# Обычный файл
|
||||
if [ -f "$target" ]; then
|
||||
echo "Found vault file: $target"
|
||||
|
||||
# Создаем копию файла в /tmp/vault_files для прямых ссылок
|
||||
filename=$(basename "$target")
|
||||
cp "$target" "/tmp/vault_files/$filename"
|
||||
|
||||
# Расшифровываем файл если нужно
|
||||
if [ -f "$VAULT_PASSWORD_FILE" ]; then
|
||||
echo "Loading encrypted vault file: $target"
|
||||
ansible-vault view --vault-password-file "$VAULT_PASSWORD_FILE" "$target" > "/tmp/vault_files/${filename}.decrypted"
|
||||
|
||||
# Добавляем в объединенный файл с проверкой конфликтов
|
||||
echo "---" >> /tmp/vault_vars.yml
|
||||
echo "# From: $target" >> /tmp/vault_vars.yml
|
||||
ansible-vault view --vault-password-file "$VAULT_PASSWORD_FILE" "$target" >> /tmp/vault_vars.yml
|
||||
else
|
||||
echo "Loading plain vault file: $target"
|
||||
cp "$target" "/tmp/vault_files/${filename}.decrypted"
|
||||
|
||||
# Добавляем в объединенный файл с проверкой конфликтов
|
||||
echo "---" >> /tmp/vault_vars.yml
|
||||
echo "# From: $target" >> /tmp/vault_vars.yml
|
||||
cat "$target" >> /tmp/vault_vars.yml
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Символические ссылки не нужны для работы, убираем их создание
|
||||
|
||||
echo "=== VAULT VARIABLES LOADED ==="
|
||||
echo "Combined vault variables:"
|
||||
cat /tmp/vault_vars.yml
|
||||
echo ""
|
||||
echo "Individual vault files available at:"
|
||||
ls -la /tmp/vault_files/
|
||||
'
|
||||
ignore_errors: true
|
||||
|
||||
# =============================================================================
|
||||
# LOAD VAULT VARIABLES - Загрузка vault переменных в Ansible
|
||||
# =============================================================================
|
||||
- name: Load vault variables into Ansible
|
||||
include_vars:
|
||||
file: /tmp/vault_vars.yml
|
||||
ignore_errors: true
|
||||
|
||||
- name: Set vault files path
|
||||
set_fact:
|
||||
vault_files_path: /tmp/vault_files
|
||||
when: vault_files_path is not defined
|
||||
|
||||
# =============================================================================
|
||||
# CONVERGE ЗАВЕРШЕН - Playbook'и выполняются через Makefile
|
||||
# =============================================================================
|
||||
- name: Converge completed
|
||||
# =============================================================================
|
||||
# ПОДГОТОВКА КОНТЕЙНЕРОВ (бывший run.yml)
|
||||
# =============================================================================
|
||||
- name: Подготовка окружения для тестирования
|
||||
hosts: all
|
||||
become: true
|
||||
tasks:
|
||||
# Сброс цветовых кодов ANSI для корректного отображения
|
||||
- name: Reset ANSI color codes
|
||||
debug:
|
||||
msg: |
|
||||
================================================================================
|
||||
CONVERGE ЗАВЕРШЕН
|
||||
================================================================================
|
||||
Vault переменные загружены и готовы к использованию
|
||||
Playbook'и run.yml и roles/deploy.yml будут выполнены через Makefile
|
||||
================================================================================
|
||||
msg: "\033[0m"
|
||||
changed_when: false
|
||||
tags:
|
||||
- setup
|
||||
- color-reset
|
||||
|
||||
# Создание tmp директории для Ansible
|
||||
- name: Create Ansible tmp directory
|
||||
file:
|
||||
path: /tmp/.ansible-tmp
|
||||
state: directory
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
tags:
|
||||
- setup
|
||||
- tmp
|
||||
|
||||
# Обновление кеша пакетов для Debian/Ubuntu
|
||||
- name: Update package cache (Debian/Ubuntu)
|
||||
apt:
|
||||
update_cache: true
|
||||
cache_valid_time: 3600
|
||||
when: ansible_os_family == 'Debian'
|
||||
changed_when: false
|
||||
tags:
|
||||
- setup
|
||||
- update
|
||||
|
||||
# Обновление кеша пакетов для RHEL/CentOS/AlmaLinux/Rocky
|
||||
- name: Update package cache (RHEL/CentOS/AlmaLinux/Rocky)
|
||||
yum:
|
||||
update_cache: true
|
||||
when: ansible_os_family == 'RedHat'
|
||||
changed_when: false
|
||||
tags:
|
||||
- setup
|
||||
- update
|
||||
|
||||
# Обновление кеша пакетов для Alt Linux
|
||||
- name: Update package cache (Alt Linux)
|
||||
command: apt-get update
|
||||
when: ansible_os_family == 'Altlinux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
tags:
|
||||
- setup
|
||||
- update
|
||||
|
||||
# Обновление кеша пакетов для Astra Linux
|
||||
- name: Update package cache (Astra Linux)
|
||||
command: apt-get update
|
||||
when: ansible_os_family == 'Astra Linux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
tags:
|
||||
- setup
|
||||
- update
|
||||
|
||||
# Установка common tools для всех ОС
|
||||
- name: Install common tools (Debian/Ubuntu)
|
||||
apt:
|
||||
name:
|
||||
- curl
|
||||
- jq
|
||||
- ca-certificates
|
||||
- iproute2
|
||||
- iputils-ping
|
||||
- procps
|
||||
- net-tools
|
||||
- vim
|
||||
- wget
|
||||
- unzip
|
||||
- git
|
||||
- sudo
|
||||
state: present
|
||||
update_cache: false
|
||||
when: ansible_os_family == 'Debian'
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- tools
|
||||
|
||||
- name: Install common tools (RHEL/CentOS/AlmaLinux/Rocky)
|
||||
yum:
|
||||
name:
|
||||
- curl
|
||||
- jq
|
||||
- ca-certificates
|
||||
- iproute
|
||||
- iputils
|
||||
- procps-ng
|
||||
- net-tools
|
||||
- vim
|
||||
- wget
|
||||
- unzip
|
||||
- git
|
||||
- sudo
|
||||
state: present
|
||||
when: ansible_os_family == 'RedHat'
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- tools
|
||||
|
||||
- name: Install common tools (Alt Linux)
|
||||
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git sudo
|
||||
when: ansible_os_family == 'Altlinux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- tools
|
||||
|
||||
- name: Install common tools (Astra Linux)
|
||||
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git sudo
|
||||
when: ansible_os_family == 'Astra Linux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- tools
|
||||
|
||||
# Установка Python для Ansible (если не установлен)
|
||||
- name: Install Python (Debian/Ubuntu)
|
||||
apt:
|
||||
name:
|
||||
- python3
|
||||
- python3-pip
|
||||
- python3-venv
|
||||
state: present
|
||||
when: ansible_os_family == 'Debian'
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- python
|
||||
|
||||
- name: Install Python (RHEL/CentOS/AlmaLinux/Rocky)
|
||||
yum:
|
||||
name:
|
||||
- python3
|
||||
- python3-pip
|
||||
state: present
|
||||
when: ansible_os_family == 'RedHat'
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- python
|
||||
|
||||
- name: Install Python (Alt Linux)
|
||||
command: apt-get install -y python3 python3-pip
|
||||
when: ansible_os_family == 'Altlinux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- python
|
||||
|
||||
- name: Install Python (Astra Linux)
|
||||
command: apt-get install -y python3 python3-pip
|
||||
when: ansible_os_family == 'Astra Linux'
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
no_log: true
|
||||
tags:
|
||||
- setup
|
||||
- python
|
||||
Reference in New Issue
Block a user