Пример #1
0
    def attach_nuage_group_to_nuagenet(self, tenant, nuage_npid,
                                       nuage_subnetid, shared):
        nuage_uid, nuage_gid = helper.create_usergroup(self.restproxy, tenant,
                                                       nuage_npid)
        nuagesubn = nuagelib.NuageSubnet()
        nuagegroup = nuagelib.NuageGroup()

        if shared:
            # Get the id for grp 'everybody'
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            response = self.restproxy.rest_call(
                'GET', nuagegroup.list_resource(), '',
                nuagegroup.extra_headers_get_for_everybody())
            if not nuagegroup.validate(response):
                raise restproxy.RESTProxyError(nuagegroup.error_msg)
            nuage_all_groupid = nuagegroup.get_groupid(response)

        response = self.restproxy. \
            rest_call('GET', nuagesubn.get_resource(nuage_subnetid),
                      '')
        if not nuagesubn.validate(response):
            nuagel2dom = nuagelib.NuageL2Domain()
            response = self.restproxy. \
                rest_call('GET', nuagel2dom.get_resource(nuage_subnetid),
                          '')
            if not nuagel2dom.validate(response):
                raise restproxy.RESTProxyError(nuagel2dom.error_msg)
            if shared:
                self.create_permission(nuage_subnetid,
                                       nuage_all_groupid,
                                       tenant,
                                       perm_on='l2domains')
            else:
                self.create_permission(nuage_subnetid,
                                       nuage_gid,
                                       tenant,
                                       perm_on='l2domains')
            return nuage_uid, nuage_gid
        else:
            if shared:
                self.create_permission(nuagesubn.get_parentzone(response),
                                       nuage_all_groupid, tenant)
            else:
                self.create_permission(nuagesubn.get_parentzone(response),
                                       nuage_gid, tenant)
            return nuage_uid, nuage_gid
Пример #2
0
def get_group_details(restproxy_serv, tenant, net_partition_id):
    req_params = {'net_partition_id': net_partition_id, 'name': tenant}
    nuagegroup = nuagelib.NuageGroup(create_params=req_params)
    nuage_grp_extra_headers = nuagegroup.extra_headers_get_by_name()
    groups = restproxy_serv.get(nuagegroup.post_resource(),
                                extra_headers=nuage_grp_extra_headers)
    # only if we have a response find the grp else return None
    return groups[0] if groups else None
Пример #3
0
 def delete_group(self, id):
     if id is None:
         return
     nuagegroup = nuagelib.NuageGroup()
     response = self.restproxy.rest_call('DELETE',
                                         nuagegroup.delete_resource(id), '')
     if not nuagegroup.delete_validate(response):
         LOG.error('Error in deleting group %s', id)
         raise restproxy.RESTProxyError(nuagegroup.error_msg)
     LOG.debug('Group %s deleted from VSD', id)
Пример #4
0
def get_group_id(restproxy_serv, tenant, net_partition_id):
    req_params = {'net_partition_id': net_partition_id, 'name': tenant}
    nuagegroup = nuagelib.NuageGroup(create_params=req_params)
    nuage_grp_extra_headers = nuagegroup.extra_headers_get_by_name()
    grp_resp = restproxy_serv.rest_call('GET',
                                        nuagegroup.post_resource(),
                                        '',
                                        extra_headers=nuage_grp_extra_headers)
    # only if we have a response find the grpID else return None
    if nuagegroup.get_validate(grp_resp):
        return nuagegroup.get_group_id(grp_resp)
Пример #5
0
 def _make_nuage_zone_shared(self, nuage_netpartid, nuage_zoneid,
                             neutron_tenant_id):
     params = {'net_partition_id': nuage_netpartid}
     nuagegroup = nuagelib.NuageGroup(create_params=params)
     groups = self.restproxy.get(
         nuagegroup.list_resource(),
         extra_headers=nuagegroup.extra_headers_get_for_everybody(),
         required=True)
     nuage_all_groupid = groups[0]['ID']
     self._attach_nuage_group_to_zone(nuage_all_groupid, nuage_zoneid,
                                      neutron_tenant_id)
Пример #6
0
    def _make_nuage_zone_shared(self, nuage_netpartid, nuage_zoneid,
                                neutron_tenant_id):
        params = {'net_partition_id': nuage_netpartid}
        nuagegroup = nuagelib.NuageGroup(create_params=params)
        response = self.restproxy.rest_call(
            'GET', nuagegroup.list_resource(), '',
            nuagegroup.extra_headers_get_for_everybody())
        if not nuagegroup.validate(response):
            raise restproxy.RESTProxyError(nuagegroup.error_msg)

        nuage_all_groupid = nuagegroup.get_groupid(response)
        self._attach_nuage_group_to_zone(nuage_all_groupid, nuage_zoneid,
                                         neutron_tenant_id)
Пример #7
0
def change_perm_of_subns(restproxy_serv,
                         nuage_npid,
                         nuage_subnetid,
                         shared,
                         tenant_id,
                         remove_everybody=False):
    if shared:
        params = {'net_partition_id': nuage_npid}
        nuagegroup = nuagelib.NuageGroup(create_params=params)
        response = restproxy_serv.rest_call(
            'GET', nuagegroup.list_resource(), '',
            nuagegroup.extra_headers_get_for_everybody())
        if not nuagegroup.validate(response):
            raise restproxy.RESTProxyError(nuagegroup.error_msg)
        nuage_groupid = nuagegroup.get_groupid(response)
    else:
        nuage_userid, nuage_groupid = \
            create_usergroup(restproxy_serv, tenant_id, nuage_npid)
        if remove_everybody:
            params = {'l2dom_id': nuage_subnetid}
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_l2dom_id()
            response = restproxy_serv.rest_call('GET', resource, '')
            if not nuagepermission.validate(response):
                if response[0] == constants.RES_NOT_FOUND:
                    return
                raise restproxy.RESTProxyError(nuagepermission.error_msg,
                                               nuagepermission.vsd_error_code)
            permissions = response[3]
            for permission in permissions:
                if permission['permittedEntityName'] == "Everybody":
                    restproxy_serv.delete(
                        nuagepermission.delete_resource(permission['ID']))
                    break

    nuage_permission = nuagelib.NuagePermission()
    post_data = nuage_permission.perm_create_data(
        nuage_groupid, constants.NUAGE_PERMISSION_USE, tenant_id)
    resp = restproxy_serv.rest_call(
        'POST',
        nuage_permission.post_resource_by_parent_id('l2domains',
                                                    nuage_subnetid), post_data)
    if not nuage_permission.validate(resp):
        if (nuage_permission.get_error_code(resp) !=
                constants.CONFLICT_ERR_CODE):
            raise restproxy.RESTProxyError(nuage_permission.error_msg)
Пример #8
0
def change_perm_of_subns(restproxy_serv, nuage_npid, nuage_subnetid,
                         shared, tenant_id, remove_everybody=False):
    if shared:
        params = {
            'net_partition_id': nuage_npid
        }
        nuagegroup = nuagelib.NuageGroup(create_params=params)
        group = restproxy_serv.get(
            nuagegroup.list_resource(),
            nuagegroup.extra_headers_get_for_everybody(),
            required=True)[0]
        nuage_groupid = group['ID']
    else:
        nuage_userid, nuage_groupid = create_usergroup(restproxy_serv,
                                                       tenant_id, nuage_npid)
        if remove_everybody:
            params = {
                'l2dom_id': nuage_subnetid
            }
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_l2dom_id()
            try:
                permissions = restproxy_serv.get(resource, required=True)
            except restproxy.ResourceNotFoundException:
                return
            except restproxy.RESTProxyError:
                raise

            for permission in permissions:
                if permission['permittedEntityName'] == "Everybody":
                    restproxy_serv.delete(
                        nuagepermission.delete_resource(permission['ID']))
                    break

    nuage_permission = nuagelib.NuagePermission()
    post_data = nuage_permission.perm_create_data(
        nuage_groupid,
        constants.NUAGE_PERMISSION_USE,
        tenant_id)
    restproxy_serv.post(nuage_permission.post_resource_by_parent_id(
                        'l2domains', nuage_subnetid),
                        post_data)
Пример #9
0
    def _attach_nuage_group_to_l2domain(self, nuage_groupid, nuage_subnetid,
                                        nuage_npid, shared, neutron_tenant_id):
        if shared:
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            groups = self.restproxy.get(
                nuagegroup.list_resource(),
                extra_headers=nuagegroup.extra_headers_get_for_everybody(),
                required=True)
            nuage_groupid = groups[0]['ID'] if groups else None

        nuage_permission = nuagelib.NuagePermission()
        post_data = nuage_permission.perm_create_data(
            nuage_groupid, constants.NUAGE_PERMISSION_USE, neutron_tenant_id)
        try:
            self.restproxy.post(
                nuage_permission.post_resource_by_parent_id(
                    'l2domains', nuage_subnetid), post_data)
        except restproxy.RESTProxyError as e:
            if e.code != constants.CONFLICT_ERR_CODE:
                raise
Пример #10
0
    def attach_nuage_group_to_nuagenet(self, tenant, nuage_npid,
                                       nuage_subnetid, shared, tenant_name):
        nuage_uid, nuage_gid = helper.create_usergroup(self.restproxy, tenant,
                                                       nuage_npid, tenant_name)
        nuagesubn = nuagelib.NuageSubnet()

        if shared:
            # Get the id for grp 'everybody'
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            groups = self.restproxy.get(
                nuagegroup.list_resource(),
                extra_headers=nuagegroup.extra_headers_get_for_everybody(),
                required=True)
            nuage_all_groupid = groups[0]['ID'] if groups else None
        try:
            subnet = self.restproxy.get(nuagesubn.get_resource(nuage_subnetid),
                                        required=True)[0]
        except restproxy.ResourceNotFoundException:
            nuagel2dom = nuagelib.NuageL2Domain()
            self.restproxy.get(nuagel2dom.get_resource(nuage_subnetid),
                               required=True)
            if shared:
                self.create_permission(nuage_subnetid,
                                       nuage_all_groupid,
                                       tenant,
                                       perm_on='l2domains')
            else:
                self.create_permission(nuage_subnetid,
                                       nuage_gid,
                                       tenant,
                                       perm_on='l2domains')
            return nuage_uid, nuage_gid
        else:
            if shared:
                self.create_permission(subnet['parentID'], nuage_all_groupid,
                                       tenant)
            else:
                self.create_permission(subnet['parentID'], nuage_gid, tenant)
            return nuage_uid, nuage_gid
Пример #11
0
    def _attach_nuage_group_to_l2domain(self, nuage_groupid, nuage_subnetid,
                                        nuage_npid, shared, neutron_tenant_id):
        if shared:
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            response = self.restproxy.rest_call(
                'GET', nuagegroup.list_resource(), '',
                nuagegroup.extra_headers_get_for_everybody())
            if not nuagegroup.validate(response):
                raise restproxy.RESTProxyError(nuagegroup.error_msg)
            nuage_groupid = nuagegroup.get_groupid(response)

        nuage_permission = nuagelib.NuagePermission()
        post_data = nuage_permission.perm_create_data(
            nuage_groupid, constants.NUAGE_PERMISSION_USE, neutron_tenant_id)
        resp = self.restproxy.rest_call(
            'POST',
            nuage_permission.post_resource_by_parent_id(
                'l2domains', nuage_subnetid), post_data)
        if not nuage_permission.validate(resp):
            if (nuage_permission.get_error_code(resp) !=
                    constants.CONFLICT_ERR_CODE):
                raise restproxy.RESTProxyError(nuage_permission.error_msg)
Пример #12
0
def create_usergroup(restproxy_serv,
                     tenant,
                     net_partition_id,
                     tenant_name=None):
    result = _get_usergroup_details(restproxy_serv, tenant, net_partition_id)

    if result:
        user_details, group_details = result
        if not user_details['externalID']:
            nuageuser = nuagelib.NuageUser()
            restproxy_serv.put(
                nuageuser.user_resource(user_details.get('ID')) +
                "?responseChoice=1",
                nuageuser.update_data('externalID', tenant + '@openstack'))
        if not group_details['externalID']:
            nuagegroup = nuagelib.NuageGroup()
            restproxy_serv.put(
                nuagegroup.group_resource(group_details.get('ID')) +
                "?responseChoice=1",
                nuagegroup.update_data('externalID', tenant + '@openstack'))
        if tenant_name is not None and (
                not group_details['description']
                or group_details['description'] != tenant_name):
            nuagegroup = nuagelib.NuageGroup()
            restproxy_serv.put(
                nuagegroup.group_resource(group_details.get('ID')) +
                "?responseChoice=1",
                nuagegroup.update_data('description', tenant_name))
        return user_details.get('ID'), group_details.get('ID')
    else:
        req_params = {
            'net_partition_id': net_partition_id,
            'name': tenant,
            'externalID': tenant + '@openstack',
            'description': tenant_name,
        }
        nuagegroup = nuagelib.NuageGroup(create_params=req_params)
        nuageuser = nuagelib.NuageUser(create_params=req_params)
        nuage_userid_list = []
        try:
            user = restproxy_serv.post(nuageuser.ent_post_resource(),
                                       nuageuser.post_data())[0]
            user_id = user['ID']
            LOG.debug('User %s created in VSD', user_id)
            nuage_userid_list.append(user_id)
        except restproxy.RESTProxyError as e:
            if e.code != constants.CONFLICT_ERR_CODE:
                raise
            else:
                user_id = get_user_id(restproxy_serv, tenant, '',
                                      net_partition_id, False)
                LOG.debug('User %s already exists in VSD', user_id)

        # Add tenant as a group
        try:
            group = restproxy_serv.post(nuagegroup.post_resource(),
                                        nuagegroup.post_data())[0]
            group_id = group['ID']
            LOG.debug('Group %s created in VSD', group_id)
        except restproxy.RESTProxyError as e:
            if e.code != constants.CONFLICT_ERR_CODE:
                raise
            else:
                group_id = get_group_id(restproxy_serv, tenant,
                                        net_partition_id)
                LOG.debug('Group %s already exists in VSD', group_id)

                # Group exists, so add the user to the existing user list
                ext_user_list = get_user_id_list(restproxy_serv, group_id,
                                                 net_partition_id)
                if ext_user_list:
                    LOG.debug('Group %(grp)s has users %(usr)s associated', {
                        'grp': group_id,
                        'usr': ext_user_list
                    })
                    nuage_userid_list.extend(ext_user_list)

        # Add user to the group
        nuageuser.set_group_id(group_id)
        data = nuage_userid_list
        restproxy_serv.put(nuageuser.group_post_resource(), data)
        return user_id, group_id
Пример #13
0
def create_usergroup(restproxy_serv, tenant, net_partition_id):
    result = _get_usergroup_details(restproxy_serv, tenant, net_partition_id)

    if result:
        if not result[0]['externalID']:
            nuageuser = nuagelib.NuageUser()
            user_resp = restproxy_serv.rest_call(
                'PUT', nuageuser.user_resource(result[0].get('ID')),
                nuageuser.update_data(tenant + '@openstack'))
        if not result[1]['externalID']:
            nuagegroup = nuagelib.NuageGroup()
            group_resp = restproxy_serv.rest_call(
                'PUT', nuagegroup.group_resource(result[1].get('ID')),
                nuagegroup.update_data(tenant + '@openstack'))
        return result[0].get('ID'), result[1].get('ID')
    else:
        req_params = {
            'net_partition_id': net_partition_id,
            'name': tenant,
            'externalID': tenant + '@openstack'
        }
        nuagegroup = nuagelib.NuageGroup(create_params=req_params)
        nuageuser = nuagelib.NuageUser(create_params=req_params)
        nuage_userid_list = []
        user_resp = restproxy_serv.rest_call('POST',
                                             nuageuser.ent_post_resource(),
                                             nuageuser.post_data())

        if not nuageuser.validate(user_resp):
            error_code = nuageuser.get_error_code(user_resp)
            if error_code != constants.CONFLICT_ERR_CODE:
                raise restproxy.RESTProxyError(nuagegroup.error_msg)

            user_id = get_user_id(restproxy_serv, tenant, '', net_partition_id,
                                  False)
            LOG.debug('User %s already exists in VSD', user_id)
        else:
            user_id = nuageuser.get_userid(user_resp)
            LOG.debug('User %s created in VSD', user_id)

        nuage_userid_list.append(user_id)

        # Add tenant as a group
        group_resp = restproxy_serv.rest_call('POST',
                                              nuagegroup.post_resource(),
                                              nuagegroup.post_data())
        if not nuagegroup.validate(group_resp):
            error_code = nuageuser.get_error_code(group_resp)
            if error_code != constants.CONFLICT_ERR_CODE:
                raise restproxy.RESTProxyError(nuagegroup.error_msg)
            group_id = get_group_id(restproxy_serv, tenant, net_partition_id)
            LOG.debug('Group %s already exists in VSD', group_id)

            # Group exists, so add the user to the existing user list
            ext_user_list = get_user_list(restproxy_serv, group_id,
                                          net_partition_id)
            if ext_user_list:
                LOG.debug('Group %(grp)s has users %(usr)s associated', {
                    'grp': group_id,
                    'usr': ext_user_list
                })
                nuage_userid_list.extend(ext_user_list)
        else:
            group_id = nuagegroup.get_groupid(group_resp)
            LOG.debug('Group %s created in VSD', group_id)

        # Add user to the group
        nuageuser.set_group_id(group_id)
        data = nuage_userid_list
        restproxy_serv.rest_call('PUT', nuageuser.group_post_resource(), data)

        return user_id, group_id
Пример #14
0
 def delete_group(self, id):
     if id is None:
         return
     nuagegroup = nuagelib.NuageGroup()
     self.restproxy.delete(nuagegroup.delete_resource(id))
     LOG.debug('Group %s deleted from VSD', id)