feat: Добавлена поддержка ansible-lint с настройками для пропуска ошибок

- Добавлена команда 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
This commit is contained in:
2025-10-22 13:52:44 +03:00
parent 09ca55539f
commit df97e9d3d4
3 changed files with 51 additions and 2 deletions

View File

@@ -73,7 +73,7 @@ help: ## Показать справку по всем командам
@awk 'BEGIN {FS = ":.*?## "} /^role-[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) @awk 'BEGIN {FS = ":.*?## "} /^role-[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@echo "" @echo ""
@echo "$(GREEN)Утилиты:$(RESET)" @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;; \ $(MAKE) lab test LAB_SPEC=molecule/presets/minimal.yml;; \
lint) \ lint) \
echo "$(YELLOW)🔍 Проверяем роли...$(RESET)"; \ 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)";; \ echo "$(GREEN)✅ Проверка завершена$(RESET)";; \
deploy) \ deploy) \
echo "$(PURPLE)🚀 Развертываем роли...$(RESET)"; \ 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 .PHONY: env
env: ## Показать переменные окружения env: ## Показать переменные окружения
@echo "$(CYAN)🔧 Переменные окружения:$(RESET)" @echo "$(CYAN)🔧 Переменные окружения:$(RESET)"

View File

@@ -100,6 +100,9 @@ make role create NAME=my-role
make role test NAME=my-role make role test NAME=my-role
make role lint # Проверка ролей make role lint # Проверка ролей
# Проверка всего проекта
make lint # Проверить весь проект на ошибки
# Управление Vault # Управление Vault
make vault show # Показать содержимое make vault show # Показать содержимое
make vault create # Создать vault файл make vault create # Создать vault файл

View File

@@ -197,6 +197,42 @@ kubectl logs <pod-name>
kubectl exec -it <pod-name> -- /bin/sh kubectl exec -it <pod-name> -- /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 команды ### Port-forward команды
```bash ```bash