def _add_setup_task(cmd_line, output, cluster): """Adds a setup task with given command line and output destination to the cluster. :param str cmd_line: node setup command line. :param str output: output destination. :param models.ClusterCreateParameters cluster: cluster creation parameters. """ if cmd_line is None: return cluster if output is None: raise CLIError('--setup-task requires providing of --setup-task-output') cluster = copy.deepcopy(cluster) cluster.node_setup = cluster.node_setup or models.NodeSetup() cluster.node_setup.setup_task = models.SetupTask( command_line=cmd_line, std_out_err_path_prefix=output, run_elevated=False) return cluster
def create_cluster(client, location, resource_group, cluster_name, vm_size, target_nodes, storage_account, storage_account_key, file_servers=None, file_systems=None, subnet_id=None, setup_task_cmd=None, setup_task_env=None, setup_task_secrets=None): """Creates a cluster with given parameters and mounted Azure Files :param BatchAIManagementClient client: client instance. :param str location: location. :param str resource_group: resource group name. :param str cluster_name: name of the cluster. :param str vm_size: vm size. :param int target_nodes: number of nodes. :param str storage_account: name of the storage account. :param str storage_account_key: storage account key. :param list(models.FileServerReference) file_servers: file servers. :param list(models.UnmanagedFileServerReference) file_systems: file systems. :param str setup_task_cmd: start task cmd line. :param dict[str, str] setup_task_env: environment variables for start task. :param dict[str, str] setup_task_secrets: environment variables with secret values for start task, server doesn't return values for these environment variables in get cluster responses. :param str subnet_id: virtual network subnet id. :return models.Cluster: the created cluster """ Helpers._create_file_share(storage_account, storage_account_key) setup_task = None if setup_task_cmd: setup_task = models.SetupTask( command_line=setup_task_cmd, environment_variables=[ models.EnvironmentVariable(name=k, value=v) for k, v in setup_task_env.items() ], secrets=[ models.EnvironmentVariableWithSecretValue(name=k, value=v) for k, v in setup_task_secrets.items() ], std_out_err_path_prefix='$AZ_BATCHAI_MOUNT_ROOT/{0}'.format( Helpers.AZURE_FILES_MOUNTING_PATH)) client.workspaces.create(resource_group, Helpers.DEFAULT_WORKSPACE_NAME, location).result() return client.clusters.create( resource_group, Helpers.DEFAULT_WORKSPACE_NAME, cluster_name, parameters=models.ClusterCreateParameters( vm_size=vm_size, scale_settings=models.ScaleSettings( manual=models.ManualScaleSettings( target_node_count=target_nodes)), node_setup=models.NodeSetup( mount_volumes=models.MountVolumes( azure_file_shares=[ models.AzureFileShareReference( azure_file_url= 'https://{0}.file.core.windows.net/{1}'.format( storage_account, Helpers.AZURE_FILES_NAME), relative_mount_path=Helpers. AZURE_FILES_MOUNTING_PATH, account_name=storage_account, credentials=models.AzureStorageCredentialsInfo( account_key=storage_account_key), ) ], file_servers=file_servers, unmanaged_file_systems=file_systems), setup_task=setup_task), subnet=subnet_id, user_account_settings=models.UserAccountSettings( admin_user_name=Helpers.ADMIN_USER_NAME, admin_user_password=Helpers.ADMIN_USER_PASSWORD), vm_priority='lowpriority')).result()