Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Consuming Chef API from Any Script - Part 1

DZone's Guide to

Consuming Chef API from Any Script - Part 1

· DevOps Zone
Free Resource

Download “The DevOps Journey - From Waterfall to Continuous Delivery” to learn learn about the importance of integrating automated testing into the DevOps workflow, brought to you in partnership with Sauce Labs.

Its been more than a year since we have adopted Chef for ThoughtWorks. We use Chef not only for configuration management but also for provisioning instances.  Since most of our infrastructure is automated many of the services needs to integrate with chef programmatically.

Knife, the command line interface of chef provides easy integration via knife plugin and Knife exec. But in this post I’ll showcase how Chef can be used from any script if you have an API client configured. At bare minimum we need to set three parameters to get our script talking to a Chef server, these are Chef server url, node_name and client key. Once configured we can use Chef API to interact with chef server. Lets start with enlisting the number of nodes

require 'rubygems'
require 'chef'  

Chef::Config[:node_name]='client_name'
Chef::Config[:client_key]='path to client cert.pem'
Chef::Config[:chef_server_url]="http://ur chef server:4000"     

Chef::Node.list.each do |node|  
    puts node.first      
end

Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure, brought to you in partnership with Sauce Labs

Topics:

Published at DZone with permission of Ranjib Dey, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}