HTML Diff
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 &amp;&amp; ansible-lint - name: Run yamllint run: pip install yamllint &amp;&amp; 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 &amp;&amp; ansible-lint - name: Run yamllint run: pip install yamllint &amp;&amp; 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>