Esempio n. 1
0
def set_cluster_auto_scale_parameters(client, resource_group, cluster_name,
                                      min_nodes, max_nodes):
    return client.update(
        resource_group,
        cluster_name,
        scale_settings=models.ScaleSettings(
            auto_scale=models.AutoScaleSettings(min_nodes, max_nodes)))
Esempio n. 2
0
def _update_nodes_information(params, image, vm_size, min_nodes, max_nodes):
    """Updates cluster's nodes information.

    :param models.ClusterCreateParameters params: cluster create parameters.
    :param str or None image: image.
    :param str or None vm_size: VM size.
    :param int min_nodes: min number of nodes.
    :param int or None max_nodes: max number of nodes.
    :return models.ClusterCreateParameters: updated parameters.
    """
    result = copy.deepcopy(params)
    if vm_size:
        result.vm_size = vm_size
    if not result.vm_size:
        raise CLIError('Please provide VM size')
    if image:
        result.virtual_machine_configuration = models.VirtualMachineConfiguration(_get_image_reference_or_die(image))
    if min_nodes == max_nodes:
        result.scale_settings = models.ScaleSettings(manual=models.ManualScaleSettings(min_nodes))
    elif max_nodes is not None:
        result.scale_settings = models.ScaleSettings(auto_scale=models.AutoScaleSettings(min_nodes, max_nodes))
    if not result.scale_settings or (not result.scale_settings.manual and not result.scale_settings.auto_scale):
        raise CLIError('Please provide scale setting for the cluster via configuration file or via --min and --max '
                       'parameters.')
    return result
    def test_auto_scaling(self, resource_group, location, storage_account,
                          storage_account_key):
        """Tests auto-scaling"""
        # Create the cluster with no nodes.
        cluster = helpers.create_cluster(self.client, location,
                                         resource_group.name,
                                         self.cluster_name, 'STANDARD_D1', 0,
                                         storage_account.name,
                                         storage_account_key)

        # Switch the cluster into auto-scale mode
        self.client.clusters.update(
            resource_group.name,
            self.cluster_name,
            scale_settings=models.ScaleSettings(
                auto_scale=models.AutoScaleSettings(minimum_node_count=0,
                                                    maximum_node_count=1)))

        # Submit a task. BatchAI must increase the number of nodes to execute the task.
        self.assertCanRunJobOnHost(resource_group,
                                   location,
                                   cluster.id,
                                   timeout_sec=helpers.AUTO_SCALE_TIMEOUT_SEC)

        # Verify that cluster downsized to zero since there are no more jobs for it
        self.assertEqual(
            helpers.wait_for_nodes(self.is_live, self.client,
                                   resource_group.name, self.cluster_name, 0,
                                   helpers.NODE_STARTUP_TIMEOUT_SEC), 0)
        self.client.clusters.delete(resource_group.name,
                                    self.cluster_name).result()
Esempio n. 4
0
def _get_scale_settings(initial_count, min_count, max_count):
    """Returns scale settings for a cluster with gine parameters"""
    if not initial_count and not min_count and not max_count:
        # Get from the config file
        return None
    if sum([1 if v is not None else 0 for v in (min_count, max_count)]) == 1:
        raise CLIError('You need to either provide both min and max node counts or not provide any of them')
    if min_count is not None and max_count is not None and min_count > max_count:
        raise CLIError('Maximum nodes count must be greater or equal to minimum nodes count')
    if min_count == max_count:
        if min_count is None or initial_count == min_count:
            return models.ScaleSettings(
                manual=models.ManualScaleSettings(target_node_count=initial_count))
        if initial_count is None:
            return models.ScaleSettings(
                manual=models.ManualScaleSettings(target_node_count=min_count)
            )
    return models.ScaleSettings(
        auto_scale=models.AutoScaleSettings(
            minimum_node_count=min_count,
            maximum_node_count=max_count,
            initial_node_count=initial_count or 0))