Если вы никогда даже не задумывались о тестировании своих плейбуков Ansible, на самом деле этого можно довольно легко добиться с помощью ansible-lint. Это не гарантирует, что ваш плейбук будет на 100% идеальным, но, сравнивая ваш код и конфигурации с конкретными руководствами и правилами по стилю, ansible-lint частично поможет ограничить проблемы, которые могут возникнуть во время развертывания вашей инфраструктуры. .

Если вы ищете способы начать работу с Ansible, ознакомьтесь с нашей последней книгой на эту тему:
Необходимо отдать должное Уиллу Темзу за создание ansible-lint, который доступен на GitHub ( https://github.com/willthames ). Несмотря на то, что по этой команде не так много документации, значения по умолчанию дают вам много функциональных возможностей, о которых мы сможем предоставить более подробную информацию ниже.
Contents
Сначала установите ansible-lint
К сожалению, anible-lint не является частью пакета Ansible, поэтому вам может потребоваться установить его в вашей системе, если вы еще не установили его. Есть несколько способов добавить его в свою систему.
- Установите приложение прямо из репозитория GitHub: https://github.com/willthames/ansible-lint .
- Если вы работаете в среде Linux на основе Ubuntu/Debian, вы можете использовать команду apt для установки:
sudo apt install ansible-lint
Это приложение на основе Python, как и Ansible, поэтому вы также можете использовать Pip:
pip2 install ansible-lint
- Чтобы убедиться, что вы установили приложение, проверьте версию, которую вы используете, используя параметр –version :
ansible-lint --version ansible-lint 3.4.20
Запуск ansible-lint над вашими книгами
Все, что вам нужно сделать сейчас, это использовать команду ansible-lint с вашим YAML-файлом playbook, и она будет работать со всеми конфигурациями и ролями, связанными с этим playbook, чтобы убедиться, что playbook имеет наилучшие возможности для работы без каких-либо проблем.
Если мы воспользуемся опцией -v, мы также сможем получить неплохой вывод из консоли. В нашем примере ниже мы используем playbook test_deploy.yml, который развертывает сервер Splunk в нашей среде. К счастью, роль, которую мы должны развернуть на сервере, кажется, не имеет слишком много проблем, кроме некоторых пробелов в конце кода.
ansible-lint test_deploy.yml -vExamining test_deploy.yml of type playbook Examining server_deploy/roles/splunk_server/tasks/main.yml of type tasks Examining server_deploy/roles/splunk_server/handlers/main.yml of type handlers Examining server_deploy/roles/splunk_server/meta/main.yml of type meta [ANSIBLE0002] Trailing whitespace server_deploy/roles/splunk_server/tasks/main.yml:38 wait: true[ANSIBLE0002] Trailing whitespace server_deploy/roles/splunk_server/tasks/main.yml:48 port: 22 [ANSIBLE0002] Trailing whitespace server_deploy/roles/splunk_server/tasks/main.yml:74 - debug:
Создание собственных тестов Lint
Нет никаких причин, по которым мы не можем расширить ansible-lint и создать ваши собственные тесты, имеющие отношение к вам. В приведенном ниже примере мы собираемся написать простой тест с использованием теста Python, чтобы убедиться, что теперь вы делитесь своими учетными данными AWS в своем коде. Это не реальный пример, но он дает вам хорошее представление о том, как настроить код для создания вашего теста ansible-lint.
1. Начните с создания каталога в вашем рабочем каталоге… В этом случае мы назовем его test_rules:
mkdir test_rules
2. Мы назовем наш новый тест AWSCredentials.py, чтобы мы могли создать файл в нашем новом каталоге:
touch test_rules/AWSCredentials.py
3. Теперь мы можем настроить следующий код Python, который проверит, что мы не включили значения aws_access_key_id или aws_secret_access_key где- либо в наших плейбуках или ролях:
1 from ansiblelint import AnsibleLintRule
2
3 class AWSCredentials(AnsibleLintRule):
4 id = 'TESTLINT01'
5 shortdesc = 'Playbook May Contain AWS Credentials'
6 description = 'AWS credentials should not be included in variables, especially if they are stored publically'
7 tags = ['variables']
8
9 def match(self, file, line):
10 if "aws_access_key_id" in line:
11 self.shortdesc
12 return True
13 if "aws_secret_access_key" in line:
14 self.shortdesc
15 return True
16 return False
Из приведенного выше кода мы начинаем с добавления библиотеки AnsibleLintRule, которую будет использовать python, затем мы создаем класс, расширяющий эту библиотеку в строке 3. Строки 4, 5 и 6 устанавливают идентификатор теста и описание, чтобы показать, находит ли тест что-то. Строки с 9 по 16 — это функция, которая запускается как часть теста для поиска конкретных значений «aws_access_key_id» и «aws_secret_access_key» в нашем коде.
4. Чтобы протестировать наши изменения, мы можем создать базовую пьесу, которая будет устанавливать только переменную и, надеюсь, запускать наш новый тест. В нашем рабочем каталоге создайте новый playbook с именем test_play.yml и добавьте следующий код:
1 --- 2 - hosts: all 3 tasks: 4 - name: AWS Creds 5 var: 6 aws_secret_access_key: AKIAJL123456789qazw
5. Вам не о чем беспокоиться, так как это не настоящий секретный ключ. Чтобы запустить наш новый тест в этом плейбуке, все, что мы делаем, это используем ansible-lint с параметром -r, чтобы запустить его в созданном нами каталоге правил:
ansible-lint test_play.yml -r test_rules/[TESTLINT01] Playbook May Contain AWS Credentials test_play Статья является переводом medium.com