Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Testinfra を使ってみた

2,110 views

Published on

Testinfra を使ってみた@Shizuoka.py #5 2016-07-09

Published in: Technology
  • Be the first to comment

Testinfra を使ってみた

  1. 1. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra を使っ てみた Shizuoka.py #5 2016-07-09 となか(@ftnk)
  2. 2. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 自己紹介 名前: となか (@ftnk)✓ インフラエンジニア Solaris✓ ✓ write: Shell Script/Ruby✓ read: Shell Script/Ruby/Perl/ Python/PHP/C ✓
  3. 3. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra を使ってみた Testinfra とは✓ Testinfra を使ってみる✓ カスタマイズ✓
  4. 4. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra とは Testinfra Philippe Pepiot さん作 たぶん BSD 好き✓ ✓ http://testinfra.readthedocs.io/en/latest/✓ https://github.com/philpep/testinfra✓ https://philpep.org/blog/infrastructure- testing-with-testinfra 2015-08-18 付け✓ ✓ ✓
  5. 5. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra とは Testinfra aims to be a Serverspec equivalent in python http://serverspec.org/✓ ✓ Pytest の Plugin として書か れている ✓
  6. 6. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra の特徴 Puppet/Ansible/salt の機能を 使ったテストが可能 ✓ 対応 OS Linux (RHEL/Fedora/Debian/Ubuntu)✓ BSD (FreeBSD/OpenBSD/NetBSD)✓ ✓ Linux 対応が雑✓
  7. 7. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Testinfra を使ってみ る
  8. 8. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 インストール $ pip install testinfra
  9. 9. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 テスト を書く
  10. 10. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Package def test_httpd_is_installed(Package): httpd = Package("httpd") assert httpd.is_installed assert httpd.version.startswith("2.2")
  11. 11. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Service def test_httpd_running_and_enabled(Service): httpd = Service("httpd") assert httpd.is_running assert httpd.is_enabled
  12. 12. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 File def test_passwd_file(File): passwd = File("/etc/passwd") assert passwd.contains("root") assert passwd.user == "root" assert passwd.group == "root" assert passwd.mode == 0o644
  13. 13. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Puppet で情報を取得 def test_puppet_resource(PuppetResource): pr = PuppetResource('user', 'root') assert pr['root']['gid'] == '0'
  14. 14. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 facter で情報を取得 def test_facter(Facter): facter = Facter('kernel', 'architecture') assert facter['kernel'] == 'Linux' assert facter['architecture'] == 'x86_64'
  15. 15. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Ansible で情報を取得 def test_ansible(Ansible): ansible = Ansible('file', '/etc/passwd') assert ansble['mode'] == '0644' Ansible が使えるのは backend として Ansible を指定した時の み。
  16. 16. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 その他 http:// testinfra.readthedocs.io/en/ latest/modules.html
  17. 17. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 テスト の実行
  18. 18. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 local に対して実行 $ testinfra -v
  19. 19. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 SSH で remote host に 対して実行 $ testinfra -v --hosts=host1,host2:10022 default では paramiko が使われ る。
  20. 20. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 ~/.ssh/config を喰わせる $ testinfra -v --ssh-config=${HOME}/.ssh/config --hosts=host1,host2
  21. 21. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 並列実行 並列実行には pytest-xdist を使う $ pip install pytest-xdist '-n' で並列数を指定して実行 $ testinfra -n 2 -v --hosts=localhost
  22. 22. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 接続方法を変える デフォルトの接続は local✓ リモート接続のデフォルトは paramiko paramiko/ssh/salt/ansible を選択可能✓ ✓ Docker にも接続できる docker exec✓ ✓ '--connection=' で指定✓
  23. 23. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Nagios 監視 $ testinfra -qq --nagios
  24. 24. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 カスタ マイズ
  25. 25. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Solaris で Package のテ ストを利用できるようにする OS の判別✓ class SolarisPackage の実装✓
  26. 26. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 OS の判別 testinfra/modules/package.py の get_module_class に以下を追 加(手抜き) elif Command.run_test("which pkg").rc == 0: return SolarisPackage
  27. 27. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 SolarisPackage の実装 testinfra/modules/package.py に以下を追加 class SolarisPackage(Package): @property def is_installed(self): return self.run_test("pkg list %s", self.name).rc == 0 @property def version(self): out = self.check_output("pkg list -H %s | awk '{print $2}'", self.name) return out
  28. 28. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 Solaris 用テスト def test_httpd_is_installed_on_solaris(Package): httpd = Package("apache-24") assert httpd.is_installed assert httpd.version.startswith("2.4")
  29. 29. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 自作モジュール 自作モジュールは Testinfra の pluign にするものらしい https://github.com/philpep/ testinfra-echo ✓ ✓
  30. 30. Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9 まとめ Testinfra は Pytest のプラグ インとしてインフラのテストを 書く方法を提供 ✓ Ansible/salt/Puppet/facter など使えるものは使って情報を 取得 ✓ OS/distribution によるテスト 方法の分岐が微妙 ✓

×