summaryrefslogtreecommitdiffstats
path: root/puppethost.py
diff options
context:
space:
mode:
authorTodd Zullinger <tmz@pobox.com>2014-04-02 17:41:18 -0400
committerTodd Zullinger <tmz@pobox.com>2014-04-02 17:41:18 -0400
commit5f5282b2dbcb4653b2b4e6d21eadfd5cdfacb833 (patch)
treeacd64d2bfabca93acc63df609628969e80a94fd4 /puppethost.py
parente0d9ca89b78f7b0d76e8d6e6d6678f854096d889 (diff)
downloadpuppet-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.
Diffstat (limited to 'puppethost.py')
-rw-r--r--puppethost.py36
1 files changed, 24 insertions, 12 deletions
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'