summaryrefslogtreecommitdiffstats
path: root/bin/filebucket
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-24 21:17:37 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-24 21:17:37 +0000
commit33f4a66a4ead50a570bd5eeeb97087829f84e132 (patch)
tree575008be186b4e3c475652f3ed72fb99b3d1e925 /bin/filebucket
parent52df47e489d390be9b466da3ef16c2379b9dddba (diff)
downloadpuppet-33f4a66a4ead50a570bd5eeeb97087829f84e132.tar.gz
puppet-33f4a66a4ead50a570bd5eeeb97087829f84e132.tar.xz
puppet-33f4a66a4ead50a570bd5eeeb97087829f84e132.zip
Renaming pbucket to filebucket
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2349 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'bin/filebucket')
-rwxr-xr-xbin/filebucket214
1 files changed, 214 insertions, 0 deletions
diff --git a/bin/filebucket b/bin/filebucket
new file mode 100755
index 000000000..21d92cf4b
--- /dev/null
+++ b/bin/filebucket
@@ -0,0 +1,214 @@
+#!/usr/bin/env ruby
+
+#
+# = Synopsis
+#
+# A stand-alone Puppet filebucket client.
+#
+# = Usage
+#
+# pbucket [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose]
+# [-l|--local] [-r|--remote]
+# [-s|--server <server>] [-b|--bucket <directory>] <file> <file> ...
+#
+# = Description
+#
+# This is a stand-alone filebucket client for sending files to a local
+# or central filebucket.
+#
+# = Usage
+#
+# This client can operate in three modes, with only one mode per call:
+#
+# backup::
+# Send one or more files to the specified file bucket. Each sent file
+# is printed with its resulting md5 sum.
+#
+# get::
+# Return the text associated with an md5 sum. The text is printed to
+# stdout, and only one file can be retrieved at a time.
+#
+# restore::
+# Given a file path and an md5 sum, store the content associated with the
+# sum into the specified file path. You can specify an entirely new path
+# to this argument; you are not restricted to restoring the content to its
+# original location.
+#
+# Note that +pbucket+ defaults to using a network-based filebucket available on
+# the server named +puppet+. To use this, you'll have to be running as a user
+# with valid Puppet certificates. Alternatively, you can use your local file bucket
+# by specifying +--local+.
+#
+# = Example
+#
+# $ pbucket backup /etc/passwd
+# /etc/passwd: 429b225650b912a2ee067b0a4cf1e949
+# $ pbucket restore /tmp/passwd 429b225650b912a2ee067b0a4cf1e949
+# $
+#
+# = 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.
+#
+# help::
+# Print this help message
+#
+# local::
+# Use the local filebucket. This will use the default configuration
+# information.
+#
+# remote::
+# Use a remote filebucket. This will use the default configuration
+# information.
+#
+# server::
+# The server to send the file to, instead of locally.
+#
+# verbose::
+# Print extra information.
+#
+# version::
+# Print version information.
+#
+# = Example
+#
+# pbucket -b /tmp/filebucket /my/file
+#
+# = Author
+#
+# Luke Kanies
+#
+# = Copyright
+#
+# Copyright (c) 2005 Reductive Labs, LLC
+# Licensed under the GNU Public License
+
+require 'puppet'
+require 'puppet/network/client'
+require 'getoptlong'
+
+options = [
+ [ "--bucket", "-b", GetoptLong::REQUIRED_ARGUMENT ],
+ [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],
+ [ "--help", "-h", GetoptLong::NO_ARGUMENT ],
+ [ "--local", "-l", GetoptLong::NO_ARGUMENT ],
+ [ "--remote", "-r", GetoptLong::NO_ARGUMENT ],
+ [ "--verbose", "-v", GetoptLong::NO_ARGUMENT ],
+ [ "--version", "-V", GetoptLong::NO_ARGUMENT ]
+]
+
+# Add all of the config parameters as valid options.
+Puppet.config.addargs(options)
+
+result = GetoptLong.new(*options)
+
+options = {}
+
+begin
+ result.each { |opt,arg|
+ case opt
+ when "--version"
+ puts "%s" % Puppet.version
+ exit
+ when "--help"
+ if Puppet.features.usage?
+ RDoc::usage && exit
+ else
+ puts "No help available unless you have RDoc::usage installed"
+ exit
+ end
+ when "--bucket"
+ options[:bucket] = arg
+ when "--verbose"
+ options[:verbose] = true
+ when "--debug"
+ options[:debug] = true
+ when "--local"
+ options[:local] = true
+ when "--remote"
+ options[:remote] = true
+ else
+ Puppet.config.handlearg(opt, arg)
+ end
+ }
+rescue GetoptLong::InvalidOption => detail
+ $stderr.puts "Try '#{$0} --help'"
+ exit(1)
+end
+
+Puppet::Log.newdestination(:console)
+
+client = nil
+server = nil
+
+Puppet.settraps
+
+if options[:debug]
+ Puppet::Log.level = :debug
+elsif options[:verbose]
+ Puppet::Log.level = :info
+end
+
+# Now parse the config
+if Puppet[:config] and File.exists? Puppet[:config]
+ Puppet.config.parse(Puppet[:config])
+end
+
+Puppet.genconfig
+Puppet.genmanifest
+
+begin
+ if options[:local] or options[:bucket]
+ path = options[:bucket] || Puppet[:bucketdir]
+ client = Puppet::Network::Client.dipper.new(:Path => path)
+ else
+ require 'puppet/network/handler'
+ client = Puppet::Network::Client.dipper.new(:Server => Puppet[:server])
+ end
+rescue => detail
+ $stderr.puts detail
+ if Puppet[:trace]
+ puts detail.backtrace
+ end
+ exit(1)
+end
+
+mode = ARGV.shift
+case mode
+when "get":
+ md5 = ARGV.shift
+ out = client.getfile(md5)
+ print out
+when "backup":
+ ARGV.each do |file|
+ unless FileTest.exists?(file)
+ $stderr.puts "%s: no such file" % file
+ next
+ end
+ unless FileTest.readable?(file)
+ $stderr.puts "%s: cannot read file" % file
+ next
+ end
+ md5 = client.backup(file)
+ puts "%s: %s" % [file, md5]
+ end
+when "restore":
+ file = ARGV.shift
+ md5 = ARGV.shift
+ client.restore(file, md5)
+else
+ raise "Invalid mode %s" % mode
+end
+
+# $Id$