diff options
author | Todd Zullinger <tmz@pobox.com> | 2008-11-25 11:02:33 -0500 |
---|---|---|
committer | Todd Zullinger <tmz@pobox.com> | 2008-11-25 17:39:29 -0500 |
commit | e1de241f356a87ff8ca99aafba99f5bbcd5d5323 (patch) | |
tree | 56ea677b71adb735eb5cb54a53a66338a7a9464e /puppet-host-package | |
download | puppet-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-x | puppet-host-package | 80 |
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 |