- 解決する問題
- Serverspecはデフォルトでは単一のホストしかチェックできなかった件
- 解決した内容
- 複数のホストとテストするattributeを定義すると、ホストの状態をチェック出来るServerspecのRakefileを作りました
- hosts.ymlにhostsとroleの組み合わせを書くとテストしてくれます
- なお、UN*X用です。そしてsshでテストを実行します
$ git clone git@github.com:dwango/serverspecd.git $ bundle
サンプルとしてmysqlのプロセスや設定をチェックしてくれる mysql_server 、ネットワーク周りを見てくれる network 、osのインストールされているパッケージなどをチェックしてくれる os などを同梱しています。参考にどうぞ。
.
|-- Gemfile
|-- Gemfile.lock
|-- README.md
|-- Rakefile
|-- attributes.yml.template
|-- hosts.yml.template
`-- spec
|-- app
| `-- app_spec.rb
|-- mysql_server
| `-- mysql_server_spec.rb
|-- network
| `-- network_spec.rb
|-- os
| `-- os_spec.rb
|-- php
| `-- php_spec.rb
|-- spec_helper.rb
`-- zabbix-agent
`-- zabbix-agent_spec.rb
- attribute.yml.templeteをattribute.ymlに、hosts.yml.templeteをhosts.ymlにそれぞれリネーム
- hosts.ymlにホスト名とspecのディレクトリ名を書きます
- attributes.ymlにspecのディレクトリ名に設定するattributeを書きます
- hosts.ymlにhostsとroleの組み合わせを書きます
- hosts.ymlの例
nico: :roles: - os maki: :roles: - os - network
- ノンパスで
ssh nico,ssh makiできるようにしてください
- spec名のディレクトリのspecに対応する設定を書きます
- :で始まっている理由は、参考にしたコードに引っ張られました
mysql_server: :listen_port: 3306 :version: 5.5.37 :user: mysql :innodb_buffer_pool_size: 24G :innodb_log_file_size: 600M :innodb_log_files_in_group: 3 php: :version: 5.5.12 :max_execution_time: 0 :memory_limit: 128M :post_max_size: 512M :upload_max_filesize: 2M :max_input_time: -1 :timezone: Asia/Tokyo :libmcrypt_version: 2.5.8 network: :gw_addr: 192.168.0.254 :gw_addr_device: bond0
hogeというroleを作ってみましょう。まずはspecファイルを作ります。
$ mkdir spec/hoge $ touch spec/hoge/hoge_spec.rb
hosts.ymlのrolesに追加します。
nico: :roles: - os - hoge # add 'hoge' role maki: :roles: - os - network
- attributes.ymlのspecに対応した値を読み出すためにproperties = property['spec']が必要です
$ cat spec/network/network_spec.rb require 'spec_helper' properties = property['network'] describe service('network') do it { should be_enabled } it { should be_running } end
- 実行時の一覧
$ rake -T rake serverspec # Run serverspec to all hosts rake serverspec:hostname1 # Run serverspec to hostname1 rake serverspec:hostname2 # Run serverspec to hostname2
- 特定のホストに対してテスト
$ rake serverspec:hostname1
- デバッグ情報も表示
$ rake serverspec:hostname1 --trace SPEC_OPTS="-fd"- specファイルに properties = property['spec']と書かないといけないのを何とかしたい
- rake serverspecして全てのサーバをチェックしたとき、一つ目のサーバのチェックが失敗すると、それ以降のサーバのチェックが走りません。何とかしたい
- http://serverspec.org/ Serverspec
- https://github.com/serverspec/serverspec Serverspec(github.com)
- http://mizzy.org/blog/2013/05/12/1/ serverspec のテストをホスト間で共有する方法
- http://mizzy.org/blog/2013/05/12/2/ serverspec でホスト固有の属性値を扱う方法
- https://github.com/hayato1980/serverspec-example NTPのチェック部分をコピーしました
- http://qiita.com/norobust/items/478866c355e35947835c serverspec で複数ホストの指定を簡単にしてみた