📅  最后修改于: 2020-11-02 03:24:45             🧑  作者: Mango
在Chef中,如果需要创建简单的配方,则可以使用Chef中可用的资源,例如模板,remote_file和服务。但是,随着配方的复杂化,人们需要先进的技术,例如条件语句以按条件执行配方的某些部分。这是将纯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>
使用纯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运行的上下文中进行评估。它们可以包含简单的Ruby代码(例如if语句和循环)以及Chef DSL元素(例如资源)。
在配方内部,可以简单地声明Ruby变量并为其分配值。