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 客户端。

广告