Chef学習の4:Chef基礎のLWRP(転載)

29730 ワード

From:http://williamherry.com/blog/2012/10/09/chef-lwrp/
ChefベースのLWRP
OCT 9 TH、2012 | COMMENTS
概要
Chefに内蔵されているResourceとProvidersはもう非常に強くなりました.もしいくつかの需要があれば、まだ満足できない、または内蔵されているのが面倒くさい場合、自分のResourceとProvidersを書くことができます.
他の人のcookbookに下の線を持っているResourceがあったら、例えば次のようにします.
1
2
3
4
5
apt_repository "zenoss" do
  uri "http://dev.zenoss.org/deb"
  components ["main","stable"]
  action :add
end
それはおそらくLightweight Resourceかもしれません.ここでは他にもいくつかのものがあるからかもしれません.このようなフォーマットです.
この文書を見てみます.LWRPは主に基本的な公式Wikiです.英語が上手なら、直接に公式の住所を見ることができます. Lightweight Resource and Providers
LWRPを紹介する前に、まず何がResourceとProviderなのかを振り返ってみます.簡単にResourceとは抽象的な方法でシステムの一部を説明します.次の例のように、どのような状態にあるかを望んでいます.
1
2
3
4
package "vim" do
  version "1.16.1-1"
  action :install
end
このResourceは私のシステムの中のバージョンが1.16.1-1のvimというパッケージがインストールされている状態を説明しています.Resourceにはいくつかの属性(ここはversion)があります.この状態については自分で決めています.また、この動作によってシステムの一部が希望の状態に変わります.
Providersとは何ですか?上の例を見てください.bash命令で表すとyum -y install vimapt-get install vimかもしれません.私たちは上のような抽象的な方法で私の需要を表現できます.下の階に気にしないでください.Providerが私たちのためにこの仕事をしてくれます.Providerはこの階の抽象的なイメージを提供してくれます.
ファイルの位置
ライト級(またはカスタムと呼ばれる)ResourceとProvidersのパーティションは、cookbookのresourcesprovidersのディレクトリからロードされます.ResourceとProviderssの名前は、cookbookの名前とファイルの名前を下のラインで組み合わせています.唯一の例外はファイル名default.rbです.この場合、ResourceとProvidersの名前は、cookbookの名前だけです.

ノート:下の例は名前を説明するためだけに、これらのLWRPが本当にあるとは限りません.
1
2
3
4
5
6
7
8
9
10
11
+----------------------------------------------------------------------------------------+-------------------------------------+
| Filename                               | Resource or Provider Name, as used in the DSL | Generated Class                     |
+----------+-----------------------------+-----------------------------------------------+-------------------------------------+
| /cookbooks/aws/resources/default.rb    | aws                                           | Chef::Resource::Aws                 |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| /cookbooks/aws/resources/elastic_ip.rb | aws_elastic_ip                                | Chef::Resourcesce::AwsElasticIp     |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| /cookbooks/aws/providers/default.rb    | aws                                           | Chef::Providerser::Aws              |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| /cookbooks/aws/providers/elastic_ip.rb | aws_elastic_ip                                | Chef::Providerrovider::AwsElasticIp |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
Resource
前にも述べましたが、Reourcersには一つ以上の属性があります.Recipeを書く時に属性にいくつかの私達が欲しい値を与えます.これらの値は属性をProvider.Resourceに伝えられます.また、この動作はProvidersで定義されているものですか?
Providers
ProvidersはResourceをサポートしています.これはインスタンス変数@new_resourceを通じてキャリアとして得られます.RecipesでRecipesにResourceに伝えられた属性は値にあります.Resourceでの動作を定義して具体的にどのような動作をしますか?完了したら呼び出します.reource.udated_by_ラスター.action(true)はChefに完成したと伝えに来ました.
以下は簡単な例で理解を深めます.中の変数(属性)の伝達に注意します.
簡単な例
この例は簡単にパッケージ化された内容のResourceタイプuserでLWRPが得られます.
まず私達はknife命令を利用してcookbookのディレクトリ構造を作成します.
knife cookbook create users
そして、私たちは直接にresourceディレクトリの下でresourceを作成します.
vim users/resource/manage.rb
1
2
3
actions :create, :remove

attribute :user_name, :kind_of => String, :required => true
私たちは二つの動作と一つの属性を定義しています.この二つの具体的な仕事はProviderで実現されます.recipeでこのResourceを使う時に属性の値がProviderにアクセスできます.
次は私達のProviderを創立してResourceを支持します.実現する上に前の二つの動作を定義して何をしますか?
vim users/providers/manage.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
action :remove do
  user new_resource.user_name do
    action :remove
  end
  new_resource.updated_by_last_action(true)
end

action :create do
  user new_resource.user_name do
    action :create
  end
  new_resource.updated_by_last_action(true)
end
2つの動作を定義し、内蔵のResourceタイプuserを使用してユーザを作成し、new_resourceを利用してrecipesから送られてきたユーザ名を取得し、最後にステータスを更新する.
このcookbookで私達が定義したResource.Cookbookの名前はusersです.Resourcesファイルの名前はmanage.rbです.だから私達のResource名前はusers_manageです.
vim users/recipes/test.rb
1
2
3
users_maange "william" do
  user_name "william"
end
今から私たちが書いたLWRPをテストできます.
knife cookbook upload users
knife node run list add client1.chef.com 'recipe[users::test]'
Posted by William Herry Oct 9 th、2012
転載先:https://www.cnblogs.com/puncha/archive/2013/03/30/3876925.html