diff options
Diffstat (limited to 'puppethost.py')
-rw-r--r-- | puppethost.py | 43 |
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""" |