lib/chef/fork/commands/role.rb in chef-fork-0.1.1 vs lib/chef/fork/commands/role.rb in chef-fork-0.1.2
- old
+ new
@@ -1,39 +1,71 @@
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require "chef/fork/commands"
+require "chef/role"
+require "json"
class Chef
class Fork
module Commands
class Role < Noop
def run(args=[])
rest = optparse.order(args)
case rest.first
+ when "edit"
+ role_edit(rest.slice(1..-1) || [])
when "from"
role_from(rest.slice(1..-1) || [])
+ when "list"
+ role_list(rest.slice(1..-1) || [])
when "show"
role_show(rest.slice(1..-1) || [])
+ when "upload"
+ role_upload(rest.slice(1..-1) || [])
else
raise(NameError.new(rest.inspect))
end
end
+ private
+ def role_edit(args=[])
+ raise(NotImplementedError.new(args.inspect))
+ end
+
def role_from(args=[])
case args.shift
when "file"
rome_from_file(args.slice(1..-1))
else
raise(NameError.new(args.inspect))
end
end
def role_from_file(args=[])
+ role_upload(args)
+ end
+
+ def role_list(args=[])
raise(NotImplementedError.new(args.inspect))
end
def role_show(args=[])
+ args.each do |role_name|
+ role = Chef::Role.load(role_name)
+ STDOUT.puts(JSON.pretty_generate(role_to_hash(role.to_hash())))
+ end
+ end
+
+ def role_upload(args=[])
+ role_paths = [ Chef::Config[:role_path] ].flatten
+ args.each do |role_name|
+ candidates = role_paths.map { |path| File.join(path, "#{role_name}.rb") }
+ if file = candidates.select { |candidate| File.exist?(candidate) }.first
+ role = Chef::Role.from_disk(role_name)
+ p(role) # TODO: do upload
+ end
+ end
raise(NotImplementedError.new(args.inspect))
end
end
end
end