70 lines
1.4 KiB
Ruby
70 lines
1.4 KiB
Ruby
|
|
require "json"
|
||
|
|
|
||
|
|
class KnifeCommands
|
||
|
|
|
||
|
|
def self.chef_node_list
|
||
|
|
knife("node list")[0].split.map{|c| c.strip}
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.chef_client_list
|
||
|
|
knife("client list")[0].split.map{|c| c.strip}
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.chef_node_delete name
|
||
|
|
o = knife("node delete #{name} -y")[0]
|
||
|
|
(o.nil? ? o : o.strip)
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.chef_client_delete name
|
||
|
|
o = knife("client delete #{name} -y")[0]
|
||
|
|
(o.nil? ? o : o.strip)
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.tags_list name
|
||
|
|
knife("tag list #{name}")[0].split.map{|c| c.strip}
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.tags_create name, tagsStr
|
||
|
|
knife("tag create #{name} #{tagsStr}")
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.tags_delete name, tagsStr
|
||
|
|
knife("tag delete #{name} #{tagsStr}")
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.create_role project, env
|
||
|
|
file = "/tmp/new_role.json"
|
||
|
|
File.open(file, "w") do |f|
|
||
|
|
f.puts <<-EOH
|
||
|
|
{
|
||
|
|
"name" : "#{project}_#{env}",
|
||
|
|
"description": "",
|
||
|
|
"json_class": "Chef::Role",
|
||
|
|
"default_attributes": {
|
||
|
|
"project": "#{project}",
|
||
|
|
"env": "#{env}"
|
||
|
|
},
|
||
|
|
"override_attributes": {},
|
||
|
|
"chef_type": "role",
|
||
|
|
"run_list": [],
|
||
|
|
"env_run_lists": {}
|
||
|
|
}
|
||
|
|
EOH
|
||
|
|
end
|
||
|
|
out = `knife role from file #{file}`
|
||
|
|
raise "Cannot create role '#{project}_#{env}': #{out}" unless $?.success?
|
||
|
|
true
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.roles
|
||
|
|
o, s = knife("role list --format json")
|
||
|
|
return (s ? JSON.parse(o) : nil)
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.knife cmd
|
||
|
|
o = `knife #{cmd} 2>&1`
|
||
|
|
return o, $?.success?
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|