我们正在运行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!'
...
答案 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