Serverspecを自分好みにアレンジ
スクリーンショットで証跡保存を撲滅
TIS株式会社
池田 大輔
2017.3.31
Hello!
I am Daisuke IKEDA
You can find me at @ike_dai
2
こんなことをなくしたい
3
Bad...
4
$ ps
Excel..
$ rpm -qa
Excel..
$ ss
Excel..
$ ip addr
・・・
No. テスト項目 結果 担当者 日付
001 プロセスが起動していること OK 池田 2016.3.10
002 ポートがリッスンしていること OK 池田 2016.3.10
003
xxパッケージがインストールされている
こと
NG 池田 2016.3.10
Bad...
5
スクリーンショットでエビデンス保存
極力Serverspecで
自動化できないか?
6
Resource Type
テスト対象のリソース指定
file
port
package
command
service
など
その他、Resource Typeはこちら
 http://serverspec.org/resource_types.html
7
describe package(package) do
it { should be_installed }
end
Matcher
どうあるべきかの定義
file
be_file: 指定したパスがファイルであるべき
be_directory:指定したパスがディレクトリであるべき
content match: ファイルの中身に指定した文字列が含まれているべき
port
be_listening: 指定したポートがリッスン状態であるべき
service
be_enabled : 起動設定が有効になっているべき
be_running: 起動しているべき
package
be_installed: インストールされているべき
など
8
describe package(package) do
it { should be_installed }
end
この枠組に乗っかれば
自分好みにアレンジ可能なはず!!
9
リソースタイプ「Command」
任意のコマンドの実行結果をテスト
10
describe command(‘ls -la’) do
its(:stdout) { should match /hoge }
end
いろんなことに活用できるので便利
もっと複雑なことをするには厳しい
11
Resource Typeを
自分で作ってしまう
12
リソースタイプ「ZabbixConfig」
OSSの監視ツール「Zabbix」の監視設定状況を
テストするリソースタイプ
13
Serverspec実行元
Zabbix
Zabbix APIをcallして確認
リソースタイプ「ZabbixConfig」-仕様-
14
・ホストが設定されていることの確認
・ホストにテンプレートが割り当てられていることの確認
・ホストの監視先インタフェース設定が正しいことの確認
・ホストの監視設定が有効化どうかの確認
describe zabbix_config(‘server-01’) do
it { should be_host }
it { should have_template “Template OS Linux”}
it { should have_interface ({ :ip => "10.2.2.2" }) }
it { should be_valid }
end
リソースタイプ「ZabbixConfig」-仕様-
15
・ホストに割り当てられている特定の監視項目が有効であることの確認
・ホストに割り当てられているすべての監視項目が有効であることの確認
describe zabbix_config(‘server-01’) do
its(:item_state) { should be_normal.with_itemkey(‘agent.ping’) }
its(:all_item_state) { should_not include "not supported" }
end
リソースタイプ「ZabbixConfig」-仕様-
16
他にも
 ・ホストグループの存在確認
 ・マクロの設定の確認
 ・テンプレートの存在確認
 ・障害検知トリガーの設定確認
最低限よく使う設定系の処理は実装済み
ZabbixConfigを使うには?
17
①zabbixapiというRubygemsパッケージの導入が必要
 $ gem install zabbixapi
②カスタマイズに必要なファイルを配置
 コードはここから(https://github.com/ike-dai/serverspec/tree/zabbix)
   ・lib/serverspec/matcher/be_normal.rb
   ・lib/serverspec/matcher/be_valid.rb
   ・lib/serverspec/type/zabbix_config.rb
   ・lib/serverspec/helper/type.rb
   ・lib/serverspec/matcher.rb
   ・lib/serverspec/matcher/be_enabled.rb
③環境変数に実行先のZabbixの情報登録
 ZABBIX_URL,ZABBIX_USER,ZABBIX_PASS
【3ファイル追加】
【3ファイル置換】
Serverspecって本来こういうことするもの?
18
サービス利用やサーバレスによる運用など、
インフラエンジニアの構築対象は
単なるサーバから色々と変わってきているので、、
こんな用途での活用もありかも??
19
構築を自動化するならあえて
Serverspecのテストの必要性って・・・?
20
Ansible等でのコード
 パッケージ「zabbix-server-mysql」が導入されていること
実際は
 zabbix-server-mysqlパッケージに依存する多数が。。。
 ▶期待した状態になっているかはServerspecの出番
21
手段はどうあれ、確実な運用実現に
テストは欠かせない
極力手間をかけずに効率よく実現を
Conclusion
22
Thanks!
Happy Premium-Friday!
You can find me at @ike_dai
23

Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-