def update(session, status): if status not in ('closed', ): raise InvalidStatusServiceException() log = session.logs.create( service='update', before=serialize_session(session=session), ) session.status = status session.save(update_fields=('status', )) log.after = serialize_session(session=session) log.save(update_fields=('after', )) return session
def run_playbook(session, service, require, on_success, on_error): if session.status != require: raise InvalidStatusServiceException() playbook = os.path.join( settings.BASE_DIR, 'ansible', 'session', session.server_host.distribution, 'session_{}.yml'.format(service) ) log = session.logs.create( service=service, playbook=playbook, before=serialize_session(session=session), ) try: results = core.services.host.run_playbook( host=session.server_host, playbook=playbook, extra_vars=get_variables(session=session) ) except Exception as e: results = '{message}\n\n{traceback}'.format( message=e.message, traceback=traceback.format_exc() ) session.status = on_error else: session.status = on_success session.save(update_fields=('status', )) log.results = results log.after = serialize_session(session=session) log.save(update_fields=('results', 'after'))
def get_variables(session): variables = dict() serialized = serialize_session(session=session) if 'client_host' in serialized: client_host = serialized.pop('client_host') if client_host: variables.update({'client_host_{}'.format(key): value for key, value in client_host.items()}) variables.update({'account_{}'.format(key): value for key, value in serialized.pop('account').items()}) variables.update({'server_host_{}'.format(key): value for key, value in serialized.pop('server_host').items()}) variables.update({'session_{}'.format(key): value for key, value in serialized.items()}) return variables