View
189
Download
0
Category
Preview:
Citation preview
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
Testinfra を使ってみた
Shizuoka.py #52016-07-09
となか(@ftnk)
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
✓
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
Testinfra を使ってみた
Testinfra とは✓
Testinfra を使ってみる✓
カスタマイズ✓
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 付け✓
✓
✓
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 として書かれている
✓
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
Testinfra の特徴
Puppet/Ansible/salt の機能を使ったテストが可能
✓
対応 OSLinux (RHEL/Fedora/Debian/Ubuntu)✓
BSD (FreeBSD/OpenBSD/NetBSD)✓
✓
Linux 対応が雑✓
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")
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
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
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'
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'
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 を指定した時のみ。
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
その他
http://testinfra.readthedocs.io/en/latest/modules.html
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
SSH で remote host に対して実行
$ testinfra -v --hosts=host1,host2:10022
default では paramiko が使われる。
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
~/.ssh/config を喰わせる
$ testinfra -v --ssh-config=${HOME}/.ssh/config --hosts=host1,host2
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
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
接続方法を変えるデフォルトの接続は local✓
リモート接続のデフォルトは paramiko
paramiko/ssh/salt/ansible を選択可能✓
✓
Docker にも接続できるdocker exec✓
✓
'--connection=' で指定✓
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
Nagios 監視
$ testinfra -qq --nagios
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
Solaris で Package のテストを利用できるようにする
OS の判別✓
class SolarisPackage の実装✓
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
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
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")
Testinfra を使ってみた - Shizuoka.py #52016-07-09 Powered by Rabbit 2.1.9
自作モジュール
自作モジュールは Testinfra の pluign にするものらしい
https://github.com/philpep/testinfra-echo
✓
✓
Recommended