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変数を単純に宣言して値を割り当てることができます。