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)))
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()
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))