def update_actions_for_job(event): """ Takes an salt command return event and sets the status of the corresponding Spacewalk job. """ jid = event['data']['jid'] minion = event['data']['id'] sid = is_minion_registered(minion) if not sid: logger.error('minion %s is no longer registered', minion) # FIXME: cleanup its actions? return logger.info('Updating job status for sid %s: (%s) jid: %s', sid, minion, jid) with transaction(event): cursor = rhnSQL.prepare(""" update rhnServerAction set status=:status, result_msg=:result_msg, result_code=:result_code, completion_time=:completion_time where action_id in (select distinct action_id from rhnActionSaltJob where jid=:jid) and server_id=:sid""") status = 2 if event['data']['success'] else 1 cursor.execute(sid=sid, status=status, result_code=event['data']['retcode'], result_msg=json.dumps(event['data']['return'])[:1024], completion_time=event['data']['_stamp'], jid=jid)
def create_actions_for_job(event): """ For jobs that originated outside of this system we create coresponding events in spacewalk """ jid = event['data']['jid'] minions = event['data']['minions'] fun = event['data']['fun'] aid = rhnAction.schedule_action(action_type='salt.job', action_name='Salt job %s (%s)' % (jid, fun), org_id=1) with transaction(event): cursor = rhnSQL.prepare(""" insert into rhnActionSaltJob (action_id, jid, data) values (:action_id, :jid, :data) """) cursor.execute(action_id=aid, jid=jid, data=json.dumps(event['data'])) for minion in minions: sid = is_minion_registered(minion) if not sid: logger.warn("Skipping reference to unregistered minion: %s", minion) continue cursor = rhnSQL.prepare(""" insert into rhnServerAction (server_id, action_id, status, pickup_time) values (:server_id, :action_id, 0, :pickup_time) """) cursor.execute(server_id=sid, action_id=aid, pickup_time=event['data']['_stamp'])