Serverspec本読書メモ 3.5章〜3.12章まで
8212 ワード
オライリーのServerspec本のどくしょかんそうぶんです
3.5 動作のカスタマイズ
-
Specinfra.configration
を利用して、serverspecの動作をカスタマイズできる
-
set
メソッドは、Specinfra.configration
のシンタックスシュガー
渡せるコマンド
Specinfra.configration
を利用して、serverspecの動作をカスタマイズできるset
メソッドは、Specinfra.configration
のシンタックスシュガー使えるコマンドを解説した公式のドキュメントが見つからない...
-
ssh_options:
Net::SSH.start
に渡すオプション - pre_command: テスト実行前に引数のコマンドを実行
-
env: 環境変数。hash で複数渡せる
set :env, :LANG => 'C', :LC_MESSAGES => 'C'
path: PATH
shell:テストで使用するシェル
sudo_path: sudo する時のpath
disable_sudo: テスト実行時に sudo しない
-
request_pty: PTYを常に要求
- 標準エラー出力と標準出力が一緒になるので注意
- Execバックエンドの場合も同様
- 1.8.7の互換性のため
-
sudo_options: sudoする時のオプション
set :sudo_options, '-u foo'
3.6 一時的な動作の変更
let: 一時的なset
describe command('whoami') do
let(:disable_sudo){ true }
its(:stdout){ should match /foo/ }
end
Rspec の around を使う
spec_helper.rb
Rspec.configure do |c|
c.around :each, sudo: false do |example|
set :disable_sudo, true
example.run
set :disable_sudo, false
end
end
set
describe command('whoami') do
let(:disable_sudo){ true }
its(:stdout){ should match /foo/ }
end
spec_helper.rb
Rspec.configure do |c|
c.around :each, sudo: false do |example|
set :disable_sudo, true
example.run
set :disable_sudo, false
end
end
sudo: false
のあるExampleでのみ disable_sudo
が有効になる
describe command('whoami'), sudo: false do
let(:disable_sudo){ true }
its(:stdout){ should match /foo/ }
end
3.7 specファイルを複数のホストで共有
- Rakefileで使用するspecを制御できるのでやりようは自由
こんなふうなやり方もあるよという提案
-
ロール毎にまとめる
- 共通のテスト、dbサーバ、appサーバ用のテストをそれぞれ用意
- Rake でサーバ名毎に、どのテストを実行するかを決める
-
モジュール毎にまとめる
- chef なら cookbook単位
- 各 cookbookにspecディレクトリを用意
- それを読む
- サーパ構成管理ツールを乗り換える時に大変
- attributeとかを多用しているとできなさそう
この辺はプロジェクトに応じていろいろやりようがある気がする
3.8 ホスト固有情報の利用
-
setproperty: ハッシュを引数として受け取る
setproperty { key1: 'value1', key2: 'value2' }
-
property: setproperty
にて設定した値を受け取る
property[:key1] # 'value1'
サーバ毎の固有の設定を json 書く
こんなふうなやり方もあるよという提案
ロール毎にまとめる
- 共通のテスト、dbサーバ、appサーバ用のテストをそれぞれ用意
- Rake でサーバ名毎に、どのテストを実行するかを決める
モジュール毎にまとめる
- chef なら cookbook単位
- 各 cookbookにspecディレクトリを用意
- それを読む
- サーパ構成管理ツールを乗り換える時に大変
- attributeとかを多用しているとできなさそう
この辺はプロジェクトに応じていろいろやりようがある気がする
-
setproperty: ハッシュを引数として受け取る
setproperty { key1: 'value1', key2: 'value2' }
-
property:
setproperty
にて設定した値を受け取るproperty[:key1] # 'value1'
サーバ毎の固有の設定を json 書く
spec_helper.rb で読み込ませる技
spec_helper.rb
set_property JSON.perse(File.read('properties.json'))[ENV['TARGET_HOST']]
3.8 もそうだけれども、やりようは色々あるから、自由にやってね! というスタンスを感じる
3.9 任意コマンドの実行
テスト実行前に任意のコマンドを実行したい場合
-
Specinfra::Runner
に色々なコマンド実行用メソッドがある- Q: 使えるメソッドの一覧どこ
-
Specinfra::Runner.run_command
で任意のコマンドを実行 -
Specinfra::CommandResult
オブジェクトが返るsuccess?
failure?
stdout
stderr
exit_status
3.12 テストコード実装の指針
- 新規システム
- 最初は書かずに、ある程度固まった所で書く
- 寿命が短いシステムはわざわざテストしなくても良い
- リファクタリングのためにテストは必要
- 既存システム
- テストがない場合、今後も長く使うのであれば書く
- システムは変わるもの。変えるときにテストがあると安心
- 構成管理ツールがある場合
- そのモジュールやcookbookが何をするものかを明示するため
-
構成管理ツールは信用する。インフラコードを書く人間を信用しない
- ツールの設定をする人が間違えたり、勝手に(別の所で)バージョンが変わっていないことを保証する
- どこまでテストするか?
- サーバのとしての役割が必須な所まで
- 設定ファイルの詳細まで追うのは苦労の割に実入りが少ない
-
設定そのものよりも、設定によってもたらされる振る舞いをテストすべき
- それは serverspec 外の仕事 → 例: Infratester
- セキュリティ上重要な部分
-
インフラコードの変更、パッケージ/OSのアップデートで想定しない状態になるかどうかを確認する
- そのために必要なことは何か?
- 最初は書かずに、ある程度固まった所で書く
- 寿命が短いシステムはわざわざテストしなくても良い
- リファクタリングのためにテストは必要
- テストがない場合、今後も長く使うのであれば書く
- システムは変わるもの。変えるときにテストがあると安心
- そのモジュールやcookbookが何をするものかを明示するため
-
構成管理ツールは信用する。インフラコードを書く人間を信用しない
- ツールの設定をする人が間違えたり、勝手に(別の所で)バージョンが変わっていないことを保証する
- サーバのとしての役割が必須な所まで
- 設定ファイルの詳細まで追うのは苦労の割に実入りが少ない
-
設定そのものよりも、設定によってもたらされる振る舞いをテストすべき
- それは serverspec 外の仕事 → 例: Infratester
- セキュリティ上重要な部分
- そのために必要なことは何か?
Author And Source
この問題について(Serverspec本読書メモ 3.5章〜3.12章まで), 我々は、より多くの情報をここで見つけました https://qiita.com/kasei-san/items/b99ad33738368a5340cd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .