def _add_pod_to_service(self, service_id, pod_id, port=None, address=None): lb = LoadbalancerKM.get(service_id) if not lb: return vm = VirtualMachineKM.get(pod_id) host_vmi = None if not vm: if not self._args.host_network_service: return host_vmi = self._get_vmi_from_ip(address) if host_vmi == None: return else: vm = VirtualMachine(name="host", display_name="host") vm.virtual_machine_interfaces = [host_vmi] for lb_listener_id in lb.loadbalancer_listeners: pool = self._get_loadbalancer_pool(lb_listener_id, port) if not pool: continue for vmi_id in vm.virtual_machine_interfaces: if host_vmi == None: vmi = VirtualMachineInterfaceKM.get(vmi_id) else: vmi = self._vnc_lib.virtual_machine_interface_read( id=vmi_id) if not vmi: continue for member_id in pool.members: member = LoadbalancerMemberKM.get(member_id) if member and member.vmi == vmi_id: break else: self.logger.debug( "Creating LB member for Pod/VM: %s in LB: %s with " "target-port: %d" % (vm.fq_name, lb.name, port['port'])) member_obj = self._vnc_create_member( pool, pod_id, vmi_id, port['port']) try: vmi_obj = self._vnc_lib.virtual_machine_interface_read( id=vmi_id) except: raise # Attach the service label to underlying pod vmi. self._labels.append( vmi_id, self._labels.get_service_label(lb.service_name)) # Set tags on the vmi. self._vnc_lib.set_tags( vmi_obj, self._labels.get_labels_dict(vmi_id)) LoadbalancerMemberKM.locate(member_obj.uuid)
def test_get_candidates(self): self.vnc_mock.virtual_routers_list.return_value = VROUTER_LIST self.analytics_mock.side_effect = [RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS] vr_obj = VirtualRouter() vr_obj.get_virtual_machine_refs = mock.MagicMock( return_value=[{'uuid': 'fake_vm_uuid1'}]) self.vnc_mock.virtual_router_read.return_value = vr_obj vm_obj_1 = VirtualMachine() vm_obj_1.get_service_instance_refs = mock.MagicMock( return_value=[{'uuid': 'fake_si_uuid1'}]) vm_obj_2 = VirtualMachine() vm_obj_2.get_service_instance_refs = mock.MagicMock( return_value=[{'uuid': 'fake_si_uuid2'}]) self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] # Test the vrouters seected does not already have a VM of the same SI # schedule on it. expected_result = [["default-global-system-config", "vrouter3"]] self.assertEqual(self.scheduler._get_candidates('fake_si_uuid1', 'fake_vm_uuid2'), expected_result) self.analytics_mock.side_effect = [RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS] self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] # Test the same vrouter is return if the VM is already scheduled on # a running vrouter expected_result = [["default-global-system-config", "vrouter1"]] self.assertEqual(self.scheduler._get_candidates('fake_si_uuid1', 'fake_vm_uuid1'), expected_result)
def test_get_candidates(self): VROUTER_LIST = { "virtual-routers": [ { "href": "http://127.0.0.1:8082/virtual-router/uuid1", "fq_name": [ "default-global-system-config", "vrouter1" ], "uuid": "uuid1" }, { "href": "http://127.0.0.1:8082/virtual-router/uuid2", "fq_name": [ "default-global-system-config", "vrouter2" ], "uuid": "uuid2" }, { "href": "http://127.0.0.1:8082/virtual-router/uuid3", "fq_name": [ "default-global-system-config", "vrouter3" ], "uuid": "uuid3" } ] } self.vnc_mock.virtual_routers_list.return_value = VROUTER_LIST self.analytics_mock.side_effect = [RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS] vr_obj = VirtualRouter() vr_obj.get_virtual_machine_refs = mock.MagicMock( return_value=[{'uuid': 'fake_uuid'}]) self.vnc_mock.virtual_router_read.return_value = vr_obj vm_obj_1 = VirtualMachine() vm_obj_1.get_service_instance_refs = mock.MagicMock( return_value=[{'uuid': 'fake_uuid'}]) vm_obj_2 = VirtualMachine() vm_obj_2.get_service_instance_refs = mock.MagicMock( return_value=[{'uuid': 'fake_si_uuid'}]) self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] expected_result = [["default-global-system-config", "vrouter1"]] self.assertEqual(self.scheduler._get_candidates('fake_si_uuid'), expected_result)
def _create_vm(self, pod_namespace, pod_id, pod_name, labels): vm_name = VncCommon.make_name(pod_name, pod_id) display_name = VncCommon.make_display_name(pod_namespace, pod_name) vm_obj = VirtualMachine(name=vm_name, display_name=display_name) vm_obj.uuid = pod_id VirtualMachineKM.add_annotations(self, vm_obj, pod_namespace, pod_name, k8s_uuid=str(pod_id), labels=json.dumps(labels)) try: self._vnc_lib.virtual_machine_create(vm_obj) except RefsExistError: vm_obj = self._vnc_lib.virtual_machine_read(id=pod_id) VirtualMachineKM.locate(vm_obj.uuid) return vm_obj
def _pre_create_virtual_machine(self): virtual_machine = VirtualMachine( name='test-virtual-machine', parent_obj=self.project ) virtual_machine_uuid = \ self.api.virtual_machine_create(virtual_machine) self.virtual_machine = \ self.api.virtual_machine_read(id=virtual_machine_uuid)
def _create_vm(self, pod_task_id, node_ip): pod_task_name = PodTaskMonitor.get_task_pod_name_from_cid(pod_task_id, node_ip) if pod_task_name is None: vm_obj = VirtualMachine(name=pod_task_id) else: vm_obj = VirtualMachine(name=pod_task_name) vm_obj.uuid = pod_task_id vm_obj.set_server_type("container") VirtualMachineMM.add_annotations(self, vm_obj, pod_task_id) try: self._vnc_lib.virtual_machine_create(vm_obj) except RefsExistError: vm_obj = self._vnc_lib.virtual_machine_read(id=pod_task_id) VirtualMachineMM.locate(vm_obj.uuid) return vm_obj
def test_associate_scoped_tag_to_virtual_machine(self): project = Project('project-%s' % self.id()) self.api.project_create(project) vm = VirtualMachine('vm-%s' % self.id()) vm_uuid = self.api.virtual_machine_create(vm) vm = self.api.virtual_machine_read(id=vm_uuid) tag_type = 'fake_type-%s' % self.id() tag_value = 'fake_value-%s' % self.id() tag = Tag(tag_type_name=tag_type, tag_value=tag_value, parent_obj=project) self.api.tag_create(tag) self.assertRaises(NoIdError, self.api.set_tag, vm, tag_type, tag_value) perms2 = PermType2() perms2.owner = project.uuid.replace('-', '') vm.set_perms2(perms2) self.api.virtual_machine_update(vm) self.api.set_tag(vm, tag_type, tag_value)
def _create_vm(self, pod_namespace, pod_id, pod_name, labels, proj_uuid): vm_name = VncCommon.make_name(pod_name, pod_id) display_name = VncCommon.make_display_name(pod_namespace, pod_name) perms2 = PermType2() perms2.owner = proj_uuid perms2.owner_access = PERMS_RWX vm_obj = VirtualMachine(name=vm_name, perms2=perms2, display_name=display_name) vm_obj.uuid = pod_id vm_obj.set_server_type("container") VirtualMachineKM.add_annotations(self, vm_obj, pod_namespace, pod_name, k8s_uuid=str(pod_id), labels=json.dumps(labels)) try: self._vnc_lib.virtual_machine_create(vm_obj) except RefsExistError: vm_obj = self._vnc_lib.virtual_machine_read(id=pod_id) VirtualMachineKM.locate(vm_obj.uuid) return vm_obj
def create_virtual_machine(self, name, vn, ipaddress): vm_instance = VirtualMachine(name) self._vnc_lib.virtual_machine_create(vm_instance) fq_name = [name, '0'] vmi = VirtualMachineInterface(parent_type='virtual-machine', fq_name=fq_name) vmi.set_virtual_network(vn) self._vnc_lib.virtual_machine_interface_create(vmi) ip = InstanceIp(vm_instance.name + '.0') ip.set_virtual_machine_interface(vmi) ip.set_virtual_network(vn) ip.set_instance_ip_address(ipaddress) self._vnc_lib.instance_ip_create(ip) return vm_instance
def test_get_candidates(self): self.vnc_mock.virtual_routers_list.return_value = VROUTER_LIST self.analytics_mock.side_effect = [ RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS ] vr_obj = VirtualRouter() vr_obj.get_virtual_machine_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_vm_uuid1' }]) self.vnc_mock.virtual_router_read.return_value = vr_obj vm_obj_1 = VirtualMachine() vm_obj_1.get_service_instance_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_si_uuid1' }]) vm_obj_2 = VirtualMachine() vm_obj_2.get_service_instance_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_si_uuid2' }]) self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] # Test the vrouters seected does not already have a VM of the same SI # schedule on it. expected_result = [["default-global-system-config", "vrouter3"]] self.assertEqual( self.scheduler._get_candidates('fake_si_uuid1', 'fake_vm_uuid2'), expected_result) self.analytics_mock.side_effect = [ RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS, RUNNING_VROUTER_UVES_STATUS ] self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] # Test the same vrouter is return if the VM is already scheduled on # a running vrouter expected_result = [["default-global-system-config", "vrouter1"]] self.assertEqual( self.scheduler._get_candidates('fake_si_uuid1', 'fake_vm_uuid1'), expected_result)
def test_get_candidates(self): VROUTER_LIST = { "virtual-routers": [{ "href": "http://127.0.0.1:8082/virtual-router/uuid1", "fq_name": ["default-global-system-config", "vrouter1"], "uuid": "uuid1" }, { "href": "http://127.0.0.1:8082/virtual-router/uuid2", "fq_name": ["default-global-system-config", "vrouter2"], "uuid": "uuid2" }, { "href": "http://127.0.0.1:8082/virtual-router/uuid3", "fq_name": ["default-global-system-config", "vrouter3"], "uuid": "uuid3" }] } self.vnc_mock.virtual_routers_list.return_value = VROUTER_LIST self.analytics_mock.side_effect = [ RUNNING_VROUTER_UVES_STATUS, NON_RUNNING_VROUTER_UVES_STATUS_3, RUNNING_VROUTER_UVES_STATUS ] vr_obj = VirtualRouter() vr_obj.get_virtual_machine_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_uuid' }]) self.vnc_mock.virtual_router_read.return_value = vr_obj vm_obj_1 = VirtualMachine() vm_obj_1.get_service_instance_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_uuid' }]) vm_obj_2 = VirtualMachine() vm_obj_2.get_service_instance_refs = mock.MagicMock( return_value=[{ 'uuid': 'fake_si_uuid' }]) self.vnc_mock.virtual_machine_read.side_effect = [vm_obj_1, vm_obj_2] expected_result = [["default-global-system-config", "vrouter1"]] self.assertEqual( self.scheduler._get_candidates('fake_si_uuid', 'fake_uuid'), expected_result)
def _create_vm(self, pod_task_id): pod_task_name = PodTaskMonitor.get_task_pod_name_from_cid(pod_task_id) if pod_task_name is None: vm_obj = VirtualMachine(name=pod_task_id) else: vm_obj = VirtualMachine(name=pod_task_name) vm_obj.uuid = pod_task_id vm_obj.set_server_type("container") VirtualMachineMM.add_annotations(self, vm_obj, pod_task_id) try: self._vnc_lib.virtual_machine_create(vm_obj) except RefsExistError: vm_obj = self._vnc_lib.virtual_machine_read(id=pod_task_id) VirtualMachineMM.locate(vm_obj.uuid) return vm_obj
def create_virtual_machine(self, name, vn, ipaddress): vm = VirtualMachine(name) self._vnc_lib.virtual_machine_create(vm) VirtualMachineKM.locate(vm.uuid) vmi = VirtualMachineInterface( parent_type='virtual-machine', fq_name=[name, '0']) vmi.set_virtual_machine(vm) vmi.set_virtual_network(vn) self._vnc_lib.virtual_machine_interface_create(vmi) VirtualMachineInterfaceKM.locate(vmi.uuid) ip = InstanceIp(vm.name + '.0') ip.set_virtual_machine_interface(vmi) ip.set_virtual_network(vn) ip.set_instance_ip_address(ipaddress) self._vnc_lib.instance_ip_create(ip) InstanceIpKM.locate(ip.uuid) return vm, vmi, ip
def create_virtual_machine(self, name, vn, ipaddress): vm = VirtualMachine(name) self._vnc_lib.virtual_machine_create(vm) VirtualMachineKM.locate(vm.uuid) vmi = VirtualMachineInterface(parent_type='virtual-machine', fq_name=[name, '0']) vmi.set_virtual_machine(vm) vmi.set_virtual_network(vn) if DBBaseKM.is_nested(): vmi.set_virtual_machine_interface_bindings( KeyValuePairs([KeyValuePair('host_id', 'WHATEVER')])) self._vnc_lib.virtual_machine_interface_create(vmi) VirtualMachineInterfaceKM.locate(vmi.uuid) ip = InstanceIp(vm.name + '.0') ip.set_virtual_machine_interface(vmi) ip.set_virtual_network(vn) ip.set_instance_ip_address(ipaddress) self._vnc_lib.instance_ip_create(ip) InstanceIpKM.locate(ip.uuid) return vm, vmi, ip
def _add_pod_to_service(self, service_id, pod_id, port=None, address=None): lb = LoadbalancerKM.get(service_id) if not lb: return vm = VirtualMachineKM.get(pod_id) host_vmi = None if not vm: if not self._args.host_network_service: return host_vmi = self._get_vmi_from_ip(address) if host_vmi == None: return else: vm = VirtualMachine(name="host", display_name="host") vm.virtual_machine_interfaces = [host_vmi] for lb_listener_id in lb.loadbalancer_listeners: pool = self._get_loadbalancer_pool(lb_listener_id, port) if not pool: continue for vmi_id in vm.virtual_machine_interfaces: if host_vmi == None: vmi = VirtualMachineInterfaceKM.get(vmi_id) else: vmi = self._vnc_lib.virtual_machine_interface_read(id=vmi_id) if not vmi: continue # Add VMI only if it matches the default address for endpoint, # ignore other interfaces for pod ip_found = False for iip_uuid in vmi.instance_ips: iip = InstanceIpKM.get(iip_uuid) if iip and iip.address == address: ip_found = True break if ip_found == False: continue for member_id in pool.members: member = LoadbalancerMemberKM.get(member_id) if member and member.vmi == vmi_id: break else: self.logger.debug( "Creating LB member for Pod/VM: %s in LB: %s with " "target-port: %d" % (vm.fq_name, lb.name, port['port'])) member_obj = self._vnc_create_member( pool, pod_id, vmi_id, port['port']) try: vmi_obj = self._vnc_lib.virtual_machine_interface_read( id = vmi_id) except: raise # Attach the service label to underlying pod vmi. self._labels.append(vmi_id, self._labels.get_service_label(lb.service_name)) # Set tags on the vmi. self._vnc_lib.set_tags(vmi_obj, self._labels.get_labels_dict(vmi_id)) LoadbalancerMemberKM.locate(member_obj.uuid)
def vnc_vm(self): vnc_vm = VirtualMachine(name=self.uuid, display_name=self.name, id_perms=ID_PERMS) vnc_vm.set_uuid(self.uuid) return vnc_vm
vn_obj = None vn_obj = api.virtual_network_read(fq_name=vn_fq_name) ipam = vn_obj.get_network_ipam_refs() vn_uuid = vn_obj.uuid subnet_uuid = ipam[0]["attr"].ipam_subnets[0].subnet_uuid print >> sys.stderr, "Fetched VN: ", vn_obj ## CREATE VM proj_uuid = proj_obj.uuid vm_obj = None vm_uuid = None pod_uuid = str(uuid.uuid1()) perms2 = PermType2() perms2.owner = proj_uuid perms2.owner_access = PERMS_RWX vm_obj = VirtualMachine(name=vm_name, perms2=perms2, display_name=vm_display_name, parent_obj=proj_obj) vm_obj.uuid = pod_uuid vm_obj.set_server_type("container") try: vm_response = api.virtual_machine_create(vm_obj) print >> sys.stderr, "Created VM: ", vm_response vm_uuid = vm_response except RefsExistError as ref: print >> sys.stderr, "Not creating VM, already exists: ", str(ref) vm_obj = api.virtual_machine_read(fq_name=[vm_name]) print >> sys.stderr, vm_obj vm_uuid = vm_obj.uuid ## CREATE VMI obj_uuid = str(uuid.uuid1()) vmi_prop = None