apt な cookbook
以下なリポジトリから clone してます。
- git://github.com/opscode-cookbooks/apt.git
recipes/default.rb ですが以下が分からなかったので確認を入れるなど。
# provides /var/lib/apt/periodic/update-success-stamp on apt-get update package "update-notifier-common" do notifies :run, resources(:execute => "apt-get-update"), :immediately end
これ、update-notifier-common パケジが導入されたらすぐに apt-get-update を実行せよ、って意味なのかどうなのか。ちょっとざっくりしかこのパケジの機能が理解できてないんですが、これで良いのだろうなぁ、で良いのかどうか。
以下、default.rb のざっくりを列挙しときます。
- /var/lib/apt/periodic/update-success-stamp が無ければ apt-get update
- 失敗してもスルー (ignore_failure true)
- 何もしない apt-get upate がある
- 何もしない apt-get -y autoremove がある
- 何もしない apt-get -y autoclean がある
- update-notifier-common パケジが導入されたらすぐに apt-get update
- /varlib/apt/periodic/update-success-stamp のタイムスタンプを見て apt-get update
- /var/cache/local および /var/cache/local/preseeding なディレクトリを作成
- root:root で 00755
試験
ディレクトリの作成と、ファイル削除して実行とかタイムスタンプ操作して実行とか? つうかそもそもどうやって ssh な接続をして云々なのかを確認しないとアレ。
諸々確認します。
lib/serverspec/backend/ssh.rb
do_check! とか ssh_exec! などというメソドが定義されています。do_check! が public に開放されてるメソドか。あら、lib/serverspec/backend/exec.rb にも do_check というソレが定義されてますね。
よくよく見てみると Ssh クラスは Exec クラスを継承してました。ということはどちらもあり得るのか。あ、serverspec-init する時にこれを選択してるのか。lib/serverspec/setup.rb にありますね。成程。
module Serverspec class Setup def self.run prompt = <<-EOF Select a backend type: 1) SSH 2) Exec (local) 3) Puppet providers (local) Select number: EOF print prompt.chop num = gets.to_i - 1 puts @backend_type = [ 'Ssh', 'Exec', 'Puppet' ][num]
で、backend_type の値で spec_helper.rb の中身が変わるのか。ちなみに spec_helper.rb の先頭らへんで以下な include があり
include Serverspec::Helper::Ssh
lib/serverspec/helper/ssh.rb で backend の値が Ssh なオブジェクトの参照に、ということになっている模様です。ふむふむ。
ええと、そゆ意味では backend は試験からも見えてる、という理解で良いのかな。そうであれば backend.do_check を使ってコマンドをタタけるのかどうなのか。
irb で確認してみた。
irb(main):001:0> require './spec/spec_helper.rb' => true irb(main):002:0> backend TypeError: nil is not a symbol from /home/rms/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/serverspec-0.2.19/lib/serverspec/helper/detect_os.rb:5:in `const_get' from /home/rms/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/serverspec-0.2.19/lib/serverspec/helper/detect_os.rb:5:in `commands' from /home/rms/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/serverspec-0.2.19/lib/serverspec/helper/ssh.rb:5:in `backend' from (irb):2 from /home/rms/.rbenv/versions/1.9.3-p385/bin/irb:12:in `<main>'
む、駄目だ。以下も微妙。
irb(main):003:0> include Serverspec::Helper::Ssh => Object irb(main):004:0> require 'serverspec' => false
本当は spec/spec_helper.rb を require できた時点で backend は見えてないと、という理解がダウトなのかな。
つうかそもそも Serverspec::Helper::Ssh を include した時点で、ってこれは irb なプロンプトで云々しちゃ駄目なのかな。
できた
> require 'serverspec' => true > xx = Serverspec::Helper::Ssh => Object > xx.backend("ls") => #<Serverspec::Backend::Ssh:0x00000000f978d8 @commands="ls">
これ、spec_helper で include してるので、試験の中では呼び出し可能なはず。出力が必要なコマンドでなければそのまんま、で OK なのかな。
ちょいへろへろ気味なので apt なソレで確認、ってのは別途ということにて。