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 _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
Exemple #6
0
 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)
Exemple #9
0
    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
Exemple #14
0
    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