|
| 1 | +# これはなに? |
| 2 | + |
| 3 | +* 解決する問題 |
| 4 | + * [Serverspec](http://http://serverspec.org/)はデフォルトでは単一のホストしかチェックできなかった件 |
| 5 | + |
| 6 | +* 解決した内容 |
| 7 | + * 複数のホストとテストするattributeを定義すると、ホストの状態をチェック出来るServerspecのRakefileを作りました |
| 8 | + * hosts.ymlにhostsとroleの組み合わせを書くとテストしてくれます |
| 9 | + |
| 10 | +* なお、UN*X用です。そしてsshでテストを実行します |
| 11 | + |
| 12 | + |
| 13 | +# インストール |
| 14 | + |
| 15 | +``` |
| 16 | +$ git clone [email protected]:dwango/serverspecd.git |
| 17 | +$ bundle |
| 18 | +``` |
| 19 | + |
| 20 | +## ディレクトリ構成 |
| 21 | + |
| 22 | +サンプルとしてmysqlのプロセスや設定をチェックしてくれる ``mysql_server`` 、ネットワーク周りを見てくれる ``network`` 、osのインストールされているパッケージなどをチェックしてくれる ``os`` などを同梱しています。参考にどうぞ。 |
| 23 | + |
| 24 | +``` |
| 25 | +. |
| 26 | +|-- Gemfile |
| 27 | +|-- Gemfile.lock |
| 28 | +|-- README.md |
| 29 | +|-- Rakefile |
| 30 | +|-- attributes.yml.template |
| 31 | +|-- hosts.yml.template |
| 32 | +`-- spec |
| 33 | + |-- app |
| 34 | + | `-- app_spec.rb |
| 35 | + |-- mysql_server |
| 36 | + | `-- mysql_server_spec.rb |
| 37 | + |-- network |
| 38 | + | `-- network_spec.rb |
| 39 | + |-- os |
| 40 | + | `-- os_spec.rb |
| 41 | + |-- php |
| 42 | + | `-- php_spec.rb |
| 43 | + |-- spec_helper.rb |
| 44 | + `-- zabbix-agent |
| 45 | + `-- zabbix-agent_spec.rb |
| 46 | +``` |
| 47 | + |
| 48 | +## 使う |
| 49 | + |
| 50 | +* attribute.yml.templeteをattribute.ymlに、hosts.yml.templeteをhosts.ymlにそれぞれリネーム |
| 51 | +* hosts.ymlにホスト名とspecのディレクトリ名を書きます |
| 52 | +* attributes.ymlにspecのディレクトリ名に設定するattributeを書きます |
| 53 | + |
| 54 | + |
| 55 | +## 設定 |
| 56 | + |
| 57 | +### hosts.yml |
| 58 | + |
| 59 | +* hosts.ymlにhostsとroleの組み合わせを書きます |
| 60 | +* hosts.ymlの例 |
| 61 | + |
| 62 | +``` |
| 63 | +nico: |
| 64 | + :roles: |
| 65 | + - os |
| 66 | +maki: |
| 67 | + :roles: |
| 68 | + - os |
| 69 | + - network |
| 70 | +``` |
| 71 | + |
| 72 | +* ノンパスで ``ssh nico`` , ``ssh maki`` できるようにしてください |
| 73 | + |
| 74 | +### attributes.yml |
| 75 | + |
| 76 | +* spec名のディレクトリのspecに対応する設定を書きます |
| 77 | +* :で始まっている理由は、参考にしたコードに引っ張られました |
| 78 | + |
| 79 | +``` |
| 80 | +mysql_server: |
| 81 | + :listen_port: 3306 |
| 82 | + :version: 5.5.37 |
| 83 | + :user: mysql |
| 84 | + :innodb_buffer_pool_size: 24G |
| 85 | + :innodb_log_file_size: 600M |
| 86 | + :innodb_log_files_in_group: 3 |
| 87 | +php: |
| 88 | + :version: 5.5.12 |
| 89 | + :max_execution_time: 0 |
| 90 | + :memory_limit: 128M |
| 91 | + :post_max_size: 512M |
| 92 | + :upload_max_filesize: 2M |
| 93 | + :max_input_time: -1 |
| 94 | + :timezone: Asia/Tokyo |
| 95 | + :libmcrypt_version: 2.5.8 |
| 96 | +network: |
| 97 | + :gw_addr: 192.168.0.254 |
| 98 | + :gw_addr_device: bond0 |
| 99 | +``` |
| 100 | + |
| 101 | +### specファイルを作ってroleに追加する方法 |
| 102 | + |
| 103 | +hogeというroleを作ってみましょう。まずはspecファイルを作ります。 |
| 104 | + |
| 105 | +``` |
| 106 | +mkdir spec/hoge |
| 107 | +touch spec/hoge/hoge_spec.rb |
| 108 | +``` |
| 109 | + |
| 110 | +hosts.ymlのrolesに追加します。 |
| 111 | + |
| 112 | +``` |
| 113 | +nico: |
| 114 | + :roles: |
| 115 | + - os |
| 116 | + - hoge # add 'hoge' role |
| 117 | +maki: |
| 118 | + :roles: |
| 119 | + - os |
| 120 | + - network |
| 121 | +``` |
| 122 | + |
| 123 | +### specファイルを作ろう |
| 124 | + |
| 125 | +* attributes.ymlのspecに対応した値を読み出すためにproperties = property['spec']が必要です |
| 126 | + |
| 127 | +``` |
| 128 | +$ cat spec/network/network_spec.rb |
| 129 | +require 'spec_helper' |
| 130 | +properties = property['network'] |
| 131 | +
|
| 132 | +describe service('network') do |
| 133 | + it { should be_enabled } |
| 134 | + it { should be_running } |
| 135 | +end |
| 136 | +``` |
| 137 | + |
| 138 | + |
| 139 | +## 実行 |
| 140 | + |
| 141 | +* 実行時の一覧 |
| 142 | + |
| 143 | +``` |
| 144 | +$ rake -T |
| 145 | +rake serverspec # Run serverspec to all hosts |
| 146 | +rake serverspec:hostname1 # Run serverspec to hostname1 |
| 147 | +rake serverspec:hostname2 # Run serverspec to hostname2 |
| 148 | +``` |
| 149 | + |
| 150 | +* 特定のホストに対してテスト |
| 151 | + |
| 152 | +``` |
| 153 | +$ rake serverspec:hostname1 |
| 154 | +``` |
| 155 | + |
| 156 | +* デバッグ情報も表示 |
| 157 | + |
| 158 | +``` |
| 159 | +$ rake serverspec:hostname1 --trace SPEC_OPTS="-fd" |
| 160 | +``` |
| 161 | + |
| 162 | + |
| 163 | +# その他 |
| 164 | + |
| 165 | +## TODO |
| 166 | + |
| 167 | +* specファイルに propaties = propaties['spec']と書かないといけないのを何とかしたい |
| 168 | +* rake serverspecして全てのサーバをチェックしたとき、一つ目のサーバのチェックが失敗すると、それ以降のサーバのチェックが走りません。何とかしたい |
| 169 | + |
| 170 | +## 参考 |
| 171 | + |
| 172 | +* http://serverspec.org/ Serverspec |
| 173 | +* https://github.com/serverspec/serverspec Serverspec(github.com) |
| 174 | +* http://mizzy.org/blog/2013/05/12/1/ serverspec のテストをホスト間で共有する方法 |
| 175 | +* http://mizzy.org/blog/2013/05/12/2/ serverspec でホスト固有の属性値を扱う方法 |
| 176 | +* https://github.com/hayato1980/serverspec-example NTPのチェック部分をコピーしました |
| 177 | + |
| 178 | +## see also |
| 179 | + |
| 180 | +* http://qiita.com/norobust/items/478866c355e35947835c serverspec で複数ホストの指定を簡単にしてみた |
0 commit comments