Chef infra chef shell命令的扩展帮助

Chef infra chef shell命令的扩展帮助,chef-infra,Chef Infra,我们正在运行Chef v 11.12.2 在chef shell中,键入“help”将返回可用命令的列表,然后提供使用特定命令作为帮助和参数的帮助: SNIP | cookbooks | Find and edit cookbooks | cookbooks.all | list all cookbooks | cookbooks.show | load a cookbook by name | cookbooks.tran

我们正在运行Chef v 11.12.2

在chef shell中,键入“help”将返回可用命令的列表,然后提供使用特定命令作为帮助和参数的帮助:

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/debug.html

不要对可用的命令说太多

更新: 这就是我需要它的原因:

我正在尝试对烹饪书中的一些ruby代码进行故障排除。我想在客户端模式下启动chef shell,然后编辑缓存的烹饪书(不在服务器上!),然后在菜谱之间添加断点,并在ruby代码块中插入“binding.pry”。这个节点有一个很大的运行列表,所以我很乐意将它限制在一组特定的食谱中。烹饪书很大程度上依赖于数据包,所以为了使事情更简单,我想使用chef客户端模式,而不是其他模式或chef zero

目前看来我无法更改运行列表。在chef客户端模式下,它已预填充

虽然命令似乎不言自明,但我无法让它们工作:

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!' 
... 

我们必须记住chef shell是一个REPL,它是加载chef Lib的irb。 所有这些命令都是ruby方法,它们接受参数并返回值。 因此,最好的帮助(以及示例)可以在下面的源代码注释中找到:

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

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

这些命令可以帮助您操作表示烹饪书/节点/环境/数据包等的ruby对象,但不能操作文件。所以你可以在技术上做内存编辑。 我发现chef shell特别有帮助的一件事是导出数据包或一些项目:

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

你到底想做什么?很难给出这样的线索,这些命令是自解释的(在运行列表烹饪书上工作),我正在尝试对烹饪书中的一些ruby代码进行故障排除。我想在客户端模式下启动chef shell,然后编辑缓存的烹饪书(不在服务器上!),然后在菜谱之间添加断点,并在ruby代码块中插入“binding.pry”。这个节点有一个很大的运行列表,所以我很乐意将它限制在一组特定的食谱中。烹饪书在很大程度上依赖于数据包。为了让事情更简单,我想使用chef客户端模式,而不是其他模式和chef zero。目前看来我无法更改运行列表。在chef客户端模式下,它已经被预填充。虽然命令似乎不言自明,但我无法让它们工作:
chef>cookbooks.transform ArgumentError:from/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.2/lib/chef/shell/model_wrapper.rb:62:in
transform'from(irb):9 ... chef>cookbooks.transform'ntp'Net::HTTPServerException:404“找不到对象”来自/opt/chef/embedded/lib/ruby/1.9.1/Net/http.rb:2633:in
error!'。。。chef>cookbooks('ntp')。transform
如果您想在缓存one上工作,请使用chef zero模式,缓存为repo,我不能确保我是正确的,但我非常确定一个
-o cookbook
作为参数就可以了。我会在明天的工作中查看你的问题,但是如果你能将你的问题与你的愿望和你尝试过的帽子联系起来,那么对未来的读者来说,这将比一堆评论更好。谢谢Tensibai,-o得到chef client的支持,而不是chef shell的支持