Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A ruby script to create a whole bunch of chef nodes.
#!/usr/bin/env ruby
require 'chef-api'
require 'fauxhai'
include ChefAPI::Resource
ChefAPI.configure do |config|
config.endpoint = 'http://HOSTNAME:4545'
config.client = 'admin'
config.key = '~/etc/goiardi/admin.pem'
end
datacenters = [ { :city => "Vagrantheim", :cluster => "VAG", :name => "VAG", :region => "US-West" }, { :city => "San Jose", :cluster => "SJC", :name => "SJC", :region => "US-California" }, { :city => "McMurdo", :cluster => "MCM", :name => "MCM", :region => "Antarctica" } ]
run_lists = [ "recipe[datacenter::vagrant]", "role[foo]", "recipe[scout],recipe[bnerk]", "role[foo],recipe[scout]" ]
pkeys = [ "debian", "ubuntu", "centos" ]
platforms = {
"debian" => [
"6.0.5", "7.5", "7.8"
],
"ubuntu" => [
"12.04", "14.04", "10.04"
],
"centos" => [
"5.9", "6.6", "7.0"
]
}
(100..10000).each do |x|
p = rand(3)
v = rand(3)
auto = Fauxhai.mock(platform: pkeys[p], version: platforms[pkeys[p]][v]) do |node|
node['hostname'] = "server#{x}.example.com"
end
n = Node.new
n.name = "server#{x}.example.com"
n.automatic = auto.data
ds = rand(3)
rl = rand(4)
n.default['datacenter'] = datacenters[ds]
n.run_list = run_lists[rl].split(/,/)
n.save
Client.create(:name => n.name)
end
@ranjib

This comment has been minimized.

Show comment
Hide comment
@ranjib

ranjib Jul 3, 2015

without chef-api

# configure 
Chef::Config.from_file('/path/to/knife.rb')
# or
Chef::Config[:node_name] = 'foo'
Chef::Config[:client_key] = '/path/to/key.pem'
Chef::Config[:chef_server_url] = 'https://foo.bar.com'


# create node object
n = Chef::Node.new
n.name('aha')
n.chef_environment("test-environment")
n.run_list << 'role[foo]'

# inject fauxhai data
n.consume_external_attrs(Fauxhai.mock(platform: 'ubuntu', version: '14.04').data,  {})

# save the node 
n.save

note.. unless you need to populate the node in chef server, you wont need save and configure related code

ranjib commented Jul 3, 2015

without chef-api

# configure 
Chef::Config.from_file('/path/to/knife.rb')
# or
Chef::Config[:node_name] = 'foo'
Chef::Config[:client_key] = '/path/to/key.pem'
Chef::Config[:chef_server_url] = 'https://foo.bar.com'


# create node object
n = Chef::Node.new
n.name('aha')
n.chef_environment("test-environment")
n.run_list << 'role[foo]'

# inject fauxhai data
n.consume_external_attrs(Fauxhai.mock(platform: 'ubuntu', version: '14.04').data,  {})

# save the node 
n.save

note.. unless you need to populate the node in chef server, you wont need save and configure related code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment