Esempio n. 1
0
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
Esempio n. 2
0
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'))
Esempio n. 3
0
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