From df97e9d3d4b62908f71d758909e407c3eb823c5b Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Wed, 22 Oct 2025 13:52:44 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20ansible-lint=20=D1=81=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=D0=BC=D0=B8=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена команда make lint для проверки всего проекта - Обновлена команда make role lint для использования .ansible-lint - Добавлен файл .ansible-lint с настройками для пропуска ошибок: - fqcn: позволяет использовать короткие имена модулей - 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 Обновления в Makefile: - make lint: проверяет весь проект (molecule, playbooks, roles) - make role lint: использует --config-file /ansible/.ansible-lint - Добавлена команда lint в справку make help Обновления в документации: - README.md: добавлена команда make lint - docs/api.md: добавлены разделы Ansible-lint команды и настройки Преимущества: - Единообразная проверка всего проекта - Гибкие настройки для пропуска нежелательных ошибок - Автоматическое использование конфигурационного файла - Подробная документация по настройкам Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 14 ++++++++++++-- README.md | 3 +++ docs/api.md | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) 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