diff --git a/.ansible-lint b/.ansible-lint index 1646c4f..fb1f720 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -4,4 +4,8 @@ skip_list: - yaml[truthy] - yaml[line-length] - var-naming[no-role-prefix] - - 'ignore-errors' \ No newline at end of file + - 'ignore-errors' + +exclude_paths: + - molecule/universal/ + - files/playbooks/ \ No newline at end of file diff --git a/Makefile b/Makefile index b2fd975..1e804d7 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ KIND_VERSION ?= v0.23.0 # Переменные окружения ENV_FILE ?= .env ROLES_DIR ?= ./roles -VAULT_PASSWORD_FILE ?= vault-password.txt +VAULT_PASSWORD_FILE ?= vault/.vault # Цвета для вывода RED := \033[0;31m @@ -420,25 +420,25 @@ vault: ## Управление Ansible Vault (show|create|edit|delete|rekey|decr @case "$(word 2, $(MAKECMDGOALS))" in \ show) \ echo "$(BLUE)🔍 Показываем содержимое vault...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault view --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'ansible-vault view --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ create) \ echo "$(YELLOW)📝 Создаем vault файл...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault create --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'echo "---" > vault/secrets.yml && ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ edit) \ echo "$(BLUE)✏️ Редактируем vault файл...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault edit --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'ansible-vault edit --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ delete) \ echo "$(RED)🗑️ Удаляем vault файл...$(RESET)"; \ - docker exec ansible-controller bash -lc 'rm vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'rm vault/secrets.yml';; \ rekey) \ echo "$(YELLOW)🔑 Изменяем пароль vault...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault rekey --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'ansible-vault rekey --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ decrypt) \ echo "$(GREEN)🔓 Расшифровываем vault файл...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault decrypt --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'ansible-vault decrypt --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ encrypt) \ echo "$(RED)🔒 Шифруем vault файл...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ + docker exec ansible-controller bash -lc 'ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \ *) \ echo "$(RED)❌ Неизвестная команда. Доступные: show, create, edit, delete, rekey, decrypt, encrypt$(RESET)";; \ esac @@ -628,7 +628,7 @@ env: ## Показать переменные окружения clean: cleanup ## Полная очистка проекта @echo "$(RED)🧹 Полная очистка проекта...$(RESET)" @rm -rf .env - @rm -rf vault-password.txt + @rm -rf vault/ @rm -rf reports/ @rm -rf snapshots/ @echo "$(GREEN)✅ Проект очищен$(RESET)" diff --git a/README.md b/README.md index e866ee5..d789db2 100644 --- a/README.md +++ b/README.md @@ -421,6 +421,9 @@ ansible-template/ │ ├── snapshot.sh # Создание снапшотов │ ├── restore.sh # Восстановление снапшотов │ └── cleanup.sh # Очистка лаборатории +├── vault/ # Секреты и пароли +│ ├── .vault # Пароль для Ansible Vault +│ └── secrets.yml # Зашифрованные секреты └── .pre-commit-config.yaml # Pre-commit конфигурация ``` diff --git a/docker-compose.yaml b/docker-compose.yaml index fc58b7a..2f52c78 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,7 +8,7 @@ services: command: sleep infinity environment: DOCKER_HOST: unix:///var/run/docker.sock - ANSIBLE_VAULT_PASSWORD_FILE: /ansible/vault-password.txt + ANSIBLE_VAULT_PASSWORD_FILE: /ansible/vault/.vault volumes: - /var/run/docker.sock:/var/run/docker.sock - ./molecule:/ansible/molecule @@ -16,7 +16,8 @@ services: - ./scripts:/ansible/scripts - ./reports:/ansible/reports - ./snapshots:/ansible/snapshots - - ./vault-password.txt:/ansible/vault-password.txt + - ./vault:/ansible/vault + - ./.ansible-lint:/ansible/.ansible-lint # каталог с ролями (локальный или внешний) - ${ROLES_DIR:-./roles}:/ansible/roles:ro working_dir: /ansible diff --git a/docs/api.md b/docs/api.md index 34128a9..444d570 100644 --- a/docs/api.md +++ b/docs/api.md @@ -223,6 +223,10 @@ skip_list: - yaml[line-length] # Длина строки - var-naming[no-role-prefix] # Префиксы переменных - 'ignore-errors' # Игнорирование ошибок + +exclude_paths: + - molecule/universal/ # Исключить файлы Molecule + - files/playbooks/ # Исключить playbooks с Docker модулями ``` **Описание пропускаемых правил:** @@ -233,6 +237,10 @@ skip_list: - `var-naming[no-role-prefix]` - не требует префиксов для переменных ролей - `ignore-errors` - позволяет использовать `ignore_errors: yes` +**Исключенные пути:** +- `molecule/universal/` - файлы Molecule с Docker модулями +- `files/playbooks/` - playbooks с Docker Compose модулями + ### Port-forward команды ```bash diff --git a/env.example b/env.example index b050082..1221ddc 100644 --- a/env.example +++ b/env.example @@ -27,7 +27,7 @@ KIND_VERSION=v0.23.0 # Пути ROLES_DIR=./roles -VAULT_PASSWORD_FILE=vault-password.txt +VAULT_PASSWORD_FILE=vault/.vault # Переменные для лаборатории LAB_PAUSE_MINUTES=10 diff --git a/files/playbooks/test-vault.yml b/files/playbooks/test-vault.yml new file mode 100644 index 0000000..9c0c7d6 --- /dev/null +++ b/files/playbooks/test-vault.yml @@ -0,0 +1,22 @@ +--- +# Тестовый playbook для проверки работы с vault +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: Test Vault Integration + hosts: localhost + gather_facts: no + vars_files: + - ../../vault/secrets.yml + tasks: + - name: Display vault variables + debug: + msg: "Database password: {{ db_password }}" + + - name: Display API key + debug: + msg: "API key: {{ api_key }}" + + - name: Display GitHub token + debug: + msg: "GitHub token: {{ github_token }}" diff --git a/vault-password.txt b/vault-password.txt deleted file mode 100644 index 9daeafb..0000000 --- a/vault-password.txt +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/vault/.vault b/vault/.vault new file mode 100644 index 0000000..414f849 --- /dev/null +++ b/vault/.vault @@ -0,0 +1 @@ +test_password diff --git a/vault/secrets.yml b/vault/secrets.yml new file mode 100644 index 0000000..a1f0bc3 --- /dev/null +++ b/vault/secrets.yml @@ -0,0 +1,36 @@ +$ANSIBLE_VAULT;1.1;AES256 +37313930666665366564356631646336636130366562343435376262666131373338616633646165 +6232383865363562346664363334666438333438316630370a326532623133653963343230613434 +38356337383966343732313930616632656635653063343961396539623130636231663433373565 +6237303562303839630a646530653434616566303136643438356239626561326532383839663534 +61393164643337653137373437393834623430313937613866303131343061326665333362316333 +36303435353431313766653563653037393934373537643365313931373336333133633635386633 +66616331653337333531356432613431653135303134643261336339346538653838303235393332 +39373538643861653634613231323661366131303237393133653035326431386436653265306437 +62643266313862623737656164643437616535633438383533346237313364313834383237623265 +39303064356263666566386532323061646131336632616335626462373264633662616335353462 +30393664313565396532383965396337616237373864626631333237633263653065626265393264 +64396464356633333366353537633364643735323439336434386437643430316136613335646232 +36313462666438626136363334343439333537646461653166313535366361643235326137333163 +30363632613839653034626664653764376366653064613936353739363663326466303462356533 +36393932303135643531373432326236653163653835306361363261393137373835623639346464 +33616238633232373237643564626439653363356635373939333664653864643061643534336565 +39303366616635313466623634336234386438353262653031356633323036306636333437623263 +33343863316338356466323334316334313933393730626332373736396234376135623437393662 +30626263613738373461613933373166353737353538316337633062633861633135643638383031 +37626464323763376334656363373634343431383936386363623761366536653166353239343332 +33313435366430666531316131306239643632376262656631396162636233343631336566613531 +64313136383865326331366466316365646136623736303164373735636366643430343138373138 +39653533336434333939656361366633376361663266653063666537633261653663363134333562 +63663562303432323230303065303930343435356433326235323366373662666261313966616639 +39376131623237323836663735313839333034626163363236313939396638623565363038333432 +39643630366263613732636462353166626332653234336332366363346262316465353130623130 +32663061633830373038656539653238393732333964343836653965383131656534386337393335 +35383135316365393734666136343964393630346137393661643735613863613764313238663665 +35323664353939303631653835636231323531353863333839306531376337653063373536623833 +34326534303364383031346137323966353133333138306631323735376561656136376333616261 +63343435623233623338666337383265353766323666396139633964643563393366656339633736 +39326261316430313637313230656536323362666361353930353135383737313037316139653964 +32326230396263383939393961353763323138613230353364313038366165646130303363643239 +31303930653862323839653330373532646630336565303535306361346235306565613635396366 +316438396434306663316134316230636462