Running knife bootstrap programatically


#1

Hi

I was wondering if there’s a way to run knife bootstrap not as a command,
but as API call? (Sorry if it’s already been answered but it’s really hard
to search the mailing list).

I tried using something simple like (ignore the redefinition of ARGV :):

require 'chef/knife/bootstrap’
ARGV = [“some.host”, “-x”, “ubuntu”, “-r”, “role[test]”, “–sudo”]
Chef::knife::Bootstrap.new.run

Running this I got an error:
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:
warning: toplevel constant Config referenced by Chef::Config
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:in
color?': undefined method[]’ for Config:Module (NoMethodError)
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:85:in
color' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:76:inerror’
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:158:in
validate_name_args!' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:137:inrun’
from test.rb:4

Is there any easy way to run it?

Thanks in advance

Haim


#2

Hi

The following code also raised the same error as in the original message:

require 'rubygems’
require ‘chef/knife/bootstrap’

kb = Chef::knife::Bootstrap.new
kb.name_args = "ec2-107-20-48-203.compute-1.amazonaws.com"
kb.config[:ssh_user] = "ubuntu"
kb.config[:run_list] = "role[test]"
kb.config[:use_sudo] = true
kb.run

:frowning:

Bye

On Wed, Aug 3, 2011 at 12:31 PM, Haim Ashkenazi haim.ashkenazi@gmail.comwrote:

Hi

I was wondering if there’s a way to run knife bootstrap not as a command,
but as API call? (Sorry if it’s already been answered but it’s really hard
to search the mailing list).

I tried using something simple like (ignore the redefinition of ARGV :):

require 'chef/knife/bootstrap’
ARGV = [“some.host”, “-x”, “ubuntu”, “-r”, “role[test]”, “–sudo”]
Chef::knife::Bootstrap.new.run

Running this I got an error:
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:
warning: toplevel constant Config referenced by Chef::Config
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:in
color?': undefined method[]’ for Config:Module (NoMethodError)
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:85:in
color' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:76:inerror’
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:158:in
validate_name_args!' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:137:inrun’
from test.rb:4

Is there any easy way to run it?

Thanks in advance

Haim


Haim


#3

Ok, solved! thanks to the great guys in the IRC channel. Here’s a way to run
it (if someone is interested):

require 'rubygems’
require "chef"
require "chef/knife/core/bootstrap_context"
require 'chef/knife’
require 'chef/knife/ssh’
require 'net/ssh’
require 'net/ssh/multi’
require ‘chef/knife/bootstrap’

Chef::Config.from_file(File.expand_path(’~/.chef/knife.rb’))
kb = Chef::knife::Bootstrap.new
kb.name_args = "some.host"
kb.config[:ssh_user] = "ubuntu"
kb.config[:run_list] = "role[test]"
kb.config[:use_sudo] = true
kb.run

Bye

On Wed, Aug 3, 2011 at 1:05 PM, Haim Ashkenazi haim.ashkenazi@gmail.comwrote:

Hi

The following code also raised the same error as in the original message:

require 'rubygems’
require ‘chef/knife/bootstrap’

kb = Chef::knife::Bootstrap.new
kb.name_args = "ec2-107-20-48-203.compute-1.amazonaws.com"
kb.config[:ssh_user] = "ubuntu"
kb.config[:run_list] = "role[test]"
kb.config[:use_sudo] = true
kb.run

:frowning:

Bye

On Wed, Aug 3, 2011 at 12:31 PM, Haim Ashkenazi haim.ashkenazi@gmail.comwrote:

Hi

I was wondering if there’s a way to run knife bootstrap not as a command,
but as API call? (Sorry if it’s already been answered but it’s really hard
to search the mailing list).

I tried using something simple like (ignore the redefinition of ARGV :):

require 'chef/knife/bootstrap’
ARGV = [“some.host”, “-x”, “ubuntu”, “-r”, “role[test]”, “–sudo”]
Chef::knife::Bootstrap.new.run

Running this I got an error:
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:
warning: toplevel constant Config referenced by Chef::Config
/Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:96:in
color?': undefined method[]’ for Config:Module (NoMethodError)
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:85:in
color' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/core/ui.rb:76:inerror’
from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:158:in
validate_name_args!' from /Users/haim/.rvm/gems/ruby-1.8.7-p352@chef_010/gems/chef-0.10.2/lib/chef/knife/bootstrap.rb:137:inrun’
from test.rb:4

Is there any easy way to run it?

Thanks in advance

Haim


Haim


Haim