def parse_post_data(self, data):
        """
        Method shared between Frontend and Backend to parse the POST data
        of manual rebuild JSON and generate the BaseEvent representation
        of the rebuild request.

        :param dict data: Dict generated from JSON from HTTP POST or parsed
            from the UMB message sent from Frontend to Backend.
        """
        msg_id = data.get('msg_id', "manual_rebuild_%s" % (str(time.time())))
        dry_run = data.get('dry_run', False)

        if data.get('errata_id', None):
            errata_id = data.get('errata_id')
            errata = Errata()
            advisory = ErrataAdvisory.from_advisory_id(errata, errata_id)

            event = ManualRebuildWithAdvisoryEvent(
                msg_id,
                advisory,
                data.get("container_images", []),
                data.get("metadata", None),
                freshmaker_event_id=data.get('freshmaker_event_id'),
                manual=True,
                dry_run=dry_run,
                requester=data.get('requester', None))
        else:
            event = ManualBundleRebuild(msg_id,
                                        data.get('container_images', []),
                                        data.get('bundle_images'),
                                        data.get('metadata', None),
                                        dry_run=dry_run,
                                        requester=data.get('requester', None))

        return event
예제 #2
0
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))

        errata = Errata()
        return ErrataAdvisoryStateChangedEvent(
            msg_id, ErrataAdvisory.from_advisory_id(errata, errata_id))
예제 #3
0
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))

        errata = Errata()
        advisory = ErrataAdvisory.from_advisory_id(errata, errata_id)
        # If advisory created by BOTAS and it's shipped,
        # then return BotasErrataShippedEvent event
        if advisory.state == "SHIPPED_LIVE" and \
           advisory.reporter.startswith('botas'):
            event = BotasErrataShippedEvent(msg_id, advisory)
        else:
            event = ErrataAdvisoryStateChangedEvent(msg_id, advisory)
        return event
    def parse(self, topic, msg):
        msg_id = msg.get('msg_id')
        inner_msg = msg.get('msg')
        errata_id = int(inner_msg.get('errata_id'))
        new_state = inner_msg.get('to')

        errata = Errata()
        advisory = ErrataAdvisory.from_advisory_id(errata, errata_id)
        # When there is message delay, state change messages can arrive after
        # advisory has been changed to a different state other than the one
        # in message, so we override advisory state with the state in message
        advisory.state = new_state

        # If advisory created by BOTAS and it's shipped,
        # then return BotasErrataShippedEvent event
        if advisory.state == "SHIPPED_LIVE" and advisory.reporter.startswith(
                'botas'):
            event = BotasErrataShippedEvent(msg_id, advisory)
        else:
            event = ErrataAdvisoryStateChangedEvent(msg_id, advisory)
        return event
예제 #5
0
dictConfig(fedmsg_config.get('logging', {'version': 1}))

if len(sys.argv) < 2:
    print("Queries Lightblue to find out all the images Freshmaker rebuilds.")
    print("Usage: ./lightblue.py ERRATA_ID [[CONTAINER_IMAGE], ...]")
    sys.exit(1)

container_images = sys.argv[2:]

app_context = app.app_context()
app_context.__enter__()

db.drop_all()
db.create_all()
db.session.commit()

errata = Errata()
kwargs = {}
if container_images:
    EventClass = ManualRebuildWithAdvisoryEvent
    kwargs['container_images'] = container_images
else:
    EventClass = ErrataAdvisoryStateChangedEvent
event = EventClass(
    "fake_message", ErrataAdvisory.from_advisory_id(errata, sys.argv[1]),
    dry_run=True, **kwargs)

handler = RebuildImagesOnRPMAdvisoryChange()
with patch("freshmaker.consumer.get_global_consumer"):
    handler.handle(event)
예제 #6
0
    kwargs['container_images'] = args.container_img
else:
    EventClass = ErrataAdvisoryStateChangedEvent

event_id = None
if args.cassette:
    cassette_name = os.path.splitext(os.path.basename(args.cassette))[0]
    extension = os.path.splitext(os.path.basename(args.cassette))[1]
    try:
        event_id = int(cassette_name)
        if extension != ".yml":
            raise ValueError
    except ValueError:
        print(
            "The input cassette must be named in the format of <event ID>.yml")
        sys.exit(1)

    conf.vcrpy_path = os.path.dirname(args.cassette)
    conf.vcrpy_mode = 'none'

event = EventClass("fake_message",
                   ErrataAdvisory.from_advisory_id(errata, sys.argv[1]),
                   dry_run=True,
                   freshmaker_event_id=event_id,
                   **kwargs)

handler = RebuildImagesOnRPMAdvisoryChange()

with patch("freshmaker.consumer.get_global_consumer"):
    handler.handle(event)