From e910e23b8f7863dc389c6e55e3fcd1fd58e5a481 Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Sep 09 2019 09:10:05 +0000 Subject: Handle the ostree-sign CoreOS message Signed-off-by: Aurélien Bompard --- diff --git a/robosignatory.toml b/robosignatory.toml index c2c4cab..98a39a6 100644 --- a/robosignatory.toml +++ b/robosignatory.toml @@ -19,6 +19,7 @@ exchange = "amq.topic" routing_keys = [ "org.fedoraproject.*.pungi.compose.ostree", "org.fedoraproject.*.coreos.build.request.artifacts-sign", + "org.fedoraproject.*.coreos.build.request.ostree-sign", "org.fedoraproject.*.buildsys.tag", ] diff --git a/robosignatory/consumer.py b/robosignatory/consumer.py index 5871448..662728d 100644 --- a/robosignatory/consumer.py +++ b/robosignatory/consumer.py @@ -45,7 +45,8 @@ class Consumer(object): elif msg.topic.endswith('.pungi.compose.ostree'): log.debug('Passing message to the Atomic handler') self.atomic_handler.consume(msg) - elif msg.topic.endswith('.coreos.build.request.artifacts-sign'): + elif (msg.topic.endswith('.coreos.build.request.artifacts-sign') + or msg.topic.endswith('.coreos.build.request.ostree-sign')): log.debug('Passing message to the CoreOS handler') self.coreos_handler.consume(msg) except Exception as e: diff --git a/robosignatory/coreos.py b/robosignatory/coreos.py index 09dc963..467ccda 100644 --- a/robosignatory/coreos.py +++ b/robosignatory/coreos.py @@ -38,17 +38,23 @@ class CoreOSSigner(object): 'CoreOS wants to sign ' '%(build_id)s on %(stream)s for %(basearch)s' % msg.body ) - self.dowork(msg.body) - - def dowork(self, contents): - # This is here and not in __init__ because we may want a stream or - # version-dependant key in the future. + if msg.topic.endswith('.coreos.build.request.artifacts-sign'): + objects = msg.body["artifacts"] + elif msg.topic.endswith('.coreos.build.request.ostree-sign'): + objects = [{ + 'file': msg.body["commit_object"], + 'checksum': msg.body["checksum"], + }] + self.sign_objects(objects) + + def sign_objects(self, objects): + # Evaluation of the key is here and not in __init__ because we may want + # a stream or version-dependant key in the future. key = self.config["coreos"]["key"] - tmpdir = tempfile.mkdtemp(prefix="/tmp/robosignatory-") try: - for artifact in contents["artifacts"]: + for obj in objects: robosignatory.work.process_coreos( - self.signer, key, self.bucket, tmpdir, artifact) + self.signer, key, self.bucket, tmpdir, obj) finally: shutil.rmtree(tmpdir) diff --git a/tests/test_consumers.py b/tests/test_consumers.py index 1ac12f5..37f82ec 100644 --- a/tests/test_consumers.py +++ b/tests/test_consumers.py @@ -54,7 +54,7 @@ class TestConsumers(unittest.TestCase): consumer.atomic_handler.consume.assert_called_once_with(msg) @mock.patch('robosignatory.consumer.CoreOSSigner') - def test_message_coreos(self, Handler): + def test_message_coreos_artifacts_sign(self, Handler): msg = Message( topic="org.fedoraproject.prod.coreos.build.request.artifacts-sign", body={} @@ -64,6 +64,17 @@ class TestConsumers(unittest.TestCase): consumer(msg) consumer.coreos_handler.consume.assert_called_once_with(msg) + @mock.patch('robosignatory.consumer.CoreOSSigner') + def test_message_coreos_ostree_sign(self, Handler): + msg = Message( + topic="org.fedoraproject.prod.coreos.build.request.ostree-sign", + body={} + ) + consumer = Consumer() + consumer.coreos_handler = mock.Mock() + consumer(msg) + consumer.coreos_handler.consume.assert_called_once_with(msg) + @mock.patch('robosignatory.consumer.log.exception') def test_message_exception(self, error): """Test catching an exception when processing messages."""