Chef - 纯Ruby与Chef DSL



在Chef中,如果需要创建简单的菜谱,可以使用Chef中提供的资源,例如模板、remote_file和服务。但是,随着菜谱变得越来越复杂,需要用到更高级的技术,例如条件语句来根据条件执行菜谱的部分内容。这就是将纯Ruby与Chef领域特定语言(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]] 

使用数组、循环和字符串扩展来构建gem名称,安装多个Ruby gem。

chef > %w{ec2 essentials}.each do |gem| 
   chef > gem_package "knife-#{gem}" 
   chef ?> end   => ["ec2", "essentials"] 

工作方法

Chef菜谱是Ruby文件,在Chef运行的上下文中进行评估。它们可以包含纯Ruby代码,例如if语句和循环,以及Chef DSL元素,例如资源。

在菜谱内部,可以简单地声明Ruby变量并为其赋值。

广告
© . All rights reserved.