Ansibleにはsetup module、Chefにはohai、Puppetにはfacterというプラットフォームのインベントリ情報を取得するライブラリや機構があります。
ただ、リモートホストのインベントリ情報を取得したいときに、ohaiやfacterはリモートホスト側にインストールが必要だったり、setup moduleは単体で使いにくかったりするので、
「気軽にエージェントレスでプラットフォームのインベントリ情報を取得できるようにしたいなー」
ということでkomaというgemを作りました。
Installation
$ gem install koma
Usage
まず、公開鍵認証でSSH接続できるリモートホストを用意します。
例えば、
$ ssh [email protected]
でログインできるようなホストですね。
で、そのssh
コマンドを koma ssh
に変えて実行します。
$ koma ssh [email protected]
そうすると、インベントリ情報をJSON形式でSTDOUTに出力します。
さらに複数のホストのインベントリ情報を一気に取得したい場合はカンマ区切りで指定できます。
$ koma ssh example.com,[email protected] { "example.com": { ... }, "example.jp": { ... } }
取得できるインベントリ情報
取得できるインベントリ情報はkoma keys
で確認できます(リモートホストのディストリビューションによって取得できる情報にはばらつきがあります)。
$ koma keys memory ec2 (disabled) hostname domain fqdn platform platform_version filesystem cpu virtualization kernel block_device package user group service
インベントリ情報を指定したいときは --key
オプションで指定可能です。
$ koma ssh [email protected] --key cpu,kernel
(disabled) になっている ec2
などは --enable-ec2
オプションで有効になります。
Pro Tip: ssh_config形式でリモートホストを指定する
komaはssh_config形式のSTDINを入力とすることができます。
$ cat <<EOF > ssh_config_tmp Host example_com User k1low Hostname example.com PreferredAuthentications publickey IdentityFile /path/to/example_rsa Host example_jp User someone Hostname example.jp PreferredAuthentications publickey IdentityFile /path/to/more/example_jp_rsa EOF $ cat ssh_config_tmp | koma ssh --key platform,platform_version
ssh_config形式がいけるということは、
$ vagrant ssh-config | koma ssh --key cpu,kernel
みたいに、Vagrantのサーバのインベントリ情報を取得したり、
$ sconb dump example_* | sconb restore | koma ssh --key platform,platform_version
みたいに、sconbで ~/.ssh/config
をフィルタリングしてインベントリ情報を取得できたりします。
というわけで、エージェントレスが好きな皆様におかれましては是非ご利用ください。
以下余談
komaはRuby製なのですが、awspecと同様にFukuoka.rbで作りました。
@k1LoW と Serverspec と Specinfra の話しをしつつコードいじるという体験ができて、これは楽しい。 #fukuokarb
— やまだつよし (@minimum2scp) March 9, 2016
もともと「エージェントレスでohai」みたいなツールはずっと欲しかったのです。
ふとFukuoka.rbのSlackチャンネルでつぶやいたら、うずらさん が反応してくれてやる気になり、ひとりで作ろうとして途方に暮れていたら、やまださん が「Specinfraに Specinfra::HostInventory
という求めている機能がある」というところを教えてもらって、一緒にSpecinfraを読んで、プロトタイプまで一気に作ることができました。
というわけでkomaは実はただの Specinfra::HostInventory
の薄いラッパーです(一気に信頼度が上がった感。
とはいえ、 Specinfra::HostInventory
を拡張しているところがあるので(user
group
package
service
のインベントリ情報。主にRedHat系しか作っていない)、最終的に拡張部分をSpecinfraに取り込んでもらうところまで頑張ろうと思っています(komaはそのためのユースケースでもある)。
Fukuoka.rb、最近仕事が忙しくて行けてないので、また消え去り認定されないようにまた参加したい。