コード例 #1
0
ファイル: host.py プロジェクト: Justin-chi/compass-core
def _update_host_network(
    session, updater, host_network, **kwargs
):
    if 'interface' in kwargs:
        interface = kwargs['interface']
        host_network_by_interface = utils.get_db_object(
            session, models.HostNetwork, False,
            host_id=host_network.host_id,
            interface=interface
        )
        if (
            host_network_by_interface and
            host_network_by_interface.id != host_network.id
        ):
            raise exception.InvalidParameter(
                'interface %s exists in host network %s' % (
                    interface, host_network_by_interface.id
                )
            )
    if 'ip' in kwargs:
        ip = kwargs['ip']
        ip_int = long(netaddr.IPAddress(ip))
        host_network_by_ip = utils.get_db_object(
            session, models.HostNetwork, False,
            ip_int=ip_int
        )
        if host_network_by_ip and host_network_by_ip.id != host_network.id:
            raise exception.InvalidParameter(
                'ip %s exist in host network %s' % (
                    ip, host_network_by_ip.id
                )
            )
    is_host_editable(session, host_network.host, updater)
    return utils.update_db_object(session, host_network, **kwargs)
コード例 #2
0
ファイル: host.py プロジェクト: Justin-chi/compass-core
def _add_host_network(
    session, creator, host_id, exception_when_existing=True,
    interface=None, ip=None, **kwargs
):
    host = utils.get_db_object(
        session, models.Host, id=host_id
    )
    ip_int = long(netaddr.IPAddress(ip))
    host_network = utils.get_db_object(
        session, models.HostNetwork, False,
        ip_int=ip_int
    )
    if (
        host_network and not (
            host_network.host_id == host_id and
            host_network.interface == interface
        )
    ):
        raise exception.InvalidParameter(
            'ip %s exists in host network %s' % (
                ip, host_network.id
            )
        )
    is_host_editable(session, host, creator)
    return utils.add_db_object(
        session, models.HostNetwork,
        exception_when_existing,
        host_id, interface, ip=ip, **kwargs
    )
コード例 #3
0
ファイル: adapter.py プロジェクト: kidchang/compassv2-api
def add_os_adapters_internal(session):
    parents = {}
    configs = util.load_configs(setting.OS_ADAPTER_DIR)
    with session.begin(subtransactions=True):
        for config in configs:
            if 'OS' in config:
                os = utils.get_db_object(
                    session, models.OperatingSystem,
                    name=config['OS']
                )
            else:
                os = None
            if 'INSTALLER' in config:
                installer = utils.get_db_object(
                    session, models.OSInstaller,
                    name=config['INSTALLER']
                )
            else:
                installer = None
            object = utils.add_db_object(
                session, models.OSAdapter,
                True, config['NAME'], os=os, installer=installer
            )
            parents[config['NAME']] = (object, config.get('PARENT', None))
        for name, (object, parent_name) in parents.items():
            if parent_name:
                parent, _ = parents[parent_name]
            else:
                parent = None
            utils.update_db_object(
                session, object, parent=parent
            )

    _complement_os_adapters(session)
コード例 #4
0
ファイル: adapter.py プロジェクト: Justin-chi/compass-core
def add_flavors_internal(session, exception_when_existing=True):
    configs = util.load_configs(setting.ADAPTER_FLAVOR_DIR)
    for config in configs:
        logging.info('add config %s to flavor', config)
        adapter = utils.get_db_object(
            session, models.Adapter,
            name=config['ADAPTER_NAME']
        )
        for flavor_dict in config['FLAVORS']:
            flavor = utils.add_db_object(
                session, models.AdapterFlavor,
                exception_when_existing, flavor_dict['flavor'], adapter.id,
                display_name=flavor_dict.get('display_name', None),
                template=flavor_dict.get('template', None)
            )
            role_names = flavor_dict.get('roles', [])
            for role_name in role_names:
                role = utils.get_db_object(
                    session, models.AdapterRole,
                    name=role_name, adapter_id=adapter.id
                )
                utils.add_db_object(
                    session, models.AdapterFlavorRole,
                    exception_when_existing, flavor.id, role.id
                )
                utils.update_db_object(
                    session, flavor,
                    patched_ordered_flavor_roles=[role_name]
                )
コード例 #5
0
ファイル: test_utils.py プロジェクト: Intel-RSA/compass-core
 def test_get_none_with_flag_on(self):
     with self.assertRaises(exception.RecordNotExists):
         with database.session() as session:
             utils.get_db_object(
                 session,
                 models.Permission,
                 name='dummy'
             )
コード例 #6
0
ファイル: machine.py プロジェクト: Intel-RSA/compass-core
def del_machine(machine_id, user=None, session=None, **kwargs):
    """Delete a machine."""
    machine = utils.get_db_object(session, models.Machine, id=machine_id)
    if machine.host:
        host = machine.host
        raise exception.NotAcceptable("machine %s has host %s on it" % (machine.mac, host.name))
    return utils.del_db_object(session, machine)
コード例 #7
0
ファイル: switch.py プロジェクト: Justin-chi/compass-core
def get_switch_filters(
    session, getter, switch_id, **kwargs
):
    """get switch filter."""
    return utils.get_db_object(
        session, models.Switch, id=switch_id
    )
コード例 #8
0
ファイル: switch.py プロジェクト: Intel-RSA/compass-core
def get_switch_filters(
    switch_id, user=None, session=None, **kwargs
):
    """get switch filter."""
    return utils.get_db_object(
        session, models.Switch, id=switch_id
    )
コード例 #9
0
ファイル: network.py プロジェクト: kidchang/compassv2-api
def get_subnet(getter, subnet_id, **kwargs):
    """Get subnet info."""
    with database.session() as session:
        user_api.check_user_permission_internal(
            session, getter, permission.PERMISSION_LIST_NETWORKS)
        return utils.get_db_object(session, models.Network, id=subnet_id
        ).to_dict()
コード例 #10
0
def start_check_cluster_health(user, cluster_id, send_report_url,
                               session=None, check_health={}):
    """Start to check cluster health."""
    cluster_state = utils.get_db_object(
        session, models.Cluster, True, id=cluster_id
    ).state_dict()

    if cluster_state['state'] != 'SUCCESSFUL':
        logging.debug("state is %s" % cluster_state['state'])
        err_msg = "Healthcheck starts only after cluster finished deployment!"
        raise exception.Forbidden(err_msg)

    reports = utils.list_db_objects(
        session, models.HealthCheckReport,
        cluster_id=cluster_id, state='verifying'
    )
    if reports:
        err_msg = 'Healthcheck in progress, please wait for it to complete!'
        raise exception.Forbidden(err_msg)

    # Clear all preivous report
    utils.del_db_objects(
        session, models.HealthCheckReport, cluster_id=cluster_id
    )

    from compass.tasks import client as celery_client
    celery_client.celery.send_task(
        'compass.tasks.cluster_health',
        (cluster_id, send_report_url, user.email)
    )
    return {
        "cluster_id": cluster_id,
        "status": "start to check cluster health."
    }
コード例 #11
0
ファイル: metadata.py プロジェクト: kidchang/compassv2-api
def _add_metadata(
    session, field_model, metadata_model, name, config,
    parent=None, adapter=None
):
    metadata = config.get('_self', {})
    if 'field' in metadata:
        field = utils.get_db_object(
            session, field_model, field=metadata['field']
        )
    else:
        field = None
    object = utils.add_db_object(
        session, metadata_model, True,
        name, adapter=adapter, parent=parent, field=field,
        display_name=metadata.get('display_name', name),
        description=metadata.get('description', None),
        is_required=metadata.get('is_required', False),
        required_in_whole_config=metadata.get('required_in_whole_config', False),
        mapping_to=metadata.get('mapping_to', None),
        validator=metadata.get('validator', None),
        js_validator=metadata.get('js_validator', None),
        default_value=metadata.get('default_value', None),
        options=metadata.get('options', []),
        required_in_options=metadata.get('required_in_options', False)
    )
    for key, value in config.items():
        if key not in '_self':
            _add_metadata(
                session, field_model, metadata_model, key, value,
                parent=object, adapter=adapter,
            )
    return object
コード例 #12
0
ファイル: host.py プロジェクト: vshunkov/compass-core
def _get_host(host_id, session=None, **kwargs):
    """Get host by id."""
    if isinstance(host_id, (int, long)):
        return utils.get_db_object(session, models.Host, id=host_id, **kwargs)
    else:
        raise exception.InvalidParameter(
            'host id %s type is not int compatible' % host_id)
コード例 #13
0
def _get_switch_by_ip(switch_ip, session=None, **kwargs):
    """Get switch by switch ip."""
    switch_ip_int = long(netaddr.IPAddress(switch_ip))
    return utils.get_db_object(session,
                               models.Switch,
                               ip_int=switch_ip_int,
                               **kwargs)
コード例 #14
0
ファイル: host.py プロジェクト: Justin-chi/compass-core
def del_host(session, deleter, host_id, **kwargs):
    """Delete a host."""
    from compass.db.api import cluster as cluster_api
    from compass.tasks import client as celery_client
    host = utils.get_db_object(
        session, models.Host, id=host_id
    )
    is_host_editable(
        session, host, deleter,
        reinstall_os_set=True
    )
    cluster_ids = []
    for clusterhost in host.clusterhosts:
        cluster_api.is_cluster_editable(
            session, clusterhost.cluster, deleter,
            reinstall_distributed_system_set=True
        )
        cluster_ids.append(clusterhost.cluster_id)

    celery_client.celery.send_task(
        'compass.tasks.delete_host',
        (
            deleter.email, host_id, cluster_ids
        )
    )
    return {
        'status': 'delete action sent',
        'host': host,
    }
コード例 #15
0
ファイル: host.py プロジェクト: vshunkov/compass-core
def _get_host_log_history(host_id, filename, session=None, **kwargs):
    host = _get_host(host_id, session=session)
    return utils.get_db_object(session,
                               models.HostLogHistory,
                               id=host.id,
                               filename=filename,
                               **kwargs)
コード例 #16
0
ファイル: switch.py プロジェクト: Intel-RSA/compass-core
def add_switches(
    exception_when_existing=False,
    data=[], user=None, session=None
):
    """Create switches."""
    switches = []
    fail_switches = []
    for switch_data in data:
        switch_ip = long(netaddr.IPAddress(switch_data['ip']))
        switch_object = utils.get_db_object(
            session, models.Switch, False,
            ip_int=switch_ip
        )
        if switch_object:
            logging.error('ip %s exists in switch %s' % (
                switch_ip, switch_object.id
            ))
            fail_switches.append(switch_data)
        else:
            switch_data.pop('ip')
            switches.append(
                add_switch_internal(
                    session, switch_ip, exception_when_existing,
                    **switch_data
                )
            )
    return {
        'switches': switches,
        'fail_switches': fail_switches
    }
コード例 #17
0
 def test_update_db_obj_none_exist(self):
     with self.assertRaises(exception.DatabaseException):
         with database.session() as session:
             db_obj = utils.get_db_object(session,
                                          models.Permission,
                                          id=1000)
             utils.update_db_object(session, db_obj, name='dummy')
コード例 #18
0
ファイル: host.py プロジェクト: Intel-RSA/compass-core
def update_host_state(host_id, user=None, session=None, **kwargs):
    """Update a host state."""
    host = utils.get_db_object(
        session, models.Host, id=host_id
    )
    utils.update_db_object(session, host.state, **kwargs)
    return host.state_dict()
コード例 #19
0
 def test_get_none_with_flag_off(self):
     with database.session() as session:
         dummy = utils.get_db_object(session,
                                     models.Permission,
                                     False,
                                     name='dummy')
         self.assertEqual(None, dummy)
コード例 #20
0
ファイル: host.py プロジェクト: Intel-RSA/compass-core
def del_hostnetwork(host_network_id, user=None, session=None, **kwargs):
    """Delete a host network."""
    host_network = utils.get_db_object(
        session, models.HostNetwork, id=host_network_id
    )
    is_host_editable(session, host_network.host, user)
    return utils.del_db_object(session, host_network)
コード例 #21
0
ファイル: switch.py プロジェクト: Justin-chi/compass-core
def del_switchmachine(session, deleter, switch_machine_id, **kwargs):
    """Delete switch machines."""
    switch_machine = utils.get_db_object(
        session, models.SwitchMachine,
        switch_machine_id=switch_machine_id
    )
    return utils.del_db_object(session, switch_machine)
コード例 #22
0
ファイル: machine.py プロジェクト: Intel-RSA/compass-core
def reset_machine(machine_id, reset={}, user=None, session=None, **kwargs):
    """reset machine."""
    from compass.tasks import client as celery_client

    machine = utils.get_db_object(session, models.Machine, id=machine_id)
    celery_client.celery.send_task("compass.tasks.reset_machine", (machine_id,))
    return {"status": "reset %s action sent" % machine.mac, "machine": machine}
コード例 #23
0
 def test_update_db_object(self):
     with database.session() as session:
         db_obj = utils.get_db_object(session, models.Permission, id=1)
         updated_obj = utils.update_db_object(session,
                                              db_obj,
                                              alias='updated')
         self.assertEqual('updated', updated_obj.alias)
コード例 #24
0
ファイル: switch.py プロジェクト: BruceZu/compass-core
def _get_switch_by_ip(switch_ip, session=None, **kwargs):
    """Get switch by switch ip."""
    switch_ip_int = long(netaddr.IPAddress(switch_ip))
    return utils.get_db_object(
        session, models.Switch,
        ip_int=switch_ip_int, **kwargs
    )
コード例 #25
0
ファイル: user.py プロジェクト: baigk/compass-core
def del_permission(user_id, permission_id, user=None, session=None, **kwargs):
    """Delete a specific user permission."""
    user_permission = utils.get_db_object(
        session, models.UserPermission,
        user_id=user_id, permission_id=permission_id,
        **kwargs
    )
    return utils.del_db_object(session, user_permission)
コード例 #26
0
ファイル: host.py プロジェクト: Intel-RSA/compass-core
def update_hostnetwork(host_network_id, user=None, session=None, **kwargs):
    """Update a host network."""
    host_network = utils.get_db_object(
        session, models.HostNetwork, id=host_network_id
    )
    return _update_host_network(
        session, user, host_network, **kwargs
    )
コード例 #27
0
ファイル: machine.py プロジェクト: kidchang/compassv2-api
def update_machine(updater, machine_id, **kwargs):
    """Update a machine."""
    with database.session() as session:
         user_api.check_user_permission_internal(
            session, updater, permission.PERMISSION_UPDATE_MACHINE)
         machine = utils.get_db_object(session, models.Machine, id=machine_id)
         utils.update_db_object(session, machine, **kwargs)
         return machine.to_dict()
コード例 #28
0
ファイル: cluster.py プロジェクト: kidchang/compassv2-api
def get_cluster(getter, cluster_id, **kwargs):
    """Get subnet info."""
    with database.session() as session:
        user_api.check_user_permission_internal(
            session, getter, permission.PERMISSION_LIST_CLUSTERS)
        return utils.get_db_object(
            session, models.Cluster, id=cluster_id
        ).to_dict()
コード例 #29
0
ファイル: machine.py プロジェクト: kidchang/compassv2-api
def del_machine(deleter, machine_id, **kwargs):
    """Delete a machine."""
    with database.session() as session:
        user_api.check_user_permission_internal(
            session, deleter, permission.PERMISSION_DEL_MACHINE)
        machine = utils.get_db_object(session, models.Switch, id=machine_id)
        utils.del_db_object(session, machine)
        return machine.to_dict()
コード例 #30
0
ファイル: machine.py プロジェクト: kidchang/compassv2-api
def get_machine(getter, machine_id, **kwargs):
    """get field dict of a machine."""
    with database.session() as session:
        user_api.check_user_permission_internal(
            session, getter, permission.PERMISSION_LIST_MACHINES)
        return utils.get_db_object(
            session, models.Machine, True, id=machine_id
        ).to_dict()
コード例 #31
0
ファイル: user.py プロジェクト: baigk/compass-core
def get_current_user(
    exception_when_missing=True, user=None,
    session=None, **kwargs
):
    """get field dict of a user."""
    return utils.get_db_object(
        session, models.User, exception_when_missing, id=user.id
    )
コード例 #32
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def get_user_object(email, session=None, **kwargs):
    """get user and convert to UserWrapper object."""
    user = utils.get_db_object(session, models.User, False, email=email)
    if not user:
        raise exception.Unauthorized('%s unauthorized' % email)
    user_dict = user.to_dict()
    user_dict.update(kwargs)
    return UserWrapper(**user_dict)
コード例 #33
0
def _get_hostnetwork_by_ip(
    ip, session=None, **kwargs
):
    ip_int = long(netaddr.IPAddress(ip))
    return utils.get_db_object(
        session, models.HostNetwork,
        ip_int=ip_int, **kwargs
    )
コード例 #34
0
 def test_get_alias(self):
     with database.session() as session:
         machines = utils.get_db_object(session,
                                        models.Permission,
                                        name='list_machines')
         expected = 'list machines'
         self.assertEqual(expected, machines.alias)
         self.assertEqual(expected, machines.description)
コード例 #35
0
ファイル: permission.py プロジェクト: BruceZu/compass-core
def _get_permission(permission_id, session=None, **kwargs):
    """Get permission object by the unique key of Permission table."""
    if isinstance(permission_id, (int, long)):
        return utils.get_db_object(
            session, models.Permission, id=permission_id, **kwargs)
    raise exception.InvalidParameter(
        'permission id %s type is not int compatible' % permission_id
    )
コード例 #36
0
ファイル: test_utils.py プロジェクト: Intel-RSA/compass-core
 def test_del_db_object(self):
     with self.assertRaises(exception.RecordNotExists):
         with database.session() as session:
             db_obj = utils.get_db_object(
                 session,
                 models.Permission,
                 id=1
             )
             utils.del_db_object(
                 session,
                 db_obj
             )
             utils.get_db_object(
                 session,
                 models.Permission,
                 id=1
             )
コード例 #37
0
ファイル: host.py プロジェクト: Intel-RSA/compass-core
def update_host_deployed_config(host_id, user=None, session=None, **kwargs):
    """Update host deployed config."""
    host = utils.get_db_object(
        session, models.Host, id=host_id
    )
    is_host_editable(session, host, user)
    is_host_validated(session, host)
    return utils.update_db_object(session, host, **kwargs)
コード例 #38
0
ファイル: user.py プロジェクト: Justin-chi/compass-core
def get_user(
    session, getter, user_id,
    exception_when_missing=True, **kwargs
):
    """get field dict of a user."""
    return utils.get_db_object(
        session, models.User, exception_when_missing, id=user_id
    )
コード例 #39
0
def _get_machine(machine_id, session=None, **kwargs):
    """Get machine by id."""
    if isinstance(machine_id, (int, long)):
        return utils.get_db_object(session,
                                   models.Machine,
                                   id=machine_id,
                                   **kwargs)
    raise exception.InvalidParameter(
        'machine id %s type is not int compatible' % machine_id)
コード例 #40
0
ファイル: network.py プロジェクト: opnfv/compass-containers
def _get_subnet(subnet_id, session=None, **kwargs):
    """Get subnet by subnet id."""
    if isinstance(subnet_id, (int, long)):
        return utils.get_db_object(session,
                                   models.Subnet,
                                   id=subnet_id,
                                   **kwargs)
    raise exception.InvalidParameter(
        'subnet id %s type is not int compatible' % subnet_id)
コード例 #41
0
ファイル: switch.py プロジェクト: stack360/compass-deck
def _get_switch_machine(switch_id, machine_id, session=None, **kwargs):
    """Get switch machine by switch id and machine id."""
    switch = _get_switch(switch_id, session=session)
    from compass.db.api import machine as machine_api
    machine = machine_api.get_machine_internal(machine_id, session=session)
    return utils.get_db_object(
        session, models.SwitchMachine,
        switch_id=switch.id, machine_id=machine.id, **kwargs
    )
コード例 #42
0
def _get_switch(switch_id, session=None, **kwargs):
    """Get Switch object switch id."""
    if isinstance(switch_id, (int, long)):
        return utils.get_db_object(session,
                                   models.Switch,
                                   id=switch_id,
                                   **kwargs)
    raise exception.InvalidParameter(
        'switch id %s type is not int compatible' % switch_id)
コード例 #43
0
ファイル: permission.py プロジェクト: stack360/compass-deck
def _get_permission(permission_id, session=None, **kwargs):
    """Get permission object by the unique key of Permission table."""
    if isinstance(permission_id, (int, long)):
        return utils.get_db_object(session,
                                   models.Permission,
                                   id=permission_id,
                                   **kwargs)
    raise exception.InvalidParameter(
        'permission id %s type is not int compatible' % permission_id)
コード例 #44
0
def _get_switchmachine(switch_machine_id, session=None, **kwargs):
    """Get switch machine by switch_machine_id."""
    if not isinstance(switch_machine_id, (int, long)):
        raise exception.InvalidParameter(
            'switch machine id %s type is not int compatible' %
            (switch_machine_id))
    return utils.get_db_object(session,
                               models.SwitchMachine,
                               switch_machine_id=switch_machine_id,
                               **kwargs)
コード例 #45
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def _get_permission(user_id, permission_id, session=None, **kwargs):
    """Get user permission by user id and permission id."""
    user = _get_user(user_id, session=session)
    from compass.db.api import permission as permission_api
    permission = permission_api.get_permission_internal(permission_id,
                                                        session=session)
    return utils.get_db_object(session,
                               models.UserPermission,
                               user_id=user.id,
                               permission_id=permission.id,
                               **kwargs)
コード例 #46
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def _check_user_permission(user, permission, session=None):
    """Check user has permission."""
    if not user:
        logging.info('empty user means the call is from internal')
        return
    if user.is_admin:
        return

    user_permission = utils.get_db_object(session,
                                          models.UserPermission,
                                          False,
                                          user_id=user.id,
                                          name=permission.name)
    if not user_permission:
        raise exception.Forbidden('user %s does not have permission %s' %
                                  (user.email, permission.name))
コード例 #47
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def record_user_token(token, expire_timestamp, user=None, session=None):
    """record user token in database."""
    user_token = utils.get_db_object(session,
                                     models.UserToken,
                                     False,
                                     user_id=user.id,
                                     token=token)
    if not user_token:
        return utils.add_db_object(session,
                                   models.UserToken,
                                   True,
                                   token,
                                   user_id=user.id,
                                   expire_timestamp=expire_timestamp)
    elif expire_timestamp > user_token.expire_timestamp:
        return utils.update_db_object(session,
                                      user_token,
                                      expire_timestamp=expire_timestamp)
    return user_token
コード例 #48
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def get_user_object_from_token(token, session=None):
    """Get user from token and convert to UserWrapper object.

    ::note:
       get_user_object_from_token may be called in session.
    """
    expire_timestamp = {'ge': datetime.datetime.now()}
    user_token = utils.get_db_object(session,
                                     models.UserToken,
                                     False,
                                     token=token,
                                     expire_timestamp=expire_timestamp)
    if not user_token:
        raise exception.Unauthorized('invalid user token: %s' % token)
    user_dict = _get_user(user_token.user_id, session=session).to_dict()
    user_dict['token'] = token
    expire_timestamp = user_token.expire_timestamp
    user_dict['expire_timestamp'] = expire_timestamp
    return UserWrapper(**user_dict)
コード例 #49
0
ファイル: user.py プロジェクト: opnfv/compass-containers
def _get_user(user_id, session=None, **kwargs):
    """Get user object by user id."""
    if isinstance(user_id, (int, long)):
        return utils.get_db_object(session, models.User, id=user_id, **kwargs)
    raise exception.InvalidParameter('user id %s type is not int compatible' %
                                     user_id)
コード例 #50
0
 def test_get_none_with_flag_on(self):
     with self.assertRaises(exception.RecordNotExists):
         with database.session() as session:
             utils.get_db_object(session, models.Permission, name='dummy')
コード例 #51
0
def _get_report(cluster_id, name, session=None):
    cluster = cluster_api.get_cluster_internal(cluster_id, session=session)
    return utils.get_db_object(
        session, models.HealthCheckReport, cluster_id=cluster.id, name=name
    )
コード例 #52
0
 def test_del_db_object(self):
     with self.assertRaises(exception.RecordNotExists):
         with database.session() as session:
             db_obj = utils.get_db_object(session, models.Permission, id=1)
             utils.del_db_object(session, db_obj)
             utils.get_db_object(session, models.Permission, id=1)