Merge "Add vpc support for group/lb vs"
This commit is contained in:
commit
a797301b8e
@ -24,6 +24,7 @@ from vmware_nsxlib.v3 import nsx_constants
|
|||||||
from vmware_nsxlib.v3.policy import constants
|
from vmware_nsxlib.v3.policy import constants
|
||||||
from vmware_nsxlib.v3.policy import lb_defs
|
from vmware_nsxlib.v3.policy import lb_defs
|
||||||
TEST_TENANT = 'test'
|
TEST_TENANT = 'test'
|
||||||
|
TEST_VPC_TENANT = 'orgs/default/projects/proj-2/vpcs/vpc-1234'
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyLBClientSSLProfileApi(test_resources.NsxPolicyLibTestCase):
|
class TestPolicyLBClientSSLProfileApi(test_resources.NsxPolicyLibTestCase):
|
||||||
@ -1176,6 +1177,102 @@ class TestPolicyLBVirtualServer(test_resources.NsxPolicyLibTestCase):
|
|||||||
self.assert_called_with_def(api_call, expected_def)
|
self.assert_called_with_def(api_call, expected_def)
|
||||||
self.assertIsNotNone(result)
|
self.assertIsNotNone(result)
|
||||||
|
|
||||||
|
def test_create_with_project_in_path(self):
|
||||||
|
name = 'd1'
|
||||||
|
description = 'desc'
|
||||||
|
obj_id = '111'
|
||||||
|
waf_profile_id = 'waf'
|
||||||
|
waf_profile_path = self.policy_lib.waf_profile.get_path(
|
||||||
|
profile_id=waf_profile_id, tenant=TEST_TENANT)
|
||||||
|
waf_profile_binding = lb_defs.WAFProfileBindingDef(
|
||||||
|
waf_profile_path=waf_profile_path)
|
||||||
|
app_profile_id = "application_profile_id"
|
||||||
|
lb_persistence_profile_id = 'lb_persistence_profile_id'
|
||||||
|
lbs_id = 'lbs_id'
|
||||||
|
lb_acl = self.resourceApi.build_access_list_control(
|
||||||
|
constants.ACTION_ALLOW, 'fake_group_path', True)
|
||||||
|
with mock.patch.object(self.policy_api,
|
||||||
|
"create_or_update") as api_call:
|
||||||
|
self.resourceApi.update(
|
||||||
|
name=name,
|
||||||
|
virtual_server_id=obj_id,
|
||||||
|
waf_profile_binding=waf_profile_binding,
|
||||||
|
description=description,
|
||||||
|
access_list_control=lb_acl,
|
||||||
|
application_profile_id=app_profile_id,
|
||||||
|
lb_persistence_profile_id=lb_persistence_profile_id,
|
||||||
|
lb_service_id='lbs_id',
|
||||||
|
tenant=TEST_VPC_TENANT)
|
||||||
|
|
||||||
|
expected_def = lb_defs.LBVirtualServerDef(
|
||||||
|
nsx_version=self.policy_lib.get_version(),
|
||||||
|
virtual_server_id=obj_id, name=name, description=description,
|
||||||
|
waf_profile_binding=waf_profile_binding,
|
||||||
|
access_list_control=lb_acl.get_obj_dict(),
|
||||||
|
application_profile_id=app_profile_id,
|
||||||
|
lb_persistence_profile_id=lb_persistence_profile_id,
|
||||||
|
lb_service_id='lbs_id',
|
||||||
|
tenant=TEST_VPC_TENANT)
|
||||||
|
self.assert_called_with_def(api_call, expected_def)
|
||||||
|
body = expected_def.get_obj_dict()
|
||||||
|
lb_pers_prof_path = '/infra/lb-persistence-profiles/%s' \
|
||||||
|
% (lb_persistence_profile_id)
|
||||||
|
self.assertEqual(body['lb_persistence_profile_path'],
|
||||||
|
lb_pers_prof_path)
|
||||||
|
app_profile_path = '/infra/lb-app-profiles/%s' % app_profile_id
|
||||||
|
self.assertEqual(body['application_profile_path'],
|
||||||
|
app_profile_path)
|
||||||
|
lb_service_path = '/%s/lb-services/%s' % (TEST_VPC_TENANT, lbs_id)
|
||||||
|
self.assertEqual(body['lb_service_path'],
|
||||||
|
lb_service_path)
|
||||||
|
|
||||||
|
name = 'd1'
|
||||||
|
description = 'desc'
|
||||||
|
obj_id = '111'
|
||||||
|
waf_profile_id = 'waf'
|
||||||
|
waf_profile_path = self.policy_lib.waf_profile.get_path(
|
||||||
|
profile_id=waf_profile_id, tenant=TEST_TENANT)
|
||||||
|
waf_profile_binding = lb_defs.WAFProfileBindingDef(
|
||||||
|
waf_profile_path=waf_profile_path)
|
||||||
|
app_profile_id = "application_profile_id"
|
||||||
|
lb_acl = self.resourceApi.build_access_list_control(
|
||||||
|
constants.ACTION_ALLOW, 'fake_group_path', True)
|
||||||
|
with mock.patch.object(self.policy_api,
|
||||||
|
"create_or_update") as api_call:
|
||||||
|
result = self.resourceApi.create_or_overwrite(
|
||||||
|
name,
|
||||||
|
virtual_server_id=obj_id,
|
||||||
|
waf_profile_binding=waf_profile_binding,
|
||||||
|
description=description,
|
||||||
|
access_list_control=lb_acl,
|
||||||
|
application_profile_id=app_profile_id,
|
||||||
|
lb_persistence_profile_id=lb_persistence_profile_id,
|
||||||
|
lb_service_id='lbs_id',
|
||||||
|
tenant=TEST_TENANT)
|
||||||
|
expected_def = lb_defs.LBVirtualServerDef(
|
||||||
|
nsx_version=self.policy_lib.get_version(),
|
||||||
|
virtual_server_id=obj_id, name=name, description=description,
|
||||||
|
waf_profile_binding=waf_profile_binding,
|
||||||
|
application_profile_id=app_profile_id,
|
||||||
|
lb_persistence_profile_id=lb_persistence_profile_id,
|
||||||
|
lb_service_id='lbs_id',
|
||||||
|
access_list_control=lb_acl.get_obj_dict(),
|
||||||
|
tenant=TEST_TENANT)
|
||||||
|
self.assert_called_with_def(api_call, expected_def)
|
||||||
|
self.assertEqual(obj_id, result)
|
||||||
|
self.assert_called_with_def(api_call, expected_def)
|
||||||
|
body = expected_def.get_obj_dict()
|
||||||
|
lb_pers_prof_path = '/test/lb-persistence-profiles/%s' \
|
||||||
|
% (lb_persistence_profile_id)
|
||||||
|
self.assertEqual(body['lb_persistence_profile_path'],
|
||||||
|
lb_pers_prof_path)
|
||||||
|
app_profile_path = '/test/lb-app-profiles/%s' % app_profile_id
|
||||||
|
self.assertEqual(body['application_profile_path'],
|
||||||
|
app_profile_path)
|
||||||
|
lb_service_path = '/%s/lb-services/%s' % (TEST_TENANT, lbs_id)
|
||||||
|
self.assertEqual(body['lb_service_path'],
|
||||||
|
lb_service_path)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
obj_id = '111'
|
obj_id = '111'
|
||||||
with mock.patch.object(self.policy_api, "delete") as api_call:
|
with mock.patch.object(self.policy_api, "delete") as api_call:
|
||||||
|
@ -27,6 +27,7 @@ from vmware_nsxlib.v3.policy import core_defs
|
|||||||
from vmware_nsxlib.v3.policy import core_resources
|
from vmware_nsxlib.v3.policy import core_resources
|
||||||
|
|
||||||
TEST_TENANT = 'test'
|
TEST_TENANT = 'test'
|
||||||
|
TEST_VPC_TENANT = 'orgs/default/projects/proj-2/vpcs/vpc-1234'
|
||||||
|
|
||||||
|
|
||||||
class NsxPolicyLibTestCase(policy_testcase.TestPolicyApi):
|
class NsxPolicyLibTestCase(policy_testcase.TestPolicyApi):
|
||||||
@ -255,6 +256,50 @@ class TestPolicyGroup(NsxPolicyLibTestCase):
|
|||||||
self.assert_called_with_def(api_call, expected_def)
|
self.assert_called_with_def(api_call, expected_def)
|
||||||
self.assertEqual(group_id, result)
|
self.assertEqual(group_id, result)
|
||||||
|
|
||||||
|
def test_path_id(self):
|
||||||
|
domain_id = '111'
|
||||||
|
name = 'g1'
|
||||||
|
description = 'desc'
|
||||||
|
group_id = '222'
|
||||||
|
expected_def = core_defs.GroupDef(domain_id=domain_id,
|
||||||
|
group_id=group_id,
|
||||||
|
name=name,
|
||||||
|
description=description,
|
||||||
|
conditions=[],
|
||||||
|
tenant=TEST_VPC_TENANT)
|
||||||
|
path_ids = expected_def.path_ids
|
||||||
|
self.assertEqual(path_ids, ('tenant', 'group_id'))
|
||||||
|
expected_def = core_defs.GroupDef(domain_id=domain_id,
|
||||||
|
group_id=group_id,
|
||||||
|
name=name,
|
||||||
|
description=description,
|
||||||
|
conditions=[],
|
||||||
|
tenant=constants.POLICY_INFRA_TENANT)
|
||||||
|
path_ids = expected_def.path_ids
|
||||||
|
self.assertEqual(path_ids, ('tenant', 'domain_id', 'group_id'))
|
||||||
|
|
||||||
|
def test_path_pattern(self):
|
||||||
|
domain_id = '111'
|
||||||
|
name = 'g1'
|
||||||
|
description = 'desc'
|
||||||
|
group_id = '222'
|
||||||
|
expected_def = core_defs.GroupDef(domain_id=domain_id,
|
||||||
|
group_id=group_id,
|
||||||
|
name=name,
|
||||||
|
description=description,
|
||||||
|
conditions=[],
|
||||||
|
tenant=TEST_VPC_TENANT)
|
||||||
|
path_pattern = expected_def.path_pattern
|
||||||
|
self.assertEqual(path_pattern, '%s/groups/')
|
||||||
|
expected_def = core_defs.GroupDef(domain_id=domain_id,
|
||||||
|
group_id=group_id,
|
||||||
|
name=name,
|
||||||
|
description=description,
|
||||||
|
conditions=[],
|
||||||
|
tenant=constants.POLICY_INFRA_TENANT)
|
||||||
|
path_pattern = expected_def.path_pattern
|
||||||
|
self.assertEqual(path_pattern, '%s/domains/%s/groups/')
|
||||||
|
|
||||||
def test_create_without_id(self):
|
def test_create_without_id(self):
|
||||||
domain_id = '111'
|
domain_id = '111'
|
||||||
name = 'g1'
|
name = 'g1'
|
||||||
|
@ -170,7 +170,6 @@ class ResourceDef(object, metaclass=abc.ABCMeta):
|
|||||||
def get_tenant(self):
|
def get_tenant(self):
|
||||||
if self.attrs.get('tenant'):
|
if self.attrs.get('tenant'):
|
||||||
return self.attrs.get('tenant')
|
return self.attrs.get('tenant')
|
||||||
|
|
||||||
return constants.POLICY_INFRA_TENANT
|
return constants.POLICY_INFRA_TENANT
|
||||||
|
|
||||||
def get_section_path(self):
|
def get_section_path(self):
|
||||||
@ -312,6 +311,13 @@ class ResourceDef(object, metaclass=abc.ABCMeta):
|
|||||||
def set_default_mandatory_vals(self):
|
def set_default_mandatory_vals(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def is_vpc_tenant(self):
|
||||||
|
tenant = self.get_tenant()
|
||||||
|
if tenant:
|
||||||
|
return '/projects/' in tenant
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class TenantDef(ResourceDef):
|
class TenantDef(ResourceDef):
|
||||||
@property
|
@property
|
||||||
@ -1808,11 +1814,17 @@ class GroupDef(ResourceDef):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def path_pattern(self):
|
def path_pattern(self):
|
||||||
return DOMAINS_PATH_PATTERN + "%s/groups/"
|
if self.is_vpc_tenant():
|
||||||
|
return TENANTS_PATH_PATTERN + "groups/"
|
||||||
|
else:
|
||||||
|
return DOMAINS_PATH_PATTERN + "%s/groups/"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path_ids(self):
|
def path_ids(self):
|
||||||
return ('tenant', 'domain_id', 'group_id')
|
if self.is_vpc_tenant():
|
||||||
|
return ('tenant', 'group_id')
|
||||||
|
else:
|
||||||
|
return ('tenant', 'domain_id', 'group_id')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def resource_type():
|
def resource_type():
|
||||||
|
@ -23,8 +23,11 @@ LOG = logging.getLogger(__name__)
|
|||||||
|
|
||||||
TENANTS_PATH_PATTERN = "%s/"
|
TENANTS_PATH_PATTERN = "%s/"
|
||||||
LB_VIRTUAL_SERVERS_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-virtual-servers/"
|
LB_VIRTUAL_SERVERS_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-virtual-servers/"
|
||||||
|
VPC_LB_VIRTUAL_SERVERS_PATH_PATTERN = (TENANTS_PATH_PATTERN +
|
||||||
|
"vpc-lb-virtual-servers/")
|
||||||
LB_SERVICES_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-services/"
|
LB_SERVICES_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-services/"
|
||||||
LB_POOL_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-pools/"
|
LB_POOL_PATH_PATTERN = TENANTS_PATH_PATTERN + "lb-pools/"
|
||||||
|
VPC_LB_POOL_PATH_PATTERN = TENANTS_PATH_PATTERN + "vpc-lb-pools/"
|
||||||
LB_APP_PROFILE_PATTERN = TENANTS_PATH_PATTERN + "lb-app-profiles/"
|
LB_APP_PROFILE_PATTERN = TENANTS_PATH_PATTERN + "lb-app-profiles/"
|
||||||
LB_MONITOR_PROFILE_PATTERN = TENANTS_PATH_PATTERN + "lb-monitor-profiles/"
|
LB_MONITOR_PROFILE_PATTERN = TENANTS_PATH_PATTERN + "lb-monitor-profiles/"
|
||||||
LB_CLIENT_SSL_PROFILE_PATTERN = (TENANTS_PATH_PATTERN +
|
LB_CLIENT_SSL_PROFILE_PATTERN = (TENANTS_PATH_PATTERN +
|
||||||
@ -228,6 +231,8 @@ class LBPoolDef(ResourceDef):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def path_pattern(self):
|
def path_pattern(self):
|
||||||
|
if self.is_vpc_tenant():
|
||||||
|
return VPC_LB_POOL_PATH_PATTERN
|
||||||
return LB_POOL_PATH_PATTERN
|
return LB_POOL_PATH_PATTERN
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -262,6 +267,8 @@ class LBVirtualServerDef(ResourceDef):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def path_pattern(self):
|
def path_pattern(self):
|
||||||
|
if self.is_vpc_tenant():
|
||||||
|
return VPC_LB_VIRTUAL_SERVERS_PATH_PATTERN
|
||||||
return LB_VIRTUAL_SERVERS_PATH_PATTERN
|
return LB_VIRTUAL_SERVERS_PATH_PATTERN
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -305,9 +312,13 @@ class LBVirtualServerDef(ResourceDef):
|
|||||||
rule = rule.get_obj_dict()
|
rule = rule.get_obj_dict()
|
||||||
body['rules'].append(rule)
|
body['rules'].append(rule)
|
||||||
app_profile_id = self.get_attr('application_profile_id')
|
app_profile_id = self.get_attr('application_profile_id')
|
||||||
|
profile_tenant = self.get_tenant()
|
||||||
|
# vpc profile has different tenant with vpc itself
|
||||||
|
if self.is_vpc_tenant():
|
||||||
|
profile_tenant = constants.POLICY_INFRA_TENANT
|
||||||
if app_profile_id:
|
if app_profile_id:
|
||||||
app_profile_def = LBAppProfileBaseDef(
|
app_profile_def = LBAppProfileBaseDef(
|
||||||
lb_app_profile_id=app_profile_id, tenant=self.get_tenant())
|
lb_app_profile_id=app_profile_id, tenant=profile_tenant)
|
||||||
body['application_profile_path'] = (
|
body['application_profile_path'] = (
|
||||||
app_profile_def.get_resource_full_path())
|
app_profile_def.get_resource_full_path())
|
||||||
|
|
||||||
@ -318,7 +329,7 @@ class LBVirtualServerDef(ResourceDef):
|
|||||||
if lb_persistence_profile_id:
|
if lb_persistence_profile_id:
|
||||||
lb_persistence_profile_def = LBPersistenceProfileBase(
|
lb_persistence_profile_def = LBPersistenceProfileBase(
|
||||||
persistence_profile_id=lb_persistence_profile_id,
|
persistence_profile_id=lb_persistence_profile_id,
|
||||||
tenant=self.get_tenant())
|
tenant=profile_tenant)
|
||||||
path = lb_persistence_profile_def.get_resource_full_path()
|
path = lb_persistence_profile_def.get_resource_full_path()
|
||||||
body['lb_persistence_profile_path'] = path
|
body['lb_persistence_profile_path'] = path
|
||||||
if self.has_attr('lb_service_id'):
|
if self.has_attr('lb_service_id'):
|
||||||
|
Loading…
Reference in New Issue
Block a user