summaryrefslogtreecommitdiffstats
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
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.
-rwxr-xr-xpuppet-host-package2
-rw-r--r--puppethost.py36
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'