Тестируемые роли с молекулой и boto3
Я имею ansible roles
который создает серверы, сегменты S3, группы безопасности... и я хочу установить некоторое модульное тестирование, используя Molecule
, После некоторых исследований я обнаружил, что Molecule
использует Testinfra
выполнить несколько команд assert на удаленном / локальном хосте. Это может работать для моих ролей, которые создают некоторые серверы, такие как apache2
, nginx
.. но как насчет других ролей, которые просто создают некоторые другие ресурсы AWS, такие как load balancers
, autoscaling groups
, security groups
, или просто s3 buckets
? в этом случае не будет ни хоста, ни экземпляров.
Было бы легко сделать тесты Unittest
а также boto3
и позвоните в API AWS, но мой вопрос: могу ли я использовать molecule
только и запусти EC2 instance
каждый раз, когда я хочу проверить свою роль группы безопасности, а затем сделать что-то вроде этого:
def test_security_group_has_80_open(host):
cmd = host.run('aws ec2 describe-security-groups --group-names MySecurityGroup')
return_code = cmd.rc
output = cmd.stdout
assert output.contains('"ToPort": 80')
Тот EC2 instance
будет иметь AWSCLI
установлены. Это правильный путь? Можно ли протестировать все типы ролей Molecule
стреляя EC2
это работает awscli
звонки?
1 ответ
Я не могу комментировать, иначе я бы сделал это, но чтобы ускорить процесс, вы можете настроить Molecule так, чтобы он не управлял последовательностями создания и уничтожения. И использовать delegated
Водитель с сходящейся Playbook, имеющий connection=local
, Таким образом, вы можете просто создать группу безопасности, используя роль, без предоставления экземпляров и использовать boto3, чтобы подтвердить, что ваши изменения верны.
Таким образом, вам нужно только, чтобы в тестовой среде были доступны надлежащие ключи для выполнения вызовов API с использованием boto, вместо того, чтобы беспокоиться о том, работает ли экземпляр EC2.