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
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
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)
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)
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)
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)
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)
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)
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
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
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)
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
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
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)