Updating ralsh with more functionality: You can now perform work on the command line, with commands like "sudo ralsh file /etc/passwd ensure=absent". This makes ralsh a bit more interactive.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2573 980ebf18-57e1-0310-9a29-db15c13687c0
This commit is contained in:
Родитель
cb5bccc8bb
Коммит
ef2698c316
75
bin/ralsh
75
bin/ralsh
|
@ -7,7 +7,8 @@
|
|||
#
|
||||
# = Usage
|
||||
#
|
||||
# ralsh [-h|--help] [-e|--edit] [-H|--host <host>] [-p|--param <param>] [-t|--types] type <name>
|
||||
# ralsh [-h|--help] [-d|--debug] [-v|--verbose] [-e|--edit] [-H|--host <host>]
|
||||
# [-p|--param <param>] [-t|--types] type <name>
|
||||
#
|
||||
# = Description
|
||||
#
|
||||
|
@ -27,6 +28,19 @@
|
|||
#
|
||||
# = Options
|
||||
#
|
||||
# Note that any configuration parameter that's valid in the configuration file
|
||||
# is also a valid long argument. For example, 'ssldir' is a valid configuration
|
||||
# parameter, so you can specify '--ssldir <directory>' as an argument.
|
||||
#
|
||||
# See the configuration file documentation at
|
||||
# http://reductivelabs.com/projects/puppet/reference/configref.html for
|
||||
# the full list of acceptable parameters. A commented list of all
|
||||
# configuration options can also be generated by running puppet with
|
||||
# '--genconfig'.
|
||||
#
|
||||
# debug::
|
||||
# Enable full debugging.
|
||||
#
|
||||
# edit:
|
||||
# Write the results of the query to a file, open the file in an editor,
|
||||
# and read the file back in as an executable Puppet manifest.
|
||||
|
@ -44,6 +58,9 @@
|
|||
# types:
|
||||
# List all available types.
|
||||
#
|
||||
# verbose::
|
||||
# Print extra information.
|
||||
#
|
||||
# = Example
|
||||
#
|
||||
# $ ralsh user luke
|
||||
|
@ -72,6 +89,8 @@ require 'getoptlong'
|
|||
require 'puppet'
|
||||
|
||||
options = [
|
||||
[ "--debug", "-d", GetoptLong::NO_ARGUMENT ],
|
||||
[ "--verbose", "-v", GetoptLong::NO_ARGUMENT ],
|
||||
[ "--types", "-t", GetoptLong::NO_ARGUMENT ],
|
||||
[ "--param", "-p", GetoptLong::REQUIRED_ARGUMENT ],
|
||||
[ "--host", "-H", GetoptLong::REQUIRED_ARGUMENT ],
|
||||
|
@ -84,6 +103,8 @@ Puppet.config.addargs(options)
|
|||
|
||||
result = GetoptLong.new(*options)
|
||||
|
||||
debug = false
|
||||
verbose = false
|
||||
edit = false
|
||||
extra_params = []
|
||||
host = nil
|
||||
|
@ -112,11 +133,28 @@ result.each { |opt,arg|
|
|||
puts "install RDoc:usage for help"
|
||||
end
|
||||
exit
|
||||
when "--verbose"
|
||||
verbose = true
|
||||
when "--debug"
|
||||
debug = true
|
||||
else
|
||||
# Anything else is handled by the config stuff
|
||||
Puppet.config.handlearg(opt, arg)
|
||||
end
|
||||
}
|
||||
|
||||
Puppet::Util::Log.newdestination(:console)
|
||||
|
||||
# Now parse the config
|
||||
Puppet.parse_config
|
||||
|
||||
if debug
|
||||
Puppet::Util::Log.level = :debug
|
||||
elsif verbose
|
||||
Puppet::Util::Log.level = :info
|
||||
end
|
||||
|
||||
|
||||
if ARGV.length > 0
|
||||
type = ARGV.shift
|
||||
else
|
||||
|
@ -124,17 +162,25 @@ else
|
|||
end
|
||||
|
||||
name = nil
|
||||
params = {}
|
||||
if ARGV.length > 0
|
||||
name = ARGV.shift
|
||||
end
|
||||
|
||||
if ARGV.length > 0
|
||||
ARGV.each do |setting|
|
||||
if setting =~ /^(\w+)=(.+)$/
|
||||
params[$1] = $2
|
||||
else
|
||||
raise "Invalid parameter setting %s" % setting
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if edit and host
|
||||
raise "You cannot edit a remote host"
|
||||
end
|
||||
|
||||
# Now parse the config
|
||||
Puppet.parse_config
|
||||
|
||||
typeobj = nil
|
||||
|
||||
unless typeobj = Puppet::Type.type(type)
|
||||
|
@ -167,7 +213,7 @@ text = if host
|
|||
transbucket = [client.describe(type, name)]
|
||||
else
|
||||
# Else, list the whole thing out.
|
||||
transbucket = client.list(type)
|
||||
transbucket = client.instances(type)
|
||||
end
|
||||
rescue Puppet::Network::XMLRPCClientError => exc
|
||||
raise "client.list(#{type}) failed: #{exc.message}"
|
||||
|
@ -177,9 +223,26 @@ else
|
|||
if name
|
||||
obj = typeobj.create(:name => name, :check => properties)
|
||||
vals = obj.retrieve
|
||||
|
||||
unless params.empty?
|
||||
params.each do |param, value|
|
||||
obj[param] = value
|
||||
end
|
||||
comp = Puppet::Type.type(:component).create(:name => "ralsh")
|
||||
comp.push(obj)
|
||||
transaction = comp.evaluate
|
||||
begin
|
||||
transaction.evaluate
|
||||
rescue => detail
|
||||
if Puppet[:trace]
|
||||
puts detail.backtrace
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
[format.call(obj.to_trans(true))]
|
||||
else
|
||||
typeobj.list.collect do |obj|
|
||||
typeobj.instances.collect do |obj|
|
||||
next if ARGV.length > 0 and ! ARGV.include? obj.name
|
||||
trans = obj.to_trans(true)
|
||||
format.call(trans)
|
||||
|
|
Загрузка…
Ссылка в новой задаче