diff --git a/Makefile b/Makefile index a9ed856..b2fd975 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ help: ## Показать справку по всем командам @awk 'BEGIN {FS = ":.*?## "} /^role-[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) @echo "" @echo "$(GREEN)Утилиты:$(RESET)" - @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) | grep -E "^(env|vault|git|docker|report|snapshot|cleanup)" + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) | grep -E "^(lint|env|vault|git|docker|report|snapshot|cleanup)" # ============================================================================= # ИНИЦИАЛИЗАЦИЯ И НАСТРОЙКА @@ -401,7 +401,7 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy) $(MAKE) lab test LAB_SPEC=molecule/presets/minimal.yml;; \ lint) \ echo "$(YELLOW)🔍 Проверяем роли...$(RESET)"; \ - docker exec ansible-controller bash -lc 'ansible-lint $(ROLES_DIR)/*'; \ + docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint $(ROLES_DIR)/*'; \ echo "$(GREEN)✅ Проверка завершена$(RESET)";; \ deploy) \ echo "$(PURPLE)🚀 Развертываем роли...$(RESET)"; \ @@ -599,6 +599,16 @@ cleanup: ## Очистить лабораторию # УТИЛИТЫ # ============================================================================= +.PHONY: lint +lint: ## Проверить весь проект на ошибки + @echo "$(YELLOW)🔍 Проверяем весь проект...$(RESET)" + @docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint molecule/universal/' + @docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint files/playbooks/' + @if [ -d "$(ROLES_DIR)" ] && [ -n "$$(ls $(ROLES_DIR)/ 2>/dev/null)" ]; then \ + docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint $(ROLES_DIR)/*'; \ + fi + @echo "$(GREEN)✅ Проверка завершена$(RESET)" + .PHONY: env env: ## Показать переменные окружения @echo "$(CYAN)🔧 Переменные окружения:$(RESET)" diff --git a/README.md b/README.md index efaff15..e866ee5 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,9 @@ make role create NAME=my-role make role test NAME=my-role make role lint # Проверка ролей +# Проверка всего проекта +make lint # Проверить весь проект на ошибки + # Управление Vault make vault show # Показать содержимое make vault create # Создать vault файл diff --git a/docs/api.md b/docs/api.md index e28475d..34128a9 100644 --- a/docs/api.md +++ b/docs/api.md @@ -197,6 +197,42 @@ kubectl logs kubectl exec -it -- /bin/sh ``` +### Ansible-lint команды + +```bash +# Проверить весь проект +make lint + +# Проверить роли +make role lint + +# Проверить конкретную роль +ansible-lint --config-file .ansible-lint roles/my-role/ + +# Проверить playbook +ansible-lint --config-file .ansible-lint files/playbooks/site.yml +``` + +### Настройки ansible-lint (.ansible-lint) + +```yaml +skip_list: + - fqcn # Полные имена модулей + - yaml[new-line-at-end-of-file] # Новая строка в конце файла + - yaml[truthy] # Булевы значения + - yaml[line-length] # Длина строки + - var-naming[no-role-prefix] # Префиксы переменных + - 'ignore-errors' # Игнорирование ошибок +``` + +**Описание пропускаемых правил:** +- `fqcn` - позволяет использовать короткие имена модулей (например, `yum` вместо `ansible.builtin.yum`) +- `yaml[new-line-at-end-of-file]` - не требует новой строки в конце YAML файлов +- `yaml[truthy]` - позволяет использовать `yes/no` вместо `true/false` +- `yaml[line-length]` - не ограничивает длину строк в YAML +- `var-naming[no-role-prefix]` - не требует префиксов для переменных ролей +- `ignore-errors` - позволяет использовать `ignore_errors: yes` + ### Port-forward команды ```bash