# coding=utf-8
# *** WARNING: this file was generated by the Pulumi SDK Generator. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from ... import _utilities
from . import outputs
from ._enums import *
from ._inputs import *

__all__ = ['JobArgs', 'Job']

@pulumi.input_type
class JobArgs:
    def __init__(__self__, *,
                 cluster: pulumi.Input['ResourceIdArgs'],
                 experiment_name: pulumi.Input[str],
                 node_count: pulumi.Input[int],
                 resource_group_name: pulumi.Input[str],
                 std_out_err_path_prefix: pulumi.Input[str],
                 workspace_name: pulumi.Input[str],
                 caffe2_settings: Optional[pulumi.Input['Caffe2SettingsArgs']] = None,
                 caffe_settings: Optional[pulumi.Input['CaffeSettingsArgs']] = None,
                 chainer_settings: Optional[pulumi.Input['ChainerSettingsArgs']] = None,
                 cntk_settings: Optional[pulumi.Input['CNTKsettingsArgs']] = None,
                 constraints: Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']] = None,
                 container_settings: Optional[pulumi.Input['ContainerSettingsArgs']] = None,
                 custom_mpi_settings: Optional[pulumi.Input['CustomMpiSettingsArgs']] = None,
                 custom_toolkit_settings: Optional[pulumi.Input['CustomToolkitSettingsArgs']] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]] = None,
                 horovod_settings: Optional[pulumi.Input['HorovodSettingsArgs']] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input['JobPreparationArgs']] = None,
                 mount_volumes: Optional[pulumi.Input['MountVolumesArgs']] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]] = None,
                 py_torch_settings: Optional[pulumi.Input['PyTorchSettingsArgs']] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]] = None,
                 tensor_flow_settings: Optional[pulumi.Input['TensorFlowSettingsArgs']] = None):
        """
        The set of arguments for constructing a Job resource.
        :param pulumi.Input['ResourceIdArgs'] cluster: Resource ID of the cluster on which this job will run.
        :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.
        :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.
        :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input['Caffe2SettingsArgs'] caffe2_settings: Settings for Caffe2 job.
        :param pulumi.Input['CaffeSettingsArgs'] caffe_settings: Settings for Caffe job.
        :param pulumi.Input['ChainerSettingsArgs'] chainer_settings: Settings for Chainer job.
        :param pulumi.Input['CNTKsettingsArgs'] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        :param pulumi.Input['JobBasePropertiesConstraintsArgs'] constraints: Constraints associated with the Job.
        :param pulumi.Input['ContainerSettingsArgs'] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.
        :param pulumi.Input['CustomMpiSettingsArgs'] custom_mpi_settings: Settings for custom MPI job.
        :param pulumi.Input['CustomToolkitSettingsArgs'] custom_toolkit_settings: Settings for custom tool kit job.
        :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]] environment_variables: A list of user defined environment variables which will be setup for the job.
        :param pulumi.Input['HorovodSettingsArgs'] horovod_settings: Settings for Horovod job.
        :param pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]] input_directories: A list of input directories for the job.
        :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input['JobPreparationArgs'] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.
        :param pulumi.Input['MountVolumesArgs'] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        :param pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]] output_directories: A list of output directories for the job.
        :param pulumi.Input['PyTorchSettingsArgs'] py_torch_settings: Settings for pyTorch job.
        :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.
        :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        :param pulumi.Input['TensorFlowSettingsArgs'] tensor_flow_settings: Settings for Tensor Flow job.
        """
        pulumi.set(__self__, "cluster", cluster)
        pulumi.set(__self__, "experiment_name", experiment_name)
        pulumi.set(__self__, "node_count", node_count)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "std_out_err_path_prefix", std_out_err_path_prefix)
        pulumi.set(__self__, "workspace_name", workspace_name)
        if caffe2_settings is not None:
            pulumi.set(__self__, "caffe2_settings", caffe2_settings)
        if caffe_settings is not None:
            pulumi.set(__self__, "caffe_settings", caffe_settings)
        if chainer_settings is not None:
            pulumi.set(__self__, "chainer_settings", chainer_settings)
        if cntk_settings is not None:
            pulumi.set(__self__, "cntk_settings", cntk_settings)
        if constraints is not None:
            pulumi.set(__self__, "constraints", constraints)
        if container_settings is not None:
            pulumi.set(__self__, "container_settings", container_settings)
        if custom_mpi_settings is not None:
            pulumi.set(__self__, "custom_mpi_settings", custom_mpi_settings)
        if custom_toolkit_settings is not None:
            pulumi.set(__self__, "custom_toolkit_settings", custom_toolkit_settings)
        if environment_variables is not None:
            pulumi.set(__self__, "environment_variables", environment_variables)
        if horovod_settings is not None:
            pulumi.set(__self__, "horovod_settings", horovod_settings)
        if input_directories is not None:
            pulumi.set(__self__, "input_directories", input_directories)
        if job_name is not None:
            pulumi.set(__self__, "job_name", job_name)
        if job_preparation is not None:
            pulumi.set(__self__, "job_preparation", job_preparation)
        if mount_volumes is not None:
            pulumi.set(__self__, "mount_volumes", mount_volumes)
        if output_directories is not None:
            pulumi.set(__self__, "output_directories", output_directories)
        if py_torch_settings is not None:
            pulumi.set(__self__, "py_torch_settings", py_torch_settings)
        if scheduling_priority is None:
            scheduling_priority = 'normal'
        if scheduling_priority is not None:
            pulumi.set(__self__, "scheduling_priority", scheduling_priority)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if tensor_flow_settings is not None:
            pulumi.set(__self__, "tensor_flow_settings", tensor_flow_settings)

    @property
    @pulumi.getter
    def cluster(self) -> pulumi.Input['ResourceIdArgs']:
        """
        Resource ID of the cluster on which this job will run.
        """
        return pulumi.get(self, "cluster")

    @cluster.setter
    def cluster(self, value: pulumi.Input['ResourceIdArgs']):
        pulumi.set(self, "cluster", value)

    @property
    @pulumi.getter(name="experimentName")
    def experiment_name(self) -> pulumi.Input[str]:
        """
        The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "experiment_name")

    @experiment_name.setter
    def experiment_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "experiment_name", value)

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> pulumi.Input[int]:
        """
        Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        """
        return pulumi.get(self, "node_count")

    @node_count.setter
    def node_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "node_count", value)

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[str]:
        """
        Name of the resource group to which the resource belongs.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_group_name", value)

    @property
    @pulumi.getter(name="stdOutErrPathPrefix")
    def std_out_err_path_prefix(self) -> pulumi.Input[str]:
        """
        The path where the Batch AI service will store stdout, stderror and execution log of the job.
        """
        return pulumi.get(self, "std_out_err_path_prefix")

    @std_out_err_path_prefix.setter
    def std_out_err_path_prefix(self, value: pulumi.Input[str]):
        pulumi.set(self, "std_out_err_path_prefix", value)

    @property
    @pulumi.getter(name="workspaceName")
    def workspace_name(self) -> pulumi.Input[str]:
        """
        The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "workspace_name")

    @workspace_name.setter
    def workspace_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "workspace_name", value)

    @property
    @pulumi.getter(name="caffe2Settings")
    def caffe2_settings(self) -> Optional[pulumi.Input['Caffe2SettingsArgs']]:
        """
        Settings for Caffe2 job.
        """
        return pulumi.get(self, "caffe2_settings")

    @caffe2_settings.setter
    def caffe2_settings(self, value: Optional[pulumi.Input['Caffe2SettingsArgs']]):
        pulumi.set(self, "caffe2_settings", value)

    @property
    @pulumi.getter(name="caffeSettings")
    def caffe_settings(self) -> Optional[pulumi.Input['CaffeSettingsArgs']]:
        """
        Settings for Caffe job.
        """
        return pulumi.get(self, "caffe_settings")

    @caffe_settings.setter
    def caffe_settings(self, value: Optional[pulumi.Input['CaffeSettingsArgs']]):
        pulumi.set(self, "caffe_settings", value)

    @property
    @pulumi.getter(name="chainerSettings")
    def chainer_settings(self) -> Optional[pulumi.Input['ChainerSettingsArgs']]:
        """
        Settings for Chainer job.
        """
        return pulumi.get(self, "chainer_settings")

    @chainer_settings.setter
    def chainer_settings(self, value: Optional[pulumi.Input['ChainerSettingsArgs']]):
        pulumi.set(self, "chainer_settings", value)

    @property
    @pulumi.getter(name="cntkSettings")
    def cntk_settings(self) -> Optional[pulumi.Input['CNTKsettingsArgs']]:
        """
        Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        """
        return pulumi.get(self, "cntk_settings")

    @cntk_settings.setter
    def cntk_settings(self, value: Optional[pulumi.Input['CNTKsettingsArgs']]):
        pulumi.set(self, "cntk_settings", value)

    @property
    @pulumi.getter
    def constraints(self) -> Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']]:
        """
        Constraints associated with the Job.
        """
        return pulumi.get(self, "constraints")

    @constraints.setter
    def constraints(self, value: Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']]):
        pulumi.set(self, "constraints", value)

    @property
    @pulumi.getter(name="containerSettings")
    def container_settings(self) -> Optional[pulumi.Input['ContainerSettingsArgs']]:
        """
        Docker container settings for the job. If not provided, the job will run directly on the node.
        """
        return pulumi.get(self, "container_settings")

    @container_settings.setter
    def container_settings(self, value: Optional[pulumi.Input['ContainerSettingsArgs']]):
        pulumi.set(self, "container_settings", value)

    @property
    @pulumi.getter(name="customMpiSettings")
    def custom_mpi_settings(self) -> Optional[pulumi.Input['CustomMpiSettingsArgs']]:
        """
        Settings for custom MPI job.
        """
        return pulumi.get(self, "custom_mpi_settings")

    @custom_mpi_settings.setter
    def custom_mpi_settings(self, value: Optional[pulumi.Input['CustomMpiSettingsArgs']]):
        pulumi.set(self, "custom_mpi_settings", value)

    @property
    @pulumi.getter(name="customToolkitSettings")
    def custom_toolkit_settings(self) -> Optional[pulumi.Input['CustomToolkitSettingsArgs']]:
        """
        Settings for custom tool kit job.
        """
        return pulumi.get(self, "custom_toolkit_settings")

    @custom_toolkit_settings.setter
    def custom_toolkit_settings(self, value: Optional[pulumi.Input['CustomToolkitSettingsArgs']]):
        pulumi.set(self, "custom_toolkit_settings", value)

    @property
    @pulumi.getter(name="environmentVariables")
    def environment_variables(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]]:
        """
        A list of user defined environment variables which will be setup for the job.
        """
        return pulumi.get(self, "environment_variables")

    @environment_variables.setter
    def environment_variables(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]]):
        pulumi.set(self, "environment_variables", value)

    @property
    @pulumi.getter(name="horovodSettings")
    def horovod_settings(self) -> Optional[pulumi.Input['HorovodSettingsArgs']]:
        """
        Settings for Horovod job.
        """
        return pulumi.get(self, "horovod_settings")

    @horovod_settings.setter
    def horovod_settings(self, value: Optional[pulumi.Input['HorovodSettingsArgs']]):
        pulumi.set(self, "horovod_settings", value)

    @property
    @pulumi.getter(name="inputDirectories")
    def input_directories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]]:
        """
        A list of input directories for the job.
        """
        return pulumi.get(self, "input_directories")

    @input_directories.setter
    def input_directories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]]):
        pulumi.set(self, "input_directories", value)

    @property
    @pulumi.getter(name="jobName")
    def job_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "job_name")

    @job_name.setter
    def job_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "job_name", value)

    @property
    @pulumi.getter(name="jobPreparation")
    def job_preparation(self) -> Optional[pulumi.Input['JobPreparationArgs']]:
        """
        A command line to be executed on each node allocated for the job before tool kit is launched.
        """
        return pulumi.get(self, "job_preparation")

    @job_preparation.setter
    def job_preparation(self, value: Optional[pulumi.Input['JobPreparationArgs']]):
        pulumi.set(self, "job_preparation", value)

    @property
    @pulumi.getter(name="mountVolumes")
    def mount_volumes(self) -> Optional[pulumi.Input['MountVolumesArgs']]:
        """
        Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        """
        return pulumi.get(self, "mount_volumes")

    @mount_volumes.setter
    def mount_volumes(self, value: Optional[pulumi.Input['MountVolumesArgs']]):
        pulumi.set(self, "mount_volumes", value)

    @property
    @pulumi.getter(name="outputDirectories")
    def output_directories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]]:
        """
        A list of output directories for the job.
        """
        return pulumi.get(self, "output_directories")

    @output_directories.setter
    def output_directories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]]):
        pulumi.set(self, "output_directories", value)

    @property
    @pulumi.getter(name="pyTorchSettings")
    def py_torch_settings(self) -> Optional[pulumi.Input['PyTorchSettingsArgs']]:
        """
        Settings for pyTorch job.
        """
        return pulumi.get(self, "py_torch_settings")

    @py_torch_settings.setter
    def py_torch_settings(self, value: Optional[pulumi.Input['PyTorchSettingsArgs']]):
        pulumi.set(self, "py_torch_settings", value)

    @property
    @pulumi.getter(name="schedulingPriority")
    def scheduling_priority(self) -> Optional[pulumi.Input[Union[str, 'JobPriority']]]:
        """
        Scheduling priority associated with the job. Possible values: low, normal, high.
        """
        return pulumi.get(self, "scheduling_priority")

    @scheduling_priority.setter
    def scheduling_priority(self, value: Optional[pulumi.Input[Union[str, 'JobPriority']]]):
        pulumi.set(self, "scheduling_priority", value)

    @property
    @pulumi.getter
    def secrets(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]]:
        """
        A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        """
        return pulumi.get(self, "secrets")

    @secrets.setter
    def secrets(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]]):
        pulumi.set(self, "secrets", value)

    @property
    @pulumi.getter(name="tensorFlowSettings")
    def tensor_flow_settings(self) -> Optional[pulumi.Input['TensorFlowSettingsArgs']]:
        """
        Settings for Tensor Flow job.
        """
        return pulumi.get(self, "tensor_flow_settings")

    @tensor_flow_settings.setter
    def tensor_flow_settings(self, value: Optional[pulumi.Input['TensorFlowSettingsArgs']]):
        pulumi.set(self, "tensor_flow_settings", value)


class Job(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 caffe2_settings: Optional[pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']]] = None,
                 caffe_settings: Optional[pulumi.Input[pulumi.InputType['CaffeSettingsArgs']]] = None,
                 chainer_settings: Optional[pulumi.Input[pulumi.InputType['ChainerSettingsArgs']]] = None,
                 cluster: Optional[pulumi.Input[pulumi.InputType['ResourceIdArgs']]] = None,
                 cntk_settings: Optional[pulumi.Input[pulumi.InputType['CNTKsettingsArgs']]] = None,
                 constraints: Optional[pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']]] = None,
                 container_settings: Optional[pulumi.Input[pulumi.InputType['ContainerSettingsArgs']]] = None,
                 custom_mpi_settings: Optional[pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']]] = None,
                 custom_toolkit_settings: Optional[pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']]] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]]] = None,
                 experiment_name: Optional[pulumi.Input[str]] = None,
                 horovod_settings: Optional[pulumi.Input[pulumi.InputType['HorovodSettingsArgs']]] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input[pulumi.InputType['JobPreparationArgs']]] = None,
                 mount_volumes: Optional[pulumi.Input[pulumi.InputType['MountVolumesArgs']]] = None,
                 node_count: Optional[pulumi.Input[int]] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]]] = None,
                 py_torch_settings: Optional[pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]]] = None,
                 std_out_err_path_prefix: Optional[pulumi.Input[str]] = None,
                 tensor_flow_settings: Optional[pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']]] = None,
                 workspace_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Information about a Job.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']] caffe2_settings: Settings for Caffe2 job.
        :param pulumi.Input[pulumi.InputType['CaffeSettingsArgs']] caffe_settings: Settings for Caffe job.
        :param pulumi.Input[pulumi.InputType['ChainerSettingsArgs']] chainer_settings: Settings for Chainer job.
        :param pulumi.Input[pulumi.InputType['ResourceIdArgs']] cluster: Resource ID of the cluster on which this job will run.
        :param pulumi.Input[pulumi.InputType['CNTKsettingsArgs']] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        :param pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']] constraints: Constraints associated with the Job.
        :param pulumi.Input[pulumi.InputType['ContainerSettingsArgs']] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.
        :param pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']] custom_mpi_settings: Settings for custom MPI job.
        :param pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']] custom_toolkit_settings: Settings for custom tool kit job.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]] environment_variables: A list of user defined environment variables which will be setup for the job.
        :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[pulumi.InputType['HorovodSettingsArgs']] horovod_settings: Settings for Horovod job.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]] input_directories: A list of input directories for the job.
        :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[pulumi.InputType['JobPreparationArgs']] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.
        :param pulumi.Input[pulumi.InputType['MountVolumesArgs']] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]] output_directories: A list of output directories for the job.
        :param pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']] py_torch_settings: Settings for pyTorch job.
        :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.
        :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.
        :param pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']] tensor_flow_settings: Settings for Tensor Flow job.
        :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: JobArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Information about a Job.

        :param str resource_name: The name of the resource.
        :param JobArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(JobArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 caffe2_settings: Optional[pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']]] = None,
                 caffe_settings: Optional[pulumi.Input[pulumi.InputType['CaffeSettingsArgs']]] = None,
                 chainer_settings: Optional[pulumi.Input[pulumi.InputType['ChainerSettingsArgs']]] = None,
                 cluster: Optional[pulumi.Input[pulumi.InputType['ResourceIdArgs']]] = None,
                 cntk_settings: Optional[pulumi.Input[pulumi.InputType['CNTKsettingsArgs']]] = None,
                 constraints: Optional[pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']]] = None,
                 container_settings: Optional[pulumi.Input[pulumi.InputType['ContainerSettingsArgs']]] = None,
                 custom_mpi_settings: Optional[pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']]] = None,
                 custom_toolkit_settings: Optional[pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']]] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]]] = None,
                 experiment_name: Optional[pulumi.Input[str]] = None,
                 horovod_settings: Optional[pulumi.Input[pulumi.InputType['HorovodSettingsArgs']]] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input[pulumi.InputType['JobPreparationArgs']]] = None,
                 mount_volumes: Optional[pulumi.Input[pulumi.InputType['MountVolumesArgs']]] = None,
                 node_count: Optional[pulumi.Input[int]] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]]] = None,
                 py_torch_settings: Optional[pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]]] = None,
                 std_out_err_path_prefix: Optional[pulumi.Input[str]] = None,
                 tensor_flow_settings: Optional[pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']]] = None,
                 workspace_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        if opts is None:
            opts = pulumi.ResourceOptions()
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.version is None:
            opts.version = _utilities.get_version()
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = JobArgs.__new__(JobArgs)

            __props__.__dict__["caffe2_settings"] = caffe2_settings
            __props__.__dict__["caffe_settings"] = caffe_settings
            __props__.__dict__["chainer_settings"] = chainer_settings
            if cluster is None and not opts.urn:
                raise TypeError("Missing required property 'cluster'")
            __props__.__dict__["cluster"] = cluster
            __props__.__dict__["cntk_settings"] = cntk_settings
            __props__.__dict__["constraints"] = constraints
            __props__.__dict__["container_settings"] = container_settings
            __props__.__dict__["custom_mpi_settings"] = custom_mpi_settings
            __props__.__dict__["custom_toolkit_settings"] = custom_toolkit_settings
            __props__.__dict__["environment_variables"] = environment_variables
            if experiment_name is None and not opts.urn:
                raise TypeError("Missing required property 'experiment_name'")
            __props__.__dict__["experiment_name"] = experiment_name
            __props__.__dict__["horovod_settings"] = horovod_settings
            __props__.__dict__["input_directories"] = input_directories
            __props__.__dict__["job_name"] = job_name
            __props__.__dict__["job_preparation"] = job_preparation
            __props__.__dict__["mount_volumes"] = mount_volumes
            if node_count is None and not opts.urn:
                raise TypeError("Missing required property 'node_count'")
            __props__.__dict__["node_count"] = node_count
            __props__.__dict__["output_directories"] = output_directories
            __props__.__dict__["py_torch_settings"] = py_torch_settings
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            if scheduling_priority is None:
                scheduling_priority = 'normal'
            __props__.__dict__["scheduling_priority"] = scheduling_priority
            __props__.__dict__["secrets"] = secrets
            if std_out_err_path_prefix is None and not opts.urn:
                raise TypeError("Missing required property 'std_out_err_path_prefix'")
            __props__.__dict__["std_out_err_path_prefix"] = std_out_err_path_prefix
            __props__.__dict__["tensor_flow_settings"] = tensor_flow_settings
            if workspace_name is None and not opts.urn:
                raise TypeError("Missing required property 'workspace_name'")
            __props__.__dict__["workspace_name"] = workspace_name
            __props__.__dict__["creation_time"] = None
            __props__.__dict__["execution_info"] = None
            __props__.__dict__["execution_state"] = None
            __props__.__dict__["execution_state_transition_time"] = None
            __props__.__dict__["job_output_directory_path_segment"] = None
            __props__.__dict__["name"] = None
            __props__.__dict__["provisioning_state"] = None
            __props__.__dict__["provisioning_state_transition_time"] = None
            __props__.__dict__["tool_type"] = None
            __props__.__dict__["type"] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_="azure-nextgen:batchai/v20180501:Job"), pulumi.Alias(type_="azure-native:batchai:Job"), pulumi.Alias(type_="azure-nextgen:batchai:Job")])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Job, __self__).__init__(
            'azure-native:batchai/v20180501:Job',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'Job':
        """
        Get an existing Job resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = JobArgs.__new__(JobArgs)

        __props__.__dict__["caffe2_settings"] = None
        __props__.__dict__["caffe_settings"] = None
        __props__.__dict__["chainer_settings"] = None
        __props__.__dict__["cluster"] = None
        __props__.__dict__["cntk_settings"] = None
        __props__.__dict__["constraints"] = None
        __props__.__dict__["container_settings"] = None
        __props__.__dict__["creation_time"] = None
        __props__.__dict__["custom_mpi_settings"] = None
        __props__.__dict__["custom_toolkit_settings"] = None
        __props__.__dict__["environment_variables"] = None
        __props__.__dict__["execution_info"] = None
        __props__.__dict__["execution_state"] = None
        __props__.__dict__["execution_state_transition_time"] = None
        __props__.__dict__["horovod_settings"] = None
        __props__.__dict__["input_directories"] = None
        __props__.__dict__["job_output_directory_path_segment"] = None
        __props__.__dict__["job_preparation"] = None
        __props__.__dict__["mount_volumes"] = None
        __props__.__dict__["name"] = None
        __props__.__dict__["node_count"] = None
        __props__.__dict__["output_directories"] = None
        __props__.__dict__["provisioning_state"] = None
        __props__.__dict__["provisioning_state_transition_time"] = None
        __props__.__dict__["py_torch_settings"] = None
        __props__.__dict__["scheduling_priority"] = None
        __props__.__dict__["secrets"] = None
        __props__.__dict__["std_out_err_path_prefix"] = None
        __props__.__dict__["tensor_flow_settings"] = None
        __props__.__dict__["tool_type"] = None
        __props__.__dict__["type"] = None
        return Job(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="caffe2Settings")
    def caffe2_settings(self) -> pulumi.Output[Optional['outputs.Caffe2SettingsResponse']]:
        """
        Caffe2 job settings.
        """
        return pulumi.get(self, "caffe2_settings")

    @property
    @pulumi.getter(name="caffeSettings")
    def caffe_settings(self) -> pulumi.Output[Optional['outputs.CaffeSettingsResponse']]:
        """
        Caffe job settings.
        """
        return pulumi.get(self, "caffe_settings")

    @property
    @pulumi.getter(name="chainerSettings")
    def chainer_settings(self) -> pulumi.Output[Optional['outputs.ChainerSettingsResponse']]:
        """
        Chainer job settings.
        """
        return pulumi.get(self, "chainer_settings")

    @property
    @pulumi.getter
    def cluster(self) -> pulumi.Output[Optional['outputs.ResourceIdResponse']]:
        """
        Resource ID of the cluster associated with the job.
        """
        return pulumi.get(self, "cluster")

    @property
    @pulumi.getter(name="cntkSettings")
    def cntk_settings(self) -> pulumi.Output[Optional['outputs.CNTKsettingsResponse']]:
        """
        CNTK (aka Microsoft Cognitive Toolkit) job settings.
        """
        return pulumi.get(self, "cntk_settings")

    @property
    @pulumi.getter
    def constraints(self) -> pulumi.Output[Optional['outputs.JobPropertiesResponseConstraints']]:
        """
        Constraints associated with the Job.
        """
        return pulumi.get(self, "constraints")

    @property
    @pulumi.getter(name="containerSettings")
    def container_settings(self) -> pulumi.Output[Optional['outputs.ContainerSettingsResponse']]:
        """
        If the container was downloaded as part of cluster setup then the same container image will be used. If not provided, the job will run on the VM.
        """
        return pulumi.get(self, "container_settings")

    @property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> pulumi.Output[str]:
        """
        The creation time of the job.
        """
        return pulumi.get(self, "creation_time")

    @property
    @pulumi.getter(name="customMpiSettings")
    def custom_mpi_settings(self) -> pulumi.Output[Optional['outputs.CustomMpiSettingsResponse']]:
        """
        Custom MPI job settings.
        """
        return pulumi.get(self, "custom_mpi_settings")

    @property
    @pulumi.getter(name="customToolkitSettings")
    def custom_toolkit_settings(self) -> pulumi.Output[Optional['outputs.CustomToolkitSettingsResponse']]:
        """
        Custom tool kit job settings.
        """
        return pulumi.get(self, "custom_toolkit_settings")

    @property
    @pulumi.getter(name="environmentVariables")
    def environment_variables(self) -> pulumi.Output[Optional[Sequence['outputs.EnvironmentVariableResponse']]]:
        """
        A collection of user defined environment variables to be setup for the job.
        """
        return pulumi.get(self, "environment_variables")

    @property
    @pulumi.getter(name="executionInfo")
    def execution_info(self) -> pulumi.Output[Optional['outputs.JobPropertiesResponseExecutionInfo']]:
        """
        Information about the execution of a job.
        """
        return pulumi.get(self, "execution_info")

    @property
    @pulumi.getter(name="executionState")
    def execution_state(self) -> pulumi.Output[str]:
        """
        The current state of the job. Possible values are: queued - The job is queued and able to run. A job enters this state when it is created, or when it is awaiting a retry after a failed run. running - The job is running on a compute cluster. This includes job-level preparation such as downloading resource files or set up container specified on the job - it does not necessarily mean that the job command line has started executing. terminating - The job is terminated by the user, the terminate operation is in progress. succeeded - The job has completed running successfully and exited with exit code 0. failed - The job has finished unsuccessfully (failed with a non-zero exit code) and has exhausted its retry limit. A job is also marked as failed if an error occurred launching the job.
        """
        return pulumi.get(self, "execution_state")

    @property
    @pulumi.getter(name="executionStateTransitionTime")
    def execution_state_transition_time(self) -> pulumi.Output[str]:
        """
        The time at which the job entered its current execution state.
        """
        return pulumi.get(self, "execution_state_transition_time")

    @property
    @pulumi.getter(name="horovodSettings")
    def horovod_settings(self) -> pulumi.Output[Optional['outputs.HorovodSettingsResponse']]:
        """
        Specifies the settings for Horovod job.
        """
        return pulumi.get(self, "horovod_settings")

    @property
    @pulumi.getter(name="inputDirectories")
    def input_directories(self) -> pulumi.Output[Optional[Sequence['outputs.InputDirectoryResponse']]]:
        """
        A list of input directories for the job.
        """
        return pulumi.get(self, "input_directories")

    @property
    @pulumi.getter(name="jobOutputDirectoryPathSegment")
    def job_output_directory_path_segment(self) -> pulumi.Output[str]:
        """
        A segment of job's output directories path created by Batch AI. Batch AI creates job's output directories under an unique path to avoid conflicts between jobs. This value contains a path segment generated by Batch AI to make the path unique and can be used to find the output directory on the node or mounted filesystem.
        """
        return pulumi.get(self, "job_output_directory_path_segment")

    @property
    @pulumi.getter(name="jobPreparation")
    def job_preparation(self) -> pulumi.Output[Optional['outputs.JobPreparationResponse']]:
        """
        The specified actions will run on all the nodes that are part of the job
        """
        return pulumi.get(self, "job_preparation")

    @property
    @pulumi.getter(name="mountVolumes")
    def mount_volumes(self) -> pulumi.Output[Optional['outputs.MountVolumesResponse']]:
        """
        Collection of mount volumes available to the job during execution. These volumes are mounted before the job execution and unmounted after the job completion. The volumes are mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        """
        return pulumi.get(self, "mount_volumes")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> pulumi.Output[Optional[int]]:
        """
        The job will be gang scheduled on that many compute nodes
        """
        return pulumi.get(self, "node_count")

    @property
    @pulumi.getter(name="outputDirectories")
    def output_directories(self) -> pulumi.Output[Optional[Sequence['outputs.OutputDirectoryResponse']]]:
        """
        A list of output directories for the job.
        """
        return pulumi.get(self, "output_directories")

    @property
    @pulumi.getter(name="provisioningState")
    def provisioning_state(self) -> pulumi.Output[str]:
        """
        The provisioned state of the Batch AI job
        """
        return pulumi.get(self, "provisioning_state")

    @property
    @pulumi.getter(name="provisioningStateTransitionTime")
    def provisioning_state_transition_time(self) -> pulumi.Output[str]:
        """
        The time at which the job entered its current provisioning state.
        """
        return pulumi.get(self, "provisioning_state_transition_time")

    @property
    @pulumi.getter(name="pyTorchSettings")
    def py_torch_settings(self) -> pulumi.Output[Optional['outputs.PyTorchSettingsResponse']]:
        """
        pyTorch job settings.
        """
        return pulumi.get(self, "py_torch_settings")

    @property
    @pulumi.getter(name="schedulingPriority")
    def scheduling_priority(self) -> pulumi.Output[Optional[str]]:
        """
        Scheduling priority associated with the job.
        """
        return pulumi.get(self, "scheduling_priority")

    @property
    @pulumi.getter
    def secrets(self) -> pulumi.Output[Optional[Sequence['outputs.EnvironmentVariableWithSecretValueResponse']]]:
        """
        A collection of user defined environment variables with secret values to be setup for the job. Server will never report values of these variables back.
        """
        return pulumi.get(self, "secrets")

    @property
    @pulumi.getter(name="stdOutErrPathPrefix")
    def std_out_err_path_prefix(self) -> pulumi.Output[Optional[str]]:
        """
        The path where the Batch AI service stores stdout, stderror and execution log of the job.
        """
        return pulumi.get(self, "std_out_err_path_prefix")

    @property
    @pulumi.getter(name="tensorFlowSettings")
    def tensor_flow_settings(self) -> pulumi.Output[Optional['outputs.TensorFlowSettingsResponse']]:
        """
        TensorFlow job settings.
        """
        return pulumi.get(self, "tensor_flow_settings")

    @property
    @pulumi.getter(name="toolType")
    def tool_type(self) -> pulumi.Output[Optional[str]]:
        """
        Possible values are: cntk, tensorflow, caffe, caffe2, chainer, pytorch, custom, custommpi, horovod.
        """
        return pulumi.get(self, "tool_type")

    @property
    @pulumi.getter
    def type(self) -> pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, "type")


# coding=utf-8
# *** WARNING: this file was generated by the Pulumi SDK Generator. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from ... import _utilities
from . import outputs
from ._enums import *
from ._inputs import *

__all__ = ['JobArgs', 'Job']

@pulumi.input_type
class JobArgs:
    def __init__(__self__, *,
                 cluster: pulumi.Input['ResourceIdArgs'],
                 experiment_name: pulumi.Input[str],
                 node_count: pulumi.Input[int],
                 resource_group_name: pulumi.Input[str],
                 std_out_err_path_prefix: pulumi.Input[str],
                 workspace_name: pulumi.Input[str],
                 caffe2_settings: Optional[pulumi.Input['Caffe2SettingsArgs']] = None,
                 caffe_settings: Optional[pulumi.Input['CaffeSettingsArgs']] = None,
                 chainer_settings: Optional[pulumi.Input['ChainerSettingsArgs']] = None,
                 cntk_settings: Optional[pulumi.Input['CNTKsettingsArgs']] = None,
                 constraints: Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']] = None,
                 container_settings: Optional[pulumi.Input['ContainerSettingsArgs']] = None,
                 custom_mpi_settings: Optional[pulumi.Input['CustomMpiSettingsArgs']] = None,
                 custom_toolkit_settings: Optional[pulumi.Input['CustomToolkitSettingsArgs']] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]] = None,
                 horovod_settings: Optional[pulumi.Input['HorovodSettingsArgs']] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input['JobPreparationArgs']] = None,
                 mount_volumes: Optional[pulumi.Input['MountVolumesArgs']] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]] = None,
                 py_torch_settings: Optional[pulumi.Input['PyTorchSettingsArgs']] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]] = None,
                 tensor_flow_settings: Optional[pulumi.Input['TensorFlowSettingsArgs']] = None):
        """
        The set of arguments for constructing a Job resource.
        :param pulumi.Input['ResourceIdArgs'] cluster: Resource ID of the cluster on which this job will run.
        :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.
        :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.
        :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input['Caffe2SettingsArgs'] caffe2_settings: Settings for Caffe2 job.
        :param pulumi.Input['CaffeSettingsArgs'] caffe_settings: Settings for Caffe job.
        :param pulumi.Input['ChainerSettingsArgs'] chainer_settings: Settings for Chainer job.
        :param pulumi.Input['CNTKsettingsArgs'] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        :param pulumi.Input['JobBasePropertiesConstraintsArgs'] constraints: Constraints associated with the Job.
        :param pulumi.Input['ContainerSettingsArgs'] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.
        :param pulumi.Input['CustomMpiSettingsArgs'] custom_mpi_settings: Settings for custom MPI job.
        :param pulumi.Input['CustomToolkitSettingsArgs'] custom_toolkit_settings: Settings for custom tool kit job.
        :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]] environment_variables: A list of user defined environment variables which will be setup for the job.
        :param pulumi.Input['HorovodSettingsArgs'] horovod_settings: Settings for Horovod job.
        :param pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]] input_directories: A list of input directories for the job.
        :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input['JobPreparationArgs'] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.
        :param pulumi.Input['MountVolumesArgs'] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        :param pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]] output_directories: A list of output directories for the job.
        :param pulumi.Input['PyTorchSettingsArgs'] py_torch_settings: Settings for pyTorch job.
        :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.
        :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        :param pulumi.Input['TensorFlowSettingsArgs'] tensor_flow_settings: Settings for Tensor Flow job.
        """
        pulumi.set(__self__, "cluster", cluster)
        pulumi.set(__self__, "experiment_name", experiment_name)
        pulumi.set(__self__, "node_count", node_count)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "std_out_err_path_prefix", std_out_err_path_prefix)
        pulumi.set(__self__, "workspace_name", workspace_name)
        if caffe2_settings is not None:
            pulumi.set(__self__, "caffe2_settings", caffe2_settings)
        if caffe_settings is not None:
            pulumi.set(__self__, "caffe_settings", caffe_settings)
        if chainer_settings is not None:
            pulumi.set(__self__, "chainer_settings", chainer_settings)
        if cntk_settings is not None:
            pulumi.set(__self__, "cntk_settings", cntk_settings)
        if constraints is not None:
            pulumi.set(__self__, "constraints", constraints)
        if container_settings is not None:
            pulumi.set(__self__, "container_settings", container_settings)
        if custom_mpi_settings is not None:
            pulumi.set(__self__, "custom_mpi_settings", custom_mpi_settings)
        if custom_toolkit_settings is not None:
            pulumi.set(__self__, "custom_toolkit_settings", custom_toolkit_settings)
        if environment_variables is not None:
            pulumi.set(__self__, "environment_variables", environment_variables)
        if horovod_settings is not None:
            pulumi.set(__self__, "horovod_settings", horovod_settings)
        if input_directories is not None:
            pulumi.set(__self__, "input_directories", input_directories)
        if job_name is not None:
            pulumi.set(__self__, "job_name", job_name)
        if job_preparation is not None:
            pulumi.set(__self__, "job_preparation", job_preparation)
        if mount_volumes is not None:
            pulumi.set(__self__, "mount_volumes", mount_volumes)
        if output_directories is not None:
            pulumi.set(__self__, "output_directories", output_directories)
        if py_torch_settings is not None:
            pulumi.set(__self__, "py_torch_settings", py_torch_settings)
        if scheduling_priority is None:
            scheduling_priority = 'normal'
        if scheduling_priority is not None:
            pulumi.set(__self__, "scheduling_priority", scheduling_priority)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if tensor_flow_settings is not None:
            pulumi.set(__self__, "tensor_flow_settings", tensor_flow_settings)

    @property
    @pulumi.getter
    def cluster(self) -> pulumi.Input['ResourceIdArgs']:
        """
        Resource ID of the cluster on which this job will run.
        """
        return pulumi.get(self, "cluster")

    @cluster.setter
    def cluster(self, value: pulumi.Input['ResourceIdArgs']):
        pulumi.set(self, "cluster", value)

    @property
    @pulumi.getter(name="experimentName")
    def experiment_name(self) -> pulumi.Input[str]:
        """
        The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "experiment_name")

    @experiment_name.setter
    def experiment_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "experiment_name", value)

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> pulumi.Input[int]:
        """
        Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        """
        return pulumi.get(self, "node_count")

    @node_count.setter
    def node_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "node_count", value)

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[str]:
        """
        Name of the resource group to which the resource belongs.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_group_name", value)

    @property
    @pulumi.getter(name="stdOutErrPathPrefix")
    def std_out_err_path_prefix(self) -> pulumi.Input[str]:
        """
        The path where the Batch AI service will store stdout, stderror and execution log of the job.
        """
        return pulumi.get(self, "std_out_err_path_prefix")

    @std_out_err_path_prefix.setter
    def std_out_err_path_prefix(self, value: pulumi.Input[str]):
        pulumi.set(self, "std_out_err_path_prefix", value)

    @property
    @pulumi.getter(name="workspaceName")
    def workspace_name(self) -> pulumi.Input[str]:
        """
        The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "workspace_name")

    @workspace_name.setter
    def workspace_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "workspace_name", value)

    @property
    @pulumi.getter(name="caffe2Settings")
    def caffe2_settings(self) -> Optional[pulumi.Input['Caffe2SettingsArgs']]:
        """
        Settings for Caffe2 job.
        """
        return pulumi.get(self, "caffe2_settings")

    @caffe2_settings.setter
    def caffe2_settings(self, value: Optional[pulumi.Input['Caffe2SettingsArgs']]):
        pulumi.set(self, "caffe2_settings", value)

    @property
    @pulumi.getter(name="caffeSettings")
    def caffe_settings(self) -> Optional[pulumi.Input['CaffeSettingsArgs']]:
        """
        Settings for Caffe job.
        """
        return pulumi.get(self, "caffe_settings")

    @caffe_settings.setter
    def caffe_settings(self, value: Optional[pulumi.Input['CaffeSettingsArgs']]):
        pulumi.set(self, "caffe_settings", value)

    @property
    @pulumi.getter(name="chainerSettings")
    def chainer_settings(self) -> Optional[pulumi.Input['ChainerSettingsArgs']]:
        """
        Settings for Chainer job.
        """
        return pulumi.get(self, "chainer_settings")

    @chainer_settings.setter
    def chainer_settings(self, value: Optional[pulumi.Input['ChainerSettingsArgs']]):
        pulumi.set(self, "chainer_settings", value)

    @property
    @pulumi.getter(name="cntkSettings")
    def cntk_settings(self) -> Optional[pulumi.Input['CNTKsettingsArgs']]:
        """
        Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        """
        return pulumi.get(self, "cntk_settings")

    @cntk_settings.setter
    def cntk_settings(self, value: Optional[pulumi.Input['CNTKsettingsArgs']]):
        pulumi.set(self, "cntk_settings", value)

    @property
    @pulumi.getter
    def constraints(self) -> Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']]:
        """
        Constraints associated with the Job.
        """
        return pulumi.get(self, "constraints")

    @constraints.setter
    def constraints(self, value: Optional[pulumi.Input['JobBasePropertiesConstraintsArgs']]):
        pulumi.set(self, "constraints", value)

    @property
    @pulumi.getter(name="containerSettings")
    def container_settings(self) -> Optional[pulumi.Input['ContainerSettingsArgs']]:
        """
        Docker container settings for the job. If not provided, the job will run directly on the node.
        """
        return pulumi.get(self, "container_settings")

    @container_settings.setter
    def container_settings(self, value: Optional[pulumi.Input['ContainerSettingsArgs']]):
        pulumi.set(self, "container_settings", value)

    @property
    @pulumi.getter(name="customMpiSettings")
    def custom_mpi_settings(self) -> Optional[pulumi.Input['CustomMpiSettingsArgs']]:
        """
        Settings for custom MPI job.
        """
        return pulumi.get(self, "custom_mpi_settings")

    @custom_mpi_settings.setter
    def custom_mpi_settings(self, value: Optional[pulumi.Input['CustomMpiSettingsArgs']]):
        pulumi.set(self, "custom_mpi_settings", value)

    @property
    @pulumi.getter(name="customToolkitSettings")
    def custom_toolkit_settings(self) -> Optional[pulumi.Input['CustomToolkitSettingsArgs']]:
        """
        Settings for custom tool kit job.
        """
        return pulumi.get(self, "custom_toolkit_settings")

    @custom_toolkit_settings.setter
    def custom_toolkit_settings(self, value: Optional[pulumi.Input['CustomToolkitSettingsArgs']]):
        pulumi.set(self, "custom_toolkit_settings", value)

    @property
    @pulumi.getter(name="environmentVariables")
    def environment_variables(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]]:
        """
        A list of user defined environment variables which will be setup for the job.
        """
        return pulumi.get(self, "environment_variables")

    @environment_variables.setter
    def environment_variables(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]]]):
        pulumi.set(self, "environment_variables", value)

    @property
    @pulumi.getter(name="horovodSettings")
    def horovod_settings(self) -> Optional[pulumi.Input['HorovodSettingsArgs']]:
        """
        Settings for Horovod job.
        """
        return pulumi.get(self, "horovod_settings")

    @horovod_settings.setter
    def horovod_settings(self, value: Optional[pulumi.Input['HorovodSettingsArgs']]):
        pulumi.set(self, "horovod_settings", value)

    @property
    @pulumi.getter(name="inputDirectories")
    def input_directories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]]:
        """
        A list of input directories for the job.
        """
        return pulumi.get(self, "input_directories")

    @input_directories.setter
    def input_directories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]]]):
        pulumi.set(self, "input_directories", value)

    @property
    @pulumi.getter(name="jobName")
    def job_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        return pulumi.get(self, "job_name")

    @job_name.setter
    def job_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "job_name", value)

    @property
    @pulumi.getter(name="jobPreparation")
    def job_preparation(self) -> Optional[pulumi.Input['JobPreparationArgs']]:
        """
        A command line to be executed on each node allocated for the job before tool kit is launched.
        """
        return pulumi.get(self, "job_preparation")

    @job_preparation.setter
    def job_preparation(self, value: Optional[pulumi.Input['JobPreparationArgs']]):
        pulumi.set(self, "job_preparation", value)

    @property
    @pulumi.getter(name="mountVolumes")
    def mount_volumes(self) -> Optional[pulumi.Input['MountVolumesArgs']]:
        """
        Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        """
        return pulumi.get(self, "mount_volumes")

    @mount_volumes.setter
    def mount_volumes(self, value: Optional[pulumi.Input['MountVolumesArgs']]):
        pulumi.set(self, "mount_volumes", value)

    @property
    @pulumi.getter(name="outputDirectories")
    def output_directories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]]:
        """
        A list of output directories for the job.
        """
        return pulumi.get(self, "output_directories")

    @output_directories.setter
    def output_directories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]]]):
        pulumi.set(self, "output_directories", value)

    @property
    @pulumi.getter(name="pyTorchSettings")
    def py_torch_settings(self) -> Optional[pulumi.Input['PyTorchSettingsArgs']]:
        """
        Settings for pyTorch job.
        """
        return pulumi.get(self, "py_torch_settings")

    @py_torch_settings.setter
    def py_torch_settings(self, value: Optional[pulumi.Input['PyTorchSettingsArgs']]):
        pulumi.set(self, "py_torch_settings", value)

    @property
    @pulumi.getter(name="schedulingPriority")
    def scheduling_priority(self) -> Optional[pulumi.Input[Union[str, 'JobPriority']]]:
        """
        Scheduling priority associated with the job. Possible values: low, normal, high.
        """
        return pulumi.get(self, "scheduling_priority")

    @scheduling_priority.setter
    def scheduling_priority(self, value: Optional[pulumi.Input[Union[str, 'JobPriority']]]):
        pulumi.set(self, "scheduling_priority", value)

    @property
    @pulumi.getter
    def secrets(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]]:
        """
        A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        """
        return pulumi.get(self, "secrets")

    @secrets.setter
    def secrets(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]]]):
        pulumi.set(self, "secrets", value)

    @property
    @pulumi.getter(name="tensorFlowSettings")
    def tensor_flow_settings(self) -> Optional[pulumi.Input['TensorFlowSettingsArgs']]:
        """
        Settings for Tensor Flow job.
        """
        return pulumi.get(self, "tensor_flow_settings")

    @tensor_flow_settings.setter
    def tensor_flow_settings(self, value: Optional[pulumi.Input['TensorFlowSettingsArgs']]):
        pulumi.set(self, "tensor_flow_settings", value)


class Job(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 caffe2_settings: Optional[pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']]] = None,
                 caffe_settings: Optional[pulumi.Input[pulumi.InputType['CaffeSettingsArgs']]] = None,
                 chainer_settings: Optional[pulumi.Input[pulumi.InputType['ChainerSettingsArgs']]] = None,
                 cluster: Optional[pulumi.Input[pulumi.InputType['ResourceIdArgs']]] = None,
                 cntk_settings: Optional[pulumi.Input[pulumi.InputType['CNTKsettingsArgs']]] = None,
                 constraints: Optional[pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']]] = None,
                 container_settings: Optional[pulumi.Input[pulumi.InputType['ContainerSettingsArgs']]] = None,
                 custom_mpi_settings: Optional[pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']]] = None,
                 custom_toolkit_settings: Optional[pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']]] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]]] = None,
                 experiment_name: Optional[pulumi.Input[str]] = None,
                 horovod_settings: Optional[pulumi.Input[pulumi.InputType['HorovodSettingsArgs']]] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input[pulumi.InputType['JobPreparationArgs']]] = None,
                 mount_volumes: Optional[pulumi.Input[pulumi.InputType['MountVolumesArgs']]] = None,
                 node_count: Optional[pulumi.Input[int]] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]]] = None,
                 py_torch_settings: Optional[pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]]] = None,
                 std_out_err_path_prefix: Optional[pulumi.Input[str]] = None,
                 tensor_flow_settings: Optional[pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']]] = None,
                 workspace_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Information about a Job.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']] caffe2_settings: Settings for Caffe2 job.
        :param pulumi.Input[pulumi.InputType['CaffeSettingsArgs']] caffe_settings: Settings for Caffe job.
        :param pulumi.Input[pulumi.InputType['ChainerSettingsArgs']] chainer_settings: Settings for Chainer job.
        :param pulumi.Input[pulumi.InputType['ResourceIdArgs']] cluster: Resource ID of the cluster on which this job will run.
        :param pulumi.Input[pulumi.InputType['CNTKsettingsArgs']] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.
        :param pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']] constraints: Constraints associated with the Job.
        :param pulumi.Input[pulumi.InputType['ContainerSettingsArgs']] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.
        :param pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']] custom_mpi_settings: Settings for custom MPI job.
        :param pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']] custom_toolkit_settings: Settings for custom tool kit job.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]] environment_variables: A list of user defined environment variables which will be setup for the job.
        :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[pulumi.InputType['HorovodSettingsArgs']] horovod_settings: Settings for Horovod job.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]] input_directories: A list of input directories for the job.
        :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        :param pulumi.Input[pulumi.InputType['JobPreparationArgs']] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.
        :param pulumi.Input[pulumi.InputType['MountVolumesArgs']] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]] output_directories: A list of output directories for the job.
        :param pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']] py_torch_settings: Settings for pyTorch job.
        :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.
        :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.
        :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.
        :param pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']] tensor_flow_settings: Settings for Tensor Flow job.
        :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: JobArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Information about a Job.

        :param str resource_name: The name of the resource.
        :param JobArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(JobArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 caffe2_settings: Optional[pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']]] = None,
                 caffe_settings: Optional[pulumi.Input[pulumi.InputType['CaffeSettingsArgs']]] = None,
                 chainer_settings: Optional[pulumi.Input[pulumi.InputType['ChainerSettingsArgs']]] = None,
                 cluster: Optional[pulumi.Input[pulumi.InputType['ResourceIdArgs']]] = None,
                 cntk_settings: Optional[pulumi.Input[pulumi.InputType['CNTKsettingsArgs']]] = None,
                 constraints: Optional[pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']]] = None,
                 container_settings: Optional[pulumi.Input[pulumi.InputType['ContainerSettingsArgs']]] = None,
                 custom_mpi_settings: Optional[pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']]] = None,
                 custom_toolkit_settings: Optional[pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']]] = None,
                 environment_variables: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]]] = None,
                 experiment_name: Optional[pulumi.Input[str]] = None,
                 horovod_settings: Optional[pulumi.Input[pulumi.InputType['HorovodSettingsArgs']]] = None,
                 input_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]]] = None,
                 job_name: Optional[pulumi.Input[str]] = None,
                 job_preparation: Optional[pulumi.Input[pulumi.InputType['JobPreparationArgs']]] = None,
                 mount_volumes: Optional[pulumi.Input[pulumi.InputType['MountVolumesArgs']]] = None,
                 node_count: Optional[pulumi.Input[int]] = None,
                 output_directories: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]]] = None,
                 py_torch_settings: Optional[pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 scheduling_priority: Optional[pulumi.Input[Union[str, 'JobPriority']]] = None,
                 secrets: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]]] = None,
                 std_out_err_path_prefix: Optional[pulumi.Input[str]] = None,
                 tensor_flow_settings: Optional[pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']]] = None,
                 workspace_name: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        if opts is None:
            opts = pulumi.ResourceOptions()
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.version is None:
            opts.version = _utilities.get_version()
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = JobArgs.__new__(JobArgs)

            __props__.__dict__["caffe2_settings"] = caffe2_settings
            __props__.__dict__["caffe_settings"] = caffe_settings
            __props__.__dict__["chainer_settings"] = chainer_settings
            if cluster is None and not opts.urn:
                raise TypeError("Missing required property 'cluster'")
            __props__.__dict__["cluster"] = cluster
            __props__.__dict__["cntk_settings"] = cntk_settings
            __props__.__dict__["constraints"] = constraints
            __props__.__dict__["container_settings"] = container_settings
            __props__.__dict__["custom_mpi_settings"] = custom_mpi_settings
            __props__.__dict__["custom_toolkit_settings"] = custom_toolkit_settings
            __props__.__dict__["environment_variables"] = environment_variables
            if experiment_name is None and not opts.urn:
                raise TypeError("Missing required property 'experiment_name'")
            __props__.__dict__["experiment_name"] = experiment_name
            __props__.__dict__["horovod_settings"] = horovod_settings
            __props__.__dict__["input_directories"] = input_directories
            __props__.__dict__["job_name"] = job_name
            __props__.__dict__["job_preparation"] = job_preparation
            __props__.__dict__["mount_volumes"] = mount_volumes
            if node_count is None and not opts.urn:
                raise TypeError("Missing required property 'node_count'")
            __props__.__dict__["node_count"] = node_count
            __props__.__dict__["output_directories"] = output_directories
            __props__.__dict__["py_torch_settings"] = py_torch_settings
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            if scheduling_priority is None:
                scheduling_priority = 'normal'
            __props__.__dict__["scheduling_priority"] = scheduling_priority
            __props__.__dict__["secrets"] = secrets
            if std_out_err_path_prefix is None and not opts.urn:
                raise TypeError("Missing required property 'std_out_err_path_prefix'")
            __props__.__dict__["std_out_err_path_prefix"] = std_out_err_path_prefix
            __props__.__dict__["tensor_flow_settings"] = tensor_flow_settings
            if workspace_name is None and not opts.urn:
                raise TypeError("Missing required property 'workspace_name'")
            __props__.__dict__["workspace_name"] = workspace_name
            __props__.__dict__["creation_time"] = None
            __props__.__dict__["execution_info"] = None
            __props__.__dict__["execution_state"] = None
            __props__.__dict__["execution_state_transition_time"] = None
            __props__.__dict__["job_output_directory_path_segment"] = None
            __props__.__dict__["name"] = None
            __props__.__dict__["provisioning_state"] = None
            __props__.__dict__["provisioning_state_transition_time"] = None
            __props__.__dict__["tool_type"] = None
            __props__.__dict__["type"] = None
        alias_opts = pulumi.ResourceOptions(aliases=[pulumi.Alias(type_="azure-nextgen:batchai/v20180501:Job"), pulumi.Alias(type_="azure-native:batchai:Job"), pulumi.Alias(type_="azure-nextgen:batchai:Job")])
        opts = pulumi.ResourceOptions.merge(opts, alias_opts)
        super(Job, __self__).__init__(
            'azure-native:batchai/v20180501:Job',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None) -> 'Job':
        """
        Get an existing Job resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = JobArgs.__new__(JobArgs)

        __props__.__dict__["caffe2_settings"] = None
        __props__.__dict__["caffe_settings"] = None
        __props__.__dict__["chainer_settings"] = None
        __props__.__dict__["cluster"] = None
        __props__.__dict__["cntk_settings"] = None
        __props__.__dict__["constraints"] = None
        __props__.__dict__["container_settings"] = None
        __props__.__dict__["creation_time"] = None
        __props__.__dict__["custom_mpi_settings"] = None
        __props__.__dict__["custom_toolkit_settings"] = None
        __props__.__dict__["environment_variables"] = None
        __props__.__dict__["execution_info"] = None
        __props__.__dict__["execution_state"] = None
        __props__.__dict__["execution_state_transition_time"] = None
        __props__.__dict__["horovod_settings"] = None
        __props__.__dict__["input_directories"] = None
        __props__.__dict__["job_output_directory_path_segment"] = None
        __props__.__dict__["job_preparation"] = None
        __props__.__dict__["mount_volumes"] = None
        __props__.__dict__["name"] = None
        __props__.__dict__["node_count"] = None
        __props__.__dict__["output_directories"] = None
        __props__.__dict__["provisioning_state"] = None
        __props__.__dict__["provisioning_state_transition_time"] = None
        __props__.__dict__["py_torch_settings"] = None
        __props__.__dict__["scheduling_priority"] = None
        __props__.__dict__["secrets"] = None
        __props__.__dict__["std_out_err_path_prefix"] = None
        __props__.__dict__["tensor_flow_settings"] = None
        __props__.__dict__["tool_type"] = None
        __props__.__dict__["type"] = None
        return Job(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="caffe2Settings")
    def caffe2_settings(self) -> pulumi.Output[Optional['outputs.Caffe2SettingsResponse']]:
        """
        Caffe2 job settings.
        """
        return pulumi.get(self, "caffe2_settings")

    @property
    @pulumi.getter(name="caffeSettings")
    def caffe_settings(self) -> pulumi.Output[Optional['outputs.CaffeSettingsResponse']]:
        """
        Caffe job settings.
        """
        return pulumi.get(self, "caffe_settings")

    @property
    @pulumi.getter(name="chainerSettings")
    def chainer_settings(self) -> pulumi.Output[Optional['outputs.ChainerSettingsResponse']]:
        """
        Chainer job settings.
        """
        return pulumi.get(self, "chainer_settings")

    @property
    @pulumi.getter
    def cluster(self) -> pulumi.Output[Optional['outputs.ResourceIdResponse']]:
        """
        Resource ID of the cluster associated with the job.
        """
        return pulumi.get(self, "cluster")

    @property
    @pulumi.getter(name="cntkSettings")
    def cntk_settings(self) -> pulumi.Output[Optional['outputs.CNTKsettingsResponse']]:
        """
        CNTK (aka Microsoft Cognitive Toolkit) job settings.
        """
        return pulumi.get(self, "cntk_settings")

    @property
    @pulumi.getter
    def constraints(self) -> pulumi.Output[Optional['outputs.JobPropertiesResponseConstraints']]:
        """
        Constraints associated with the Job.
        """
        return pulumi.get(self, "constraints")

    @property
    @pulumi.getter(name="containerSettings")
    def container_settings(self) -> pulumi.Output[Optional['outputs.ContainerSettingsResponse']]:
        """
        If the container was downloaded as part of cluster setup then the same container image will be used. If not provided, the job will run on the VM.
        """
        return pulumi.get(self, "container_settings")

    @property
    @pulumi.getter(name="creationTime")
    def creation_time(self) -> pulumi.Output[str]:
        """
        The creation time of the job.
        """
        return pulumi.get(self, "creation_time")

    @property
    @pulumi.getter(name="customMpiSettings")
    def custom_mpi_settings(self) -> pulumi.Output[Optional['outputs.CustomMpiSettingsResponse']]:
        """
        Custom MPI job settings.
        """
        return pulumi.get(self, "custom_mpi_settings")

    @property
    @pulumi.getter(name="customToolkitSettings")
    def custom_toolkit_settings(self) -> pulumi.Output[Optional['outputs.CustomToolkitSettingsResponse']]:
        """
        Custom tool kit job settings.
        """
        return pulumi.get(self, "custom_toolkit_settings")

    @property
    @pulumi.getter(name="environmentVariables")
    def environment_variables(self) -> pulumi.Output[Optional[Sequence['outputs.EnvironmentVariableResponse']]]:
        """
        A collection of user defined environment variables to be setup for the job.
        """
        return pulumi.get(self, "environment_variables")

    @property
    @pulumi.getter(name="executionInfo")
    def execution_info(self) -> pulumi.Output[Optional['outputs.JobPropertiesResponseExecutionInfo']]:
        """
        Information about the execution of a job.
        """
        return pulumi.get(self, "execution_info")

    @property
    @pulumi.getter(name="executionState")
    def execution_state(self) -> pulumi.Output[str]:
        """
        The current state of the job. Possible values are: queued - The job is queued and able to run. A job enters this state when it is created, or when it is awaiting a retry after a failed run. running - The job is running on a compute cluster. This includes job-level preparation such as downloading resource files or set up container specified on the job - it does not necessarily mean that the job command line has started executing. terminating - The job is terminated by the user, the terminate operation is in progress. succeeded - The job has completed running successfully and exited with exit code 0. failed - The job has finished unsuccessfully (failed with a non-zero exit code) and has exhausted its retry limit. A job is also marked as failed if an error occurred launching the job.
        """
        return pulumi.get(self, "execution_state")

    @property
    @pulumi.getter(name="executionStateTransitionTime")
    def execution_state_transition_time(self) -> pulumi.Output[str]:
        """
        The time at which the job entered its current execution state.
        """
        return pulumi.get(self, "execution_state_transition_time")

    @property
    @pulumi.getter(name="horovodSettings")
    def horovod_settings(self) -> pulumi.Output[Optional['outputs.HorovodSettingsResponse']]:
        """
        Specifies the settings for Horovod job.
        """
        return pulumi.get(self, "horovod_settings")

    @property
    @pulumi.getter(name="inputDirectories")
    def input_directories(self) -> pulumi.Output[Optional[Sequence['outputs.InputDirectoryResponse']]]:
        """
        A list of input directories for the job.
        """
        return pulumi.get(self, "input_directories")

    @property
    @pulumi.getter(name="jobOutputDirectoryPathSegment")
    def job_output_directory_path_segment(self) -> pulumi.Output[str]:
        """
        A segment of job's output directories path created by Batch AI. Batch AI creates job's output directories under an unique path to avoid conflicts between jobs. This value contains a path segment generated by Batch AI to make the path unique and can be used to find the output directory on the node or mounted filesystem.
        """
        return pulumi.get(self, "job_output_directory_path_segment")

    @property
    @pulumi.getter(name="jobPreparation")
    def job_preparation(self) -> pulumi.Output[Optional['outputs.JobPreparationResponse']]:
        """
        The specified actions will run on all the nodes that are part of the job
        """
        return pulumi.get(self, "job_preparation")

    @property
    @pulumi.getter(name="mountVolumes")
    def mount_volumes(self) -> pulumi.Output[Optional['outputs.MountVolumesResponse']]:
        """
        Collection of mount volumes available to the job during execution. These volumes are mounted before the job execution and unmounted after the job completion. The volumes are mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.
        """
        return pulumi.get(self, "mount_volumes")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The name of the resource.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> pulumi.Output[Optional[int]]:
        """
        The job will be gang scheduled on that many compute nodes
        """
        return pulumi.get(self, "node_count")

    @property
    @pulumi.getter(name="outputDirectories")
    def output_directories(self) -> pulumi.Output[Optional[Sequence['outputs.OutputDirectoryResponse']]]:
        """
        A list of output directories for the job.
        """
        return pulumi.get(self, "output_directories")

    @property
    @pulumi.getter(name="provisioningState")
    def provisioning_state(self) -> pulumi.Output[str]:
        """
        The provisioned state of the Batch AI job
        """
        return pulumi.get(self, "provisioning_state")

    @property
    @pulumi.getter(name="provisioningStateTransitionTime")
    def provisioning_state_transition_time(self) -> pulumi.Output[str]:
        """
        The time at which the job entered its current provisioning state.
        """
        return pulumi.get(self, "provisioning_state_transition_time")

    @property
    @pulumi.getter(name="pyTorchSettings")
    def py_torch_settings(self) -> pulumi.Output[Optional['outputs.PyTorchSettingsResponse']]:
        """
        pyTorch job settings.
        """
        return pulumi.get(self, "py_torch_settings")

    @property
    @pulumi.getter(name="schedulingPriority")
    def scheduling_priority(self) -> pulumi.Output[Optional[str]]:
        """
        Scheduling priority associated with the job.
        """
        return pulumi.get(self, "scheduling_priority")

    @property
    @pulumi.getter
    def secrets(self) -> pulumi.Output[Optional[Sequence['outputs.EnvironmentVariableWithSecretValueResponse']]]:
        """
        A collection of user defined environment variables with secret values to be setup for the job. Server will never report values of these variables back.
        """
        return pulumi.get(self, "secrets")

    @property
    @pulumi.getter(name="stdOutErrPathPrefix")
    def std_out_err_path_prefix(self) -> pulumi.Output[Optional[str]]:
        """
        The path where the Batch AI service stores stdout, stderror and execution log of the job.
        """
        return pulumi.get(self, "std_out_err_path_prefix")

    @property
    @pulumi.getter(name="tensorFlowSettings")
    def tensor_flow_settings(self) -> pulumi.Output[Optional['outputs.TensorFlowSettingsResponse']]:
        """
        TensorFlow job settings.
        """
        return pulumi.get(self, "tensor_flow_settings")

    @property
    @pulumi.getter(name="toolType")
    def tool_type(self) -> pulumi.Output[Optional[str]]:
        """
        Possible values are: cntk, tensorflow, caffe, caffe2, chainer, pytorch, custom, custommpi, horovod.
        """
        return pulumi.get(self, "tool_type")

    @property
    @pulumi.getter
    def type(self) -> pulumi.Output[str]:
        """
        The type of the resource.
        """
        return pulumi.get(self, "type")


# coding=utf-8 # *** WARNING: this file was generated by the Pulumi SDK Generator. *** # *** Do not edit by hand unless you're certain you know what you are doing! *** The set of arguments for constructing a Job resource.         :param pulumi.Input['ResourceIdArgs'] cluster: Resource ID of the cluster on which this job will run.         :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.         :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.         :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.         :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.         :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.         :param pulumi.Input['Caffe2SettingsArgs'] caffe2_settings: Settings for Caffe2 job.         :param pulumi.Input['CaffeSettingsArgs'] caffe_settings: Settings for Caffe job.         :param pulumi.Input['ChainerSettingsArgs'] chainer_settings: Settings for Chainer job.         :param pulumi.Input['CNTKsettingsArgs'] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.         :param pulumi.Input['JobBasePropertiesConstraintsArgs'] constraints: Constraints associated with the Job.         :param pulumi.Input['ContainerSettingsArgs'] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.         :param pulumi.Input['CustomMpiSettingsArgs'] custom_mpi_settings: Settings for custom MPI job.         :param pulumi.Input['CustomToolkitSettingsArgs'] custom_toolkit_settings: Settings for custom tool kit job.         :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableArgs']]] environment_variables: A list of user defined environment variables which will be setup for the job.         :param pulumi.Input['HorovodSettingsArgs'] horovod_settings: Settings for Horovod job.         :param pulumi.Input[Sequence[pulumi.Input['InputDirectoryArgs']]] input_directories: A list of input directories for the job.         :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.         :param pulumi.Input['JobPreparationArgs'] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.         :param pulumi.Input['MountVolumesArgs'] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.         :param pulumi.Input[Sequence[pulumi.Input['OutputDirectoryArgs']]] output_directories: A list of output directories for the job.         :param pulumi.Input['PyTorchSettingsArgs'] py_torch_settings: Settings for pyTorch job.         :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.         :param pulumi.Input[Sequence[pulumi.Input['EnvironmentVariableWithSecretValueArgs']]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.         :param pulumi.Input['TensorFlowSettingsArgs'] tensor_flow_settings: Settings for Tensor Flow job. Resource ID of the cluster on which this job will run. The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long. Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes. Name of the resource group to which the resource belongs. The path where the Batch AI service will store stdout, stderror and execution log of the job. The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long. Settings for Caffe2 job. Settings for Caffe job. Settings for Chainer job. Settings for CNTK (aka Microsoft Cognitive Toolkit) job. Constraints associated with the Job. Docker container settings for the job. If not provided, the job will run directly on the node. Settings for custom MPI job. Settings for custom tool kit job. A list of user defined environment variables which will be setup for the job. Settings for Horovod job. A list of input directories for the job. The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long. A command line to be executed on each node allocated for the job before tool kit is launched. Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable. A list of output directories for the job. Settings for pyTorch job. Scheduling priority associated with the job. Possible values: low, normal, high. A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back. Settings for Tensor Flow job. Information about a Job.          :param str resource_name: The name of the resource.         :param pulumi.ResourceOptions opts: Options for the resource.         :param pulumi.Input[pulumi.InputType['Caffe2SettingsArgs']] caffe2_settings: Settings for Caffe2 job.         :param pulumi.Input[pulumi.InputType['CaffeSettingsArgs']] caffe_settings: Settings for Caffe job.         :param pulumi.Input[pulumi.InputType['ChainerSettingsArgs']] chainer_settings: Settings for Chainer job.         :param pulumi.Input[pulumi.InputType['ResourceIdArgs']] cluster: Resource ID of the cluster on which this job will run.         :param pulumi.Input[pulumi.InputType['CNTKsettingsArgs']] cntk_settings: Settings for CNTK (aka Microsoft Cognitive Toolkit) job.         :param pulumi.Input[pulumi.InputType['JobBasePropertiesConstraintsArgs']] constraints: Constraints associated with the Job.         :param pulumi.Input[pulumi.InputType['ContainerSettingsArgs']] container_settings: Docker container settings for the job. If not provided, the job will run directly on the node.         :param pulumi.Input[pulumi.InputType['CustomMpiSettingsArgs']] custom_mpi_settings: Settings for custom MPI job.         :param pulumi.Input[pulumi.InputType['CustomToolkitSettingsArgs']] custom_toolkit_settings: Settings for custom tool kit job.         :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableArgs']]]] environment_variables: A list of user defined environment variables which will be setup for the job.         :param pulumi.Input[str] experiment_name: The name of the experiment. Experiment names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.         :param pulumi.Input[pulumi.InputType['HorovodSettingsArgs']] horovod_settings: Settings for Horovod job.         :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InputDirectoryArgs']]]] input_directories: A list of input directories for the job.         :param pulumi.Input[str] job_name: The name of the job within the specified resource group. Job names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long.         :param pulumi.Input[pulumi.InputType['JobPreparationArgs']] job_preparation: A command line to be executed on each node allocated for the job before tool kit is launched.         :param pulumi.Input[pulumi.InputType['MountVolumesArgs']] mount_volumes: Information on mount volumes to be used by the job. These volumes will be mounted before the job execution and will be unmounted after the job completion. The volumes will be mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable.         :param pulumi.Input[int] node_count: Number of compute nodes to run the job on. The job will be gang scheduled on that many compute nodes.         :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OutputDirectoryArgs']]]] output_directories: A list of output directories for the job.         :param pulumi.Input[pulumi.InputType['PyTorchSettingsArgs']] py_torch_settings: Settings for pyTorch job.         :param pulumi.Input[str] resource_group_name: Name of the resource group to which the resource belongs.         :param pulumi.Input[Union[str, 'JobPriority']] scheduling_priority: Scheduling priority associated with the job. Possible values: low, normal, high.         :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['EnvironmentVariableWithSecretValueArgs']]]] secrets: A list of user defined environment variables with secret values which will be setup for the job. Server will never report values of these variables back.         :param pulumi.Input[str] std_out_err_path_prefix: The path where the Batch AI service will store stdout, stderror and execution log of the job.         :param pulumi.Input[pulumi.InputType['TensorFlowSettingsArgs']] tensor_flow_settings: Settings for Tensor Flow job.         :param pulumi.Input[str] workspace_name: The name of the workspace. Workspace names can only contain a combination of alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64 characters long. Information about a Job.          :param str resource_name: The name of the resource.         :param JobArgs args: The arguments to use to populate this resource's properties.         :param pulumi.ResourceOptions opts: Options for the resource. Get an existing Job resource's state with the given name, id, and optional extra         properties used to qualify the lookup.          :param str resource_name: The unique name of the resulting resource.         :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.         :param pulumi.ResourceOptions opts: Options for the resource. Caffe2 job settings. Caffe job settings. Chainer job settings. Resource ID of the cluster associated with the job. CNTK (aka Microsoft Cognitive Toolkit) job settings. Constraints associated with the Job. If the container was downloaded as part of cluster setup then the same container image will be used. If not provided, the job will run on the VM. The creation time of the job. Custom MPI job settings. Custom tool kit job settings. A collection of user defined environment variables to be setup for the job. Information about the execution of a job. The current state of the job. Possible values are: queued - The job is queued and able to run. A job enters this state when it is created, or when it is awaiting a retry after a failed run. running - The job is running on a compute cluster. This includes job-level preparation such as downloading resource files or set up container specified on the job - it does not necessarily mean that the job command line has started executing. terminating - The job is terminated by the user, the terminate operation is in progress. succeeded - The job has completed running successfully and exited with exit code 0. failed - The job has finished unsuccessfully (failed with a non-zero exit code) and has exhausted its retry limit. A job is also marked as failed if an error occurred launching the job. The time at which the job entered its current execution state. Specifies the settings for Horovod job. A list of input directories for the job. A segment of job's output directories path created by Batch AI. Batch AI creates job's output directories under an unique path to avoid conflicts between jobs. This value contains a path segment generated by Batch AI to make the path unique and can be used to find the output directory on the node or mounted filesystem. The specified actions will run on all the nodes that are part of the job Collection of mount volumes available to the job during execution. These volumes are mounted before the job execution and unmounted after the job completion. The volumes are mounted at location specified by $AZ_BATCHAI_JOB_MOUNT_ROOT environment variable. The name of the resource. The job will be gang scheduled on that many compute nodes A list of output directories for the job. The provisioned state of the Batch AI job The time at which the job entered its current provisioning state. pyTorch job settings. Scheduling priority associated with the job. A collection of user defined environment variables with secret values to be setup for the job. Server will never report values of these variables back. The path where the Batch AI service stores stdout, stderror and execution log of the job. TensorFlow job settings. Possible values are: cntk, tensorflow, caffe, caffe2, chainer, pytorch, custom, custommpi, horovod. The type of the resource.