Testinfraでサーバーのテスト

概要

Python製のサーバーテストツールTestinfraを試してみました。
GitHub philpep/testinfra: Testinfra test your infrastructures

インストール

pip install testinfra


テストファイルを用意

test_docker.pyといったファイル名で用意します。

# Docker
def test_docker_engine_is_installed(Package):
    docker_engine = Package("docker-engine")
    assert docker_engine.is_installed
    assert docker_engine.version.startswith("1.13.1")

def test_docker_engine_running_and_enabled(Service):
    docker_engine = Service("docker")
    assert docker_engine.is_running
    assert docker_engine.is_enabled

# td-agent
def test_td_agent_is_installed(Package):
    td_agent = Package("td-agent")
    assert td_agent.is_installed

def test_td_agent_running_and_enabled(Service):
    td_agent = Service("td-agent")
    assert td_agent.is_running
    assert td_agent.is_enabled

関数名はtest_から始める必要があります。

実行

testinfra -v test_docker.py --connection=ssh --hosts=example.com

-vテスト結果を詳細に出すオプションです。

実行例

td-agentを自動起動設定していない状態で実行してみます。
td-agentを自動起動設定のテストだけ失敗するはずです。

plugins: testinfra-1.5.3
collected 4 items

test_docker.py::test_docker_engine_is_installed[ssh://example.com] PASSED
test_docker.py::test_docker_engine_running_and_enabled[ssh://example.com] PASSED
test_docker.py::test_td_agent_is_installed[ssh://example.com] PASSED
test_docker.py::test_td_agent_running_and_enabled[ssh://example.com] FAILED

===== FAILURES =====
_____ test_td_agent_running_and_enabled[ssh://example.com] _____

Service = <class 'testinfra.modules.base.SystemdService'>

    def test_td_agent_running_and_enabled(Service):
        td_agent = Service("td-agent")
        assert td_agent.is_running
>       assert td_agent.is_enabled
E       assert False
E        +  where False = <service td-agent>.is_enabled

test_docker.py:20: AssertionError
===== pytest-warning summary =====
WP1 None Module already imported so can not be re-written: testinfra
===== 1 failed, 3 passed, 1 pytest-warnings in 10.92 seconds =====

1個だけテストが失敗している様子が分かります。

Packerの『/etc/rc.d/init.d/vboxadd: command not found』エラー

概要

PackerでCentOS7のVagrant(VirtualBox)のBoxイメージを作ろうと思ったところ以下のエラーが表示されBoxが作成出来ませんでした。
原因はVirtualBoxの仕様が変わった影響によるものでした。

環境

MacOS環境

Packer 0.12.1
VirtualBox 5.0.30
Vagrant 1.9.1


エラー内容

    virtualbox-iso: mount: /dev/loop0 is write-protected, mounting read-only
    virtualbox-iso: Verifying archive integrity... All good.
    virtualbox-iso: Uncompressing VirtualBox 5.0.30 Guest Additions for Linux............
    virtualbox-iso: VirtualBox Guest Additions installer
    virtualbox-iso: Copying additional installer modules ...
    virtualbox-iso: Installing additional modules ...
    virtualbox-iso: Removing existing VirtualBox DKMS kernel modules[  OK  ]
    virtualbox-iso: Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
    virtualbox-iso: Building the VirtualBox Guest Additions kernel modules[  OK  ]
    virtualbox-iso: Doing non-kernel setup of the Guest Additions[  OK  ]
    virtualbox-iso: Starting the VirtualBox Guest Additions Installing the Window System drivers
    virtualbox-iso: Could not find the X.Org or XFree86 Window System, skipping.
    virtualbox-iso: [  OK  ]
    virtualbox-iso: sudo: /etc/rc.d/init.d/vboxadd: command not found
==> virtualbox-iso: Unregistering and deleting virtual machine...
==> virtualbox-iso: Deleting output directory...
Build 'virtualbox-iso' errored: Script exited with non-zero exit status: 1

==> Some builds didn't complete successfully and had errors:
--> virtualbox-iso: Script exited with non-zero exit status: 1

==> Builds finished but no artifacts were created.


対応

Packerスクリプトを以下のように変更することでビルドが通りました。

sudo /etc/rc.d/init.d/vboxadd setup

sudo /sbin/rcvboxadd setup


whoisコマンドで「No whois server is known for this kind of object.」が出たとき

概要

whoisコマンドでドメインを調べると以下のエラーが出る時があります。

No whois server is known for this kind of object.

whoisコマンドはデフォルトのwhoisサーバーに接続してその結果を表示させていますが、
トップレベルドメインによって表示されない場合があります。

対処

whoisコマンドにホスト指定オプションを付けると表示されるようになります。

whois -h whois.nic.xyz example.xyz

.xyzに限らずホストをwhois.nic.トップレベルドメインとするとだいたい表示されるようになります。