关于chef-shell命令的扩展帮助

时间:2015-11-07 21:43:40

标签: chef

我们正在运行Chef v 11.12.2

在厨师贝壳打字'帮助'返回可用命令列表,然后提供使用特定命令和参数的帮助:

SNIP
| cookbooks                | Find and edit cookbooks
| cookbooks.all            | list all cookbooks
| cookbooks.show           | load a cookbook by name
| cookbooks.transform      | edit all cookbooks via a code block and save them
SNIP

Use help(:command) to get detailed help with individual commands

=> :ucanhaz_halp

虽然我试图寻找" coobooks"命令,我得到的比以前更多:

chef > help (:cookbooks)

Command: cookbooks
================================================================================

Find and edit cookbooks
================================================================================

 => :ucanhaz_halp
chef >

我的问题是,我做得对吗?

获得扩展帮助的正确方法是什么?

您是否知道详细解释所有这些命令的资源?

我已经看过很多关于如何使用chef-shell的例子,但没有一个提到使用cookbook *命令

官方文档

https://docs.chef.io/chef_shell.html

https://docs.chef.io/ctl_chef_shell.html

https://docs.chef.io/debug.html

不要对可用的命令说太多。

更新: 这就是我需要它的原因:
我正在尝试对菜谱中的一些ruby代码进行故障排除。我想在客户端模式下启动chef-shell,然后编辑缓存的cookbook(不在服务器上!),然后在配方之间添加断点并插入binding.pry'在ruby代码块中。该节点有一个大的运行列表,所以我很乐意将其限制为只有特定的配方集。烹饪书严重依赖于数据库,以便使事情变得更容易我想使用厨师 - 客户模式而不是其他模式或厨师零。

目前我似乎无法更改运行列表。在厨师 - 客户端模式下,它已经预先填充。

虽然命令似乎不言自明,但我无法使它们起作用:

chef > cookbooks.transform
ArgumentError: wrong number of arguments (0 for 1) from 
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.2/lib/chef/shell/model_wr??apper.rb:62:in transform' from (irb):9 
...

尝试将ntp指定为样本食谱:

chef > cookbooks.transform 'ntp'
Net::HTTPServerException: 404 "Object Not Found" from
/opt/chef/embedded/lib/ruby/1.9.1/net/http.rb:2633:in error!' 
... 

1 个答案:

答案 0 :(得分:0)

要记住,chef-shell是一个REPL,它是装有厨师lib的irb。 所以这些命令都只是ruby方法,它们接受参数并返回值。 因此,最好的帮助(以及示例)可以在源代码的注释中找到:

https://github.com/chef/chef/blob/master/lib/chef/shell/ext.rb

在我的本地安装上,文件位于此处

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.2/lib/chef/shell/ext.rb

这些命令可以帮助您操作代表cookbooks / nodes / environments / databags /等的ruby对象。但不是文件。因此,您可以在技术上进行内存中编辑。 我发现chef-shell特别有用的一件事是导出数据库或只是一些项目:

File.new('databags/databagname/itemname.json','w').puts databags('databagname').show('itemname').raw_data.to_json