- Chef 教程
- Chef - 首页
- Chef - 概述
- Chef - 架构
- Chef - 版本控制系统设置
- Chef - 工作站设置
- Chef - 客户端设置
- Chef - 测试厨房设置
- Chef - Knife 设置
- Chef - Solo 设置
- Chef - Cookbook
- Chef - Cookbook 依赖关系
- Chef - 角色
- Chef - 环境
- Chef - Chef-Client 作为守护进程
- Chef - Chef-Shell
- Chef - 测试 Cookbook
- Chef - Foodcritic
- Chef - ChefSpec
- 使用 Test Kitchen 测试 Cookbook
- Chef - 节点
- Chef - Chef-Client 运行
- 高级 Chef
- 动态配置配方
- Chef - 模板
- Chef - 使用 Chef DSL 的纯 Ruby
- Chef - 配方中的 Ruby Gems
- Chef - 库
- Chef - 定义
- Chef - 环境变量
- Chef - 数据包
- Chef - 数据包脚本
- Chef - 跨平台 Cookbook
- Chef - 资源
- 轻量级资源提供程序
- Chef - 蓝图
- Chef - 文件和包
- Chef - 社区 Cookbook
- Chef 有用资源
- Chef - 快速指南
- Chef - 有用资源
- Chef - 讨论
Chef - Chef-Shell
编写 Chef cookbook 总是很困难。因为它会使事情变得更困难,因为需要很长的反馈周期才能将它们上传到 Chef 服务器,配置一个 vagrant VM,检查它们在那里是如何失败的,然后重复此过程。如果我们能够在执行所有这些繁重的工作之前尝试测试一些片段或配方,那将会更容易。
Chef 带有 Chef-Shell,它本质上是一个带有 Chef 的交互式 Ruby 会话。在 Chef-Shell 中,我们可以创建 -
- 属性
- 编写配方
- 初始化 Chef 运行
它用于在将它们上传到 Chef 服务器并执行节点上的完整 cookbook 之前,动态评估配方的一部分。
运行 Shell
步骤 1 - 以独立模式运行 Chef-Shell。
mma@laptop:~/chef-repo $ chef-shell loading configuration: none (standalone chef-shell session) Session type: standalone Loading...[2017-01-12T20:48:01+01:00] INFO: Run List is [] [2017-01-12T20:48:01+01:00] INFO: Run List expands to [] done. This is chef-shell, the Chef Shell. Chef Version: 11.0.0 http://www.opscode.com/chef http://wiki.opscode.com/display/chef/Home run `help' for help, `exit' or ^D to quit. Ohai2u mma@laptop! chef >
步骤 2 - 在 Chef-Shell 中切换到属性模式
chef > attributes_mode
步骤 3 - 设置属性值。
chef:attributes > set[:title] = "Chef Cookbook"
"Chef Cookbook"
chef:attributes > quit
:attributes
chef >
步骤 4 - 切换到配方模式。
chef > recipe_mode
步骤 5 - 创建一个文件资源。
chef:recipe > file "/tmp/book.txt" do chef:recipe > content node.title chef:recipe ?> end => <file[/tmp/book.txt] @name: "/tmp/book.txt" @noop: nil @ before: nil @params: {} @provider: Chef::Provider::File @allowed_ actions: [:nothing, :create, :delete, :touch, :create_if_missing] @action: "create" @updated: false @updated_by_last_action: false @supports: {} @ignore_failure: false @retries: 0 @retry_delay: 2 @source_line: "(irb#1):1:in `irb_binding'" @elapsed_time: 0 @ resource_name: :file @path: "/tmp/book.txt" @backup: 5 @diff: nil @cookbook_name: nil @recipe_name: nil @content: "Chef Cookbook"> chef:recipe >
步骤 6 - 开始 Chef 运行以创建具有给定内容的文件。
chef:recipe > run_chef
[2017-01-12T21:07:49+01:00] INFO: Processing file[/tmp/book.txt] action create ((irb#1) line 1) --- /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/cheftempfile20121212- 11348-dwp1zs 2012-12-12 21:07:49.000000000 +0100 +++ /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/chefdiff20121212- 11348-hdzcp1 2012-12-12 21:07:49.000000000 +0100 @@ -0,0 +1 @@ +Chef Cookbook \ No newline at end of file [2017-01-12T21:07:49+01:00] INFO: entered create [2017-01-12T21:07:49+01:00] INFO: file[/tmp/book.txt] created file /tmp/book.txt
工作原理
Chef-Shell 从一个交互式 Ruby (IRB) 会话开始,并增强了一些特定功能。
它提供诸如 attributes_mode 和 interactive_mode 之类的模式。
它有助于编写命令,这些命令写在配方或 cookbook 中。
它以交互模式运行所有内容。
我们可以以三种不同的模式运行 Chef-Shell:独立模式、客户端模式和独立模式。
独立模式 - 这是默认模式。没有加载 cookbook,运行列表为空。
客户端模式 - 在这里,chef-shell 充当 chef-client。
独立模式 - 在这里,chef-shell 充当 chef-solo 客户端。