サーバー環境をテストするenvassertを作りました¶
serverspec を見て、 envassert というものを作りました。
これはfabric上で実行する、環境をテストするツールです。fabricで使えます ので、複数ホストで同時に走らせてチェックできます。
あるいは、fabricのtaskと組み合わせて、想定していた環境と異なっていたら taskを途中で終わらせる、というようにも使えます。
Pythonにはrspecのように標準的なテストフレームワークはありません。 envassertは標準のassertで使えるようにTrue/Falseを返すようにしています。 各種テストフレームワークにも適合できるのではないかと思います。
インストール¶
いつもどおりにpipでOKです。
% pip install envassert
fabricのみに依存しています。cuisine, fabtoolsは実装の参考にしていますが、 依存はしていません。
使い方¶
fabfile.pyを以下のように書きます。
from fabric.api import env, task
from envassert import file, process, package, user, group, port, cron, detect
env.use_ssh_config = True
@task
def check():
env.platform_family = detect.detect()
assert file.is_exists("/etc/hosts")
assert file.is_file("/etc/hosts")
assert file.is_dir("/tmp/")
assert file.dir_exists("/tmp/")
assert file.has_line("/etc/passwd", "sshd")
assert file.owner_is("/bin/sh", "root")
assert file.group_is("/bin/sh", "root")
assert file.mode_is("/bin/sh", "777")
if env.platform_family == "freebsd":
assert file.is_link("/compat")
else:
assert file.is_link("/usr/tmp")
assert package.installed("wget.x86_64")
assert user.is_exists("sshd")
assert user.is_belonging_group("shirou", "users")
assert group.is_exists("wheel")
assert port.is_listening(22)
assert process.is_up("http") is False
assert service.is_enabled("httpd")
assert cron.has_entry('shirou', 'python')
だいたい見てわかるかと思います。file is exists などと英語のように書ける ことを心がけました。
現在以下のモジュールがあります。
file
user
group
port (ポート番号)
process
service
cron
package
プラットフォーム判別¶
envassertはプラットフォームを識別する機能を実装しています。実装は ohai から拝借しました。
以下のプラットフォームを識別できるはずですが、ちゃんと確認はしてません。(単に移植しただけ)
rhel (redhat, centos, oracle, scientific, enterpriseenterprise, amazon)
debian (debian, ubuntu, linuxmint, raspbian)
fedora
suse
gentoo
arch
freebsd
netbsd
openbsd
darwin
これらdetect()で判別した結果を env.platform_family に入れておくと、各 種関数がプラットフォームごとに正しい動作をしてくれます。手で 'freebsd' や 'rhel' などの文字列を代入しても構いません。
ただ、実装していないプラットフォームも多いです。すいません。
まとめ¶
serverspecを真似て、fabricを使ってサーバー環境をテストするツールを作成 しました。fabricを使えればすぐに使えると思います。
現状実装していないプラットフォームやバグなど問題は多数ありますが、ある 程度は使えるツールになったと思います。
patchおよびforkはwelcomeです。どんどんお願いします。
Comments
comments powered by Disqus