- 厨师教程
- 厨师 - 主页
- 厨师 - 概述
- 厨师 - 建筑
- Chef - 版本控制系统设置
- 厨师 - 工作站设置
- Chef - 客户端设置
- 厨师 - 测试厨房设置
- 厨师 - 刀具设置
- 厨师 - 独奏设置
- 厨师 - 食谱
- Chef - 食谱依赖项
- 厨师 - 角色
- 厨师 - 环境
- Chef - Chef-Client 作为守护进程
- 厨师 - Chef-Shell
- 厨师 - 测试食谱
- 厨师 - 美食评论家
- 厨师 - ChefSpec
- 使用测试厨房测试食谱
- 厨师 - 节点
- 厨师 - 厨师-客户运行
- 高级厨师
- 动态配置菜谱
- 厨师 - 模板
- Chef - 带有 Chef DSL 的纯 Ruby
- 厨师 - 红宝石宝石与食谱
- 厨师 - 图书馆
- 厨师 - 定义
- Chef - 环境变量
- 厨师 - 数据袋
- Chef - 数据包脚本
- Chef - 跨平台食谱
- 厨师 - 资源
- 轻量级资源提供者
- 厨师 - 蓝图
- Chef - 文件和包
- 厨师 - 社区食谱
- 厨师有用的资源
- 厨师 - 快速指南
- 厨师 - 有用的资源
- 厨师 - 讨论
Chef - 带有 Chef DSL 的纯 Ruby
在 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 变量并为其赋值。