summaryrefslogtreecommitdiffstats
path: root/puppethost.py
diff options
context:
space:
mode:
Diffstat (limited to 'puppethost.py')
-rw-r--r--puppethost.py43
1 files changed, 37 insertions, 6 deletions
diff --git a/puppethost.py b/puppethost.py
index 9842fbd..7f4204e 100644
--- a/puppethost.py
+++ b/puppethost.py
@@ -36,6 +36,7 @@ defaults = {
'force_package': False,
'release': '1',
'rpmdir': os.path.abspath(os.curdir),
+ 'sign': True,
'ssldir': '/etc/puppet/ssl',
'template': '%(ssldir)s/template.spec',
'verbose': 1,
@@ -66,6 +67,37 @@ if os.path.exists(config):
package_types = ['deb', 'rpm']
+def sign(packages, key='', verbose=defaults['verbose']):
+ for type in package_types:
+ pkgs = [p for t,p in packages if t == type]
+ if not pkgs:
+ continue
+ try:
+ sign_func = getattr(sys.modules[__name__], '_' + type + 'sign')
+ except AttributeError:
+ raise NotImplementedError(
+ 'Signing of %s packages is not implemented' % type)
+ sign_func(pkgs, key)
+
+def _rpmsign(rpms, key='', tries=3):
+ cmd = 'rpm --addsign'
+ if key:
+ cmd = cmd + ' --define "_gpg_name %s"' % key
+ cmd += ' ' + ' '.join(rpms)
+ while tries:
+ tries -= 1
+ status, output = commands.getstatusoutput(cmd)
+ if status:
+ if tries:
+ print 'Error signing rpms:\n', output
+ print 'Try again (%d left)' % tries
+ continue
+ raise PuppetHostError('Error signing rpms:\n%s' % output)
+ else:
+ print 'Sucessfully signed %d rpm(s)' % len(rpms)
+ break
+ return True
+
class PuppetHostError(StandardError):
pass
@@ -83,9 +115,8 @@ class PuppetHost(object):
self.opts = opts
self.datefmt = '%Y%m%d'
- self.debfile = ''
- self.rpmfile = ''
- self.tarfile = ''
+ self.packages = []
+ self.tarball = ''
self._version = ''
def gencert(self):
@@ -146,7 +177,7 @@ class PuppetHost(object):
arcname = '%s%s' % (name, f.replace(self.opts['ssldir'], ''))
tar.add(f, arcname)
tar.close()
- self.tarfile = tarball
+ self.tarball = tarball
if self.opts['verbose']:
print 'done'
@@ -156,7 +187,7 @@ class PuppetHost(object):
rpmdir = self.opts['rpmdir']
tmpdir = tempfile.mkdtemp('', 'puppet-host-')
- if not self.tarfile or not os.path.exists(self.tarfile):
+ if not self.tarball or not os.path.exists(self.tarball):
try: self.tar(tmpdir)
except:
self._cleanup(tmpdir)
@@ -204,7 +235,7 @@ class PuppetHost(object):
print 'done'
self._cleanup(tmpdir)
- self.rpmfile = rpm
+ self.packages.append(('rpm', rpm))
def _check_files(self):
"""Check for the files we care about"""