コード例 #1
0
def zone_data_handler(sid, check_for_zone=False):
    """Return schematic information when querying for a schematic.

    If :param check_for_zone: is set True check the API returned schematic
    information for available zones.

    :param sid: ``object``
    :param check_for_zone: ``bol``
    :return ``tuple``
    """
    if not sid:
        return False, 'No Schematic specified', 400

    auth = auth_mech(hdata=flask.request.data, rdata=flask.request.headers)
    if not auth:
        return False, 'Authentication or Data Type Failure', 401
    else:
        user_id, payload = auth

    if not all([user_id, payload]):
        return False, 'Missing Information %s %s' % (user_id, payload), 400
    else:
        payload = encoder(obj=payload)
        LOG.debug(payload)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return False, 'no schematic found', 404

    if check_for_zone is True and 'zones' not in payload:
        return False, 'Missing Information %s %s' % (user_id, payload), 400

    return True, schematic, payload, user_id
コード例 #2
0
ファイル: zone_status.py プロジェクト: cloudnull/tribble-api
 def __init__(self, cell):
     self.cell = cell
     self.schematic = db_proc.get_schematic_id(
         sid=self.cell['schematic_id'], uid=self.cell['auth_id'])
     if self.cell.get('zone_id'):
         self.zone = db_proc.get_zones_by_id(skm=self.schematic,
                                             zid=self.cell['zone_id'])
コード例 #3
0
def zone_basic_handler(sid, zid=None):
    """Return zone information when querying for a zone.

    :param sid: ``object``
    :param zid: ``object``
    :return ``tuple``
    """
    if not sid:
        return False, 'No Schematic Specified', 400

    user_id = auth_mech(rdata=flask.request.headers)
    if not user_id:
        return False, 'no user id found', 400

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return False, 'no schematic found', 404

    if zid is not None:
        zone = db_proc.get_zones_by_id(skm=schematic, zid=zid)
        if not zone:
            return False, 'no zones found', 404
        return True, schematic, zone, user_id
    else:
        zones = db_proc.get_zones(skm=schematic)
        if not zones:
            return False, 'no zones found', 404
        else:
            return True, schematic, zones, user_id
コード例 #4
0
ファイル: utils.py プロジェクト: cloudnull/tribble-api
def zone_basic_handler(sid, zid=None):
    """Return zone information when querying for a zone.

    :param sid: ``object``
    :param zid: ``object``
    :return ``tuple``
    """
    if not sid:
        return False, 'No Schematic Specified', 400

    user_id = auth_mech(rdata=flask.request.headers)
    if not user_id:
        return False, 'no user id found', 400

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return False, 'no schematic found', 404

    if zid is not None:
        zone = db_proc.get_zones_by_id(skm=schematic, zid=zid)
        if not zone:
            return False, 'no zones found', 404
        return True, schematic, zone, user_id
    else:
        zones = db_proc.get_zones(skm=schematic)
        if not zones:
            return False, 'no zones found', 404
        else:
            return True, schematic, zones, user_id
コード例 #5
0
ファイル: utils.py プロジェクト: cloudnull/tribble-api
def zone_data_handler(sid, check_for_zone=False):
    """Return schematic information when querying for a schematic.

    If :param check_for_zone: is set True check the API returned schematic
    information for available zones.

    :param sid: ``object``
    :param check_for_zone: ``bol``
    :return ``tuple``
    """
    if not sid:
        return False, 'No Schematic specified', 400

    auth = auth_mech(hdata=flask.request.data, rdata=flask.request.headers)
    if not auth:
        return False, 'Authentication or Data Type Failure', 401
    else:
        user_id, payload = auth

    if not all([user_id, payload]):
        return False, 'Missing Information %s %s' % (user_id, payload), 400
    else:
        payload = encoder(obj=payload)
        LOG.debug(payload)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return False, 'no schematic found', 404

    if check_for_zone is True and 'zones' not in payload:
        return False, 'Missing Information %s %s' % (user_id, payload), 400

    return True, schematic, payload, user_id
コード例 #6
0
def schematic_get(sid=None):
    """Return a of Schematic.

    Method is accessible with GET /v1/schematics/<sid>

    :param sid: ``str`` # schematic ID
    :return json, status: ``tuple``
    """
    if not sid:
        return utils.return_msg(msg='missing information', status=400)

    user_id = utils.auth_mech(rdata=flask.request.headers)
    if not user_id:
        return utils.return_msg(msg='missing information', status=400)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return utils.return_msg(msg='no schematic found', status=404)
    else:
        _schematic = utils.pop_ts(temp=schematic.__dict__)
        config = db_proc.get_configmanager(skm=schematic)
        if config:
            _config = utils.pop_ts(temp=config.__dict__)
            _schematic['config_manager'] = _config

        return utils.return_msg(msg=_schematic, status=200)
コード例 #7
0
ファイル: zone_status.py プロジェクト: cloudnull/tribble-api
 def __init__(self, cell):
     self.cell = cell
     self.schematic = db_proc.get_schematic_id(
         sid=self.cell['schematic_id'], uid=self.cell['auth_id']
     )
     if self.cell.get('zone_id'):
         self.zone = db_proc.get_zones_by_id(
             skm=self.schematic, zid=self.cell['zone_id']
         )
コード例 #8
0
def schematic_put(sid=None):
    """Update a schematic.

    if a zone is in the put data add the zone to the schematic.
    The addition of a zone on a put will not build the zone automatically.

    Method is accessible with PUT /v1/schematics/<sid>

    :param sid: ``str`` # schematic ID
    :return json, status: ``tuple``
    """

    if not sid:
        return utils.return_msg(msg='missing information', status=400)

    auth = utils.auth_mech(hdata=flask.request.data,
                           rdata=flask.request.headers)
    if not auth:
        return utils.return_msg(msg='Authentication or Data Type Failure',
                                status=401)
    else:
        user_id, payload = auth

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return utils.return_msg(msg='no schematic found', status=404)

    if not all([user_id, payload]):
        build_response = 'missing information %s %s' % (user_id, payload)
        return utils.return_msg(msg=build_response, status=400)

    config_type = payload.get('config_type')
    try:
        sess = DB.session
        if config_type is not None:
            if _config_check(config_type).validate_plugin() is False:
                raise tribble.DeadOnArival('Plugin "%s" was not found.' %
                                           config_type)

        con = db_proc.get_configmanager(skm=schematic)
        db_proc.put_schematic_id(session=sess, skm=schematic, put=payload)
        db_proc.put_configmanager(session=sess, con=con, put=payload)
        if 'zones' in payload:
            _zone_builder(session=sess,
                          schematic=schematic,
                          con=con,
                          payload=payload)
    except tribble.DeadOnArival as exp:
        return utils.return_msg(msg='%s' % exp, status=405)
    except Exception:
        LOG.error(traceback.format_exc())
        return utils.return_msg(msg='Unexpected Error', status=500)
    else:
        LOG.debug(payload)
        db_proc.commit_session(session=sess)
        return utils.return_msg(msg='Updates Recieved', status=201)
コード例 #9
0
def instance_delete(sid=None, zid=None, iid=None):
    """Delete an Instance from a Zone.

    :param sid: ``str`` # schematic ID
    :param zid: ``str`` # Zone ID
    :param iid: ``str`` # Instance ID
    :return json, status: ``tuple``
    """

    if not all([sid, zid, iid]):
        check_all = [check for check in sid, zid, iid if not check]
        return utils.return_msg(
            msg='missing Information %s' % check_all, status=400
        )

    user_id = utils.auth_mech(rdata=flask.request.headers)
    if not user_id:
        return utils.return_msg(msg='missing information', status=400)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return utils.return_msg(msg='no schematic found', status=404)

    zone = db_proc.get_zones_by_id(skm=schematic, zid=zid)
    if not zone:
        return utils.return_msg(msg='No Zone Found', status=404)
    elif zone.zone_state == 'BUILDING':
        build_response = ("Instance Delete can not be performed because Zone"
                          " %s has a Pending Status" % zone.id)
        return utils.return_msg(msg=build_response, status=200)

    instances = db_proc.get_instances(zon=zone)
    instance_id = [
        instance.instance_id for instance in instances
        if instance.instance_id == iid
    ]
    if not instance_id:
        return utils.return_msg(msg='No Instance Found', status=404)

    try:
        config = db_proc.get_configmanager(skm=schematic)
        cell = utils.build_cell(
            job='instance_delete',
            schematic=schematic,
            zone=zone,
            config=config
        )
        cell['uuids'] = instance_id

    except Exception:
        LOG.error(traceback.format_exc())
        return utils.return_msg(msg='Unexpected Error', status=500)
    else:
        rpc.default_publisher(message=cell)
        return utils.return_msg(msg='Deletes Recieved', status=203)
コード例 #10
0
def instance_delete(sid=None, zid=None, iid=None):
    """Delete an Instance from a Zone.

    :param sid: ``str`` # schematic ID
    :param zid: ``str`` # Zone ID
    :param iid: ``str`` # Instance ID
    :return json, status: ``tuple``
    """

    if not all([sid, zid, iid]):
        check_all = [check for check in sid, zid, iid if not check]
        return utils.return_msg(msg='missing Information %s' % check_all,
                                status=400)

    user_id = utils.auth_mech(rdata=flask.request.headers)
    if not user_id:
        return utils.return_msg(msg='missing information', status=400)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return utils.return_msg(msg='no schematic found', status=404)

    zone = db_proc.get_zones_by_id(skm=schematic, zid=zid)
    if not zone:
        return utils.return_msg(msg='No Zone Found', status=404)
    elif zone.zone_state == 'BUILDING':
        build_response = ("Instance Delete can not be performed because Zone"
                          " %s has a Pending Status" % zone.id)
        return utils.return_msg(msg=build_response, status=200)

    instances = db_proc.get_instances(zon=zone)
    instance_id = [
        instance.instance_id for instance in instances
        if instance.instance_id == iid
    ]
    if not instance_id:
        return utils.return_msg(msg='No Instance Found', status=404)

    try:
        config = db_proc.get_configmanager(skm=schematic)
        cell = utils.build_cell(job='instance_delete',
                                schematic=schematic,
                                zone=zone,
                                config=config)
        cell['uuids'] = instance_id

    except Exception:
        LOG.error(traceback.format_exc())
        return utils.return_msg(msg='Unexpected Error', status=500)
    else:
        rpc.default_publisher(message=cell)
        return utils.return_msg(msg='Deletes Recieved', status=203)
コード例 #11
0
ファイル: constructor.py プロジェクト: cloudnull/tribble-api
    def _node_remove(self, ids):
        """Delete an instance from both the cloud provider and from the DB.

        :param ids: ``list``
        """
        try:
            sess = DB.session
            schematic = db_proc.get_schematic_id(
                sid=self.packet['schematic_id'], uid=self.packet['auth_id'])
            zone = db_proc.get_zones_by_id(skm=schematic,
                                           zid=self.packet['zone_id'])
            instances = db_proc.get_instance_ids(zon=zone, ids=ids)
            for instance in instances:
                db_proc.delete_item(session=sess, item=instance)
        except Exception as exp:
            self.zone_status.error(error_msg=exp)
            LOG.critical('Issues when Removing Instances %s' % exp)
        else:
            db_proc.commit_session(session=sess)
            self._remove_user_data()
コード例 #12
0
ファイル: constructor.py プロジェクト: cloudnull/tribble-api
    def _node_remove(self, ids):
        """Delete an instance from both the cloud provider and from the DB.

        :param ids: ``list``
        """
        try:
            sess = DB.session
            schematic = db_proc.get_schematic_id(
                sid=self.packet['schematic_id'], uid=self.packet['auth_id']
            )
            zone = db_proc.get_zones_by_id(
                skm=schematic, zid=self.packet['zone_id']
            )
            instances = db_proc.get_instance_ids(zon=zone, ids=ids)
            for instance in instances:
                db_proc.delete_item(session=sess, item=instance)
        except Exception as exp:
            self.zone_status.error(error_msg=exp)
            LOG.critical('Issues when Removing Instances %s' % exp)
        else:
            db_proc.commit_session(session=sess)
            self._remove_user_data()
コード例 #13
0
def schematic_delete(sid=None):
    """Delete a Schematic.

    Method is accessible with GET /v1/schematics/<sid>

    :param sid: ``str`` # schematic ID
    :return json, status: ``tuple``
    """

    if not sid:
        return utils.return_msg(msg='missing information', status=400)

    user_id = utils.auth_mech(rdata=flask.request.headers)
    if not user_id:
        return utils.return_msg(msg='missing information', status=400)

    schematic = db_proc.get_schematic_id(sid=sid, uid=user_id)
    if not schematic:
        return utils.return_msg(msg='no schematic found', status=404)

    try:
        config = db_proc.get_configmanager(skm=schematic)
        zones = db_proc.get_zones(skm=schematic)
        if zones:
            zone_ids = [zone.id for zone in zones]
            build_response = ('can not delete the schematic, you have an'
                              ' active zone(s): %s' % zone_ids)
            return utils.return_msg(msg=build_response, status=405)

        sess = DB.session
        db_proc.delete_item(session=sess, item=schematic)
        db_proc.delete_item(session=sess, item=config)
    except Exception:
        LOG.error(traceback.format_exc())
        return utils.return_msg(msg='unexpected error', status=500)
    else:
        db_proc.commit_session(session=sess)
        return utils.return_msg(msg='deletes received', status=203)