[chef] Re: Re: Re: Re: chef and ruby scripts


Chronological Thread 
  • From: Mike < >
  • To: " " < >
  • Subject: [chef] Re: Re: Re: Re: chef and ruby scripts
  • Date: Sun, 10 Nov 2013 22:29:59 -0500

Jasna,

If you want to explore the Chef library code, there's a bunch of ways to do that, like using pry gem [1]

$ pry
[1] pry(main)> require 'chef'
=> true
[2] pry(main)> ls Chef
constants:
  ApiClient      Client                CookbookLoader        DataBag               EventDispatch      Handler                 Mixin               Provider            ResourceDefinitionList  RunList            ShellOut           WebUIUser
  Certificate    Config                CookbookSynchronizer  DataBagItem           Exceptions         IndexQueue              NIL_ARGUMENT        Recipe              ResourceReporter        Runner             Util
  Checksum       Cookbook              CookbookVersion       DelayedEvaluator      FileAccessControl  JSONCompat              Node                Resource            REST                    RunStatus          VERSION
  ChecksumCache  CookbookCacheCleaner  CouchDB               EncryptedDataBagItem  FileCache          Log                     OpenIDRegistration  ResourceCollection  Role                    ScanAccessControl  Version
  CHEF_ROOT      CookbookCollection    Daemon                Environment           Formatters         MinimalCookbookVersion  Platform            ResourceDefinition  RunContext              Search             VersionConstraint
Object.methods: yaml_tag
[3] pry(main)>

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.

YYMV,
-Mike



On Thu, Nov 7, 2013 at 12:12 PM, Daniel DeLeo < " target="_blank"> > 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")
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 want: http://docs.opscode.com/knife_exec.html

-- 
Daniel DeLeo





Archive powered by MHonArc 2.6.16.

§