If you want to explore the Chef library code, there’s a bunch of ways to do
that, like using pry gem 1
1 pry(main)> require ‘chef’
2 pry(main)> ls Chef
ApiClient Client CookbookLoader DataBag
EventDispatch Handler Mixin
Provider ResourceDefinitionList RunList ShellOut
Certificate Config CookbookSynchronizer DataBagItem
Exceptions IndexQueue NIL_ARGUMENT
Recipe ResourceReporter Runner Util
Checksum Cookbook CookbookVersion
DelayedEvaluator FileAccessControl JSONCompat Node
Resource REST RunStatus
ChecksumCache CookbookCacheCleaner CouchDB
EncryptedDataBagItem FileCache Log
OpenIDRegistration ResourceCollection Role
CHEF_ROOT CookbookCollection Daemon Environment
Formatters MinimalCookbookVersion Platform
ResourceDefinition RunContext Search
There’s a ton of ways to use this to explore the code.
You can also hit up the RubyDoc page 2 for Chef, and see the generated
documentation from the code.
A lot depends on what you’re looking to do - interact with the local
filesystem, or the Chef Server, etc.
There’s plenty of recommendations around, and if you’re looking to use
knife-specific interactions, they’d be in Chef::Knife, however from the
behavior you’ve described in the snippet, you might want to perform other
interactions with the Chef Server API.
On Thu, Nov 7, 2013 at 12:12 PM, Daniel DeLeo firstname.lastname@example.org wrote:
On Wednesday, November 6, 2013 at 1:08 AM, Jasna Benčić wrote:
Looks handy but not quite what I’m looking for
I was looking for something that looks like the snippet below… Where
can I find what is inside Chef:: and that syntax? Below you see Config and
Knife and Internet is very cheap with this kind of results
require(“chef/knife”)Chef::Config.from_file(knifePath) #knifePath is declared a priori
cookbooks = Chef::Knife.run([“cookbook”, “list”])
puts(cookbooks) # => nil
The code in knife commands is optimized for being a command line utility.
This means that many of the methods will not have useful return values,
they’ll print output to the terminal instead, and they might call exit at
any time. So I would recommend against trying to use knife commands
directly within a script, since they do things that library code should not
do. One exception is if you simply want to string a handful of commands
together one after the other.
Knife includes the
exec command which is a way to execute scripts with
all of your knife configuration already loaded and with some helper
functions included into the root context. This might be closer to what you