def _create_namespace(self, ns_name, ns_eval_vn_dict, is_isolated=False, labels={}): ns_uuid = str(uuid.uuid4()) ns_add_event = self.create_add_namespace_event(ns_name, ns_uuid) ns_object = ns_add_event['object'] ns_object['spec'] = {} ns_meta = ns_object['metadata'] ns_meta['annotations'] = {} ns_meta['name'] = ns_name ns_meta['uid'] = ns_uuid ns_meta['namespace'] = ns_name ns_meta['labels'] = labels if ns_eval_vn_dict: ns_meta['annotations']['opencontrail.org/network'] = \ ns_eval_vn_dict if is_isolated: ns_meta['annotations']['opencontrail.org/isolation'] = 'true' NamespaceKM.delete(ns_name) ns = NamespaceKM.locate(ns_name, ns_object) self.enqueue_event(ns_add_event) self.wait_for_all_tasks_done() return ns.uuid
def test_add_namespace_with_custom_network_annotation(self): kube_config.VncKubernetesConfig.args().cluster_project = None # Create network for Pod proj_fq_name = ['default-domain', 'default'] proj_obj = self._vnc_lib.project_read(fq_name=proj_fq_name) self.create_network('network1', proj_obj) # Add first namespace eval_vn_dict = \ '{"domain":"default-domain","project":"default","name":"network1"}' ns1_name = 'namespace1' ns1_uuid = str(uuid.uuid4()) ns1_add_event = self.create_add_namespace_event(ns1_name, ns1_uuid) ns1_annotations = { 'opencontrail.org/network': eval_vn_dict } ns1_add_event['object']['metadata']['annotations'] = ns1_annotations NamespaceKM.locate(ns1_uuid, ns1_add_event['object']) self.enqueue_event(ns1_add_event) self.wait_for_all_tasks_done() proj = self._vnc_lib.project_read(fq_name=["default-domain", ns1_name]) self.assertIsNotNone(proj) self.assertEquals(ns1_name, proj.name) fqname = ['default-domain', 'default', 'network1'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals('network1', vn.name)
def test_namespace_is_isolated(self): annotations = {'opencontrail.org/isolation': "true"} # Add first namespace ns1_name = "isolated_ns1" ns1_uuid = str(uuid.uuid4()) ns1_add_event = self.create_add_namespace_event(ns1_name, ns1_uuid) ns1_add_event['object']['metadata']['annotations'] = annotations NamespaceKM.locate(ns1_uuid, ns1_add_event['object']) self.enqueue_event(ns1_add_event) time.sleep(2) # Add second namespace ns2_name = 'isolated_ns2' ns2_uuid = str(uuid.uuid4()) ns2_add_event = self.create_add_namespace_event(ns2_name, ns2_uuid) ns2_add_event['object']['metadata']['annotations'] = annotations NamespaceKM.locate(ns2_uuid, ns2_add_event['object']) self.enqueue_event(ns2_add_event) time.sleep(2) fqname = ['default-domain', ns1_name, ns1_name + '-vn'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals(ns1_name + '-vn', vn.name) fqname = ['default-domain', ns2_name, ns2_name + '-vn'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals(ns2_name + '-vn', vn.name)
def _create_and_add_namespace(self, name, spec, annotations, locate=False): ns_uuid = str(uuid.uuid4()) ns_meta = {'name': name, 'uid': ns_uuid} if annotations: ns_meta['annotations'] = annotations ns_add_event = self.create_event('Namespace', spec, ns_meta, 'ADDED') if locate: NamespaceKM.locate(name, ns_add_event['object']) self.enqueue_event(ns_add_event) self.wait_for_all_tasks_done() return ns_uuid
def test_add_namespace(self): ns_uuid = self._create_and_add_namespace(self.ns_name, {}, None) # Check for project proj = self._vnc_lib.project_read(fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace(self): ns_uuid = self._create_and_add_namespace(self.ns_name, {}, None) # Check for project proj = self._vnc_lib.project_read( fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace(self): ns_uuid = self._create_and_add_namespace(self.ns_name, {}, None, locate=True) # Check for project proj_name = kube_config.VncKubernetesConfig.cluster_project_name( self.cluster_project) proj = self._vnc_lib.project_read(fq_name=["default-domain", proj_name]) self.assertIsNotNone(proj) self.assertEquals(proj_name, proj.name) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace(self): ns_uuid = self._create_and_add_namespace(self.ns_name, {}, None, locate=True) # Check for project proj_name = kube_config.VncKubernetesConfig.cluster_project_name( self.cluster_project) proj = self._vnc_lib.project_read( fq_name=["default-domain", proj_name]) self.assertIsNotNone(proj) self.assertEquals(proj_name, proj.name) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def _mod_namespace(self, uuid, name, spec, annotations, labels=None, locate=False): ns_uuid = uuid ns_meta = {'name': name, 'uid': ns_uuid} if annotations: ns_meta['annotations'] = annotations if labels: ns_meta['labels'] = labels ns_mod_event = self.create_event('Namespace', spec, ns_meta, 'MODIFIED') if locate: NamespaceKM.locate(name, ns_mod_event['object']) self.enqueue_event(ns_mod_event) self.wait_for_all_tasks_done()
def test_add_namespace_with_isolation_annotation(self): ns_annotations = {'opencontrail.org/isolation': "true"} ns_uuid = self._create_and_add_namespace(self.ns_name, {}, ns_annotations, True) proj = self._vnc_lib.project_read(fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) fqname = ['default-domain', self.cluster_project, self.ns_name+'-vn'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace_with_isolation_annotation(self): ns_annotations = {'opencontrail.org/isolation': "true"} ns_uuid = self._create_and_add_namespace(self.ns_name, {}, ns_annotations, True) proj = self._vnc_lib.project_read( fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) fqname = ['default-domain', self.cluster_project, self.ns_name + '-vn'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace_scaling(self): scale = 100 ns_uuids = [] for i in xrange(scale): ns_uuid = self._create_and_add_namespace(self.ns_name + str(i), {}, None) proj = self._vnc_lib.project_read(fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) ns_uuids.append(ns_uuid) for i, ns_uuid in enumerate(ns_uuids): ns = NamespaceKM.find_by_name_or_uuid(ns_uuid) if ns: NamespaceKM.delete(ns_uuid) NamespaceKM.delete(ns.name)
def test_add_namespace_scaling(self): scale = 100 ns_uuids = [] for i in xrange(scale): ns_uuid = self._create_and_add_namespace(self.ns_name + str(i), {}, None, locate=True) proj = self._vnc_lib.project_read(fq_name=["default-domain", self.cluster_project]) self.assertIsNotNone(proj) self.assertEquals(self.cluster_project, proj.name) ns_uuids.append(ns_uuid) for i, ns_uuid in enumerate(ns_uuids): ns = NamespaceKM.find_by_name_or_uuid(ns_uuid) if ns: NamespaceKM.delete(ns_uuid) NamespaceKM.delete(ns.name)
def test_add_namespace_with_isolation_annotation(self): ns_annotations = {'opencontrail.org/isolation': "true"} ns_uuid = self._create_and_add_namespace(self.ns_name, {}, ns_annotations, locate=True) proj_name = kube_config.VncKubernetesConfig.cluster_project_name( self.cluster_project) proj = self._vnc_lib.project_read(fq_name=["default-domain", proj_name]) self.assertIsNotNone(proj) self.assertEquals(proj_name, proj.name) fqname = ['default-domain', proj_name, \ self.cluster_name() + '-' + self.ns_name + '-pod-network'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace_with_isolation_annotation(self): ns_annotations = {'opencontrail.org/isolation': "true"} ns_uuid = self._create_and_add_namespace(self.ns_name, {}, ns_annotations, locate=True) proj_name = kube_config.VncKubernetesConfig.cluster_project_name( self.cluster_project) proj = self._vnc_lib.project_read( fq_name=["default-domain", proj_name]) self.assertIsNotNone(proj) self.assertEquals(proj_name, proj.name) fqname = ['default-domain', proj_name, \ self.cluster_name() + '-' + self.ns_name + '-pod-network'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) NamespaceKM.delete(ns_uuid) NamespaceKM.delete(self.ns_name)
def test_add_namespace_with_isolation_annotation_true(self): kube_config.VncKubernetesConfig.args().cluster_project = None annotations = { 'opencontrail.org/isolation': "true" } # Add first namespace ns1_name = "isolated_ns1" ns1_uuid = str(uuid.uuid4()) ns1_add_event = self.create_add_namespace_event(ns1_name, ns1_uuid) ns1_add_event['object']['metadata']['annotations'] = annotations NamespaceKM.locate(ns1_uuid, ns1_add_event['object']) self.enqueue_event(ns1_add_event) self.wait_for_all_tasks_done() proj = self._vnc_lib.project_read(fq_name=["default-domain", ns1_name]) self.assertIsNotNone(proj) self.assertEquals(ns1_name, proj.name) fqname = ['default-domain', ns1_name, ns1_name+'-vn'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals(ns1_name+'-vn', vn.name)
def test_namespace_custom_network(self): # Create network for Pod proj_fq_name = ['default-domain', 'default'] proj_obj = self._vnc_lib.project_read(fq_name=proj_fq_name) vn_obj = self.create_network('network1', proj_obj) # Add first namespace eval_vn_dict = '{"domain":"default-domain","project":"default","name":"network1"}' ns1_name = 'namespace1' ns1_uuid = str(uuid.uuid4()) ns1_add_event = self.create_add_namespace_event(ns1_name, ns1_uuid) ns1_annotations = {'opencontrail.org/network': eval_vn_dict} ns1_add_event['object']['metadata']['annotations'] = ns1_annotations NamespaceKM.locate(ns1_uuid, ns1_add_event['object']) self.enqueue_event(ns1_add_event) time.sleep(2) # Add second namespace vn_obj = self.create_network('network2', proj_obj) eval_vn_dict = '{"domain":"default-domain","project":"default","name":"network2"}' ns2_name = 'isolated_ns2' ns2_uuid = str(uuid.uuid4()) ns2_add_event = self.create_add_namespace_event(ns2_name, ns2_uuid) ns2_annotations = {'opencontrail.org/network': eval_vn_dict} ns2_add_event['object']['metadata']['annotations'] = ns2_annotations NamespaceKM.locate(ns2_uuid, ns2_add_event['object']) self.enqueue_event(ns2_add_event) time.sleep(2) fqname = ['default-domain', 'default', 'network1'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals('network1', vn.name) fqname = ['default-domain', 'default', 'network2'] vn = self._vnc_lib.virtual_network_read(fq_name=fqname) self.assertIsNotNone(vn) self.assertEquals('network2', vn.name)