Chef-plain-ruby-with-dsl
提供:Dev Guides
Chef-Chef DSLを使用したプレーンRuby
Chefでは、単純なレシピを作成する必要がある場合、テンプレート、remote_file、サービスなど、Chefで利用可能なリソースを使用できます。 ただし、レシピが複雑になると、条件に応じてレシピの一部を実行する条件ステートメントなどの高度なテクニックが必要になります。 これは、プレーンRubyとChef Domain Specific Language(DSL)を混合する力です。
それの使い方?
クライアントモードのいずれかのノードでChef Shellを起動して、Chefサーバーにアクセスできるようにします。
user@server:~$ sudo chef-shell --client
loading configuration:/etc/chef/client.rb
Session type: client
...TRUNCATED OUTPUT...
run `help' for help, `exit' or ^D to quit.
Ohai2u user@server!
Chef>
Chef DSLの基本条件
プレーンRubyを使用して名前でノードを並べ替えます。
chef > nodes.sort! {|a,b| a.name <=> b.name }
=> [node[alice],node[server]]
ノードをループし、オペレーティングシステムを印刷します。
chef > nodes.each do |n|
chef > puts n['os']
chef ?>
end
linux
windows
=> [node[server], node[alice]]
配列、ループ、および文字列拡張を使用して複数のRuby gemをインストールし、gem名を作成します。
chef > %w{ec2 essentials}.each do |gem|
chef > gem_package "knife-#{gem}"
chef ?> end => ["ec2", "essentials"]
作業方法
ChefレシピはRubyファイルであり、Chef runのコンテキストで評価されます。 これらには、ifステートメントやループなどの単純なRubyコード、およびリソースなどのChef DSL要素を含めることができます。
レシピ内では、Ruby変数を単純に宣言して値を割り当てることができます。