设为首页 收藏本站
查看: 1684|回复: 0

[经验分享] Chef学习之四:Chef基础之LWRP (转载)

[复制链接]

尚未签到

发表于 2015-11-26 08:20:34 | 显示全部楼层 |阅读模式
  From:http://williamherry.com/blog/2012/10/09/chef-lwrp/
  


Chef基础之LWRP


[size=0.9em]
OCT 9TH, 2012 | COMMENTS



概述



Chef内置的Resources和Providers已经非常强大了,如果有些需求还不能满足,或者用内置的比较麻烦,这时可以编写自己的Resources和Providers

如果你看到别人的cookbook里有带有下画线的Resource,例如下面这个:



[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3
[color=#586E75!important]4
[color=#586E75!important]5

[color=#268BD2!important]apt_repository [color=#2AA198!important]"zenoss" [color=#CB4B16!important]do
  [color=#268BD2!important]uri [color=#2AA198!important]"http://dev.zenoss.org/deb"
  [color=#268BD2!important]components [[color=#2AA198!important]"main",[color=#2AA198!important]"stable"]
  [color=#268BD2!important]action :add
[color=#CB4B16!important]end



那么它有可能就是一个一个Lightweight Resource.这里之所以说可能是因为还有其它的一些东西也是这种格式(以后会介绍到)

这个文档我们来看一下怎么写LWRP,主要是基本官方的Wiki,如果英文够好,可以直接看官方的,地址是: Lightweight Resources and Providers

在介绍LWRP之前我们先来回顾一下什么是Resource和Provider.简单来说Resource就是以一种抽象的方式来描述系统的某一部分我希望它处在一种什么状态, 如下面的例子



[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3
[color=#586E75!important]4

[color=#268BD2!important]package [color=#2AA198!important]"vim" [color=#CB4B16!important]do
  [color=#268BD2!important]version [color=#2AA198!important]"1.16.1-1"
  [color=#268BD2!important]action :install
[color=#CB4B16!important]end



这条Resource就是描述说我希望我的系统中版本为1.16.1-1的vim这个包处于安装的状态,Resource会有一些属性(这里是version),对这个状态做自定.还会有一个动作,通过这个动作将系统的某一部分改变到我们希望的状态.

那么什么是Providers呢,看上面的例子,如果我们把它用bash命令来表示,它可能会是yum
-y install vim或apt-get
install vim.我们之所以可以用上面那种抽象的方式来表达我的需求,而不用关心底层它是怎么做到的,就是因为有Provider为我们做这个工作.Provider为我们提供了这一层的抽象


文件位置



轻量级(或叫自定义)Resources和Providers分区从cookbook的resources和providers目录加载.Resources和Providers的名字由cookbook的名字与文件的名字通过下画线组合而成.唯一的例外是文件名为default.rb.在这种情况下Resources和Providers的名字仅是cookbook的名字


例子



Note: 下面的例子只是为了说明名字,不一定真的有这些LWRP



[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3
[color=#586E75!important]4
[color=#586E75!important]5
[color=#586E75!important]6
[color=#586E75!important]7
[color=#586E75!important]8
[color=#586E75!important]9
[color=#586E75!important]10
[color=#586E75!important]11

+----------------------------------------------------------------------------------------+-------------------------------------+
| [color=#B58900!important]Filename                               | [color=#B58900!important]Resource [color=#2AA198!important]or [color=#B58900!important]Provider [color=#B58900!important]Name, [color=#268BD2!important]as [color=#268BD2!important]used [color=#CB4B16!important]in [color=#268BD2!important]the [color=#B58900!important]DSL | [color=#B58900!important]Generated [color=#B58900!important]Class                     |
+----------+-----------------------------+-----------------------------------------------+-------------------------------------+
| [color=#2AA198!important]/cookbooks/[color=#268BD2!important]aws/[color=#268BD2!important]resources/[color=#268BD2!important]default.[color=#268BD2!important]rb    | [color=#268BD2!important]aws                                           | [color=#B58900!important]Chef::[color=#B58900!important]Resource::[color=#B58900!important]Aws                 |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| [color=#2AA198!important]/cookbooks/[color=#268BD2!important]aws/[color=#268BD2!important]resources/[color=#268BD2!important]elastic_ip.[color=#268BD2!important]rb | [color=#268BD2!important]aws_elastic_ip                                | [color=#B58900!important]Chef::[color=#B58900!important]Resourcesce::[color=#B58900!important]AwsElasticIp     |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| [color=#2AA198!important]/cookbooks/[color=#268BD2!important]aws/[color=#268BD2!important]providers/[color=#268BD2!important]default.[color=#268BD2!important]rb    | [color=#268BD2!important]aws                                           | [color=#B58900!important]Chef::[color=#B58900!important]Providerser::[color=#B58900!important]Aws              |
+----------------------------------------+-----------------------------------------------+-------------------------------------+
| [color=#2AA198!important]/cookbooks/[color=#268BD2!important]aws/[color=#268BD2!important]providers/[color=#268BD2!important]elastic_ip.[color=#268BD2!important]rb | [color=#268BD2!important]aws_elastic_ip                                | [color=#B58900!important]Chef::[color=#B58900!important]Providerrovider::[color=#B58900!important]AwsElasticIp |
+----------------------------------------+-----------------------------------------------+-------------------------------------+



Resources



前面已经说过,Resources会有一个或多个属性,我们在写Recipe的时候会给属性一些我们想要的值,这些值可以通过属性传给Provider.Resources还会有一个动作,这个动作具体做什么是在Providers中定义的


Providers



Providers就是支持Resources的,它可以通过实例变量@new_resource做为载体来来得到我们在Recipes中传给Resources的属性在值,定义Resource中的动作具体做些什么动作.完了之后调用`@new_resource.updated_by_last_action(true)来告诉Chef我们做完了

下面我们以一个简单的例子来加深一下理解,主要注意里面变量(属性)的传递


简单的例子



这个例子我们简单的封装一个内容Resource类型user得到一个LWRP

首先我们利用knife命令创建cookbook的目录结构

knife cookbook create users


然后我们直接在resources目录下创建我们的resource

vim users/resources/manage.rb

[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3

[color=#268BD2!important]actions :create, :remove

[color=#268BD2!important]attribute :user_name, :kind_of => [color=#859900!important]String, :required => [color=#CB4B16!important]true



我们定义了两个动作和一个属性,这两个具体做什么工作是在Provider中实现的,在recipe使用这个Resource的时候传来属性的值可以在Provider中访问到

下面我们创建我们的Provider用来支持Resource.实现上就是定义前面的两个动作要做什么工作

vim users/providers/manage.rb

[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3
[color=#586E75!important]4
[color=#586E75!important]5
[color=#586E75!important]6
[color=#586E75!important]7
[color=#586E75!important]8
[color=#586E75!important]9
[color=#586E75!important]10
[color=#586E75!important]11
[color=#586E75!important]12
[color=#586E75!important]13

[color=#268BD2!important]action :remove [color=#CB4B16!important]do
  [color=#268BD2!important]user [color=#268BD2!important]new_resource.[color=#268BD2!important]user_name [color=#CB4B16!important]do
    [color=#268BD2!important]action :remove
  [color=#CB4B16!important]end
  [color=#268BD2!important]new_resource.[color=#268BD2!important]updated_by_last_action([color=#CB4B16!important]true)
[color=#CB4B16!important]end

[color=#268BD2!important]action :create [color=#CB4B16!important]do
  [color=#268BD2!important]user [color=#268BD2!important]new_resource.[color=#268BD2!important]user_name [color=#CB4B16!important]do
    [color=#268BD2!important]action :create
  [color=#CB4B16!important]end
  [color=#268BD2!important]new_resource.[color=#268BD2!important]updated_by_last_action([color=#CB4B16!important]true)
[color=#CB4B16!important]end



我们定义了两个动作,使用内置的Resource类型user来创建用户,利用new_resource得到从recipes中传来的用户名,最后更新状态

下面我们就在这个cookbook中使用我们定义的Resource.Cookbook的名字为users,Resouces文件的名字为manage.rb,所以我们的Resource名字为users_manage

vim users/recipes/test.rb

[color=#586E75!important]1
[color=#586E75!important]2
[color=#586E75!important]3

[color=#268BD2!important]users_maange [color=#2AA198!important]"william" [color=#CB4B16!important]do
  [color=#268BD2!important]user_name [color=#2AA198!important]"william"
[color=#CB4B16!important]end



现在就可以测试我们写的LWRP了

knife cookbook upload users
knife node run list add client1.chef.com 'recipe[users::test]'

[size=0.85em]
Posted by William Herry Oct
9th, 2012


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143609-1-1.html 上篇帖子: code chef 下篇帖子: code chef
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表