0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
<p>Ansible решает много задач, но даже в простых плейбуках можно допустить ошибки. Линтеры помогают находить проблемы до запуска в продакшен, делая код стабильным и читаемым.</p>
1
<p>Ansible решает много задач, но даже в простых плейбуках можно допустить ошибки. Линтеры помогают находить проблемы до запуска в продакшен, делая код стабильным и читаемым.</p>
2
<p><strong>Использовать линтеры в Ansible нужно, чтобы:</strong></p>
2
<p><strong>Использовать линтеры в Ansible нужно, чтобы:</strong></p>
3
<p>✅ обнаружить синтаксические ошибки до запуска playbook;</p>
3
<p>✅ обнаружить синтаксические ошибки до запуска playbook;</p>
4
<p>✅ соблюсти единый стиль кода;</p>
4
<p>✅ соблюсти единый стиль кода;</p>
5
<p>✅ выявить потенциальные уязвимости;</p>
5
<p>✅ выявить потенциальные уязвимости;</p>
6
<p>✅ интегрировать в CI/CD для автоматической проверки перед деплоем.</p>
6
<p>✅ интегрировать в CI/CD для автоматической проверки перед деплоем.</p>
7
<p><strong>Популярные линтеры для Ansible</strong></p>
7
<p><strong>Популярные линтеры для Ansible</strong></p>
8
<p>1️⃣ ansible-lint - основной линтер для Ansible</p>
8
<p>1️⃣ ansible-lint - основной линтер для Ansible</p>
9
<p>Проверяет:</p>
9
<p>Проверяет:</p>
10
<ul><li>синтаксис YAML;</li>
10
<ul><li>синтаксис YAML;</li>
11
<li>идемпотентность (например, command вместо shell, где возможно);</li>
11
<li>идемпотентность (например, command вместо shell, где возможно);</li>
12
<li>использование устаревших модулей;</li>
12
<li>использование устаревших модулей;</li>
13
<li>рекомендации по безопасности.</li>
13
<li>рекомендации по безопасности.</li>
14
</ul><p>Установка:</p>
14
</ul><p>Установка:</p>
15
pip install ansible-lint<p>Запуск:</p>
15
pip install ansible-lint<p>Запуск:</p>
16
ansible-lint playbook.yml<p>2️⃣ yamllint - проверка YAML-синтаксиса</p>
16
ansible-lint playbook.yml<p>2️⃣ yamllint - проверка YAML-синтаксиса</p>
17
<p>Ansible использует YAML, и yamllint помогает избежать:</p>
17
<p>Ansible использует YAML, и yamllint помогает избежать:</p>
18
<ul><li>некорректных отступов;</li>
18
<ul><li>некорректных отступов;</li>
19
<li>избыточных строк;</li>
19
<li>избыточных строк;</li>
20
<li>неправильного форматирования.</li>
20
<li>неправильного форматирования.</li>
21
</ul><p>Установка:</p>
21
</ul><p>Установка:</p>
22
pip install yamllint<p>Запуск:</p>
22
pip install yamllint<p>Запуск:</p>
23
yamllint .<p>3️⃣ molecule test - тестирование ролей</p>
23
yamllint .<p>3️⃣ molecule test - тестирование ролей</p>
24
<p>Хотя Molecule - не линтер, он помогает:</p>
24
<p>Хотя Molecule - не линтер, он помогает:</p>
25
<ul><li>проверять роли в изолированном окружении;</li>
25
<ul><li>проверять роли в изолированном окружении;</li>
26
<li>тестировать идемпотентность;</li>
26
<li>тестировать идемпотентность;</li>
27
<li>интегрировать линтинг в процесс разработки.</li>
27
<li>интегрировать линтинг в процесс разработки.</li>
28
</ul><p>Пример:</p>
28
</ul><p>Пример:</p>
29
molecule test --scenario-name default<p><strong>Как интегрировать линтинг в CI/CD?</strong></p>
29
molecule test --scenario-name default<p><strong>Как интегрировать линтинг в CI/CD?</strong></p>
30
<p>Пример для GitHub Actions:</p>
30
<p>Пример для GitHub Actions:</p>
31
name: Ansible Linting on: [push, pull_request] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run ansible-lint run: pip install ansible-lint && ansible-lint - name: Run yamllint run: pip install yamllint && yamllint .<p><strong>Лучшие практики</strong></p>
31
name: Ansible Linting on: [push, pull_request] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run ansible-lint run: pip install ansible-lint && ansible-lint - name: Run yamllint run: pip install yamllint && yamllint .<p><strong>Лучшие практики</strong></p>
32
<ul><li>линтить перед каждым коммитом - можно через Git Hooks;</li>
32
<ul><li>линтить перед каждым коммитом - можно через Git Hooks;</li>
33
<li>использовать ansible-lint в CI - чтобы код в репозитории всегда был чистым;</li>
33
<li>использовать ansible-lint в CI - чтобы код в репозитории всегда был чистым;</li>
34
<li>настроить IDE - плагины для VSCode (Ansible, YAML) подсвечивают ошибки на лету.</li>
34
<li>настроить IDE - плагины для VSCode (Ansible, YAML) подсвечивают ошибки на лету.</li>
35
</ul><p><strong>Пример исправления ошибки</strong></p>
35
</ul><p><strong>Пример исправления ошибки</strong></p>
36
<p>До (проблема: модуль shell, выполняет команды напрямую без проверки состояния.)</p>
36
<p>До (проблема: модуль shell, выполняет команды напрямую без проверки состояния.)</p>
37
- name: Restart service (unsafe) shell: systemctl restart nginx<p>После (рекомендуемый вариант - модуль ansible.builtin.service, так как он обеспечивает идемпотентность и обработку ошибок):</p>
37
- name: Restart service (unsafe) shell: systemctl restart nginx<p>После (рекомендуемый вариант - модуль ansible.builtin.service, так как он обеспечивает идемпотентность и обработку ошибок):</p>
38
- name: Restart service (safe) ansible.builtin.service: name: nginx state: restarted<p><strong>Узнать больше о линтерах и научиться работать с ними вы можете на курсе<a>"Ansible: Infrastructure as Code".</a></strong>Старт 28 апреля. Все подробности<a>по ссылке.</a></p>
38
- name: Restart service (safe) ansible.builtin.service: name: nginx state: restarted<p><strong>Узнать больше о линтерах и научиться работать с ними вы можете на курсе<a>"Ansible: Infrastructure as Code".</a></strong>Старт 28 апреля. Все подробности<a>по ссылке.</a></p>