summaryrefslogtreecommitdiffstats
path: root/puppet-host-package
diff options
context:
space:
mode:
authorTodd Zullinger <tmz@pobox.com>2008-11-25 11:02:33 -0500
committerTodd Zullinger <tmz@pobox.com>2008-11-25 17:39:29 -0500
commite1de241f356a87ff8ca99aafba99f5bbcd5d5323 (patch)
tree56ea677b71adb735eb5cb54a53a66338a7a9464e /puppet-host-package
downloadpuppet-host-package-e1de241f356a87ff8ca99aafba99f5bbcd5d5323.tar.gz
puppet-host-package-e1de241f356a87ff8ca99aafba99f5bbcd5d5323.tar.xz
puppet-host-package-e1de241f356a87ff8ca99aafba99f5bbcd5d5323.zip
Initial commit for puppet host package tool
Diffstat (limited to 'puppet-host-package')
-rwxr-xr-xpuppet-host-package80
1 files changed, 80 insertions, 0 deletions
diff --git a/puppet-host-package b/puppet-host-package
new file mode 100755
index 0000000..1914dc3
--- /dev/null
+++ b/puppet-host-package
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+"""Create a host package for bootstrapping a puppet client."""
+
+import os
+import glob
+import optparse
+import puppethost
+
+usage = '%prog [options] hostname [hostname ...]'
+parser = optparse.OptionParser(usage=usage)
+parser.defaults = puppethost.defaults
+parser.add_option('-a', '--all', dest='allcerts', action='store_true',
+ help='Create packages for all signed certificates')
+parser.add_option('-d', '--domain', dest='domain',
+ help='Domain append to non fqdn hostnames [%default]')
+parser.add_option('-f', '--force', dest='force', action='store_true',
+ help='Overwrite existing certs, tarballs, and/or packages')
+parser.add_option('--force-cert', dest='force_cert', action='store_true',
+ help='Overwrite existing certs')
+parser.add_option('--force-tarball', dest='force_tarball', action='store_true',
+ help='Overwrite existing tarballs')
+parser.add_option('--force-package', dest='force_package', action='store_true',
+ help='Overwrite existing packages')
+parser.add_option('-r', '--rpmdir', dest='rpmdir', metavar='dir',
+ help='Directory where packages are stored [%default]')
+parser.add_option('--release', dest='release', metavar='num',
+ help='Package release number [%default]')
+parser.add_option('-s', '--ssldir', dest='ssldir', metavar='dir',
+ help='Directory where ssl certs are stored [%default]')
+# FIXME improve the help string
+parser.add_option('-S', '--dest-ssldir', dest='destssldir', metavar='dir',
+ help='Directory where ssl certs are packaged')
+parser.add_option('-t', '--template', dest='template', metavar='file',
+ help='RPM spec file template [%default]')
+opts, args = parser.parse_args()
+
+if opts.force:
+ opts.force_cert = True
+ opts.force_tarball = True
+ opts.force_package = True
+
+opts.rpmdir = os.path.abspath(opts.rpmdir)
+opts.ssldir = os.path.abspath(opts.ssldir)
+if not opts.destssldir:
+ opts.destssldir = opts.ssldir
+
+if opts.allcerts:
+ args = []
+ for cert in glob.glob('%s/ca/signed/*.pem' % opts.ssldir):
+ basename = os.path.basename(cert)
+ # we need the private key as well as the cert
+ if os.path.exists('%s/private_keys/%s' % (opts.ssldir, basename)):
+ args.append(os.path.splitext(basename)[0])
+ args.sort()
+
+if not args:
+ raise SystemExit(parser.print_usage())
+
+for d in [opts.rpmdir, opts.ssldir]:
+ if not os.path.isdir(d):
+ raise SystemExit('%s does not exist (or is not a directory)' % d)
+
+if not os.path.isfile(opts.template):
+ raise SystemExit('Template file (%s) does not exist' % opts.template)
+
+for hostname in args:
+ client = puppethost.PuppetHost(hostname, opts.__dict__)
+
+ cert = client.files['cert']
+
+ if not os.path.exists(cert) or opts.force_cert:
+ try: client.gencert()
+ except puppethost.PuppetHostError, error:
+ print error
+ continue
+
+ try: client.package()
+ except Exception, error:
+ print error
+ continue