diff options
author | Todd Zullinger <tmz@pobox.com> | 2014-04-02 17:41:18 -0400 |
---|---|---|
committer | Todd Zullinger <tmz@pobox.com> | 2014-04-02 17:41:18 -0400 |
commit | 5f5282b2dbcb4653b2b4e6d21eadfd5cdfacb833 (patch) | |
tree | acd64d2bfabca93acc63df609628969e80a94fd4 | |
parent | e0d9ca89b78f7b0d76e8d6e6d6678f854096d889 (diff) | |
download | puppet-host-package-5f5282b2dbcb4653b2b4e6d21eadfd5cdfacb833.tar.gz puppet-host-package-5f5282b2dbcb4653b2b4e6d21eadfd5cdfacb833.tar.xz puppet-host-package-5f5282b2dbcb4653b2b4e6d21eadfd5cdfacb833.zip |
Add --package-type option and allow tar to be used
For systems we don't support with proper OS packages, a tarball is
better than nothing. We already generate one, this just allows us to
save it rather than remove it as part of the cleanup process.
RPM remains the default package type.
-rwxr-xr-x | puppet-host-package | 2 | ||||
-rw-r--r-- | puppethost.py | 36 |
2 files changed, 26 insertions, 12 deletions
diff --git a/puppet-host-package b/puppet-host-package index 60ef9d1..56b0f32 100755 --- a/puppet-host-package +++ b/puppet-host-package @@ -55,6 +55,8 @@ def _main(): help='RPM spec file template [%default]') parser.add_option('-v', '--verbose', dest='verbose', action='count', help='Be verbose (may be used more than once)') + parser.add_option('--package-type', + help='Package type (%s) [%s]' % (', '.join(sorted(puppethost.package_types)), '%default')) opts, args = parser.parse_args() if opts.force: diff --git a/puppethost.py b/puppethost.py index 793cd5f..1a9323a 100644 --- a/puppethost.py +++ b/puppethost.py @@ -39,6 +39,7 @@ defaults = { 'sign': True, 'ssldir': '/etc/puppet/ssl', 'template': '%(ssldir)s/template.spec', + 'package_type': 'rpm', 'pkgprefix': 'host-package-', 'puppetuser': 'puppet', 'verbose': 1, @@ -67,7 +68,7 @@ for config in configs: except: defaults[opt] = 0 -package_types = ['deb', 'rpm'] +package_types = ['deb', 'rpm', 'tar'] def sign(packages, key=''): """Sign packages.""" @@ -149,15 +150,16 @@ class PuppetHost(object): self._version = time.strftime(self.datefmt) - def package(self, packages = ['rpm']): - """Create packages in requested format.""" - for package in packages: - if package not in package_types or not hasattr(self, package): - raise PuppetHostError('Bogus package type: %s' % package) - try: getattr(self, package)() - except Exception, error: - print error - continue + def package(self, ptype = None): + """Create a package in the requested format.""" + if ptype is None: + ptype = self.opts['package_type'] + if ptype not in package_types or not hasattr(self, ptype): + raise PuppetHostError('Bogus package type: %s' % ptype) + try: + getattr(self, ptype)() + except Exception, error: + print error def deb(self): """Create a .deb package.""" @@ -168,7 +170,8 @@ class PuppetHost(object): self._check_files() name = '%s%s-%s' % (self.opts['pkgprefix'], self.hostname, self.version) - tarball = '%s/%s.tar.gz' % (self.tmpdir, name) + destdir = self.opts['package_type'] == 'tar' and self.opts['destdir'] or self.tmpdir + tarball = '%s/%s.tar.gz' % (destdir, name) if os.path.exists(tarball) and not self.opts['force_tarball']: raise PuppetHostError('%s exists, not overwriting' % tarball) @@ -179,12 +182,21 @@ class PuppetHost(object): tar = tarfile.open(tarball, 'w:gz') tar.dereference = True + # Add the ssldir tarball if tar is the package type + if self.opts['package_type'] == 'tar': + tar.add(self.opts['ssldir'], recursive=False) for f in sorted(self.files.values()): - arcname = '%s%s' % (name, f.replace(self.opts['ssldir'], '')) + arcname = None + # Adjust the path in the archive if tar is not the package type + if self.opts['package_type'] != 'tar': + arcname = '%s%s' % (name, f.replace(self.opts['ssldir'], '')) tar.add(f, arcname) tar.close() self.tarball = tarball + if self.opts['package_type'] == 'tar': + self.packages.append(('tar', tarball)) + if self.opts['verbose']: print 'done' |