示例#1
0
    def test_failed_scale_up(self):
        region = 'test'

        mock_client, monitor_client, resource_client = _default_mock_clients(
            region)

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        failed_scale_set = AzureScaleSet(region, resource_group,
                                         'test-scale-set1', instance_type, 0,
                                         'Failed')
        scale_set = AzureScaleSet(region, resource_group, 'test-scale-set2',
                                  instance_type, 0, 'Succeeded')

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group,
            AzureWrapper(mock_client, monitor_client, resource_client),
            instance_type, False, [failed_scale_set, scale_set], [])

        virtual_scale_set.scale(5)

        mock_client.virtual_machine_scale_sets.create_or_update.assert_called_once(
        )
        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.
            call_args[1]['parameters'].sku.capacity, 5)
示例#2
0
    def test_tainted_scale_set(self):
        region = 'test'

        mock_client, monitor_client, resource_client = _default_mock_clients(
            region)

        instance_type = 'Standard_NC24'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region,
                                  resource_group,
                                  'test-scale-set',
                                  instance_type,
                                  0,
                                  'Succeeded',
                                  no_schedule_taints={'gpu': 'yes'})

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group,
            AzureWrapper(mock_client, monitor_client, resource_client),
            instance_type, True, [scale_set], [])

        dir_path = os.path.dirname(os.path.realpath(__file__))
        with open(os.path.join(dir_path, 'data/busybox.yaml'), 'r') as f:
            dummy_pod = yaml.load(f.read())
        pod = KubePod(pykube.Pod(None, dummy_pod))

        self.assertFalse(virtual_scale_set.is_taints_tolerated(pod))

        dummy_pod['spec']['tolerations'] = [{
            'key': 'gpu',
            'operator': 'Exists'
        }]
        pod = KubePod(pykube.Pod(None, dummy_pod))
        self.assertTrue(virtual_scale_set.is_taints_tolerated(pod))
示例#3
0
    def test_scale_in(self):
        region = 'test'
        resource_group = 'test-resource-group'

        instance = VirtualMachineScaleSetVM(location=region)
        instance.vm_id = 'test-vm-id'
        instance.instance_id = 0
        instance.instance_view = VirtualMachineInstanceView()
        instance.instance_view.statuses = []

        mock_client, monitor_client, resource_client = _default_mock_clients(
            region, instances=[instance])

        TestNode = collections.namedtuple('TestNode',
                                          ['instance_id', 'unschedulable'])
        test_node = TestNode(instance_id=instance.vm_id, unschedulable=False)

        instance_type = 'Standard_D1_v2'
        scale_set = AzureScaleSet(region, resource_group, 'test-scale-set',
                                  instance_type, 1, 'Succeeded')

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group,
            AzureWrapper(mock_client, monitor_client, resource_client),
            instance_type, False, [scale_set], [test_node])

        self.assertEqual(virtual_scale_set.instance_ids, {instance.vm_id})
        self.assertEqual(virtual_scale_set.nodes, [test_node])

        virtual_scale_set.scale_nodes_in([test_node])
        mock_client.virtual_machine_scale_sets.delete_instances.assert_called_once_with(
            resource_group, scale_set.name, [instance.instance_id])
示例#4
0
    def test_slow_scale_up(self):
        region = 'test'

        mock_client, monitor_client, resource_client = _default_mock_clients(
            region)

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region, resource_group, 'test-scale-set',
                                  instance_type, 0, 'Succeeded')
        scale_set2 = AzureScaleSet(region, resource_group, 'test-scale-set2',
                                   instance_type, 0, 'Succeeded')

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group,
            AzureWrapper(mock_client, monitor_client, resource_client),
            instance_type, True, [scale_set, scale_set2], [])

        virtual_scale_set.scale(2)

        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.call_count,
            2)
        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.
            call_args_list[0][1]['parameters'].sku.capacity, 1)
        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.
            call_args_list[1][1]['parameters'].sku.capacity, 1)
示例#5
0
    def test_scale_up(self):
        region = 'test'
        mock_client = mock.Mock()
        mock_client.virtual_machine_scale_set_vms = mock.Mock()
        mock_client.virtual_machine_scale_set_vms.list = mock.Mock(
            return_value=[])
        mock_client.virtual_machine_scale_sets = mock.Mock()
        mock_client.virtual_machine_scale_sets.create_or_update = mock.Mock()

        monitor_client = mock.Mock()
        monitor_client.activity_logs = mock.Mock()
        monitor_client.activity_logs.list = mock.Mock(return_value=[])

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region, resource_group, 'test-scale-set',
                                  instance_type, 0, 'Succeeded')

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group, AzureWrapper(mock_client, monitor_client),
            instance_type, False, [scale_set], [])

        virtual_scale_set.scale(5)

        mock_client.virtual_machine_scale_sets.create_or_update.assert_called_once(
        )
        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.
            call_args[1]['parameters'].sku.capacity, 5)
示例#6
0
    def test_out_of_quota(self):
        region = 'test'
        mock_client = mock.Mock()
        mock_client.virtual_machine_scale_set_vms = mock.Mock()
        mock_client.virtual_machine_scale_set_vms.list = mock.Mock(
            return_value=[])
        mock_client.virtual_machine_scale_sets = mock.Mock()
        mock_client.virtual_machine_scale_sets.create_or_update = mock.Mock()

        monitor_client = mock.Mock()
        monitor_client.activity_logs = mock.Mock()
        monitor_client.activity_logs.list = mock.Mock(return_value=[])

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region,
                                  resource_group,
                                  'test-scale-set',
                                  instance_type,
                                  0,
                                  'Succeeded',
                                  timeout_until=datetime.now(pytz.utc) +
                                  timedelta(minutes=10),
                                  timeout_reason="fake reason")
        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group, AzureWrapper(mock_client, monitor_client),
            instance_type, False, [scale_set], [])
        self.assertTrue(virtual_scale_set.is_timed_out())
示例#7
0
    def test_priority(self):
        region = 'test'
        mock_client = mock.Mock()
        mock_client.virtual_machine_scale_set_vms = mock.Mock()
        mock_client.virtual_machine_scale_set_vms.list = mock.Mock(
            return_value=[])
        mock_client.virtual_machine_scale_sets = mock.Mock()
        mock_client.virtual_machine_scale_sets.create_or_update = mock.Mock()

        monitor_client = mock.Mock()
        monitor_client.activity_logs = mock.Mock()
        monitor_client.activity_logs.list = mock.Mock(return_value=[])

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region,
                                  resource_group,
                                  'test-scale-set',
                                  instance_type,
                                  0,
                                  'Succeeded',
                                  priority=-1)
        # Name sorts lexicographically before previous scale set, but priority is after it
        scale_set2 = AzureScaleSet(region,
                                   resource_group,
                                   'a-test-scale-set',
                                   instance_type,
                                   0,
                                   'Succeeded',
                                   priority=1)

        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group, AzureWrapper(mock_client, monitor_client),
            instance_type, True, [scale_set, scale_set2], [])

        virtual_scale_set.scale(1)

        self.assertEqual(virtual_scale_set.global_priority, -1)

        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.call_count,
            1)
        self.assertEqual(
            mock_client.virtual_machine_scale_sets.create_or_update.
            call_args_list[0][0][1], 'test-scale-set')
示例#8
0
    def test_out_of_quota(self):
        region = 'test'

        mock_client, monitor_client, resource_client = _default_mock_clients(
            region)

        instance_type = 'Standard_D1_v2'
        resource_group = 'test-resource-group'
        scale_set = AzureScaleSet(region,
                                  resource_group,
                                  'test-scale-set',
                                  instance_type,
                                  0,
                                  'Succeeded',
                                  timeout_until=datetime.now(pytz.utc) +
                                  timedelta(minutes=10),
                                  timeout_reason="fake reason")
        virtual_scale_set = AzureVirtualScaleSet(
            region, resource_group,
            AzureWrapper(mock_client, monitor_client, resource_client),
            instance_type, False, [scale_set], [])
        self.assertTrue(virtual_scale_set.is_timed_out())