/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 * 
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
// TODO: Include PageTemplateModels here too?? Probably
 */


/**
 * @class
 * Initializes a new instance of the PoolUsageMetrics class.
 * @constructor
 * Usage metrics for a pool across an aggregation interval.
 * @member {string} poolId The id of the pool whose metrics are being
 * aggregated.
 * 
 * @member {date} startTime The start time of the aggregation interval.
 * 
 * @member {date} endTime The end time of the aggregation interval.
 * 
 * @member {string} vmSize The size of virtual machines in the pool. All VMs
 * in a pool are the same size.
 * 
 * @member {number} totalCoreHours The total core hours used in the pool
 * during this aggregation interval.
 * 
 * @member {number} dataIngressGiB The cross data center network ingress in
 * GiB to the pool during this interval.
 * 
 * @member {number} dataEgressGiB The cross data center network egress in GiB
 * from the pool during this interval.
 * 
 */
export interface PoolUsageMetrics {
    poolId: string;
    startTime: Date;
    endTime: Date;
    vmSize: string;
    totalCoreHours: number;
    dataIngressGiB: number;
    dataEgressGiB: number;
}

/**
 * @class
 * Initializes a new instance of the NodeAgentSku class.
 * @constructor
 * A node agent SKU supported by the Batch service. The Batch node agent is a
 * program that runs on each node in the pool, and provides the
 * command-and-control interface between the node and the Batch service.
 * There are different implementations of the node agent, known as SKUs, for
 * different operating systems.
 * @member {string} [id] The node agent SKU id.
 * 
 * @member {array} [verifiedImageReferences] The list of images verified to be
 * compatible with this node agent SKU. This collection is not exhaustive
 * (the node agent may be compatible with other images).
 * 
 * @member {string} [osType] The type of operating system compatible with the
 * node agent SKU. Possible values include: 'linux', 'windows', 'unmapped'
 * 
 */
export interface NodeAgentSku {
    id?: string;
    verifiedImageReferences?: ImageReference[];
    osType?: string;
}

/**
 * @class
 * Initializes a new instance of the ImageReference class.
 * @constructor
 * A reference to an Azure Virtual Machines Marketplace image.
 * @member {string} publisher The publisher of the Azure Virtual Machines
 * Marketplace image. For example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string} offer The offer type of the Azure Virtual Machines
 * Marketplace image. For example, UbuntuServer or WindowsServer.
 * 
 * @member {string} sku The SKU of the Azure Virtual Machines Marketplace
 * image. For example, 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string} [version] The version of the Azure Virtual Machines
 * Marketplace image. A value of 'latest' can be specified to select the
 * latest version of an image. If omitted, the default is 'latest'.
 * 
 */
export interface ImageReference {
    publisher: string;
    offer: string;
    sku: string;
    version?: string;
}

/**
 * @class
 * Initializes a new instance of the UsageStatistics class.
 * @constructor
 * Statistics related to pool usage information.
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {moment.duration} dedicatedCoreTime The aggregated wall-clock time
 * of the dedicated compute node cores being part of the pool.
 * 
 */
export interface UsageStatistics {
    startTime: Date;
    lastUpdateTime: Date;
    dedicatedCoreTime: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the ResourceStatistics class.
 * @constructor
 * Statistics related to resource consumption by compute nodes in a pool.
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {number} avgCPUPercentage The average CPU usage across all nodes in
 * the pool (percentage per node).
 * 
 * @member {number} avgMemoryGiB The average memory usage in GiB across all
 * nodes in the pool.
 * 
 * @member {number} peakMemoryGiB The peak memory usage in GiB across all
 * nodes in the pool.
 * 
 * @member {number} avgDiskGiB The average used disk space in GiB across all
 * nodes in the pool.
 * 
 * @member {number} peakDiskGiB The peak used disk space in GiB across all
 * nodes in the pool.
 * 
 * @member {number} diskReadIOps The total number of disk read operations
 * across all nodes in the pool.
 * 
 * @member {number} diskWriteIOps The total number of disk write operations
 * across all nodes in the pool.
 * 
 * @member {number} diskReadGiB The total amount of data in GiB of disk reads
 * across all nodes in the pool.
 * 
 * @member {number} diskWriteGiB The total amount of data in GiB of disk
 * writes across all nodes in the pool.
 * 
 * @member {number} networkReadGiB The total amount of data in GiB of network
 * reads across all nodes in the pool.
 * 
 * @member {number} networkWriteGiB The total amount of data in GiB of network
 * writes across all nodes in the pool.
 * 
 */
export interface ResourceStatistics {
    startTime: Date;
    lastUpdateTime: Date;
    avgCPUPercentage: number;
    avgMemoryGiB: number;
    peakMemoryGiB: number;
    avgDiskGiB: number;
    peakDiskGiB: number;
    diskReadIOps: number;
    diskWriteIOps: number;
    diskReadGiB: number;
    diskWriteGiB: number;
    networkReadGiB: number;
    networkWriteGiB: number;
}

/**
 * @class
 * Initializes a new instance of the PoolStatistics class.
 * @constructor
 * Contains utilization and resource usage statistics for the lifetime of a
 * pool.
 * @member {string} url The URL for the statistics.
 * 
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {object} [usageStats] Statistics related to pool usage, such as the
 * amount of core-time used.
 * 
 * @member {date} [usageStats.startTime] The start time of the time range
 * covered by the statistics.
 * 
 * @member {date} [usageStats.lastUpdateTime] The time at which the statistics
 * were last updated. All statistics are limited to the range between
 * startTime and lastUpdateTime.
 * 
 * @member {moment.duration} [usageStats.dedicatedCoreTime] The aggregated
 * wall-clock time of the dedicated compute node cores being part of the pool.
 * 
 * @member {object} [resourceStats] Statistics related to resource consumption
 * by compute nodes in the pool.
 * 
 * @member {date} [resourceStats.startTime] The start time of the time range
 * covered by the statistics.
 * 
 * @member {date} [resourceStats.lastUpdateTime] The time at which the
 * statistics were last updated. All statistics are limited to the range
 * between startTime and lastUpdateTime.
 * 
 * @member {number} [resourceStats.avgCPUPercentage] The average CPU usage
 * across all nodes in the pool (percentage per node).
 * 
 * @member {number} [resourceStats.avgMemoryGiB] The average memory usage in
 * GiB across all nodes in the pool.
 * 
 * @member {number} [resourceStats.peakMemoryGiB] The peak memory usage in GiB
 * across all nodes in the pool.
 * 
 * @member {number} [resourceStats.avgDiskGiB] The average used disk space in
 * GiB across all nodes in the pool.
 * 
 * @member {number} [resourceStats.peakDiskGiB] The peak used disk space in
 * GiB across all nodes in the pool.
 * 
 * @member {number} [resourceStats.diskReadIOps] The total number of disk read
 * operations across all nodes in the pool.
 * 
 * @member {number} [resourceStats.diskWriteIOps] The total number of disk
 * write operations across all nodes in the pool.
 * 
 * @member {number} [resourceStats.diskReadGiB] The total amount of data in
 * GiB of disk reads across all nodes in the pool.
 * 
 * @member {number} [resourceStats.diskWriteGiB] The total amount of data in
 * GiB of disk writes across all nodes in the pool.
 * 
 * @member {number} [resourceStats.networkReadGiB] The total amount of data in
 * GiB of network reads across all nodes in the pool.
 * 
 * @member {number} [resourceStats.networkWriteGiB] The total amount of data
 * in GiB of network writes across all nodes in the pool.
 * 
 */
export interface PoolStatistics {
    url: string;
    startTime: Date;
    lastUpdateTime: Date;
    usageStats?: UsageStatistics;
    resourceStats?: ResourceStatistics;
}

/**
 * @class
 * Initializes a new instance of the JobStatistics class.
 * @constructor
 * Resource usage statistics for a job.
 * @member {string} url The URL of the statistics.
 * 
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {moment.duration} userCPUTime The total user mode CPU time (summed
 * across all cores and all compute nodes) consumed by all tasks in the job.
 * 
 * @member {moment.duration} kernelCPUTime The total kernel mode CPU time
 * (summed across all cores and all compute nodes) consumed by all tasks in
 * the job.
 * 
 * @member {moment.duration} wallClockTime The total wall clock time of all
 * tasks in the job.
 * 
 * @member {number} readIOps The total number of disk read operations made by
 * all tasks in the job.
 * 
 * @member {number} writeIOps The total number of disk write operations made
 * by all tasks in the job.
 * 
 * @member {number} readIOGiB The total gibibytes read from disk by all tasks
 * in the job.
 * 
 * @member {number} writeIOGiB The total gibibytes written to disk by all
 * tasks in the job.
 * 
 * @member {number} numSucceededTasks The total number of tasks successfully
 * completed in the job during the given time range.
 * 
 * @member {number} numFailedTasks The total number of tasks in the job that
 * failed during the given time range.
 * 
 * @member {number} numTaskRetries The total number of retries on all the
 * tasks in the job during the given time range.
 * 
 * @member {moment.duration} waitTime The total wait time of all tasks in the
 * job. The wait time for a task is defined as the elapsed time between the
 * creation of the task and the start of task execution. (If the task is
 * retried due to failures, the wait time is the time to the most recent task
 * execution.)
 * 
 */
export interface JobStatistics {
    url: string;
    startTime: Date;
    lastUpdateTime: Date;
    userCPUTime: moment.Duration;
    kernelCPUTime: moment.Duration;
    wallClockTime: moment.Duration;
    readIOps: number;
    writeIOps: number;
    readIOGiB: number;
    writeIOGiB: number;
    numSucceededTasks: number;
    numFailedTasks: number;
    numTaskRetries: number;
    waitTime: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the NameValuePair class.
 * @constructor
 * Represents a name-value pair.
 * @member {string} [name] The name in the name-value pair.
 * 
 * @member {string} [value] The value in the name-value pair.
 * 
 */
export interface NameValuePair {
    name?: string;
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the DeleteCertificateError class.
 * @constructor
 * An error encountered by the Batch service when deleting a certificate.
 * @member {string} [code] An identifier for the certificate deletion error.
 * Codes are invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the certificate deletion
 * error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [values] A list of additional error details related to the
 * certificate deletion error.
 * 
 */
export interface DeleteCertificateError {
    code?: string;
    message?: string;
    values?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the Certificate class.
 * @constructor
 * A certificate that can be installed on compute nodes and can be used to
 * authenticate operations on the machine.
 * @member {string} [thumbprint] The X.509 thumbprint of the certificate. This
 * is a sequence of up to 40 hex digits (it may include spaces but these are
 * removed).
 * 
 * @member {string} [thumbprintAlgorithm] The algorithm used to derive the
 * thumbprint. This must be sha1.
 * 
 * @member {string} [url] The URL of the certificate.
 * 
 * @member {string} [state] The current state of the certificate. Possible
 * values include: 'active', 'deleting', 'deletefailed'
 * 
 * @member {date} [stateTransitionTime] The time at which the certificate
 * entered its current state.
 * 
 * @member {string} [previousState] The previous state of the certificate.
 * This property is not set if the certificate is in its initial Active
 * state. Possible values include: 'active', 'deleting', 'deletefailed'
 * 
 * @member {date} [previousStateTransitionTime] The time at which the
 * certificate entered its previous state. This property is not set if the
 * certificate is in its initial Active state.
 * 
 * @member {string} [publicData] The public part of the certificate as a
 * base-64 encoded .cer file.
 * 
 * @member {object} [deleteCertificateError] The error that occurred on the
 * last attempt to delete this certificate. This property is set only if the
 * certificate is in the deletefailed state.
 * 
 * @member {string} [deleteCertificateError.code] An identifier for the
 * certificate deletion error. Codes are invariant and are intended to be
 * consumed programmatically.
 * 
 * @member {string} [deleteCertificateError.message] A message describing the
 * certificate deletion error, intended to be suitable for display in a user
 * interface.
 * 
 * @member {array} [deleteCertificateError.values] A list of additional error
 * details related to the certificate deletion error.
 * 
 */
export interface Certificate {
    thumbprint?: string;
    thumbprintAlgorithm?: string;
    url?: string;
    state?: string;
    stateTransitionTime?: Date;
    previousState?: string;
    previousStateTransitionTime?: Date;
    publicData?: string;
    deleteCertificateError?: DeleteCertificateError;
}

/**
 * @class
 * Initializes a new instance of the ApplicationPackageReference class.
 * @constructor
 * A reference to an application package to be installed on compute nodes in a
 * pool.
 * @member {string} applicationId The id of the application to install.
 * 
 * @member {string} [version] The version of the application to install. If
 * omitted, the default version is installed.
 * 
 */
export interface ApplicationPackageReference {
    applicationId: string;
    version?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationSummary class.
 * @constructor
 * Contains information about an application in an Azure Batch account.
 * @member {string} id A string that uniquely identifies the application
 * within the account.
 * 
 * @member {string} displayName The display name for the application.
 * 
 * @member {array} versions
 * 
 */
export interface ApplicationSummary {
    id: string;
    displayName: string;
    versions: string[];
}

/**
 * @class
 * Initializes a new instance of the CertificateAddParameter class.
 * @constructor
 * A certificate that can be installed on compute nodes and can be used to
 * authenticate operations on the machine.
 * @member {string} thumbprint The X.509 thumbprint of the certificate. This
 * is a sequence of up to 40 hex digits (it may include spaces but these are
 * removed).
 * 
 * @member {string} thumbprintAlgorithm The algorithm used to derive the
 * thumbprint. This must be sha1.
 * 
 * @member {string} data The base64-encoded contents of the certificate. The
 * maximum size is 10KB.
 * 
 * @member {string} [certificateFormat] The format of the certificate data.
 * Possible values include: 'pfx', 'cer', 'unmapped'
 * 
 * @member {string} [password] The password to access the certificate's
 * private key.
 * 
 */
export interface CertificateAddParameter {
    thumbprint: string;
    thumbprintAlgorithm: string;
    data: string;
    certificateFormat?: string;
    password?: string;
}

/**
 * @class
 * Initializes a new instance of the FileProperties class.
 * @constructor
 * The properties of a file on a compute node.
 * @member {date} [creationTime] The file creation time.
 * 
 * @member {date} lastModified The time at which the file was last modified.
 * 
 * @member {number} contentLength The length of the file.
 * 
 * @member {string} [contentType] The content type of the file.
 * 
 * @member {string} [fileMode] The file mode attribute in octal format. This
 * property will be returned only from a Linux compute node.
 * 
 */
export interface FileProperties {
    creationTime?: Date;
    lastModified: Date;
    contentLength: number;
    contentType?: string;
    fileMode?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeFile class.
 * @constructor
 * Information about a file or directory on a compute node.
 * @member {string} [name] The file path.
 * 
 * @member {string} [url] The URL of the file.
 * 
 * @member {boolean} [isDirectory] Whether the object represents a directory.
 * 
 * @member {object} [properties] The file properties.
 * 
 * @member {date} [properties.creationTime] The file creation time.
 * 
 * @member {date} [properties.lastModified] The time at which the file was
 * last modified.
 * 
 * @member {number} [properties.contentLength] The length of the file.
 * 
 * @member {string} [properties.contentType] The content type of the file.
 * 
 * @member {string} [properties.fileMode] The file mode attribute in octal
 * format. This property will be returned only from a Linux compute node.
 * 
 */
export interface NodeFile {
    name?: string;
    url?: string;
    isDirectory?: boolean;
    properties?: FileProperties;
}

/**
 * @class
 * Initializes a new instance of the Schedule class.
 * @constructor
 * The schedule according to which jobs will be created
 * @member {date} [doNotRunUntil] The earliest time at which any job may be
 * created under this job schedule. If you do not specify a doNotRunUntil
 * time, the schedule becomes ready to create jobs immediately.
 * 
 * @member {date} [doNotRunAfter] A time after which no job will be created
 * under this job schedule. The schedule will move to the completed state as
 * soon as this deadline is past and there is no active job under this job
 * schedule.
 * 
 * @member {moment.duration} [startWindow] The time interval, starting from
 * the time at which the schedule indicates a job should be created, within
 * which a job must be created. If a job is not created within the
 * startWindow interval, then the 'opportunity' is lost; no job will be
 * created until the next recurrence of the schedule.
 * 
 * @member {moment.duration} [recurrenceInterval] The time interval between
 * the start times of two successive jobs under the job schedule. A job
 * schedule can have at most one active job under it at any given time.
 * 
 */
export interface Schedule {
    doNotRunUntil?: Date;
    doNotRunAfter?: Date;
    startWindow?: moment.Duration;
    recurrenceInterval?: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the JobConstraints class.
 * @constructor
 * Specifies the execution constraints for jobs created on a schedule.
 * @member {moment.duration} [maxWallClockTime] The maximum elapsed time that
 * the job may run, measured from the time the job starts. If the job does
 * not complete within the time limit, the Batch service terminates it and
 * any tasks that are still running.
 * 
 * @member {number} [maxTaskRetryCount] The maximum number of times each task
 * may be retried. The Batch service retries a task if its exit code is
 * nonzero.
 * 
 */
export interface JobConstraints {
    maxWallClockTime?: moment.Duration;
    maxTaskRetryCount?: number;
}

/**
 * @class
 * Initializes a new instance of the ResourceFile class.
 * @constructor
 * A file to be downloaded from Azure blob storage to a compute node.
 * @member {string} [blobSource] The URL of the file within Azure Blob
 * Storage. This URL should include a shared access signature if the blob is
 * not publicly readable.
 * 
 * @member {string} [filePath] The location to which to download the file,
 * relative to the task's working directory.
 * 
 * @member {string} [fileMode] The file mode attribute in octal format. This
 * property will be ignored if it is specified for a resourceFile which will
 * be downloaded to a Windows compute node.
 * 
 */
export interface ResourceFile {
    blobSource?: string;
    filePath?: string;
    fileMode?: string;
}

/**
 * @class
 * Initializes a new instance of the EnvironmentSetting class.
 * @constructor
 * An environment variable to be set on a task process.
 * @member {string} [name] The name of the environment variable.
 * 
 * @member {string} [value] The value of the environment variable.
 * 
 */
export interface EnvironmentSetting {
    name?: string;
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the TaskConstraints class.
 * @constructor
 * Constraints to apply to the Job Manager task.
 * @member {moment.duration} [maxWallClockTime] The maximum elapsed time that
 * the task may run, measured from the time the task starts. If the task does
 * not complete within the time limit, the Batch service terminates it.
 * 
 * @member {moment.duration} [retentionTime] The minimum time to retain the
 * working directory for the task on the compute node where it ran, from the
 * time it completes execution. After this time, the Batch service may delete
 * the working directory and all its contents. The default is infinite.
 * 
 * @member {number} [maxTaskRetryCount] The maximum number of times the task
 * may be retried. The Batch service retries a task if its exit code is
 * nonzero.
 * 
 */
export interface TaskConstraints {
    maxWallClockTime?: moment.Duration;
    retentionTime?: moment.Duration;
    maxTaskRetryCount?: number;
}

/**
 * @class
 * Initializes a new instance of the JobManagerTask class.
 * @constructor
 * Specifies details of a Job Manager task.
 * @member {string} [id] A string that uniquely identifies the Job Manager
 * task. A GUID is recommended.
 * 
 * @member {string} [displayName] The display name of the Job Manager task.
 * 
 * @member {string} [commandLine] The command line of the Job Manager task.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the Job Manager task.
 * 
 * @member {object} [constraints] Constraints that apply to the Job Manager
 * task.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration} [constraints.retentionTime] The minimum time to
 * retain the working directory for the task on the compute node where it
 * ran, from the time it completes execution. After this time, the Batch
 * service may delete the working directory and all its contents. The default
 * is infinite.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times the task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {boolean} [killJobOnCompletion] Whether completion of the Job
 * Manager task signifies completion of the entire job.
 * 
 * @member {boolean} [runElevated] Whether to run the Job Manager task in
 * elevated mode. The default value is false.
 * 
 * @member {boolean} [runExclusive] Whether the Job Manager task requires
 * exclusive use of the compute node where it runs. If true, no other tasks
 * will run on the same compute node for as long as the Job Manager is
 * running. If false, other tasks can run simultaneously with the Job Manager
 * on a compute node. (The Job Manager task counts normally against the
 * node’s concurrent task limit, so this is only relevant if the node allows
 * multiple concurrent tasks.)
 * 
 */
export interface JobManagerTask {
    id?: string;
    displayName?: string;
    commandLine?: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    constraints?: TaskConstraints;
    killJobOnCompletion?: boolean;
    runElevated?: boolean;
    runExclusive?: boolean;
}

/**
 * @class
 * Initializes a new instance of the JobPreparationTask class.
 * @constructor
 * A Job Preparation task to run before any tasks of the job on any given
 * compute node.
 * @member {string} [id] A string that uniquely identifies the job preparation
 * task within the job. The id can contain any combination of alphanumeric
 * characters including hyphens and underscores and cannot contain more than
 * 64 characters.
 * 
 * @member {string} [commandLine] The command line of the Job Preparation task.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the Job Preparation task.
 * 
 * @member {object} [constraints] Constraints that apply to the Job
 * Preparation task.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration} [constraints.retentionTime] The minimum time to
 * retain the working directory for the task on the compute node where it
 * ran, from the time it completes execution. After this time, the Batch
 * service may delete the working directory and all its contents. The default
 * is infinite.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times the task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {boolean} [waitForSuccess] Whether the Batch service should wait
 * for the Job Preparation task to complete successfully before scheduling
 * any other tasks of the job on the compute node.
 * 
 * @member {boolean} [runElevated] Whether to run the Job Preparation task in
 * elevated mode. The default value is false.
 * 
 * @member {boolean} [rerunOnNodeRebootAfterSuccess] Whether the Batch service
 * should rerun the Job Preparation task after a compute node reboots. Note
 * that the Job Preparation task should still be written to be idempotent
 * because it can be rerun if the compute node is rebooted while Job
 * Preparation task is still running. The default value is true.
 * 
 */
export interface JobPreparationTask {
    id?: string;
    commandLine?: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    constraints?: TaskConstraints;
    waitForSuccess?: boolean;
    runElevated?: boolean;
    rerunOnNodeRebootAfterSuccess?: boolean;
}

/**
 * @class
 * Initializes a new instance of the JobReleaseTask class.
 * @constructor
 * A Job Release task to run on job completion on any compute node where the
 * job has run.
 * @member {string} [id] A string that uniquely identifies the Job Release
 * task within the job. The id can contain any combination of alphanumeric
 * characters including hyphens and underscores and cannot contain more than
 * 64 characters.
 * 
 * @member {string} [commandLine] The command line of the Job Release task.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the Job Release task.
 * 
 * @member {moment.duration} [maxWallClockTime] The maximum elapsed time that
 * the Job Release task may run on a given compute node, measured from the
 * time the task starts. If the task does not complete within the time limit,
 * the Batch service terminates it. The default value is 15 minutes.
 * 
 * @member {moment.duration} [retentionTime] The minimum time to retain the
 * working directory for the Job Release task on the compute node. After this
 * time, the Batch service may delete the working directory and all its
 * contents. The default is infinite.
 * 
 * @member {boolean} [runElevated] Whether to run the Job Release task in
 * elevated mode. The default value is false.
 * 
 */
export interface JobReleaseTask {
    id?: string;
    commandLine?: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    maxWallClockTime?: moment.Duration;
    retentionTime?: moment.Duration;
    runElevated?: boolean;
}

/**
 * @class
 * Initializes a new instance of the TaskSchedulingPolicy class.
 * @constructor
 * Specifies how tasks should be distributed across compute nodes.
 * @member {string} nodeFillType How tasks should be distributed across
 * compute nodes. Possible values include: 'spread', 'pack', 'unmapped'
 * 
 */
export interface TaskSchedulingPolicy {
    nodeFillType: string;
}

/**
 * @class
 * Initializes a new instance of the StartTask class.
 * @constructor
 * A task which is run when a compute node joins a pool in the Azure Batch
 * service, or when the compute node is rebooted or reimaged.
 * @member {string} [commandLine] The command line of the start task.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the start task.
 * 
 * @member {boolean} [runElevated] Whether to run the start task in elevated
 * mode. The default value is false.
 * 
 * @member {number} [maxTaskRetryCount] The maximum number of times the task
 * may be retried.
 * 
 * @member {boolean} [waitForSuccess] Whether the Batch service should wait
 * for the start task to complete successfully (that is, to exit with exit
 * code 0) before scheduling any tasks on the compute node.
 * 
 */
export interface StartTask {
    commandLine?: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    runElevated?: boolean;
    maxTaskRetryCount?: number;
    waitForSuccess?: boolean;
}

/**
 * @class
 * Initializes a new instance of the CertificateReference class.
 * @constructor
 * A reference to a certificate to be installed on compute nodes in a pool.
 * @member {string} thumbprint The thumbprint of the certificate.
 * 
 * @member {string} thumbprintAlgorithm The algorithm with which the
 * thumbprint is associated. This must be sha1.
 * 
 * @member {string} [storeLocation] The location of the certificate store on
 * the compute node into which to install the certificate. The default value
 * is CurrentUser. Possible values include: 'currentuser', 'localmachine',
 * 'unmapped'
 * 
 * @member {string} [storeName] The name of the certificate store on the
 * compute node into which to install the certificate. The default value is
 * My.
 * 
 * @member {array} [visibility] Which user accounts on the compute node should
 * have access to the private data of the certificate. This may be any subset
 * of the values 'starttask', 'task' and 'remoteuser', separated by commas.
 * The default is all accounts, corresponding to the string
 * 'starttask,task,remoteuser'.
 * 
 */
export interface CertificateReference {
    thumbprint: string;
    thumbprintAlgorithm: string;
    storeLocation?: string;
    storeName?: string;
    visibility?: string[];
}

/**
 * @class
 * Initializes a new instance of the MetadataItem class.
 * @constructor
 * A name-value pair associated with a Batch service resource. The Batch
 * service does not assign any meaning to this metadata; it is solely for the
 * use of user code.
 * @member {string} [name] The name of the metadata item.
 * 
 * @member {string} [value] The value of the metadata item.
 * 
 */
export interface MetadataItem {
    name?: string;
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the PoolSpecification class.
 * @constructor
 * Specification for creating a new pool.
 * @member {string} [displayName] The display name for the pool.
 * 
 * @member {string} [vmSize] The size of the virtual machines in the pool. All
 * virtual machines in a pool are the same size.
 * 
 * @member {object} [cloudServiceConfiguration] The cloud service
 * configuration for the pool. This property and VirtualMachineConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {string} [cloudServiceConfiguration.osFamily] The Azure Guest OS
 * family to be installed on the virtual machines in the pool.
 * 
 * @member {string} [cloudServiceConfiguration.targetOSVersion] The Azure
 * Guest OS version to be installed on the virtual machines in the pool. The
 * default value is * which specifies the latest operating system version for
 * the specified OS family.
 * 
 * @member {string} [cloudServiceConfiguration.currentOSVersion] The Azure
 * Guest OS Version currently installed on the virtual machines in the pool.
 * This may differ from TargetOSVersion if the pool state is Upgrading.
 * 
 * @member {object} [virtualMachineConfiguration] The virtual machine
 * configuration for the pool. This property and CloudServiceConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {object} [virtualMachineConfiguration.imageReference] A reference
 * to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.publisher] The
 * publisher of the Azure Virtual Machines Marketplace image. For example,
 * Canonical or MicrosoftWindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.offer] The
 * offer type of the Azure Virtual Machines Marketplace image. For example,
 * UbuntuServer or WindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.sku] The SKU
 * of the Azure Virtual Machines Marketplace image. For example, 14.04.0-LTS
 * or 2012-R2-Datacenter.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.version] The
 * version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string} [virtualMachineConfiguration.nodeAgentSKUId] The SKU of
 * Batch Node Agent to be provisioned on the compute node. The Batch node
 * agent is a program that runs on each node in the pool, and provides the
 * command-and-control interface between the node and the Batch service.
 * There are different implementations of the node agent, known as SKUs, for
 * different operating systems.
 * 
 * @member {object} [virtualMachineConfiguration.windowsConfiguration] Windows
 * operating system settings on the virtual machine. This property must not
 * be specified if the ImageReference property specifies a Linux OS image.
 * 
 * @member {boolean}
 * [virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [maxTasksPerNode] The maximum number of tasks that can run
 * concurrently on a single compute node in the pool.
 * 
 * @member {object} [taskSchedulingPolicy] How tasks are distributed among
 * compute nodes in the pool.
 * 
 * @member {string} [taskSchedulingPolicy.nodeFillType] How tasks should be
 * distributed across compute nodes. Possible values include: 'spread',
 * 'pack', 'unmapped'
 * 
 * @member {moment.duration} [resizeTimeout] The timeout for allocation of
 * compute nodes to the pool.
 * 
 * @member {number} [targetDedicated] The desired number of compute nodes in
 * the pool.
 * 
 * @member {boolean} [enableAutoScale] Whether the pool size should
 * automatically adjust over time.
 * 
 * @member {string} [autoScaleFormula] The formula for the desired number of
 * compute nodes in the pool.
 * 
 * @member {moment.duration} [autoScaleEvaluationInterval] A time interval for
 * the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean} [enableInterNodeCommunication] Whether the pool permits
 * direct communication between nodes.
 * 
 * @member {object} [startTask] A task to run on each compute node as it joins
 * the pool. The task runs when the node is added to the pool or when the
 * node is restarted.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} [certificateReferences] A list of certificates to be
 * installed on each compute node in the pool.
 * 
 * @member {array} [applicationPackageReferences] The list of application
 * packages to be installed on each compute node in the pool.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * pool as metadata.
 * 
 */
export interface PoolSpecification {
    displayName?: string;
    vmSize?: string;
    cloudServiceConfiguration?: CloudServiceConfiguration;
    virtualMachineConfiguration?: VirtualMachineConfiguration;
    maxTasksPerNode?: number;
    taskSchedulingPolicy?: TaskSchedulingPolicy;
    resizeTimeout?: moment.Duration;
    targetDedicated?: number;
    enableAutoScale?: boolean;
    autoScaleFormula?: string;
    autoScaleEvaluationInterval?: moment.Duration;
    enableInterNodeCommunication?: boolean;
    startTask?: StartTask;
    certificateReferences?: CertificateReference[];
    applicationPackageReferences?: ApplicationPackageReference[];
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the CloudServiceConfiguration class.
 * @constructor
 * The configuration for nodes in a pool based on the Azure Cloud Services
 * platform.
 * @member {string} osFamily The Azure Guest OS family to be installed on the
 * virtual machines in the pool.
 * 
 * @member {string} [targetOSVersion] The Azure Guest OS version to be
 * installed on the virtual machines in the pool. The default value is *
 * which specifies the latest operating system version for the specified OS
 * family.
 * 
 * @member {string} [currentOSVersion] The Azure Guest OS Version currently
 * installed on the virtual machines in the pool. This may differ from
 * TargetOSVersion if the pool state is Upgrading.
 * 
 */
export interface CloudServiceConfiguration {
    osFamily: string;
    targetOSVersion?: string;
    currentOSVersion?: string;
}

/**
 * @class
 * Initializes a new instance of the VirtualMachineConfiguration class.
 * @constructor
 * The configuration for compute nodes in a pool based on the Azure Virtual
 * Machines infrastructure.
 * @member {object} imageReference A reference to the Azure Virtual Machines
 * Marketplace image to use.
 * 
 * @member {string} [imageReference.publisher] The publisher of the Azure
 * Virtual Machines Marketplace image. For example, Canonical or
 * MicrosoftWindowsServer.
 * 
 * @member {string} [imageReference.offer] The offer type of the Azure Virtual
 * Machines Marketplace image. For example, UbuntuServer or WindowsServer.
 * 
 * @member {string} [imageReference.sku] The SKU of the Azure Virtual Machines
 * Marketplace image. For example, 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string} [imageReference.version] The version of the Azure Virtual
 * Machines Marketplace image. A value of 'latest' can be specified to select
 * the latest version of an image. If omitted, the default is 'latest'.
 * 
 * @member {string} [nodeAgentSKUId] The SKU of Batch Node Agent to be
 * provisioned on the compute node. The Batch node agent is a program that
 * runs on each node in the pool, and provides the command-and-control
 * interface between the node and the Batch service. There are different
 * implementations of the node agent, known as SKUs, for different operating
 * systems.
 * 
 * @member {object} [windowsConfiguration] Windows operating system settings
 * on the virtual machine. This property must not be specified if the
 * ImageReference property specifies a Linux OS image.
 * 
 * @member {boolean} [windowsConfiguration.enableAutomaticUpdates] Whether
 * automatic updates are enabled on the virtual machine. If omitted, the
 * default value is true.
 * 
 */
export interface VirtualMachineConfiguration {
    imageReference: ImageReference;
    nodeAgentSKUId?: string;
    windowsConfiguration?: WindowsConfiguration;
}

/**
 * @class
 * Initializes a new instance of the WindowsConfiguration class.
 * @constructor
 * Windows operating system settings to apply to the virtual machine.
 * @member {boolean} [enableAutomaticUpdates] Whether automatic updates are
 * enabled on the virtual machine. If omitted, the default value is true.
 * 
 */
export interface WindowsConfiguration {
    enableAutomaticUpdates?: boolean;
}

/**
 * @class
 * Initializes a new instance of the AutoPoolSpecification class.
 * @constructor
 * Specifies characteristics for a temporary 'auto pool'. The Batch service
 * will create this auto pool, run all the tasks for the job on it, and will
 * delete the pool once the job has completed.
 * @member {string} [autoPoolIdPrefix] A prefix to be added to the unique
 * identifier when a pool is automatically created. The prefix can be up to
 * 20 characters long.
 * 
 * @member {string} poolLifetimeOption The minimum lifetime of created auto
 * pools, and how multiple jobs on a schedule are assigned to pools. Possible
 * values include: 'jobschedule', 'job', 'unmapped'
 * 
 * @member {boolean} [keepAlive] Whether to keep an auto pool alive after its
 * lifetime expires.
 * 
 * @member {object} [pool] The pool specification for the auto pool.
 * 
 * @member {string} [pool.displayName] The display name for the pool.
 * 
 * @member {string} [pool.vmSize] The size of the virtual machines in the
 * pool. All virtual machines in a pool are the same size.
 * 
 * @member {object} [pool.cloudServiceConfiguration] The cloud service
 * configuration for the pool. This property and VirtualMachineConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {string} [pool.cloudServiceConfiguration.osFamily] The Azure Guest
 * OS family to be installed on the virtual machines in the pool.
 * 
 * @member {string} [pool.cloudServiceConfiguration.targetOSVersion] The Azure
 * Guest OS version to be installed on the virtual machines in the pool. The
 * default value is * which specifies the latest operating system version for
 * the specified OS family.
 * 
 * @member {string} [pool.cloudServiceConfiguration.currentOSVersion] The
 * Azure Guest OS Version currently installed on the virtual machines in the
 * pool. This may differ from TargetOSVersion if the pool state is Upgrading.
 * 
 * @member {object} [pool.virtualMachineConfiguration] The virtual machine
 * configuration for the pool. This property and CloudServiceConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {object} [pool.virtualMachineConfiguration.imageReference] A
 * reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [pool.virtualMachineConfiguration.imageReference.publisher] The publisher
 * of the Azure Virtual Machines Marketplace image. For example, Canonical or
 * MicrosoftWindowsServer.
 * 
 * @member {string} [pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string} [pool.virtualMachineConfiguration.imageReference.sku] The
 * SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string} [pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string} [pool.virtualMachineConfiguration.nodeAgentSKUId] The SKU
 * of Batch Node Agent to be provisioned on the compute node. The Batch node
 * agent is a program that runs on each node in the pool, and provides the
 * command-and-control interface between the node and the Batch service.
 * There are different implementations of the node agent, known as SKUs, for
 * different operating systems.
 * 
 * @member {object} [pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [pool.maxTasksPerNode] The maximum number of tasks that
 * can run concurrently on a single compute node in the pool.
 * 
 * @member {object} [pool.taskSchedulingPolicy] How tasks are distributed
 * among compute nodes in the pool.
 * 
 * @member {string} [pool.taskSchedulingPolicy.nodeFillType] How tasks should
 * be distributed across compute nodes. Possible values include: 'spread',
 * 'pack', 'unmapped'
 * 
 * @member {moment.duration} [pool.resizeTimeout] The timeout for allocation
 * of compute nodes to the pool.
 * 
 * @member {number} [pool.targetDedicated] The desired number of compute nodes
 * in the pool.
 * 
 * @member {boolean} [pool.enableAutoScale] Whether the pool size should
 * automatically adjust over time.
 * 
 * @member {string} [pool.autoScaleFormula] The formula for the desired number
 * of compute nodes in the pool.
 * 
 * @member {moment.duration} [pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean} [pool.enableInterNodeCommunication] Whether the pool
 * permits direct communication between nodes.
 * 
 * @member {object} [pool.startTask] A task to run on each compute node as it
 * joins the pool. The task runs when the node is added to the pool or when
 * the node is restarted.
 * 
 * @member {string} [pool.startTask.commandLine] The command line of the start
 * task.
 * 
 * @member {array} [pool.startTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [pool.startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [pool.startTask.runElevated] Whether to run the start
 * task in elevated mode. The default value is false.
 * 
 * @member {number} [pool.startTask.maxTaskRetryCount] The maximum number of
 * times the task may be retried.
 * 
 * @member {boolean} [pool.startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} [pool.certificateReferences] A list of certificates to be
 * installed on each compute node in the pool.
 * 
 * @member {array} [pool.applicationPackageReferences] The list of application
 * packages to be installed on each compute node in the pool.
 * 
 * @member {array} [pool.metadata] A list of name-value pairs associated with
 * the pool as metadata.
 * 
 */
export interface AutoPoolSpecification {
    autoPoolIdPrefix?: string;
    poolLifetimeOption: string;
    keepAlive?: boolean;
    pool?: PoolSpecification;
}

/**
 * @class
 * Initializes a new instance of the PoolInformation class.
 * @constructor
 * Specifies how a job should be assigned to a pool.
 * @member {string} [poolId] The id of an existing pool. All the tasks of the
 * job will run on the specified pool. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {object} [autoPoolSpecification] Characteristics for a temporary
 * 'auto pool'. The Batch service will create this auto pool and run all of
 * the tasks of the job on it, and will delete the pool once the job has
 * completed. You must specify either PoolId or AutoPoolSpecification, but
 * not both.
 * 
 * @member {string} [autoPoolSpecification.autoPoolIdPrefix] A prefix to be
 * added to the unique identifier when a pool is automatically created. The
 * prefix can be up to 20 characters long.
 * 
 * @member {string} [autoPoolSpecification.poolLifetimeOption] The minimum
 * lifetime of created auto pools, and how multiple jobs on a schedule are
 * assigned to pools. Possible values include: 'jobschedule', 'job',
 * 'unmapped'
 * 
 * @member {boolean} [autoPoolSpecification.keepAlive] Whether to keep an auto
 * pool alive after its lifetime expires.
 * 
 * @member {object} [autoPoolSpecification.pool] The pool specification for
 * the auto pool.
 * 
 * @member {string} [autoPoolSpecification.pool.displayName] The display name
 * for the pool.
 * 
 * @member {string} [autoPoolSpecification.pool.vmSize] The size of the
 * virtual machines in the pool. All virtual machines in a pool are the same
 * size.
 * 
 * @member {object} [autoPoolSpecification.pool.cloudServiceConfiguration] The
 * cloud service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.cloudServiceConfiguration.osFamily] The Azure
 * Guest OS family to be installed on the virtual machines in the pool.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion] The
 * Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object} [autoPoolSpecification.pool.virtualMachineConfiguration]
 * The virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.imageReference] A
 * reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [autoPoolSpecification.pool.maxTasksPerNode] The maximum
 * number of tasks that can run concurrently on a single compute node in the
 * pool.
 * 
 * @member {object} [autoPoolSpecification.pool.taskSchedulingPolicy] How
 * tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType] How tasks
 * should be distributed across compute nodes. Possible values include:
 * 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration} [autoPoolSpecification.pool.resizeTimeout] The
 * timeout for allocation of compute nodes to the pool.
 * 
 * @member {number} [autoPoolSpecification.pool.targetDedicated] The desired
 * number of compute nodes in the pool.
 * 
 * @member {boolean} [autoPoolSpecification.pool.enableAutoScale] Whether the
 * pool size should automatically adjust over time.
 * 
 * @member {string} [autoPoolSpecification.pool.autoScaleFormula] The formula
 * for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [autoPoolSpecification.pool.autoScaleEvaluationInterval] A time interval
 * for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean} [autoPoolSpecification.pool.enableInterNodeCommunication]
 * Whether the pool permits direct communication between nodes.
 * 
 * @member {object} [autoPoolSpecification.pool.startTask] A task to run on
 * each compute node as it joins the pool. The task runs when the node is
 * added to the pool or when the node is restarted.
 * 
 * @member {string} [autoPoolSpecification.pool.startTask.commandLine] The
 * command line of the start task.
 * 
 * @member {array} [autoPoolSpecification.pool.startTask.resourceFiles] A list
 * of files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [autoPoolSpecification.pool.startTask.environmentSettings]
 * A list of environment variable settings for the start task.
 * 
 * @member {boolean} [autoPoolSpecification.pool.startTask.runElevated]
 * Whether to run the start task in elevated mode. The default value is false.
 * 
 * @member {number} [autoPoolSpecification.pool.startTask.maxTaskRetryCount]
 * The maximum number of times the task may be retried.
 * 
 * @member {boolean} [autoPoolSpecification.pool.startTask.waitForSuccess]
 * Whether the Batch service should wait for the start task to complete
 * successfully (that is, to exit with exit code 0) before scheduling any
 * tasks on the compute node.
 * 
 * @member {array} [autoPoolSpecification.pool.certificateReferences] A list
 * of certificates to be installed on each compute node in the pool.
 * 
 * @member {array} [autoPoolSpecification.pool.applicationPackageReferences]
 * The list of application packages to be installed on each compute node in
 * the pool.
 * 
 * @member {array} [autoPoolSpecification.pool.metadata] A list of name-value
 * pairs associated with the pool as metadata.
 * 
 */
export interface PoolInformation {
    poolId?: string;
    autoPoolSpecification?: AutoPoolSpecification;
}

/**
 * @class
 * Initializes a new instance of the JobSpecification class.
 * @constructor
 * Specifies details of the jobs to be created on a schedule.
 * @member {number} [priority] The priority of jobs created under this
 * schedule. Priority values can range from -1000 to 1000, with -1000 being
 * the lowest priority and 1000 being the highest priority. The default value
 * is 0.
 * 
 * @member {string} [displayName] The display name for jobs created under this
 * schedule. It need not be unique and can contain any Unicode characters up
 * to a maximum length of 1024.
 * 
 * @member {boolean} [usesTaskDependencies] The flag that determines if this
 * job will use tasks with dependencies.
 * 
 * @member {object} [constraints] The execution constraints for jobs created
 * under this schedule.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the job may run, measured from the time the job starts.
 * If the job does not complete within the time limit, the Batch service
 * terminates it and any tasks that are still running.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times each task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {object} [jobManagerTask] The details of a Job Manager task to be
 * launched when a job is started under this schedule.
 * 
 * @member {string} [jobManagerTask.id] A string that uniquely identifies the
 * Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobManagerTask.displayName] The display name of the Job
 * Manager task.
 * 
 * @member {string} [jobManagerTask.commandLine] The command line of the Job
 * Manager task.
 * 
 * @member {array} [jobManagerTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobManagerTask.environmentSettings] A list of environment
 * variable settings for the Job Manager task.
 * 
 * @member {object} [jobManagerTask.constraints] Constraints that apply to the
 * Job Manager task.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number} [jobManagerTask.constraints.maxTaskRetryCount] The maximum
 * number of times the task may be retried. The Batch service retries a task
 * if its exit code is nonzero.
 * 
 * @member {boolean} [jobManagerTask.killJobOnCompletion] Whether completion
 * of the Job Manager task signifies completion of the entire job.
 * 
 * @member {boolean} [jobManagerTask.runElevated] Whether to run the Job
 * Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobManagerTask.runExclusive] Whether the Job Manager
 * task requires exclusive use of the compute node where it runs. If true, no
 * other tasks will run on the same compute node for as long as the Job
 * Manager is running. If false, other tasks can run simultaneously with the
 * Job Manager on a compute node. (The Job Manager task counts normally
 * against the node’s concurrent task limit, so this is only relevant if the
 * node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobPreparationTask] The Job Preparation task for jobs
 * created under this schedule.
 * 
 * @member {string} [jobPreparationTask.id] A string that uniquely identifies
 * the job preparation task within the job. The id can contain any
 * combination of alphanumeric characters including hyphens and underscores
 * and cannot contain more than 64 characters.
 * 
 * @member {string} [jobPreparationTask.commandLine] The command line of the
 * Job Preparation task.
 * 
 * @member {array} [jobPreparationTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobPreparationTask.environmentSettings] A list of
 * environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobPreparationTask.constraints] Constraints that apply to
 * the Job Preparation task.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.maxWallClockTime]
 * The maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.retentionTime]
 * The minimum time to retain the working directory for the task on the
 * compute node where it ran, from the time it completes execution. After
 * this time, the Batch service may delete the working directory and all its
 * contents. The default is infinite.
 * 
 * @member {number} [jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobPreparationTask.waitForSuccess] Whether the Batch
 * service should wait for the Job Preparation task to complete successfully
 * before scheduling any other tasks of the job on the compute node.
 * 
 * @member {boolean} [jobPreparationTask.runElevated] Whether to run the Job
 * Preparation task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobReleaseTask] The Job Release task for jobs created
 * under this schedule.
 * 
 * @member {string} [jobReleaseTask.id] A string that uniquely identifies the
 * Job Release task within the job. The id can contain any combination of
 * alphanumeric characters including hyphens and underscores and cannot
 * contain more than 64 characters.
 * 
 * @member {string} [jobReleaseTask.commandLine] The command line of the Job
 * Release task.
 * 
 * @member {array} [jobReleaseTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobReleaseTask.environmentSettings] A list of environment
 * variable settings for the Job Release task.
 * 
 * @member {moment.duration} [jobReleaseTask.maxWallClockTime] The maximum
 * elapsed time that the Job Release task may run on a given compute node,
 * measured from the time the task starts. If the task does not complete
 * within the time limit, the Batch service terminates it. The default value
 * is 15 minutes.
 * 
 * @member {moment.duration} [jobReleaseTask.retentionTime] The minimum time
 * to retain the working directory for the Job Release task on the compute
 * node. After this time, the Batch service may delete the working directory
 * and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobReleaseTask.runElevated] Whether to run the Job
 * Release task in elevated mode. The default value is false.
 * 
 * @member {array} [commonEnvironmentSettings] A list of common environment
 * variable settings. These environment variables are set for all tasks in
 * jobs created under this schedule (including the Job Manager, Job
 * Preparation and Job Release tasks).
 * 
 * @member {object} [poolInfo] The pool on which the Batch service runs the
 * tasks of jobs created under this schedule.
 * 
 * @member {string} [poolInfo.poolId] The id of an existing pool. All the
 * tasks of the job will run on the specified pool. You must specify either
 * PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [poolInfo.autoPoolSpecification] Characteristics for a
 * temporary 'auto pool'. The Batch service will create this auto pool and
 * run all of the tasks of the job on it, and will delete the pool once the
 * job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.autoPoolIdPrefix] A prefix
 * to be added to the unique identifier when a pool is automatically created.
 * The prefix can be up to 20 characters long.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool] The pool
 * specification for the auto pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration] The cloud
 * service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration] The
 * virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.resizeTimeout] The timeout for
 * allocation of compute nodes to the pool.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.autoScaleFormula] The
 * formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication] Whether
 * the pool permits direct communication between nodes.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.startTask.commandLine] The command
 * line of the start task.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.environmentSettings] A list
 * of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.runElevated] Whether to run
 * the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount] The
 * maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess] Whether the
 * Batch service should wait for the start task to complete successfully
 * (that is, to exit with exit code 0) before scheduling any tasks on the
 * compute node.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.applicationPackageReferences] The
 * list of application packages to be installed on each compute node in the
 * pool.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with each
 * job created under this schedule as metadata.
 * 
 */
export interface JobSpecification {
    priority?: number;
    displayName?: string;
    usesTaskDependencies?: boolean;
    constraints?: JobConstraints;
    jobManagerTask?: JobManagerTask;
    jobPreparationTask?: JobPreparationTask;
    jobReleaseTask?: JobReleaseTask;
    commonEnvironmentSettings?: EnvironmentSetting[];
    poolInfo?: PoolInformation;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the RecentJob class.
 * @constructor
 * Information about the most recent job to run under the job schedule.
 * @member {string} [id] The id of the job.
 * 
 * @member {string} [url] The URL of the job.
 * 
 */
export interface RecentJob {
    id?: string;
    url?: string;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleExecutionInformation class.
 * @constructor
 * Specifies how tasks should be run in a job associated with a job schedule.
 * @member {date} [nextRunTime] The next time at which a job will be created
 * under this schedule.
 * 
 * @member {object} [recentJob] Information about the most recent job under
 * the job schedule.
 * 
 * @member {string} [recentJob.id] The id of the job.
 * 
 * @member {string} [recentJob.url] The URL of the job.
 * 
 * @member {date} [endTime] The time at which the schedule ended. This
 * property is set only if the job schedule is in the completed state.
 * 
 */
export interface JobScheduleExecutionInformation {
    nextRunTime?: Date;
    recentJob?: RecentJob;
    endTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleStatistics class.
 * @constructor
 * Resource usage statistics for a job schedule.
 * @member {string} url The URL of the statistics.
 * 
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {moment.duration} userCPUTime The total user mode CPU time (summed
 * across all cores and all compute nodes) consumed by all tasks in all jobs
 * created under the schedule.
 * 
 * @member {moment.duration} kernelCPUTime The total kernel mode CPU time
 * (summed across all cores and all compute nodes) consumed by all tasks in
 * all jobs created under the schedule.
 * 
 * @member {moment.duration} wallClockTime The total wall clock time of all
 * the tasks in all the jobs created under the schedule.
 * 
 * @member {number} readIOps The total number of disk read operations made by
 * all tasks in all jobs created under the schedule.
 * 
 * @member {number} writeIOps The total number of disk write operations made
 * by all tasks in all jobs created under the schedule.
 * 
 * @member {number} readIOGiB The total gibibytes read from disk by all tasks
 * in all jobs created under the schedule.
 * 
 * @member {number} writeIOGiB The total gibibytes written to disk by all
 * tasks in all jobs created under the schedule.
 * 
 * @member {number} numSucceededTasks The total number of tasks successfully
 * completed during the given time range in jobs created under the schedule.
 * A task completes successfully if it returns exit code 0.
 * 
 * @member {number} numFailedTasks The total number of tasks that failed
 * during the given time range in jobs created under the schedule. A task
 * fails if it exhausts its maximum retry count without returning exit code 0.
 * 
 * @member {number} numTaskRetries The total number of retries during the
 * given time range on all tasks in all jobs created under the schedule.
 * 
 * @member {moment.duration} waitTime The total wait time of all tasks in all
 * jobs created under the schedule. The wait time for a task is defined as
 * the elapsed time between the creation of the task and the start of task
 * execution. (If the task is retried due to failures, the wait time is the
 * time to the most recent task execution.)
 * 
 */
export interface JobScheduleStatistics {
    url: string;
    startTime: Date;
    lastUpdateTime: Date;
    userCPUTime: moment.Duration;
    kernelCPUTime: moment.Duration;
    wallClockTime: moment.Duration;
    readIOps: number;
    writeIOps: number;
    readIOGiB: number;
    writeIOGiB: number;
    numSucceededTasks: number;
    numFailedTasks: number;
    numTaskRetries: number;
    waitTime: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the CloudJobSchedule class.
 * @constructor
 * A job schedule that allows recurring jobs by specifying when to run jobs
 * and a specification used to create each job.
 * @member {string} [id] A string that uniquely identifies the schedule within
 * the account. A GUID is recommended.
 * 
 * @member {string} [displayName] The display name for the schedule.
 * 
 * @member {string} [url] The URL of the job schedule.
 * 
 * @member {string} [eTag] The ETag of the job schedule.
 * 
 * @member {date} [lastModified] The last modified time of the job schedule.
 * 
 * @member {date} [creationTime] The creation time of the job schedule.
 * 
 * @member {string} [state] The current state of the job schedule. Possible
 * values include: 'active', 'completed', 'disabled', 'terminating',
 * 'deleting'
 * 
 * @member {date} [stateTransitionTime] The time at which the job schedule
 * entered the current state.
 * 
 * @member {string} [previousState] The previous state of the job schedule.
 * Possible values include: 'active', 'completed', 'disabled', 'terminating',
 * 'deleting'
 * 
 * @member {date} [previousStateTransitionTime] The time at which the job
 * schedule entered its previous state.
 * 
 * @member {object} [schedule] The schedule according to which jobs will be
 * created.
 * 
 * @member {date} [schedule.doNotRunUntil] The earliest time at which any job
 * may be created under this job schedule. If you do not specify a
 * doNotRunUntil time, the schedule becomes ready to create jobs immediately.
 * 
 * @member {date} [schedule.doNotRunAfter] A time after which no job will be
 * created under this job schedule. The schedule will move to the completed
 * state as soon as this deadline is past and there is no active job under
 * this job schedule.
 * 
 * @member {moment.duration} [schedule.startWindow] The time interval,
 * starting from the time at which the schedule indicates a job should be
 * created, within which a job must be created. If a job is not created
 * within the startWindow interval, then the 'opportunity' is lost; no job
 * will be created until the next recurrence of the schedule.
 * 
 * @member {moment.duration} [schedule.recurrenceInterval] The time interval
 * between the start times of two successive jobs under the job schedule. A
 * job schedule can have at most one active job under it at any given time.
 * 
 * @member {object} [jobSpecification] The details of the jobs to be created
 * on this schedule.
 * 
 * @member {number} [jobSpecification.priority] The priority of jobs created
 * under this schedule. Priority values can range from -1000 to 1000, with
 * -1000 being the lowest priority and 1000 being the highest priority. The
 * default value is 0.
 * 
 * @member {string} [jobSpecification.displayName] The display name for jobs
 * created under this schedule. It need not be unique and can contain any
 * Unicode characters up to a maximum length of 1024.
 * 
 * @member {boolean} [jobSpecification.usesTaskDependencies] The flag that
 * determines if this job will use tasks with dependencies.
 * 
 * @member {object} [jobSpecification.constraints] The execution constraints
 * for jobs created under this schedule.
 * 
 * @member {moment.duration} [jobSpecification.constraints.maxWallClockTime]
 * The maximum elapsed time that the job may run, measured from the time the
 * job starts. If the job does not complete within the time limit, the Batch
 * service terminates it and any tasks that are still running.
 * 
 * @member {number} [jobSpecification.constraints.maxTaskRetryCount] The
 * maximum number of times each task may be retried. The Batch service
 * retries a task if its exit code is nonzero.
 * 
 * @member {object} [jobSpecification.jobManagerTask] The details of a Job
 * Manager task to be launched when a job is started under this schedule.
 * 
 * @member {string} [jobSpecification.jobManagerTask.id] A string that
 * uniquely identifies the Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobSpecification.jobManagerTask.displayName] The display
 * name of the Job Manager task.
 * 
 * @member {string} [jobSpecification.jobManagerTask.commandLine] The command
 * line of the Job Manager task.
 * 
 * @member {array} [jobSpecification.jobManagerTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobManagerTask.environmentSettings] A
 * list of environment variable settings for the Job Manager task.
 * 
 * @member {object} [jobSpecification.jobManagerTask.constraints] Constraints
 * that apply to the Job Manager task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.retentionTime] The minimum
 * time to retain the working directory for the task on the compute node
 * where it ran, from the time it completes execution. After this time, the
 * Batch service may delete the working directory and all its contents. The
 * default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobManagerTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.killJobOnCompletion]
 * Whether completion of the Job Manager task signifies completion of the
 * entire job.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runElevated] Whether to
 * run the Job Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runExclusive] Whether
 * the Job Manager task requires exclusive use of the compute node where it
 * runs. If true, no other tasks will run on the same compute node for as
 * long as the Job Manager is running. If false, other tasks can run
 * simultaneously with the Job Manager on a compute node. (The Job Manager
 * task counts normally against the node’s concurrent task limit, so this is
 * only relevant if the node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobSpecification.jobPreparationTask] The Job Preparation
 * task for jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.id] A string that
 * uniquely identifies the job preparation task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.commandLine] The
 * command line of the Job Preparation task.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.resourceFiles] A list
 * of files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.environmentSettings] A
 * list of environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobSpecification.jobPreparationTask.constraints]
 * Constraints that apply to the Job Preparation task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.waitForSuccess]
 * Whether the Batch service should wait for the Job Preparation task to
 * complete successfully before scheduling any other tasks of the job on the
 * compute node.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.runElevated] Whether
 * to run the Job Preparation task in elevated mode. The default value is
 * false.
 * 
 * @member {boolean}
 * [jobSpecification.jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobSpecification.jobReleaseTask] The Job Release task for
 * jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.id] A string that
 * uniquely identifies the Job Release task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.commandLine] The command
 * line of the Job Release task.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.environmentSettings] A
 * list of environment variable settings for the Job Release task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobReleaseTask.maxWallClockTime] The maximum elapsed
 * time that the Job Release task may run on a given compute node, measured
 * from the time the task starts. If the task does not complete within the
 * time limit, the Batch service terminates it. The default value is 15
 * minutes.
 * 
 * @member {moment.duration} [jobSpecification.jobReleaseTask.retentionTime]
 * The minimum time to retain the working directory for the Job Release task
 * on the compute node. After this time, the Batch service may delete the
 * working directory and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobSpecification.jobReleaseTask.runElevated] Whether to
 * run the Job Release task in elevated mode. The default value is false.
 * 
 * @member {array} [jobSpecification.commonEnvironmentSettings] A list of
 * common environment variable settings. These environment variables are set
 * for all tasks in jobs created under this schedule (including the Job
 * Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} [jobSpecification.poolInfo] The pool on which the Batch
 * service runs the tasks of jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.poolInfo.poolId] The id of an existing
 * pool. All the tasks of the job will run on the specified pool. You must
 * specify either PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification]
 * Characteristics for a temporary 'auto pool'. The Batch service will create
 * this auto pool and run all of the tasks of the job on it, and will delete
 * the pool once the job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.autoPoolIdPrefix] A
 * prefix to be added to the unique identifier when a pool is automatically
 * created. The prefix can be up to 20 characters long.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification.pool] The
 * pool specification for the auto pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration]
 * The cloud service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration]
 * The virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.resizeTimeout] The
 * timeout for allocation of compute nodes to the pool.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleFormula]
 * The formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval]
 * A time interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication]
 * Whether the pool permits direct communication between nodes.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.commandLine]
 * The command line of the start task.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.resourceFiles]
 * A list of files that the Batch service will download to the compute node
 * before running the command line.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.environmentSettings]
 * A list of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.runElevated]
 * Whether to run the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount]
 * The maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess]
 * Whether the Batch service should wait for the start task to complete
 * successfully (that is, to exit with exit code 0) before scheduling any
 * tasks on the compute node.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.applicationPackageReferences]
 * The list of application packages to be installed on each compute node in
 * the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [jobSpecification.metadata] A list of name-value pairs
 * associated with each job created under this schedule as metadata.
 * 
 * @member {object} [executionInfo] Information about jobs that have been and
 * will be run under this schedule.
 * 
 * @member {date} [executionInfo.nextRunTime] The next time at which a job
 * will be created under this schedule.
 * 
 * @member {object} [executionInfo.recentJob] Information about the most
 * recent job under the job schedule.
 * 
 * @member {string} [executionInfo.recentJob.id] The id of the job.
 * 
 * @member {string} [executionInfo.recentJob.url] The URL of the job.
 * 
 * @member {date} [executionInfo.endTime] The time at which the schedule
 * ended. This property is set only if the job schedule is in the completed
 * state.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * schedule as metadata.
 * 
 * @member {object} [stats] The lifetime resource usage statistics for the job
 * schedule.
 * 
 * @member {string} [stats.url] The URL of the statistics.
 * 
 * @member {date} [stats.startTime] The start time of the time range covered
 * by the statistics.
 * 
 * @member {date} [stats.lastUpdateTime] The time at which the statistics were
 * last updated. All statistics are limited to the range between startTime
 * and lastUpdateTime.
 * 
 * @member {moment.duration} [stats.userCPUTime] The total user mode CPU time
 * (summed across all cores and all compute nodes) consumed by all tasks in
 * all jobs created under the schedule.
 * 
 * @member {moment.duration} [stats.kernelCPUTime] The total kernel mode CPU
 * time (summed across all cores and all compute nodes) consumed by all tasks
 * in all jobs created under the schedule.
 * 
 * @member {moment.duration} [stats.wallClockTime] The total wall clock time
 * of all the tasks in all the jobs created under the schedule.
 * 
 * @member {number} [stats.readIOps] The total number of disk read operations
 * made by all tasks in all jobs created under the schedule.
 * 
 * @member {number} [stats.writeIOps] The total number of disk write
 * operations made by all tasks in all jobs created under the schedule.
 * 
 * @member {number} [stats.readIOGiB] The total gibibytes read from disk by
 * all tasks in all jobs created under the schedule.
 * 
 * @member {number} [stats.writeIOGiB] The total gibibytes written to disk by
 * all tasks in all jobs created under the schedule.
 * 
 * @member {number} [stats.numSucceededTasks] The total number of tasks
 * successfully completed during the given time range in jobs created under
 * the schedule. A task completes successfully if it returns exit code 0.
 * 
 * @member {number} [stats.numFailedTasks] The total number of tasks that
 * failed during the given time range in jobs created under the schedule. A
 * task fails if it exhausts its maximum retry count without returning exit
 * code 0.
 * 
 * @member {number} [stats.numTaskRetries] The total number of retries during
 * the given time range on all tasks in all jobs created under the schedule.
 * 
 * @member {moment.duration} [stats.waitTime] The total wait time of all tasks
 * in all jobs created under the schedule. The wait time for a task is
 * defined as the elapsed time between the creation of the task and the start
 * of task execution. (If the task is retried due to failures, the wait time
 * is the time to the most recent task execution.)
 * 
 */
export interface CloudJobSchedule {
    id?: string;
    displayName?: string;
    url?: string;
    eTag?: string;
    lastModified?: Date;
    creationTime?: Date;
    state?: string;
    stateTransitionTime?: Date;
    previousState?: string;
    previousStateTransitionTime?: Date;
    schedule?: Schedule;
    jobSpecification?: JobSpecification;
    executionInfo?: JobScheduleExecutionInformation;
    metadata?: MetadataItem[];
    stats?: JobScheduleStatistics;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleAddParameter class.
 * @constructor
 * A job schedule that allows recurring jobs by specifying when to run jobs
 * and a specification used to create each job.
 * @member {string} id A string that uniquely identifies the schedule within
 * the account. A GUID is recommended.
 * 
 * @member {string} [displayName] The display name for the schedule.
 * 
 * @member {object} schedule The schedule according to which jobs will be
 * created.
 * 
 * @member {date} [schedule.doNotRunUntil] The earliest time at which any job
 * may be created under this job schedule. If you do not specify a
 * doNotRunUntil time, the schedule becomes ready to create jobs immediately.
 * 
 * @member {date} [schedule.doNotRunAfter] A time after which no job will be
 * created under this job schedule. The schedule will move to the completed
 * state as soon as this deadline is past and there is no active job under
 * this job schedule.
 * 
 * @member {moment.duration} [schedule.startWindow] The time interval,
 * starting from the time at which the schedule indicates a job should be
 * created, within which a job must be created. If a job is not created
 * within the startWindow interval, then the 'opportunity' is lost; no job
 * will be created until the next recurrence of the schedule.
 * 
 * @member {moment.duration} [schedule.recurrenceInterval] The time interval
 * between the start times of two successive jobs under the job schedule. A
 * job schedule can have at most one active job under it at any given time.
 * 
 * @member {object} jobSpecification The details of the jobs to be created on
 * this schedule.
 * 
 * @member {number} [jobSpecification.priority] The priority of jobs created
 * under this schedule. Priority values can range from -1000 to 1000, with
 * -1000 being the lowest priority and 1000 being the highest priority. The
 * default value is 0.
 * 
 * @member {string} [jobSpecification.displayName] The display name for jobs
 * created under this schedule. It need not be unique and can contain any
 * Unicode characters up to a maximum length of 1024.
 * 
 * @member {boolean} [jobSpecification.usesTaskDependencies] The flag that
 * determines if this job will use tasks with dependencies.
 * 
 * @member {object} [jobSpecification.constraints] The execution constraints
 * for jobs created under this schedule.
 * 
 * @member {moment.duration} [jobSpecification.constraints.maxWallClockTime]
 * The maximum elapsed time that the job may run, measured from the time the
 * job starts. If the job does not complete within the time limit, the Batch
 * service terminates it and any tasks that are still running.
 * 
 * @member {number} [jobSpecification.constraints.maxTaskRetryCount] The
 * maximum number of times each task may be retried. The Batch service
 * retries a task if its exit code is nonzero.
 * 
 * @member {object} [jobSpecification.jobManagerTask] The details of a Job
 * Manager task to be launched when a job is started under this schedule.
 * 
 * @member {string} [jobSpecification.jobManagerTask.id] A string that
 * uniquely identifies the Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobSpecification.jobManagerTask.displayName] The display
 * name of the Job Manager task.
 * 
 * @member {string} [jobSpecification.jobManagerTask.commandLine] The command
 * line of the Job Manager task.
 * 
 * @member {array} [jobSpecification.jobManagerTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobManagerTask.environmentSettings] A
 * list of environment variable settings for the Job Manager task.
 * 
 * @member {object} [jobSpecification.jobManagerTask.constraints] Constraints
 * that apply to the Job Manager task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.retentionTime] The minimum
 * time to retain the working directory for the task on the compute node
 * where it ran, from the time it completes execution. After this time, the
 * Batch service may delete the working directory and all its contents. The
 * default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobManagerTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.killJobOnCompletion]
 * Whether completion of the Job Manager task signifies completion of the
 * entire job.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runElevated] Whether to
 * run the Job Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runExclusive] Whether
 * the Job Manager task requires exclusive use of the compute node where it
 * runs. If true, no other tasks will run on the same compute node for as
 * long as the Job Manager is running. If false, other tasks can run
 * simultaneously with the Job Manager on a compute node. (The Job Manager
 * task counts normally against the node’s concurrent task limit, so this is
 * only relevant if the node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobSpecification.jobPreparationTask] The Job Preparation
 * task for jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.id] A string that
 * uniquely identifies the job preparation task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.commandLine] The
 * command line of the Job Preparation task.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.resourceFiles] A list
 * of files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.environmentSettings] A
 * list of environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobSpecification.jobPreparationTask.constraints]
 * Constraints that apply to the Job Preparation task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.waitForSuccess]
 * Whether the Batch service should wait for the Job Preparation task to
 * complete successfully before scheduling any other tasks of the job on the
 * compute node.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.runElevated] Whether
 * to run the Job Preparation task in elevated mode. The default value is
 * false.
 * 
 * @member {boolean}
 * [jobSpecification.jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobSpecification.jobReleaseTask] The Job Release task for
 * jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.id] A string that
 * uniquely identifies the Job Release task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.commandLine] The command
 * line of the Job Release task.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.environmentSettings] A
 * list of environment variable settings for the Job Release task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobReleaseTask.maxWallClockTime] The maximum elapsed
 * time that the Job Release task may run on a given compute node, measured
 * from the time the task starts. If the task does not complete within the
 * time limit, the Batch service terminates it. The default value is 15
 * minutes.
 * 
 * @member {moment.duration} [jobSpecification.jobReleaseTask.retentionTime]
 * The minimum time to retain the working directory for the Job Release task
 * on the compute node. After this time, the Batch service may delete the
 * working directory and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobSpecification.jobReleaseTask.runElevated] Whether to
 * run the Job Release task in elevated mode. The default value is false.
 * 
 * @member {array} [jobSpecification.commonEnvironmentSettings] A list of
 * common environment variable settings. These environment variables are set
 * for all tasks in jobs created under this schedule (including the Job
 * Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} [jobSpecification.poolInfo] The pool on which the Batch
 * service runs the tasks of jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.poolInfo.poolId] The id of an existing
 * pool. All the tasks of the job will run on the specified pool. You must
 * specify either PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification]
 * Characteristics for a temporary 'auto pool'. The Batch service will create
 * this auto pool and run all of the tasks of the job on it, and will delete
 * the pool once the job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.autoPoolIdPrefix] A
 * prefix to be added to the unique identifier when a pool is automatically
 * created. The prefix can be up to 20 characters long.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification.pool] The
 * pool specification for the auto pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration]
 * The cloud service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration]
 * The virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.resizeTimeout] The
 * timeout for allocation of compute nodes to the pool.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleFormula]
 * The formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval]
 * A time interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication]
 * Whether the pool permits direct communication between nodes.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.commandLine]
 * The command line of the start task.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.resourceFiles]
 * A list of files that the Batch service will download to the compute node
 * before running the command line.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.environmentSettings]
 * A list of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.runElevated]
 * Whether to run the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount]
 * The maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess]
 * Whether the Batch service should wait for the start task to complete
 * successfully (that is, to exit with exit code 0) before scheduling any
 * tasks on the compute node.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.applicationPackageReferences]
 * The list of application packages to be installed on each compute node in
 * the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [jobSpecification.metadata] A list of name-value pairs
 * associated with each job created under this schedule as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * schedule as metadata.
 * 
 */
export interface JobScheduleAddParameter {
    id: string;
    displayName?: string;
    schedule: Schedule;
    jobSpecification: JobSpecification;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the JobSchedulingError class.
 * @constructor
 * An error encountered by the Batch service when scheduling a job.
 * @member {string} category The category of the job scheduling error.
 * Possible values include: 'usererror', 'servererror', 'unmapped'
 * 
 * @member {string} [code] An identifier for the job scheduling error. Codes
 * are invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the job scheduling error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [details] A list of additional error details related to the
 * scheduling error.
 * 
 */
export interface JobSchedulingError {
    category: string;
    code?: string;
    message?: string;
    details?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the JobExecutionInformation class.
 * @constructor
 * Contains information about the execution of a job in the Azure Batch
 * service.
 * @member {date} startTime The start time of the job.
 * 
 * @member {date} [endTime] The completion time of the job. This property is
 * set only if the job is in the completed state.
 * 
 * @member {string} [poolId] The id of the pool to which this job is assigned.
 * 
 * @member {object} [schedulingError] Details of any error encountered by the
 * service in starting the job.
 * 
 * @member {string} [schedulingError.category] The category of the job
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the job
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the job
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] A list of additional error
 * details related to the scheduling error.
 * 
 * @member {string} [terminateReason] A string describing the reason the job
 * ended.
 * 
 */
export interface JobExecutionInformation {
    startTime: Date;
    endTime?: Date;
    poolId?: string;
    schedulingError?: JobSchedulingError;
    terminateReason?: string;
}

/**
 * @class
 * Initializes a new instance of the CloudJob class.
 * @constructor
 * An Azure Batch job.
 * @member {string} [id] A string that uniquely identifies the job within the
 * account. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters. It is common to use a GUID for the id.
 * 
 * @member {string} [displayName] The display name for the job.
 * 
 * @member {boolean} [usesTaskDependencies] The flag that determines if this
 * job will use tasks with dependencies.
 * 
 * @member {string} [url] The URL of the job.
 * 
 * @member {string} [eTag] The ETag of the job.
 * 
 * @member {date} [lastModified] The last modified time of the job.
 * 
 * @member {date} [creationTime] The creation time of the job.
 * 
 * @member {string} [state] The current state of the job. Possible values
 * include: 'active', 'disabling', 'disabled', 'enabling', 'terminating',
 * 'completed', 'deleting'
 * 
 * @member {date} [stateTransitionTime] The time at which the job entered its
 * current state.
 * 
 * @member {string} [previousState] The previous state of the job. This
 * property is not set if the job is in its initial Active state. Possible
 * values include: 'active', 'disabling', 'disabled', 'enabling',
 * 'terminating', 'completed', 'deleting'
 * 
 * @member {date} [previousStateTransitionTime] The time at which the job
 * entered its previous state. This property is not set if the job is in its
 * initial Active state.
 * 
 * @member {number} [priority] The priority of the job. Priority values can
 * range from -1000 to 1000, with -1000 being the lowest priority and 1000
 * being the highest priority. The default value is 0.
 * 
 * @member {object} [constraints] The execution constraints for the job.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the job may run, measured from the time the job starts.
 * If the job does not complete within the time limit, the Batch service
 * terminates it and any tasks that are still running.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times each task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {object} [jobManagerTask] Details of a Job Manager task to be
 * launched when the job is started.
 * 
 * @member {string} [jobManagerTask.id] A string that uniquely identifies the
 * Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobManagerTask.displayName] The display name of the Job
 * Manager task.
 * 
 * @member {string} [jobManagerTask.commandLine] The command line of the Job
 * Manager task.
 * 
 * @member {array} [jobManagerTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobManagerTask.environmentSettings] A list of environment
 * variable settings for the Job Manager task.
 * 
 * @member {object} [jobManagerTask.constraints] Constraints that apply to the
 * Job Manager task.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number} [jobManagerTask.constraints.maxTaskRetryCount] The maximum
 * number of times the task may be retried. The Batch service retries a task
 * if its exit code is nonzero.
 * 
 * @member {boolean} [jobManagerTask.killJobOnCompletion] Whether completion
 * of the Job Manager task signifies completion of the entire job.
 * 
 * @member {boolean} [jobManagerTask.runElevated] Whether to run the Job
 * Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobManagerTask.runExclusive] Whether the Job Manager
 * task requires exclusive use of the compute node where it runs. If true, no
 * other tasks will run on the same compute node for as long as the Job
 * Manager is running. If false, other tasks can run simultaneously with the
 * Job Manager on a compute node. (The Job Manager task counts normally
 * against the node’s concurrent task limit, so this is only relevant if the
 * node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobPreparationTask] The Job Preparation task.
 * 
 * @member {string} [jobPreparationTask.id] A string that uniquely identifies
 * the job preparation task within the job. The id can contain any
 * combination of alphanumeric characters including hyphens and underscores
 * and cannot contain more than 64 characters.
 * 
 * @member {string} [jobPreparationTask.commandLine] The command line of the
 * Job Preparation task.
 * 
 * @member {array} [jobPreparationTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobPreparationTask.environmentSettings] A list of
 * environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobPreparationTask.constraints] Constraints that apply to
 * the Job Preparation task.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.maxWallClockTime]
 * The maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.retentionTime]
 * The minimum time to retain the working directory for the task on the
 * compute node where it ran, from the time it completes execution. After
 * this time, the Batch service may delete the working directory and all its
 * contents. The default is infinite.
 * 
 * @member {number} [jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobPreparationTask.waitForSuccess] Whether the Batch
 * service should wait for the Job Preparation task to complete successfully
 * before scheduling any other tasks of the job on the compute node.
 * 
 * @member {boolean} [jobPreparationTask.runElevated] Whether to run the Job
 * Preparation task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobReleaseTask] The Job Release task.
 * 
 * @member {string} [jobReleaseTask.id] A string that uniquely identifies the
 * Job Release task within the job. The id can contain any combination of
 * alphanumeric characters including hyphens and underscores and cannot
 * contain more than 64 characters.
 * 
 * @member {string} [jobReleaseTask.commandLine] The command line of the Job
 * Release task.
 * 
 * @member {array} [jobReleaseTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobReleaseTask.environmentSettings] A list of environment
 * variable settings for the Job Release task.
 * 
 * @member {moment.duration} [jobReleaseTask.maxWallClockTime] The maximum
 * elapsed time that the Job Release task may run on a given compute node,
 * measured from the time the task starts. If the task does not complete
 * within the time limit, the Batch service terminates it. The default value
 * is 15 minutes.
 * 
 * @member {moment.duration} [jobReleaseTask.retentionTime] The minimum time
 * to retain the working directory for the Job Release task on the compute
 * node. After this time, the Batch service may delete the working directory
 * and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobReleaseTask.runElevated] Whether to run the Job
 * Release task in elevated mode. The default value is false.
 * 
 * @member {array} [commonEnvironmentSettings] The list of common environment
 * variable settings. These environment variables are set for all tasks in
 * the job (including the Job Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} [poolInfo] The pool on which the Batch service runs the
 * job’s tasks.
 * 
 * @member {string} [poolInfo.poolId] The id of an existing pool. All the
 * tasks of the job will run on the specified pool. You must specify either
 * PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [poolInfo.autoPoolSpecification] Characteristics for a
 * temporary 'auto pool'. The Batch service will create this auto pool and
 * run all of the tasks of the job on it, and will delete the pool once the
 * job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.autoPoolIdPrefix] A prefix
 * to be added to the unique identifier when a pool is automatically created.
 * The prefix can be up to 20 characters long.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool] The pool
 * specification for the auto pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration] The cloud
 * service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration] The
 * virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.resizeTimeout] The timeout for
 * allocation of compute nodes to the pool.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.autoScaleFormula] The
 * formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication] Whether
 * the pool permits direct communication between nodes.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.startTask.commandLine] The command
 * line of the start task.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.environmentSettings] A list
 * of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.runElevated] Whether to run
 * the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount] The
 * maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess] Whether the
 * Batch service should wait for the start task to complete successfully
 * (that is, to exit with exit code 0) before scheduling any tasks on the
 * compute node.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.applicationPackageReferences] The
 * list of application packages to be installed on each compute node in the
 * pool.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job as metadata.
 * 
 * @member {object} [executionInfo] The execution information for the job.
 * 
 * @member {date} [executionInfo.startTime] The start time of the job.
 * 
 * @member {date} [executionInfo.endTime] The completion time of the job. This
 * property is set only if the job is in the completed state.
 * 
 * @member {string} [executionInfo.poolId] The id of the pool to which this
 * job is assigned.
 * 
 * @member {object} [executionInfo.schedulingError] Details of any error
 * encountered by the service in starting the job.
 * 
 * @member {string} [executionInfo.schedulingError.category] The category of
 * the job scheduling error. Possible values include: 'usererror',
 * 'servererror', 'unmapped'
 * 
 * @member {string} [executionInfo.schedulingError.code] An identifier for the
 * job scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [executionInfo.schedulingError.message] A message
 * describing the job scheduling error, intended to be suitable for display
 * in a user interface.
 * 
 * @member {array} [executionInfo.schedulingError.details] A list of
 * additional error details related to the scheduling error.
 * 
 * @member {string} [executionInfo.terminateReason] A string describing the
 * reason the job ended.
 * 
 * @member {object} [stats] Resource usage statistics for the entire lifetime
 * of the job.
 * 
 * @member {string} [stats.url] The URL of the statistics.
 * 
 * @member {date} [stats.startTime] The start time of the time range covered
 * by the statistics.
 * 
 * @member {date} [stats.lastUpdateTime] The time at which the statistics were
 * last updated. All statistics are limited to the range between startTime
 * and lastUpdateTime.
 * 
 * @member {moment.duration} [stats.userCPUTime] The total user mode CPU time
 * (summed across all cores and all compute nodes) consumed by all tasks in
 * the job.
 * 
 * @member {moment.duration} [stats.kernelCPUTime] The total kernel mode CPU
 * time (summed across all cores and all compute nodes) consumed by all tasks
 * in the job.
 * 
 * @member {moment.duration} [stats.wallClockTime] The total wall clock time
 * of all tasks in the job.
 * 
 * @member {number} [stats.readIOps] The total number of disk read operations
 * made by all tasks in the job.
 * 
 * @member {number} [stats.writeIOps] The total number of disk write
 * operations made by all tasks in the job.
 * 
 * @member {number} [stats.readIOGiB] The total gibibytes read from disk by
 * all tasks in the job.
 * 
 * @member {number} [stats.writeIOGiB] The total gibibytes written to disk by
 * all tasks in the job.
 * 
 * @member {number} [stats.numSucceededTasks] The total number of tasks
 * successfully completed in the job during the given time range.
 * 
 * @member {number} [stats.numFailedTasks] The total number of tasks in the
 * job that failed during the given time range.
 * 
 * @member {number} [stats.numTaskRetries] The total number of retries on all
 * the tasks in the job during the given time range.
 * 
 * @member {moment.duration} [stats.waitTime] The total wait time of all tasks
 * in the job. The wait time for a task is defined as the elapsed time
 * between the creation of the task and the start of task execution. (If the
 * task is retried due to failures, the wait time is the time to the most
 * recent task execution.)
 * 
 */
export interface CloudJob {
    id?: string;
    displayName?: string;
    usesTaskDependencies?: boolean;
    url?: string;
    eTag?: string;
    lastModified?: Date;
    creationTime?: Date;
    state?: string;
    stateTransitionTime?: Date;
    previousState?: string;
    previousStateTransitionTime?: Date;
    priority?: number;
    constraints?: JobConstraints;
    jobManagerTask?: JobManagerTask;
    jobPreparationTask?: JobPreparationTask;
    jobReleaseTask?: JobReleaseTask;
    commonEnvironmentSettings?: EnvironmentSetting[];
    poolInfo?: PoolInformation;
    metadata?: MetadataItem[];
    executionInfo?: JobExecutionInformation;
    stats?: JobStatistics;
}

/**
 * @class
 * Initializes a new instance of the JobAddParameter class.
 * @constructor
 * An Azure Batch job to add.
 * @member {string} id A string that uniquely identifies the job within the
 * account. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters. It is common to use a GUID for the id.
 * 
 * @member {string} [displayName] The display name for the job.
 * 
 * @member {number} [priority] The priority of the job. Priority values can
 * range from -1000 to 1000, with -1000 being the lowest priority and 1000
 * being the highest priority. The default value is 0.
 * 
 * @member {object} [constraints] The execution constraints for the job.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the job may run, measured from the time the job starts.
 * If the job does not complete within the time limit, the Batch service
 * terminates it and any tasks that are still running.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times each task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {object} [jobManagerTask] Details of a Job Manager task to be
 * launched when the job is started.
 * 
 * @member {string} [jobManagerTask.id] A string that uniquely identifies the
 * Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobManagerTask.displayName] The display name of the Job
 * Manager task.
 * 
 * @member {string} [jobManagerTask.commandLine] The command line of the Job
 * Manager task.
 * 
 * @member {array} [jobManagerTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobManagerTask.environmentSettings] A list of environment
 * variable settings for the Job Manager task.
 * 
 * @member {object} [jobManagerTask.constraints] Constraints that apply to the
 * Job Manager task.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobManagerTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number} [jobManagerTask.constraints.maxTaskRetryCount] The maximum
 * number of times the task may be retried. The Batch service retries a task
 * if its exit code is nonzero.
 * 
 * @member {boolean} [jobManagerTask.killJobOnCompletion] Whether completion
 * of the Job Manager task signifies completion of the entire job.
 * 
 * @member {boolean} [jobManagerTask.runElevated] Whether to run the Job
 * Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobManagerTask.runExclusive] Whether the Job Manager
 * task requires exclusive use of the compute node where it runs. If true, no
 * other tasks will run on the same compute node for as long as the Job
 * Manager is running. If false, other tasks can run simultaneously with the
 * Job Manager on a compute node. (The Job Manager task counts normally
 * against the node’s concurrent task limit, so this is only relevant if the
 * node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobPreparationTask] The Job Preparation task.
 * 
 * @member {string} [jobPreparationTask.id] A string that uniquely identifies
 * the job preparation task within the job. The id can contain any
 * combination of alphanumeric characters including hyphens and underscores
 * and cannot contain more than 64 characters.
 * 
 * @member {string} [jobPreparationTask.commandLine] The command line of the
 * Job Preparation task.
 * 
 * @member {array} [jobPreparationTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobPreparationTask.environmentSettings] A list of
 * environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobPreparationTask.constraints] Constraints that apply to
 * the Job Preparation task.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.maxWallClockTime]
 * The maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration} [jobPreparationTask.constraints.retentionTime]
 * The minimum time to retain the working directory for the task on the
 * compute node where it ran, from the time it completes execution. After
 * this time, the Batch service may delete the working directory and all its
 * contents. The default is infinite.
 * 
 * @member {number} [jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobPreparationTask.waitForSuccess] Whether the Batch
 * service should wait for the Job Preparation task to complete successfully
 * before scheduling any other tasks of the job on the compute node.
 * 
 * @member {boolean} [jobPreparationTask.runElevated] Whether to run the Job
 * Preparation task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobReleaseTask] The Job Release task.
 * 
 * @member {string} [jobReleaseTask.id] A string that uniquely identifies the
 * Job Release task within the job. The id can contain any combination of
 * alphanumeric characters including hyphens and underscores and cannot
 * contain more than 64 characters.
 * 
 * @member {string} [jobReleaseTask.commandLine] The command line of the Job
 * Release task.
 * 
 * @member {array} [jobReleaseTask.resourceFiles] A list of files that the
 * Batch service will download to the compute node before running the command
 * line.
 * 
 * @member {array} [jobReleaseTask.environmentSettings] A list of environment
 * variable settings for the Job Release task.
 * 
 * @member {moment.duration} [jobReleaseTask.maxWallClockTime] The maximum
 * elapsed time that the Job Release task may run on a given compute node,
 * measured from the time the task starts. If the task does not complete
 * within the time limit, the Batch service terminates it. The default value
 * is 15 minutes.
 * 
 * @member {moment.duration} [jobReleaseTask.retentionTime] The minimum time
 * to retain the working directory for the Job Release task on the compute
 * node. After this time, the Batch service may delete the working directory
 * and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobReleaseTask.runElevated] Whether to run the Job
 * Release task in elevated mode. The default value is false.
 * 
 * @member {array} [commonEnvironmentSettings] The list of common environment
 * variable settings. These environment variables are set for all tasks in
 * the job (including the Job Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} poolInfo The pool on which the Batch service runs the
 * job’s tasks.
 * 
 * @member {string} [poolInfo.poolId] The id of an existing pool. All the
 * tasks of the job will run on the specified pool. You must specify either
 * PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [poolInfo.autoPoolSpecification] Characteristics for a
 * temporary 'auto pool'. The Batch service will create this auto pool and
 * run all of the tasks of the job on it, and will delete the pool once the
 * job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.autoPoolIdPrefix] A prefix
 * to be added to the unique identifier when a pool is automatically created.
 * The prefix can be up to 20 characters long.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool] The pool
 * specification for the auto pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration] The cloud
 * service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration] The
 * virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.resizeTimeout] The timeout for
 * allocation of compute nodes to the pool.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.autoScaleFormula] The
 * formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication] Whether
 * the pool permits direct communication between nodes.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.startTask.commandLine] The command
 * line of the start task.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.environmentSettings] A list
 * of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.runElevated] Whether to run
 * the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount] The
 * maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess] Whether the
 * Batch service should wait for the start task to complete successfully
 * (that is, to exit with exit code 0) before scheduling any tasks on the
 * compute node.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.applicationPackageReferences] The
 * list of application packages to be installed on each compute node in the
 * pool.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job as metadata.
 * 
 * @member {boolean} [usesTaskDependencies] The flag that determines if this
 * job will use tasks with dependencies.
 * 
 */
export interface JobAddParameter {
    id: string;
    displayName?: string;
    priority?: number;
    constraints?: JobConstraints;
    jobManagerTask?: JobManagerTask;
    jobPreparationTask?: JobPreparationTask;
    jobReleaseTask?: JobReleaseTask;
    commonEnvironmentSettings?: EnvironmentSetting[];
    poolInfo: PoolInformation;
    metadata?: MetadataItem[];
    usesTaskDependencies?: boolean;
}

/**
 * @class
 * Initializes a new instance of the TaskSchedulingError class.
 * @constructor
 * Information about an error when scheduling a task.
 * @member {string} category The category of the task scheduling error.
 * Possible values include: 'usererror', 'servererror', 'unmapped'
 * 
 * @member {string} [code] An identifier for the task scheduling error. Codes
 * are invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the task scheduling error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [details] The list of additional error details related to
 * the scheduling error.
 * 
 */
export interface TaskSchedulingError {
    category: string;
    code?: string;
    message?: string;
    details?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the JobPreparationTaskExecutionInformation class.
 * @constructor
 * Contains information about the execution of a Job Preparation task on a
 * compute node.
 * @member {date} startTime The time at which the task started running. Note
 * that every time the task is restarted, this value is updated.
 * 
 * @member {date} [endTime] The time at which the Job Preparation task
 * completed. This property is set only if the task is in the Completed state.
 * 
 * @member {string} state The current state of the Job Preparation task.
 * Possible values include: 'running', 'completed'
 * 
 * @member {string} [taskRootDirectory] The root directory of the Job
 * Preparation task on the compute node. You can use this path to retrieve
 * files created by the task, such as log files.
 * 
 * @member {string} [taskRootDirectoryUrl] The URL to the root directory of
 * the Job Preparation task on the compute node.
 * 
 * @member {number} [exitCode] The exit code of the Job Preparation task. This
 * property is set only if the task is in the Completed state.
 * 
 * @member {object} [schedulingError] The error encountered by the Batch
 * service when starting the task.
 * 
 * @member {string} [schedulingError.category] The category of the task
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the task
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the task
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] The list of additional error
 * details related to the scheduling error.
 * 
 * @member {number} retryCount The number of times the task has been retried
 * by the Batch service. Every time the task exits with a non-zero exit code,
 * it is deemed a task failure. The Batch service will retry the task up to
 * the limit specified by the constraints.
 * 
 * @member {date} [lastRetryTime] The most recent time at which a retry of the
 * Job Preparation task started running. This property is set only if the
 * task was retried (i.e. retryCount is nonzero).
 * 
 */
export interface JobPreparationTaskExecutionInformation {
    startTime: Date;
    endTime?: Date;
    state: string;
    taskRootDirectory?: string;
    taskRootDirectoryUrl?: string;
    exitCode?: number;
    schedulingError?: TaskSchedulingError;
    retryCount: number;
    lastRetryTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobReleaseTaskExecutionInformation class.
 * @constructor
 * Contains information about the execution of a Job Release task on a compute
 * node.
 * @member {date} startTime The time at which the task started running. Note
 * that every time the task is restarted, this value is updated.
 * 
 * @member {date} [endTime] The time at which the Job Release task completed.
 * This property is set only if the task is in the Completed state.
 * 
 * @member {string} state The current state of the Job Release task. Possible
 * values include: 'running', 'completed'
 * 
 * @member {string} [taskRootDirectory] The root directory of the Job Release
 * task on the compute node. You can use this path to retrieve files created
 * by the task, such as log files.
 * 
 * @member {string} [taskRootDirectoryUrl] The URL to the root directory of
 * the Job Release task on the compute node.
 * 
 * @member {number} [exitCode] The exit code of the Job Release task. This
 * property is set only if the task is in the Completed state.
 * 
 * @member {object} [schedulingError] The scheduling error encountered by the
 * Batch service when starting the task.
 * 
 * @member {string} [schedulingError.category] The category of the task
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the task
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the task
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] The list of additional error
 * details related to the scheduling error.
 * 
 */
export interface JobReleaseTaskExecutionInformation {
    startTime: Date;
    endTime?: Date;
    state: string;
    taskRootDirectory?: string;
    taskRootDirectoryUrl?: string;
    exitCode?: number;
    schedulingError?: TaskSchedulingError;
}

/**
 * @class
 * Initializes a new instance of the JobPreparationAndReleaseTaskExecutionInformation class.
 * @constructor
 * The status of the Job Preparation and Job Release tasks on a compute node.
 * @member {string} [poolId] The id of the pool containing the compute node to
 * which this entry refers.
 * 
 * @member {string} [nodeId] The id of the compute node to which this entry
 * refers.
 * 
 * @member {string} [nodeUrl] The URL of the compute node to which this entry
 * refers.
 * 
 * @member {object} [jobPreparationTaskExecutionInfo] Information about the
 * execution status of the Job Preparation task on this compute node.
 * 
 * @member {date} [jobPreparationTaskExecutionInfo.startTime] The time at
 * which the task started running. Note that every time the task is
 * restarted, this value is updated.
 * 
 * @member {date} [jobPreparationTaskExecutionInfo.endTime] The time at which
 * the Job Preparation task completed. This property is set only if the task
 * is in the Completed state.
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.state] The current state
 * of the Job Preparation task. Possible values include: 'running',
 * 'completed'
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.taskRootDirectory] The
 * root directory of the Job Preparation task on the compute node. You can
 * use this path to retrieve files created by the task, such as log files.
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.taskRootDirectoryUrl] The
 * URL to the root directory of the Job Preparation task on the compute node.
 * 
 * @member {number} [jobPreparationTaskExecutionInfo.exitCode] The exit code
 * of the Job Preparation task. This property is set only if the task is in
 * the Completed state.
 * 
 * @member {object} [jobPreparationTaskExecutionInfo.schedulingError] The
 * error encountered by the Batch service when starting the task.
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.schedulingError.category]
 * The category of the task scheduling error. Possible values include:
 * 'usererror', 'servererror', 'unmapped'
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.schedulingError.code] An
 * identifier for the task scheduling error. Codes are invariant and are
 * intended to be consumed programmatically.
 * 
 * @member {string} [jobPreparationTaskExecutionInfo.schedulingError.message]
 * A message describing the task scheduling error, intended to be suitable
 * for display in a user interface.
 * 
 * @member {array} [jobPreparationTaskExecutionInfo.schedulingError.details]
 * The list of additional error details related to the scheduling error.
 * 
 * @member {number} [jobPreparationTaskExecutionInfo.retryCount] The number of
 * times the task has been retried by the Batch service. Every time the task
 * exits with a non-zero exit code, it is deemed a task failure. The Batch
 * service will retry the task up to the limit specified by the constraints.
 * 
 * @member {date} [jobPreparationTaskExecutionInfo.lastRetryTime] The most
 * recent time at which a retry of the Job Preparation task started running.
 * This property is set only if the task was retried (i.e. retryCount is
 * nonzero).
 * 
 * @member {object} [jobReleaseTaskExecutionInfo] Information about the
 * execution status of the Job Release task on this compute node. This
 * property is set only if the Job Release task has run on the node.
 * 
 * @member {date} [jobReleaseTaskExecutionInfo.startTime] The time at which
 * the task started running. Note that every time the task is restarted, this
 * value is updated.
 * 
 * @member {date} [jobReleaseTaskExecutionInfo.endTime] The time at which the
 * Job Release task completed. This property is set only if the task is in
 * the Completed state.
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.state] The current state of
 * the Job Release task. Possible values include: 'running', 'completed'
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.taskRootDirectory] The root
 * directory of the Job Release task on the compute node. You can use this
 * path to retrieve files created by the task, such as log files.
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.taskRootDirectoryUrl] The URL
 * to the root directory of the Job Release task on the compute node.
 * 
 * @member {number} [jobReleaseTaskExecutionInfo.exitCode] The exit code of
 * the Job Release task. This property is set only if the task is in the
 * Completed state.
 * 
 * @member {object} [jobReleaseTaskExecutionInfo.schedulingError] The
 * scheduling error encountered by the Batch service when starting the task.
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.schedulingError.category] The
 * category of the task scheduling error. Possible values include:
 * 'usererror', 'servererror', 'unmapped'
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.schedulingError.code] An
 * identifier for the task scheduling error. Codes are invariant and are
 * intended to be consumed programmatically.
 * 
 * @member {string} [jobReleaseTaskExecutionInfo.schedulingError.message] A
 * message describing the task scheduling error, intended to be suitable for
 * display in a user interface.
 * 
 * @member {array} [jobReleaseTaskExecutionInfo.schedulingError.details] The
 * list of additional error details related to the scheduling error.
 * 
 */
export interface JobPreparationAndReleaseTaskExecutionInformation {
    poolId?: string;
    nodeId?: string;
    nodeUrl?: string;
    jobPreparationTaskExecutionInfo?: JobPreparationTaskExecutionInformation;
    jobReleaseTaskExecutionInfo?: JobReleaseTaskExecutionInformation;
}

/**
 * @class
 * Initializes a new instance of the AutoScaleRunError class.
 * @constructor
 * An error that occurred when executing or evaluating a pool autoscale
 * formula.
 * @member {string} [code] An identifier for the autoscale error. Codes are
 * invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the autoscale error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [values] A list of additional error details related to the
 * autoscale error.
 * 
 */
export interface AutoScaleRunError {
    code?: string;
    message?: string;
    values?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the AutoScaleRun class.
 * @constructor
 * The results and errors from an execution of a pool autoscale formula.
 * @member {date} timestamp The time at which the autoscale formula was last
 * evaluated.
 * 
 * @member {string} [results] The final values of all variables used in the
 * evaluation of the autoscale formula. Each variable value is returned in
 * the form $variable=value, and variables are separated by semicolons.
 * 
 * @member {object} [error] Details of the error encountered evaluating the
 * autoscale formula on the pool, if the evaluation was unsuccessful.
 * 
 * @member {string} [error.code] An identifier for the autoscale error. Codes
 * are invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [error.message] A message describing the autoscale error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [error.values] A list of additional error details related
 * to the autoscale error.
 * 
 */
export interface AutoScaleRun {
    timestamp: Date;
    results?: string;
    error?: AutoScaleRunError;
}

/**
 * @class
 * Initializes a new instance of the ResizeError class.
 * @constructor
 * An error that occurred when resizing a pool.
 * @member {string} [code] An identifier for the pool resize error. Codes are
 * invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the pool resize error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [values] A list of additional error details related to the
 * pool resize error.
 * 
 */
export interface ResizeError {
    code?: string;
    message?: string;
    values?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the CloudPool class.
 * @constructor
 * A pool in the Azure Batch service.
 * @member {string} [id] A string that uniquely identifies the pool within the
 * account. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters.
 * 
 * @member {string} [displayName] The display name for the pool.
 * 
 * @member {string} [url] The URL of the pool.
 * 
 * @member {string} [eTag] The ETag of the pool.
 * 
 * @member {date} [lastModified] The last modified time of the pool.
 * 
 * @member {date} [creationTime] The creation time of the pool.
 * 
 * @member {string} [state] The current state of the pool. Possible values
 * include: 'active', 'deleting', 'upgrading'
 * 
 * @member {date} [stateTransitionTime] The time at which the pool entered its
 * current state.
 * 
 * @member {string} [allocationState] Whether the pool is resizing. Possible
 * values include: 'steady', 'resizing', 'stopping'
 * 
 * @member {date} [allocationStateTransitionTime] The time at which the pool
 * entered its current allocation state.
 * 
 * @member {string} [vmSize] The size of virtual machines in the pool. All
 * virtual machines in a pool are the same size.
 * 
 * @member {object} [cloudServiceConfiguration] The cloud service
 * configuration for the pool. This property and VirtualMachineConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {string} [cloudServiceConfiguration.osFamily] The Azure Guest OS
 * family to be installed on the virtual machines in the pool.
 * 
 * @member {string} [cloudServiceConfiguration.targetOSVersion] The Azure
 * Guest OS version to be installed on the virtual machines in the pool. The
 * default value is * which specifies the latest operating system version for
 * the specified OS family.
 * 
 * @member {string} [cloudServiceConfiguration.currentOSVersion] The Azure
 * Guest OS Version currently installed on the virtual machines in the pool.
 * This may differ from TargetOSVersion if the pool state is Upgrading.
 * 
 * @member {object} [virtualMachineConfiguration] The virtual machine
 * configuration for the pool. This property and CloudServiceConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {object} [virtualMachineConfiguration.imageReference] A reference
 * to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.publisher] The
 * publisher of the Azure Virtual Machines Marketplace image. For example,
 * Canonical or MicrosoftWindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.offer] The
 * offer type of the Azure Virtual Machines Marketplace image. For example,
 * UbuntuServer or WindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.sku] The SKU
 * of the Azure Virtual Machines Marketplace image. For example, 14.04.0-LTS
 * or 2012-R2-Datacenter.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.version] The
 * version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string} [virtualMachineConfiguration.nodeAgentSKUId] The SKU of
 * Batch Node Agent to be provisioned on the compute node. The Batch node
 * agent is a program that runs on each node in the pool, and provides the
 * command-and-control interface between the node and the Batch service.
 * There are different implementations of the node agent, known as SKUs, for
 * different operating systems.
 * 
 * @member {object} [virtualMachineConfiguration.windowsConfiguration] Windows
 * operating system settings on the virtual machine. This property must not
 * be specified if the ImageReference property specifies a Linux OS image.
 * 
 * @member {boolean}
 * [virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {moment.duration} [resizeTimeout] The timeout for allocation of
 * compute nodes to the pool. In a Get Pool operation, this is the timeout
 * for the most recent resize operation. The default value is 10 minutes.
 * 
 * @member {object} [resizeError] Details of any error encountered while
 * performing the last resize on the pool. This property is set only if an
 * error occurred during the last pool resize, and only when the pool
 * AllocationState is Steady.
 * 
 * @member {string} [resizeError.code] An identifier for the pool resize
 * error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [resizeError.message] A message describing the pool resize
 * error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [resizeError.values] A list of additional error details
 * related to the pool resize error.
 * 
 * @member {number} [currentDedicated] The number of compute nodes currently
 * in the pool.
 * 
 * @member {number} [targetDedicated] The desired number of compute nodes in
 * the pool. This property must have the default value if EnableAutoScale is
 * true. It is required if EnableAutoScale is false.
 * 
 * @member {boolean} [enableAutoScale] Whether the pool size should
 * automatically adjust over time. If true, the AutoScaleFormula property
 * must be set. If false, the TargetDedicated property must be set.
 * 
 * @member {string} [autoScaleFormula] A formula for the desired number of
 * compute nodes in the pool.
 * 
 * @member {moment.duration} [autoScaleEvaluationInterval] A time interval for
 * the desired AutoScale evaluation period in the pool.
 * 
 * @member {object} [autoScaleRun] The results and errors from the last
 * execution of the autoscale formula.
 * 
 * @member {date} [autoScaleRun.timestamp] The time at which the autoscale
 * formula was last evaluated.
 * 
 * @member {string} [autoScaleRun.results] The final values of all variables
 * used in the evaluation of the autoscale formula. Each variable value is
 * returned in the form $variable=value, and variables are separated by
 * semicolons.
 * 
 * @member {object} [autoScaleRun.error] Details of the error encountered
 * evaluating the autoscale formula on the pool, if the evaluation was
 * unsuccessful.
 * 
 * @member {string} [autoScaleRun.error.code] An identifier for the autoscale
 * error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [autoScaleRun.error.message] A message describing the
 * autoscale error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [autoScaleRun.error.values] A list of additional error
 * details related to the autoscale error.
 * 
 * @member {boolean} [enableInterNodeCommunication] Whether the pool permits
 * direct communication between nodes.
 * 
 * @member {object} [startTask] A task specified to run on each compute node
 * as it joins the pool.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} [certificateReferences] The list of certificates to be
 * installed on each compute node in the pool.
 * 
 * @member {array} [applicationPackageReferences] The list of application
 * packages to be installed on each compute node in the pool.
 * 
 * @member {number} [maxTasksPerNode] The maximum number of tasks that can run
 * concurrently on a single compute node in the pool.
 * 
 * @member {object} [taskSchedulingPolicy] How the Batch service distributes
 * tasks between compute nodes in the pool.
 * 
 * @member {string} [taskSchedulingPolicy.nodeFillType] How tasks should be
 * distributed across compute nodes. Possible values include: 'spread',
 * 'pack', 'unmapped'
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * pool as metadata.
 * 
 * @member {object} [stats] Utilization and resource usage statistics for the
 * entire lifetime of the pool.
 * 
 * @member {string} [stats.url] The URL for the statistics.
 * 
 * @member {date} [stats.startTime] The start time of the time range covered
 * by the statistics.
 * 
 * @member {date} [stats.lastUpdateTime] The time at which the statistics were
 * last updated. All statistics are limited to the range between startTime
 * and lastUpdateTime.
 * 
 * @member {object} [stats.usageStats] Statistics related to pool usage, such
 * as the amount of core-time used.
 * 
 * @member {date} [stats.usageStats.startTime] The start time of the time
 * range covered by the statistics.
 * 
 * @member {date} [stats.usageStats.lastUpdateTime] The time at which the
 * statistics were last updated. All statistics are limited to the range
 * between startTime and lastUpdateTime.
 * 
 * @member {moment.duration} [stats.usageStats.dedicatedCoreTime] The
 * aggregated wall-clock time of the dedicated compute node cores being part
 * of the pool.
 * 
 * @member {object} [stats.resourceStats] Statistics related to resource
 * consumption by compute nodes in the pool.
 * 
 * @member {date} [stats.resourceStats.startTime] The start time of the time
 * range covered by the statistics.
 * 
 * @member {date} [stats.resourceStats.lastUpdateTime] The time at which the
 * statistics were last updated. All statistics are limited to the range
 * between startTime and lastUpdateTime.
 * 
 * @member {number} [stats.resourceStats.avgCPUPercentage] The average CPU
 * usage across all nodes in the pool (percentage per node).
 * 
 * @member {number} [stats.resourceStats.avgMemoryGiB] The average memory
 * usage in GiB across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.peakMemoryGiB] The peak memory usage
 * in GiB across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.avgDiskGiB] The average used disk
 * space in GiB across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.peakDiskGiB] The peak used disk space
 * in GiB across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.diskReadIOps] The total number of
 * disk read operations across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.diskWriteIOps] The total number of
 * disk write operations across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.diskReadGiB] The total amount of data
 * in GiB of disk reads across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.diskWriteGiB] The total amount of
 * data in GiB of disk writes across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.networkReadGiB] The total amount of
 * data in GiB of network reads across all nodes in the pool.
 * 
 * @member {number} [stats.resourceStats.networkWriteGiB] The total amount of
 * data in GiB of network writes across all nodes in the pool.
 * 
 */
export interface CloudPool {
    id?: string;
    displayName?: string;
    url?: string;
    eTag?: string;
    lastModified?: Date;
    creationTime?: Date;
    state?: string;
    stateTransitionTime?: Date;
    allocationState?: string;
    allocationStateTransitionTime?: Date;
    vmSize?: string;
    cloudServiceConfiguration?: CloudServiceConfiguration;
    virtualMachineConfiguration?: VirtualMachineConfiguration;
    resizeTimeout?: moment.Duration;
    resizeError?: ResizeError;
    currentDedicated?: number;
    targetDedicated?: number;
    enableAutoScale?: boolean;
    autoScaleFormula?: string;
    autoScaleEvaluationInterval?: moment.Duration;
    autoScaleRun?: AutoScaleRun;
    enableInterNodeCommunication?: boolean;
    startTask?: StartTask;
    certificateReferences?: CertificateReference[];
    applicationPackageReferences?: ApplicationPackageReference[];
    maxTasksPerNode?: number;
    taskSchedulingPolicy?: TaskSchedulingPolicy;
    metadata?: MetadataItem[];
    stats?: PoolStatistics;
}

/**
 * @class
 * Initializes a new instance of the PoolAddParameter class.
 * @constructor
 * A pool in the Azure Batch service to add.
 * @member {string} id A string that uniquely identifies the pool within the
 * account. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters.
 * 
 * @member {string} [displayName] The display name for the pool.
 * 
 * @member {string} vmSize The size of virtual machines in the pool. All
 * virtual machines in a pool are the same size.
 * 
 * @member {object} [cloudServiceConfiguration] The cloud service
 * configuration for the pool. This property and VirtualMachineConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {string} [cloudServiceConfiguration.osFamily] The Azure Guest OS
 * family to be installed on the virtual machines in the pool.
 * 
 * @member {string} [cloudServiceConfiguration.targetOSVersion] The Azure
 * Guest OS version to be installed on the virtual machines in the pool. The
 * default value is * which specifies the latest operating system version for
 * the specified OS family.
 * 
 * @member {string} [cloudServiceConfiguration.currentOSVersion] The Azure
 * Guest OS Version currently installed on the virtual machines in the pool.
 * This may differ from TargetOSVersion if the pool state is Upgrading.
 * 
 * @member {object} [virtualMachineConfiguration] The virtual machine
 * configuration for the pool. This property and CloudServiceConfiguration
 * are mutually exclusive and one of the properties must be specified.
 * 
 * @member {object} [virtualMachineConfiguration.imageReference] A reference
 * to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.publisher] The
 * publisher of the Azure Virtual Machines Marketplace image. For example,
 * Canonical or MicrosoftWindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.offer] The
 * offer type of the Azure Virtual Machines Marketplace image. For example,
 * UbuntuServer or WindowsServer.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.sku] The SKU
 * of the Azure Virtual Machines Marketplace image. For example, 14.04.0-LTS
 * or 2012-R2-Datacenter.
 * 
 * @member {string} [virtualMachineConfiguration.imageReference.version] The
 * version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string} [virtualMachineConfiguration.nodeAgentSKUId] The SKU of
 * Batch Node Agent to be provisioned on the compute node. The Batch node
 * agent is a program that runs on each node in the pool, and provides the
 * command-and-control interface between the node and the Batch service.
 * There are different implementations of the node agent, known as SKUs, for
 * different operating systems.
 * 
 * @member {object} [virtualMachineConfiguration.windowsConfiguration] Windows
 * operating system settings on the virtual machine. This property must not
 * be specified if the ImageReference property specifies a Linux OS image.
 * 
 * @member {boolean}
 * [virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {moment.duration} [resizeTimeout] The timeout for allocation of
 * compute nodes to the pool. In a Get Pool operation, this is the timeout
 * for the most recent resize operation. The default value is 10 minutes.
 * 
 * @member {number} [targetDedicated] The desired number of compute nodes in
 * the pool. This property must have the default value if EnableAutoScale is
 * true. It is required if EnableAutoScale is false.
 * 
 * @member {boolean} [enableAutoScale] Whether the pool size should
 * automatically adjust over time. If true, the AutoScaleFormula property
 * must be set. If false, the TargetDedicated property must be set.
 * 
 * @member {string} [autoScaleFormula] A formula for the desired number of
 * compute nodes in the pool.
 * 
 * @member {moment.duration} [autoScaleEvaluationInterval] A time interval for
 * the desired autoscale evaluation period in the pool.
 * 
 * @member {boolean} [enableInterNodeCommunication] Whether the pool permits
 * direct communication between nodes.
 * 
 * @member {object} [startTask] A task specified to run on each compute node
 * as it joins the pool.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} [certificateReferences] The list of certificates to be
 * installed on each compute node in the pool.
 * 
 * @member {array} [applicationPackageReferences] The list of application
 * packages to be installed on each compute node in the pool.
 * 
 * @member {number} [maxTasksPerNode] The maximum number of tasks that can run
 * concurrently on a single compute node in the pool.
 * 
 * @member {object} [taskSchedulingPolicy] How the Batch service distributes
 * tasks between compute nodes in the pool.
 * 
 * @member {string} [taskSchedulingPolicy.nodeFillType] How tasks should be
 * distributed across compute nodes. Possible values include: 'spread',
 * 'pack', 'unmapped'
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * pool as metadata.
 * 
 */
export interface PoolAddParameter {
    id: string;
    displayName?: string;
    vmSize: string;
    cloudServiceConfiguration?: CloudServiceConfiguration;
    virtualMachineConfiguration?: VirtualMachineConfiguration;
    resizeTimeout?: moment.Duration;
    targetDedicated?: number;
    enableAutoScale?: boolean;
    autoScaleFormula?: string;
    autoScaleEvaluationInterval?: moment.Duration;
    enableInterNodeCommunication?: boolean;
    startTask?: StartTask;
    certificateReferences?: CertificateReference[];
    applicationPackageReferences?: ApplicationPackageReference[];
    maxTasksPerNode?: number;
    taskSchedulingPolicy?: TaskSchedulingPolicy;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the AffinityInformation class.
 * @constructor
 * A locality hint that can be used by the Batch service to select a compute
 * node on which to start a task.
 * @member {string} [affinityId] An opaque string representing the location of
 * a compute node or a task that has run previously. You can pass the
 * AffinityId of a compute node or task to indicate that this task needs to
 * be placed close to the node or task.
 * 
 */
export interface AffinityInformation {
    affinityId?: string;
}

/**
 * @class
 * Initializes a new instance of the TaskExecutionInformation class.
 * @constructor
 * Information about the execution of a task.
 * @member {date} [startTime] The time at which the task started running. If
 * the task has been restarted or retried, this is the most recent time at
 * which the task started running.
 * 
 * @member {date} [endTime] The time at which the task completed. This
 * property is set only if the task is in the Completed state.
 * 
 * @member {number} [exitCode] The exit code of the task. This property is set
 * only if the task is in completed state.
 * 
 * @member {object} [schedulingError] Details of any error encountered
 * scheduling the task.
 * 
 * @member {string} [schedulingError.category] The category of the task
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the task
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the task
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] The list of additional error
 * details related to the scheduling error.
 * 
 * @member {number} retryCount The number of times the task has been retried
 * by the Batch service.
 * 
 * @member {date} [lastRetryTime] The most recent time at which a retry of the
 * task started running.
 * 
 * @member {number} requeueCount The number of times the task has been
 * requeued by the Batch service as the result of a user request.
 * 
 * @member {date} [lastRequeueTime] The most recent time at which the task has
 * been requeued by the Batch service as the result of a user request.
 * 
 */
export interface TaskExecutionInformation {
    startTime?: Date;
    endTime?: Date;
    exitCode?: number;
    schedulingError?: TaskSchedulingError;
    retryCount: number;
    lastRetryTime?: Date;
    requeueCount: number;
    lastRequeueTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeInformation class.
 * @constructor
 * Information about the compute node on which a task ran.
 * @member {string} [affinityId] An identifier for the compute node on which
 * the task ran, which can be passed when adding a task to request that the
 * task be scheduled close to this compute node.
 * 
 * @member {string} [nodeUrl] The URL of the node on which the task ran.
 * 
 * @member {string} [poolId] The id of the pool on which the task ran.
 * 
 * @member {string} [nodeId] The id of the node on which the task ran.
 * 
 * @member {string} [taskRootDirectory] The root directory of the task on the
 * compute node.
 * 
 * @member {string} [taskRootDirectoryUrl] The URL to the root directory of
 * the task on the compute node.
 * 
 */
export interface ComputeNodeInformation {
    affinityId?: string;
    nodeUrl?: string;
    poolId?: string;
    nodeId?: string;
    taskRootDirectory?: string;
    taskRootDirectoryUrl?: string;
}

/**
 * @class
 * Initializes a new instance of the MultiInstanceSettings class.
 * @constructor
 * Settings which specify how to run a multi-instance task. Multi-instance
 * tasks are commonly used to support MPI tasks.
 * @member {number} numberOfInstances The number of compute nodes required by
 * the multi-instance task.
 * 
 * @member {string} [coordinationCommandLine] The command to run on the
 * compute node instances for coordinating among the subtasks.
 * 
 * @member {array} [commonResourceFiles] A list of files that the Batch
 * service will download before running the coordination command line. The
 * difference between common resource files and task resource files is that
 * common resource files are downloaded for all subtasks including the
 * primary, whereas task resource files are downloaded only for the primary.
 * 
 */
export interface MultiInstanceSettings {
    numberOfInstances: number;
    coordinationCommandLine?: string;
    commonResourceFiles?: ResourceFile[];
}

/**
 * @class
 * Initializes a new instance of the TaskStatistics class.
 * @constructor
 * Resource usage statistics for a task.
 * @member {string} url The URL of the statistics.
 * 
 * @member {date} startTime The start time of the time range covered by the
 * statistics.
 * 
 * @member {date} lastUpdateTime The time at which the statistics were last
 * updated. All statistics are limited to the range between startTime and
 * lastUpdateTime.
 * 
 * @member {moment.duration} userCPUTime The total user mode CPU time (summed
 * across all cores and all compute nodes) consumed by the task.
 * 
 * @member {moment.duration} kernelCPUTime The total kernel mode CPU time
 * (summed across all cores and all compute nodes) consumed by the task.
 * 
 * @member {moment.duration} wallClockTime The total wall clock time of the
 * task.
 * 
 * @member {number} readIOps The total number of disk read operations made by
 * the task.
 * 
 * @member {number} writeIOps The total number of disk write operations made
 * by the task.
 * 
 * @member {number} readIOGiB The total gibibytes read from disk by the task.
 * 
 * @member {number} writeIOGiB The total gibibytes written to disk by the task.
 * 
 * @member {moment.duration} waitTime The total wait time of the task. The
 * wait time for a task is defined as the elapsed time between the creation
 * of the task and the start of task execution. (If the task is retried due
 * to failures, the wait time is the time to the most recent task execution.)
 * 
 */
export interface TaskStatistics {
    url: string;
    startTime: Date;
    lastUpdateTime: Date;
    userCPUTime: moment.Duration;
    kernelCPUTime: moment.Duration;
    wallClockTime: moment.Duration;
    readIOps: number;
    writeIOps: number;
    readIOGiB: number;
    writeIOGiB: number;
    waitTime: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the TaskDependencies class.
 * @constructor
 * Specifies any dependencies of a task. Any task that is explicitly specified
 * or within a dependency range must complete before the dependant task will
 * be scheduled.
 * @member {array} [taskIds] The list of task ids that must complete before
 * this task can be scheduled.
 * 
 * @member {array} [taskIdRanges] The list of task ranges that must complete
 * before this task can be scheduled.
 * 
 */
export interface TaskDependencies {
    taskIds?: string[];
    taskIdRanges?: TaskIdRange[];
}

/**
 * @class
 * Initializes a new instance of the TaskIdRange class.
 * @constructor
 * A range of task ids that a task can depend on. All tasks with ids in the
 * range must complete successfully before the dependent task can be
 * scheduled.
 * @member {number} start The first task id in the range.
 * 
 * @member {number} end The last task id in the range.
 * 
 */
export interface TaskIdRange {
    start: number;
    end: number;
}

/**
 * @class
 * Initializes a new instance of the CloudTask class.
 * @constructor
 * An Azure Batch task.
 * @member {string} [id] A string that uniquely identifies the task within the
 * job. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters.
 * 
 * @member {string} [displayName] A display name for the task.
 * 
 * @member {string} [url] The URL of the task.
 * 
 * @member {string} [eTag] The ETag of the task.
 * 
 * @member {date} [lastModified] The last modified time of the task.
 * 
 * @member {date} [creationTime] The creation time of the task.
 * 
 * @member {string} [state] The current state of the task. Possible values
 * include: 'active', 'preparing', 'running', 'completed'
 * 
 * @member {date} [stateTransitionTime] The time at which the task entered its
 * current state.
 * 
 * @member {string} [previousState] The previous state of the task. This
 * property is not set if the task is in its initial Active state. Possible
 * values include: 'active', 'preparing', 'running', 'completed'
 * 
 * @member {date} [previousStateTransitionTime] The time at which the task
 * entered its previous state. This property is not set if the task is in its
 * initial Active state.
 * 
 * @member {string} [commandLine] The command line of the task. For
 * multi-instance tasks, the command line is executed on the primary subtask
 * after all the subtasks have finished executing the coordianation command
 * line.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line. For
 * multi-instance tasks, the resource files will only be downloaded to the
 * compute node on which the primary subtask is executed.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the task.
 * 
 * @member {object} [affinityInfo] A locality hint that can be used by the
 * Batch service to select a compute node on which to start the new task.
 * 
 * @member {string} [affinityInfo.affinityId] An opaque string representing
 * the location of a compute node or a task that has run previously. You can
 * pass the AffinityId of a compute node or task to indicate that this task
 * needs to be placed close to the node or task.
 * 
 * @member {object} [constraints] The execution constraints that apply to this
 * task.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration} [constraints.retentionTime] The minimum time to
 * retain the working directory for the task on the compute node where it
 * ran, from the time it completes execution. After this time, the Batch
 * service may delete the working directory and all its contents. The default
 * is infinite.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times the task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {boolean} [runElevated] Whether to run the task in elevated mode.
 * 
 * @member {object} [executionInfo] Information about the execution of the
 * task.
 * 
 * @member {date} [executionInfo.startTime] The time at which the task started
 * running. If the task has been restarted or retried, this is the most
 * recent time at which the task started running.
 * 
 * @member {date} [executionInfo.endTime] The time at which the task
 * completed. This property is set only if the task is in the Completed state.
 * 
 * @member {number} [executionInfo.exitCode] The exit code of the task. This
 * property is set only if the task is in completed state.
 * 
 * @member {object} [executionInfo.schedulingError] Details of any error
 * encountered scheduling the task.
 * 
 * @member {string} [executionInfo.schedulingError.category] The category of
 * the task scheduling error. Possible values include: 'usererror',
 * 'servererror', 'unmapped'
 * 
 * @member {string} [executionInfo.schedulingError.code] An identifier for the
 * task scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [executionInfo.schedulingError.message] A message
 * describing the task scheduling error, intended to be suitable for display
 * in a user interface.
 * 
 * @member {array} [executionInfo.schedulingError.details] The list of
 * additional error details related to the scheduling error.
 * 
 * @member {number} [executionInfo.retryCount] The number of times the task
 * has been retried by the Batch service.
 * 
 * @member {date} [executionInfo.lastRetryTime] The most recent time at which
 * a retry of the task started running.
 * 
 * @member {number} [executionInfo.requeueCount] The number of times the task
 * has been requeued by the Batch service as the result of a user request.
 * 
 * @member {date} [executionInfo.lastRequeueTime] The most recent time at
 * which the task has been requeued by the Batch service as the result of a
 * user request.
 * 
 * @member {object} [nodeInfo] Information about the compute node on which the
 * task ran.
 * 
 * @member {string} [nodeInfo.affinityId] An identifier for the compute node
 * on which the task ran, which can be passed when adding a task to request
 * that the task be scheduled close to this compute node.
 * 
 * @member {string} [nodeInfo.nodeUrl] The URL of the node on which the task
 * ran.
 * 
 * @member {string} [nodeInfo.poolId] The id of the pool on which the task ran.
 * 
 * @member {string} [nodeInfo.nodeId] The id of the node on which the task ran.
 * 
 * @member {string} [nodeInfo.taskRootDirectory] The root directory of the
 * task on the compute node.
 * 
 * @member {string} [nodeInfo.taskRootDirectoryUrl] The URL to the root
 * directory of the task on the compute node.
 * 
 * @member {object} [multiInstanceSettings] Information about how to run the
 * multi-instance task.
 * 
 * @member {number} [multiInstanceSettings.numberOfInstances] The number of
 * compute nodes required by the multi-instance task.
 * 
 * @member {string} [multiInstanceSettings.coordinationCommandLine] The
 * command to run on the compute node instances for coordinating among the
 * subtasks.
 * 
 * @member {array} [multiInstanceSettings.commonResourceFiles] A list of files
 * that the Batch service will download before running the coordination
 * command line. The difference between common resource files and task
 * resource files is that common resource files are downloaded for all
 * subtasks including the primary, whereas task resource files are downloaded
 * only for the primary.
 * 
 * @member {object} [stats] Resource usage statistics for the task.
 * 
 * @member {string} [stats.url] The URL of the statistics.
 * 
 * @member {date} [stats.startTime] The start time of the time range covered
 * by the statistics.
 * 
 * @member {date} [stats.lastUpdateTime] The time at which the statistics were
 * last updated. All statistics are limited to the range between startTime
 * and lastUpdateTime.
 * 
 * @member {moment.duration} [stats.userCPUTime] The total user mode CPU time
 * (summed across all cores and all compute nodes) consumed by the task.
 * 
 * @member {moment.duration} [stats.kernelCPUTime] The total kernel mode CPU
 * time (summed across all cores and all compute nodes) consumed by the task.
 * 
 * @member {moment.duration} [stats.wallClockTime] The total wall clock time
 * of the task.
 * 
 * @member {number} [stats.readIOps] The total number of disk read operations
 * made by the task.
 * 
 * @member {number} [stats.writeIOps] The total number of disk write
 * operations made by the task.
 * 
 * @member {number} [stats.readIOGiB] The total gibibytes read from disk by
 * the task.
 * 
 * @member {number} [stats.writeIOGiB] The total gibibytes written to disk by
 * the task.
 * 
 * @member {moment.duration} [stats.waitTime] The total wait time of the task.
 * The wait time for a task is defined as the elapsed time between the
 * creation of the task and the start of task execution. (If the task is
 * retried due to failures, the wait time is the time to the most recent task
 * execution.)
 * 
 * @member {object} [dependsOn] Any dependencies this task has.
 * 
 * @member {array} [dependsOn.taskIds] The list of task ids that must complete
 * before this task can be scheduled.
 * 
 * @member {array} [dependsOn.taskIdRanges] The list of task ranges that must
 * complete before this task can be scheduled.
 * 
 */
export interface CloudTask {
    id?: string;
    displayName?: string;
    url?: string;
    eTag?: string;
    lastModified?: Date;
    creationTime?: Date;
    state?: string;
    stateTransitionTime?: Date;
    previousState?: string;
    previousStateTransitionTime?: Date;
    commandLine?: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    affinityInfo?: AffinityInformation;
    constraints?: TaskConstraints;
    runElevated?: boolean;
    executionInfo?: TaskExecutionInformation;
    nodeInfo?: ComputeNodeInformation;
    multiInstanceSettings?: MultiInstanceSettings;
    stats?: TaskStatistics;
    dependsOn?: TaskDependencies;
}

/**
 * @class
 * Initializes a new instance of the TaskAddParameter class.
 * @constructor
 * An Azure Batch task to add.
 * @member {string} id A string that uniquely identifies the task within the
 * job. The id can contain any combination of alphanumeric characters
 * including hyphens and underscores, and cannot contain more than 64
 * characters.
 * 
 * @member {string} [displayName] A display name for the task.
 * 
 * @member {string} commandLine The command line of the task. For
 * multi-instance tasks, the command line is executed on the primary subtask
 * after all the subtasks have finished executing the coordianation command
 * line.
 * 
 * @member {array} [resourceFiles] A list of files that the Batch service will
 * download to the compute node before running the command line. For
 * multi-instance tasks, the resource files will only be downloaded to the
 * compute node on which the primary subtask is executed.
 * 
 * @member {array} [environmentSettings] A list of environment variable
 * settings for the task.
 * 
 * @member {object} [affinityInfo] A locality hint that can be used by the
 * Batch service to select a compute node on which to start the new task.
 * 
 * @member {string} [affinityInfo.affinityId] An opaque string representing
 * the location of a compute node or a task that has run previously. You can
 * pass the AffinityId of a compute node or task to indicate that this task
 * needs to be placed close to the node or task.
 * 
 * @member {object} [constraints] The execution constraints that apply to this
 * task.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration} [constraints.retentionTime] The minimum time to
 * retain the working directory for the task on the compute node where it
 * ran, from the time it completes execution. After this time, the Batch
 * service may delete the working directory and all its contents. The default
 * is infinite.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times the task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {boolean} [runElevated] Whether to run the task in elevated mode.
 * 
 * @member {object} [multiInstanceSettings] Information about how to run the
 * multi-instance task.
 * 
 * @member {number} [multiInstanceSettings.numberOfInstances] The number of
 * compute nodes required by the multi-instance task.
 * 
 * @member {string} [multiInstanceSettings.coordinationCommandLine] The
 * command to run on the compute node instances for coordinating among the
 * subtasks.
 * 
 * @member {array} [multiInstanceSettings.commonResourceFiles] A list of files
 * that the Batch service will download before running the coordination
 * command line. The difference between common resource files and task
 * resource files is that common resource files are downloaded for all
 * subtasks including the primary, whereas task resource files are downloaded
 * only for the primary.
 * 
 * @member {object} [dependsOn] Any other tasks that this task depends on.
 * 
 * @member {array} [dependsOn.taskIds] The list of task ids that must complete
 * before this task can be scheduled.
 * 
 * @member {array} [dependsOn.taskIdRanges] The list of task ranges that must
 * complete before this task can be scheduled.
 * 
 */
export interface TaskAddParameter {
    id: string;
    displayName?: string;
    commandLine: string;
    resourceFiles?: ResourceFile[];
    environmentSettings?: EnvironmentSetting[];
    affinityInfo?: AffinityInformation;
    constraints?: TaskConstraints;
    runElevated?: boolean;
    multiInstanceSettings?: MultiInstanceSettings;
    dependsOn?: TaskDependencies;
}

/**
 * @class
 * Initializes a new instance of the TaskAddCollectionParameter class.
 * @constructor
 * A collection of Azure Batch tasks to add.
 * @member {array} value The collection of tasks to add.
 * 
 */
export interface TaskAddCollectionParameter {
    value: TaskAddParameter[];
}

/**
 * @class
 * Initializes a new instance of the TaskAddResult class.
 * @constructor
 * Result for a single task added as part of an add task collection operation.
 * @member {string} status The status of the add task request. Possible values
 * include: 'success', 'clienterror', 'servererror', 'unmapped'
 * 
 * @member {string} taskId The id of the task for which this is the result.
 * 
 * @member {string} [eTag] The ETag of the task, if the task was successfully
 * added.
 * 
 * @member {date} [lastModified] The last modified time of the task.
 * 
 * @member {string} [location] The URL of the task, if the task was
 * successfully added.
 * 
 * @member {object} [error] The error encountered while attempting to add the
 * task.
 * 
 * @member {string} [error.code] An identifier for the error. Codes are
 * invariant and are intended to be consumed programmatically.
 * 
 * @member {object} [error.message] A message describing the error, intended
 * to be suitable for display in a user interface.
 * 
 * @member {string} [error.message.lang] The language code of the error message
 * 
 * @member {string} [error.message.value] The text of the message.
 * 
 * @member {array} [error.values] A collection of key-value pairs containing
 * additional details about the error.
 * 
 */
export interface TaskAddResult {
    status: string;
    taskId: string;
    eTag?: string;
    lastModified?: Date;
    location?: string;
    error?: BatchError;
}

/**
 * @class
 * Initializes a new instance of the BatchError class.
 * @constructor
 * An error response received from the Azure Batch service.
 * @member {string} [code] An identifier for the error. Codes are invariant
 * and are intended to be consumed programmatically.
 * 
 * @member {object} [message] A message describing the error, intended to be
 * suitable for display in a user interface.
 * 
 * @member {string} [message.lang] The language code of the error message
 * 
 * @member {string} [message.value] The text of the message.
 * 
 * @member {array} [values] A collection of key-value pairs containing
 * additional details about the error.
 * 
 */
export interface BatchError {
    code?: string;
    message?: ErrorMessage;
    values?: BatchErrorDetail[];
}

/**
 * @class
 * Initializes a new instance of the ErrorMessage class.
 * @constructor
 * An error message received in an Azure Batch error response.
 * @member {string} [lang] The language code of the error message
 * 
 * @member {string} [value] The text of the message.
 * 
 */
export interface ErrorMessage {
    lang?: string;
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the BatchErrorDetail class.
 * @constructor
 * An item of additional information included in an Azure Batch error response.
 * @member {string} [key] An identifier specifying the meaning of the Value
 * property.
 * 
 * @member {string} [value] The additional information included with the error
 * response.
 * 
 */
export interface BatchErrorDetail {
    key?: string;
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the TaskAddCollectionResult class.
 * @constructor
 * Response to a TaskOperations.AddCollection request.
 * @member {array} [value] The results of the add task collection operation.
 * 
 */
export interface TaskAddCollectionResult {
    value?: TaskAddResult[];
}

/**
 * @class
 * Initializes a new instance of the SubtaskInformation class.
 * @constructor
 * Information about an Azure Batch subtask.
 * @member {number} [id] The id of the subtask.
 * 
 * @member {object} [nodeInfo] Information about the compute node on which the
 * subtask ran.
 * 
 * @member {string} [nodeInfo.affinityId] An identifier for the compute node
 * on which the task ran, which can be passed when adding a task to request
 * that the task be scheduled close to this compute node.
 * 
 * @member {string} [nodeInfo.nodeUrl] The URL of the node on which the task
 * ran.
 * 
 * @member {string} [nodeInfo.poolId] The id of the pool on which the task ran.
 * 
 * @member {string} [nodeInfo.nodeId] The id of the node on which the task ran.
 * 
 * @member {string} [nodeInfo.taskRootDirectory] The root directory of the
 * task on the compute node.
 * 
 * @member {string} [nodeInfo.taskRootDirectoryUrl] The URL to the root
 * directory of the task on the compute node.
 * 
 * @member {date} [startTime] The time at which the subtask started running.
 * If the subtask has been restarted or retried, this is the most recent time
 * at which the subtask started running.
 * 
 * @member {date} [endTime] The time at which the subtask completed. This
 * property is set only if the subtask is in the Completed state.
 * 
 * @member {number} [exitCode] The exit code of the subtask. This property is
 * set only if the subtask is in the Completed state.
 * 
 * @member {object} [schedulingError] Details of any error encountered
 * scheduling the subtask.
 * 
 * @member {string} [schedulingError.category] The category of the task
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the task
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the task
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] The list of additional error
 * details related to the scheduling error.
 * 
 * @member {string} [state] The current state of the subtask. Possible values
 * include: 'active', 'preparing', 'running', 'completed'
 * 
 * @member {date} [stateTransitionTime] The time at which the subtask entered
 * its current state.
 * 
 * @member {string} [previousState] The previous state of the subtask. This
 * property is not set if the subtask is in its initial Active state.
 * Possible values include: 'active', 'preparing', 'running', 'completed'
 * 
 * @member {date} [previousStateTransitionTime] The time at which the subtask
 * entered its previous state. This property is not set if the subtask is in
 * its initial Active state.
 * 
 */
export interface SubtaskInformation {
    id?: number;
    nodeInfo?: ComputeNodeInformation;
    startTime?: Date;
    endTime?: Date;
    exitCode?: number;
    schedulingError?: TaskSchedulingError;
    state?: string;
    stateTransitionTime?: Date;
    previousState?: string;
    previousStateTransitionTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the CloudTaskListSubtasksResult class.
 * @constructor
 * Response to a CloudTaskOperations.ListSubtasks request.
 * @member {array} [value] The list of information of subtasks.
 * 
 */
export interface CloudTaskListSubtasksResult {
    value?: SubtaskInformation[];
}

/**
 * @class
 * Initializes a new instance of the TaskInformation class.
 * @constructor
 * Information about a task running on a compute node.
 * @member {string} [taskUrl] The URL of the task.
 * 
 * @member {string} [jobId] The id of the job to which the task belongs.
 * 
 * @member {string} [taskId] The id of the task.
 * 
 * @member {number} [subtaskId] The id of the subtask if the task is a
 * multi-instance task.
 * 
 * @member {string} taskState The current state of the task. Possible values
 * include: 'active', 'preparing', 'running', 'completed'
 * 
 * @member {object} [executionInfo] Information about the execution of the
 * task.
 * 
 * @member {date} [executionInfo.startTime] The time at which the task started
 * running. If the task has been restarted or retried, this is the most
 * recent time at which the task started running.
 * 
 * @member {date} [executionInfo.endTime] The time at which the task
 * completed. This property is set only if the task is in the Completed state.
 * 
 * @member {number} [executionInfo.exitCode] The exit code of the task. This
 * property is set only if the task is in completed state.
 * 
 * @member {object} [executionInfo.schedulingError] Details of any error
 * encountered scheduling the task.
 * 
 * @member {string} [executionInfo.schedulingError.category] The category of
 * the task scheduling error. Possible values include: 'usererror',
 * 'servererror', 'unmapped'
 * 
 * @member {string} [executionInfo.schedulingError.code] An identifier for the
 * task scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [executionInfo.schedulingError.message] A message
 * describing the task scheduling error, intended to be suitable for display
 * in a user interface.
 * 
 * @member {array} [executionInfo.schedulingError.details] The list of
 * additional error details related to the scheduling error.
 * 
 * @member {number} [executionInfo.retryCount] The number of times the task
 * has been retried by the Batch service.
 * 
 * @member {date} [executionInfo.lastRetryTime] The most recent time at which
 * a retry of the task started running.
 * 
 * @member {number} [executionInfo.requeueCount] The number of times the task
 * has been requeued by the Batch service as the result of a user request.
 * 
 * @member {date} [executionInfo.lastRequeueTime] The most recent time at
 * which the task has been requeued by the Batch service as the result of a
 * user request.
 * 
 */
export interface TaskInformation {
    taskUrl?: string;
    jobId?: string;
    taskId?: string;
    subtaskId?: number;
    taskState: string;
    executionInfo?: TaskExecutionInformation;
}

/**
 * @class
 * Initializes a new instance of the StartTaskInformation class.
 * @constructor
 * Information about a start task running on a compute node.
 * @member {string} state The state of the start task on the compute node.
 * Possible values include: 'running', 'completed'
 * 
 * @member {date} startTime The time at which the start task started running.
 * 
 * @member {date} [endTime] The time at which the start task stopped running.
 * 
 * @member {number} [exitCode] The exit code of the start task.
 * 
 * @member {object} [schedulingError] Any error encountered scheduling the
 * start task.
 * 
 * @member {string} [schedulingError.category] The category of the task
 * scheduling error. Possible values include: 'usererror', 'servererror',
 * 'unmapped'
 * 
 * @member {string} [schedulingError.code] An identifier for the task
 * scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [schedulingError.message] A message describing the task
 * scheduling error, intended to be suitable for display in a user interface.
 * 
 * @member {array} [schedulingError.details] The list of additional error
 * details related to the scheduling error.
 * 
 * @member {number} retryCount The number of times the task has been retried
 * by the Batch service.
 * 
 * @member {date} [lastRetryTime] The most recent time at which a retry of the
 * task started running.
 * 
 */
export interface StartTaskInformation {
    state: string;
    startTime: Date;
    endTime?: Date;
    exitCode?: number;
    schedulingError?: TaskSchedulingError;
    retryCount: number;
    lastRetryTime?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeError class.
 * @constructor
 * An error encountered by a compute node.
 * @member {string} [code] An identifier for the compute node error. Codes are
 * invariant and are intended to be consumed programmatically.
 * 
 * @member {string} [message] A message describing the compute node error,
 * intended to be suitable for display in a user interface.
 * 
 * @member {array} [errorDetails] The list of additional error details related
 * to the compute node error.
 * 
 */
export interface ComputeNodeError {
    code?: string;
    message?: string;
    errorDetails?: NameValuePair[];
}

/**
 * @class
 * Initializes a new instance of the ComputeNode class.
 * @constructor
 * A compute node in the Batch service.
 * @member {string} [id] The id of the compute node.
 * 
 * @member {string} [url] The URL of the compute node.
 * 
 * @member {string} [state] The current state of the compute node. Possible
 * values include: 'idle', 'rebooting', 'reimaging', 'running', 'unusable',
 * 'creating', 'starting', 'waitingforstarttask', 'starttaskfailed',
 * 'unknown', 'leavingpool', 'offline'
 * 
 * @member {string} [schedulingState] Whether the compute node should be
 * available for task scheduling. Possible values include: 'enabled',
 * 'disabled'
 * 
 * @member {date} [stateTransitionTime] The time at which the compute node
 * entered its current state.
 * 
 * @member {date} [lastBootTime] The time at which the compute node was
 * started.
 * 
 * @member {date} [allocationTime] The time at which this compute node was
 * allocated to the pool.
 * 
 * @member {string} [ipAddress] The IP address that other compute nodes can
 * use to communicate with this compute node.
 * 
 * @member {string} [affinityId] An identifier which can be passed in the Add
 * Task API to request that the task be scheduled close to this compute node.
 * 
 * @member {string} [vmSize] The size of the virtual machine hosting the
 * compute node.
 * 
 * @member {number} [totalTasksRun] The total number of job tasks completed on
 * the compute node. This includes Job Preparation, Job Release and Job
 * Manager tasks, but not the pool start task.
 * 
 * @member {number} [runningTasksCount] The total number of currently running
 * job tasks on the compute node. This includes Job Preparation, Job Release,
 * and Job Manager tasks, but not the pool start task.
 * 
 * @member {number} [totalTasksSucceeded] The total number of job tasks which
 * completed successfully (with exitCode 0) on the compute node. This
 * includes Job Preparation, Job Release, and Job Manager tasks, but not the
 * pool start task.
 * 
 * @member {array} [recentTasks] The list of tasks that are currently running
 * on the compute node.
 * 
 * @member {object} [startTask] The task specified to run on the compute node
 * as it joins the pool.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {object} [startTaskInfo] Runtime information about the execution of
 * the start task on the compute node.
 * 
 * @member {string} [startTaskInfo.state] The state of the start task on the
 * compute node. Possible values include: 'running', 'completed'
 * 
 * @member {date} [startTaskInfo.startTime] The time at which the start task
 * started running.
 * 
 * @member {date} [startTaskInfo.endTime] The time at which the start task
 * stopped running.
 * 
 * @member {number} [startTaskInfo.exitCode] The exit code of the start task.
 * 
 * @member {object} [startTaskInfo.schedulingError] Any error encountered
 * scheduling the start task.
 * 
 * @member {string} [startTaskInfo.schedulingError.category] The category of
 * the task scheduling error. Possible values include: 'usererror',
 * 'servererror', 'unmapped'
 * 
 * @member {string} [startTaskInfo.schedulingError.code] An identifier for the
 * task scheduling error. Codes are invariant and are intended to be consumed
 * programmatically.
 * 
 * @member {string} [startTaskInfo.schedulingError.message] A message
 * describing the task scheduling error, intended to be suitable for display
 * in a user interface.
 * 
 * @member {array} [startTaskInfo.schedulingError.details] The list of
 * additional error details related to the scheduling error.
 * 
 * @member {number} [startTaskInfo.retryCount] The number of times the task
 * has been retried by the Batch service.
 * 
 * @member {date} [startTaskInfo.lastRetryTime] The most recent time at which
 * a retry of the task started running.
 * 
 * @member {array} [certificateReferences] The list of certificates installed
 * on the compute node.
 * 
 * @member {array} [errors] The list of errors that are currently being
 * encountered by the compute node.
 * 
 */
export interface ComputeNode {
    id?: string;
    url?: string;
    state?: string;
    schedulingState?: string;
    stateTransitionTime?: Date;
    lastBootTime?: Date;
    allocationTime?: Date;
    ipAddress?: string;
    affinityId?: string;
    vmSize?: string;
    totalTasksRun?: number;
    runningTasksCount?: number;
    totalTasksSucceeded?: number;
    recentTasks?: TaskInformation[];
    startTask?: StartTask;
    startTaskInfo?: StartTaskInformation;
    certificateReferences?: CertificateReference[];
    errors?: ComputeNodeError[];
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeUser class.
 * @constructor
 * An user account on a compute node.
 * @member {string} name The user name of the account.
 * 
 * @member {boolean} [isAdmin] Whether the account should be an administrator
 * on the compute node.
 * 
 * @member {date} [expiryTime] The time at which the account should expire. If
 * omitted, the default is 1 day from the current time.
 * 
 * @member {string} [password] The password of the account.
 * 
 * @member {string} [sshPublicKey] The SSH public key that can be used for
 * remote login to the compute node.
 * 
 */
export interface ComputeNodeUser {
    name: string;
    isAdmin?: boolean;
    expiryTime?: Date;
    password?: string;
    sshPublicKey?: string;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeGetRemoteLoginSettingsResult class.
 * @constructor
 * Response to a ComputeNodeOperation.GetRemoteLoginSettings request.
 * @member {string} remoteLoginIPAddress The IP address used for remote login
 * to the compute node.
 * 
 * @member {number} remoteLoginPort The port used for remote login to the
 * compute node.
 * 
 */
export interface ComputeNodeGetRemoteLoginSettingsResult {
    remoteLoginIPAddress: string;
    remoteLoginPort: number;
}

/**
 * @class
 * Initializes a new instance of the JobSchedulePatchParameter class.
 * @constructor
 * Parameters for a CloudJobScheduleOperations.Patch request.
 * @member {object} [schedule] The schedule according to which jobs will be
 * created. If you do not specify this element, the existing schedule is not
 * modified.
 * 
 * @member {date} [schedule.doNotRunUntil] The earliest time at which any job
 * may be created under this job schedule. If you do not specify a
 * doNotRunUntil time, the schedule becomes ready to create jobs immediately.
 * 
 * @member {date} [schedule.doNotRunAfter] A time after which no job will be
 * created under this job schedule. The schedule will move to the completed
 * state as soon as this deadline is past and there is no active job under
 * this job schedule.
 * 
 * @member {moment.duration} [schedule.startWindow] The time interval,
 * starting from the time at which the schedule indicates a job should be
 * created, within which a job must be created. If a job is not created
 * within the startWindow interval, then the 'opportunity' is lost; no job
 * will be created until the next recurrence of the schedule.
 * 
 * @member {moment.duration} [schedule.recurrenceInterval] The time interval
 * between the start times of two successive jobs under the job schedule. A
 * job schedule can have at most one active job under it at any given time.
 * 
 * @member {object} [jobSpecification] The details of the jobs to be created
 * on this schedule.
 * 
 * @member {number} [jobSpecification.priority] The priority of jobs created
 * under this schedule. Priority values can range from -1000 to 1000, with
 * -1000 being the lowest priority and 1000 being the highest priority. The
 * default value is 0.
 * 
 * @member {string} [jobSpecification.displayName] The display name for jobs
 * created under this schedule. It need not be unique and can contain any
 * Unicode characters up to a maximum length of 1024.
 * 
 * @member {boolean} [jobSpecification.usesTaskDependencies] The flag that
 * determines if this job will use tasks with dependencies.
 * 
 * @member {object} [jobSpecification.constraints] The execution constraints
 * for jobs created under this schedule.
 * 
 * @member {moment.duration} [jobSpecification.constraints.maxWallClockTime]
 * The maximum elapsed time that the job may run, measured from the time the
 * job starts. If the job does not complete within the time limit, the Batch
 * service terminates it and any tasks that are still running.
 * 
 * @member {number} [jobSpecification.constraints.maxTaskRetryCount] The
 * maximum number of times each task may be retried. The Batch service
 * retries a task if its exit code is nonzero.
 * 
 * @member {object} [jobSpecification.jobManagerTask] The details of a Job
 * Manager task to be launched when a job is started under this schedule.
 * 
 * @member {string} [jobSpecification.jobManagerTask.id] A string that
 * uniquely identifies the Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobSpecification.jobManagerTask.displayName] The display
 * name of the Job Manager task.
 * 
 * @member {string} [jobSpecification.jobManagerTask.commandLine] The command
 * line of the Job Manager task.
 * 
 * @member {array} [jobSpecification.jobManagerTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobManagerTask.environmentSettings] A
 * list of environment variable settings for the Job Manager task.
 * 
 * @member {object} [jobSpecification.jobManagerTask.constraints] Constraints
 * that apply to the Job Manager task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.retentionTime] The minimum
 * time to retain the working directory for the task on the compute node
 * where it ran, from the time it completes execution. After this time, the
 * Batch service may delete the working directory and all its contents. The
 * default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobManagerTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.killJobOnCompletion]
 * Whether completion of the Job Manager task signifies completion of the
 * entire job.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runElevated] Whether to
 * run the Job Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runExclusive] Whether
 * the Job Manager task requires exclusive use of the compute node where it
 * runs. If true, no other tasks will run on the same compute node for as
 * long as the Job Manager is running. If false, other tasks can run
 * simultaneously with the Job Manager on a compute node. (The Job Manager
 * task counts normally against the node’s concurrent task limit, so this is
 * only relevant if the node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobSpecification.jobPreparationTask] The Job Preparation
 * task for jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.id] A string that
 * uniquely identifies the job preparation task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.commandLine] The
 * command line of the Job Preparation task.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.resourceFiles] A list
 * of files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.environmentSettings] A
 * list of environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobSpecification.jobPreparationTask.constraints]
 * Constraints that apply to the Job Preparation task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.waitForSuccess]
 * Whether the Batch service should wait for the Job Preparation task to
 * complete successfully before scheduling any other tasks of the job on the
 * compute node.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.runElevated] Whether
 * to run the Job Preparation task in elevated mode. The default value is
 * false.
 * 
 * @member {boolean}
 * [jobSpecification.jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobSpecification.jobReleaseTask] The Job Release task for
 * jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.id] A string that
 * uniquely identifies the Job Release task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.commandLine] The command
 * line of the Job Release task.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.environmentSettings] A
 * list of environment variable settings for the Job Release task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobReleaseTask.maxWallClockTime] The maximum elapsed
 * time that the Job Release task may run on a given compute node, measured
 * from the time the task starts. If the task does not complete within the
 * time limit, the Batch service terminates it. The default value is 15
 * minutes.
 * 
 * @member {moment.duration} [jobSpecification.jobReleaseTask.retentionTime]
 * The minimum time to retain the working directory for the Job Release task
 * on the compute node. After this time, the Batch service may delete the
 * working directory and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobSpecification.jobReleaseTask.runElevated] Whether to
 * run the Job Release task in elevated mode. The default value is false.
 * 
 * @member {array} [jobSpecification.commonEnvironmentSettings] A list of
 * common environment variable settings. These environment variables are set
 * for all tasks in jobs created under this schedule (including the Job
 * Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} [jobSpecification.poolInfo] The pool on which the Batch
 * service runs the tasks of jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.poolInfo.poolId] The id of an existing
 * pool. All the tasks of the job will run on the specified pool. You must
 * specify either PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification]
 * Characteristics for a temporary 'auto pool'. The Batch service will create
 * this auto pool and run all of the tasks of the job on it, and will delete
 * the pool once the job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.autoPoolIdPrefix] A
 * prefix to be added to the unique identifier when a pool is automatically
 * created. The prefix can be up to 20 characters long.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification.pool] The
 * pool specification for the auto pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration]
 * The cloud service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration]
 * The virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.resizeTimeout] The
 * timeout for allocation of compute nodes to the pool.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleFormula]
 * The formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval]
 * A time interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication]
 * Whether the pool permits direct communication between nodes.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.commandLine]
 * The command line of the start task.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.resourceFiles]
 * A list of files that the Batch service will download to the compute node
 * before running the command line.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.environmentSettings]
 * A list of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.runElevated]
 * Whether to run the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount]
 * The maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess]
 * Whether the Batch service should wait for the start task to complete
 * successfully (that is, to exit with exit code 0) before scheduling any
 * tasks on the compute node.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.applicationPackageReferences]
 * The list of application packages to be installed on each compute node in
 * the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [jobSpecification.metadata] A list of name-value pairs
 * associated with each job created under this schedule as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job schedule as metadata.
 * 
 */
export interface JobSchedulePatchParameter {
    schedule?: Schedule;
    jobSpecification?: JobSpecification;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the JobScheduleUpdateParameter class.
 * @constructor
 * Parameters for a CloudJobScheduleOperations.Update request.
 * @member {object} schedule The schedule according to which jobs will be
 * created. If you do not specify this element, it is equivalent to passing
 * the default schedule: that is, a single job scheduled to run immediately.
 * 
 * @member {date} [schedule.doNotRunUntil] The earliest time at which any job
 * may be created under this job schedule. If you do not specify a
 * doNotRunUntil time, the schedule becomes ready to create jobs immediately.
 * 
 * @member {date} [schedule.doNotRunAfter] A time after which no job will be
 * created under this job schedule. The schedule will move to the completed
 * state as soon as this deadline is past and there is no active job under
 * this job schedule.
 * 
 * @member {moment.duration} [schedule.startWindow] The time interval,
 * starting from the time at which the schedule indicates a job should be
 * created, within which a job must be created. If a job is not created
 * within the startWindow interval, then the 'opportunity' is lost; no job
 * will be created until the next recurrence of the schedule.
 * 
 * @member {moment.duration} [schedule.recurrenceInterval] The time interval
 * between the start times of two successive jobs under the job schedule. A
 * job schedule can have at most one active job under it at any given time.
 * 
 * @member {object} jobSpecification Details of the jobs to be created on this
 * schedule.
 * 
 * @member {number} [jobSpecification.priority] The priority of jobs created
 * under this schedule. Priority values can range from -1000 to 1000, with
 * -1000 being the lowest priority and 1000 being the highest priority. The
 * default value is 0.
 * 
 * @member {string} [jobSpecification.displayName] The display name for jobs
 * created under this schedule. It need not be unique and can contain any
 * Unicode characters up to a maximum length of 1024.
 * 
 * @member {boolean} [jobSpecification.usesTaskDependencies] The flag that
 * determines if this job will use tasks with dependencies.
 * 
 * @member {object} [jobSpecification.constraints] The execution constraints
 * for jobs created under this schedule.
 * 
 * @member {moment.duration} [jobSpecification.constraints.maxWallClockTime]
 * The maximum elapsed time that the job may run, measured from the time the
 * job starts. If the job does not complete within the time limit, the Batch
 * service terminates it and any tasks that are still running.
 * 
 * @member {number} [jobSpecification.constraints.maxTaskRetryCount] The
 * maximum number of times each task may be retried. The Batch service
 * retries a task if its exit code is nonzero.
 * 
 * @member {object} [jobSpecification.jobManagerTask] The details of a Job
 * Manager task to be launched when a job is started under this schedule.
 * 
 * @member {string} [jobSpecification.jobManagerTask.id] A string that
 * uniquely identifies the Job Manager task. A GUID is recommended.
 * 
 * @member {string} [jobSpecification.jobManagerTask.displayName] The display
 * name of the Job Manager task.
 * 
 * @member {string} [jobSpecification.jobManagerTask.commandLine] The command
 * line of the Job Manager task.
 * 
 * @member {array} [jobSpecification.jobManagerTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobManagerTask.environmentSettings] A
 * list of environment variable settings for the Job Manager task.
 * 
 * @member {object} [jobSpecification.jobManagerTask.constraints] Constraints
 * that apply to the Job Manager task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobManagerTask.constraints.retentionTime] The minimum
 * time to retain the working directory for the task on the compute node
 * where it ran, from the time it completes execution. After this time, the
 * Batch service may delete the working directory and all its contents. The
 * default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobManagerTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.killJobOnCompletion]
 * Whether completion of the Job Manager task signifies completion of the
 * entire job.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runElevated] Whether to
 * run the Job Manager task in elevated mode. The default value is false.
 * 
 * @member {boolean} [jobSpecification.jobManagerTask.runExclusive] Whether
 * the Job Manager task requires exclusive use of the compute node where it
 * runs. If true, no other tasks will run on the same compute node for as
 * long as the Job Manager is running. If false, other tasks can run
 * simultaneously with the Job Manager on a compute node. (The Job Manager
 * task counts normally against the node’s concurrent task limit, so this is
 * only relevant if the node allows multiple concurrent tasks.)
 * 
 * @member {object} [jobSpecification.jobPreparationTask] The Job Preparation
 * task for jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.id] A string that
 * uniquely identifies the job preparation task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobPreparationTask.commandLine] The
 * command line of the Job Preparation task.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.resourceFiles] A list
 * of files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobPreparationTask.environmentSettings] A
 * list of environment variable settings for the Job Preparation task.
 * 
 * @member {object} [jobSpecification.jobPreparationTask.constraints]
 * Constraints that apply to the Job Preparation task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.maxWallClockTime] The
 * maximum elapsed time that the task may run, measured from the time the
 * task starts. If the task does not complete within the time limit, the
 * Batch service terminates it.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobPreparationTask.constraints.retentionTime] The
 * minimum time to retain the working directory for the task on the compute
 * node where it ran, from the time it completes execution. After this time,
 * the Batch service may delete the working directory and all its contents.
 * The default is infinite.
 * 
 * @member {number}
 * [jobSpecification.jobPreparationTask.constraints.maxTaskRetryCount] The
 * maximum number of times the task may be retried. The Batch service retries
 * a task if its exit code is nonzero.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.waitForSuccess]
 * Whether the Batch service should wait for the Job Preparation task to
 * complete successfully before scheduling any other tasks of the job on the
 * compute node.
 * 
 * @member {boolean} [jobSpecification.jobPreparationTask.runElevated] Whether
 * to run the Job Preparation task in elevated mode. The default value is
 * false.
 * 
 * @member {boolean}
 * [jobSpecification.jobPreparationTask.rerunOnNodeRebootAfterSuccess]
 * Whether the Batch service should rerun the Job Preparation task after a
 * compute node reboots. Note that the Job Preparation task should still be
 * written to be idempotent because it can be rerun if the compute node is
 * rebooted while Job Preparation task is still running. The default value is
 * true.
 * 
 * @member {object} [jobSpecification.jobReleaseTask] The Job Release task for
 * jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.id] A string that
 * uniquely identifies the Job Release task within the job. The id can
 * contain any combination of alphanumeric characters including hyphens and
 * underscores and cannot contain more than 64 characters.
 * 
 * @member {string} [jobSpecification.jobReleaseTask.commandLine] The command
 * line of the Job Release task.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array} [jobSpecification.jobReleaseTask.environmentSettings] A
 * list of environment variable settings for the Job Release task.
 * 
 * @member {moment.duration}
 * [jobSpecification.jobReleaseTask.maxWallClockTime] The maximum elapsed
 * time that the Job Release task may run on a given compute node, measured
 * from the time the task starts. If the task does not complete within the
 * time limit, the Batch service terminates it. The default value is 15
 * minutes.
 * 
 * @member {moment.duration} [jobSpecification.jobReleaseTask.retentionTime]
 * The minimum time to retain the working directory for the Job Release task
 * on the compute node. After this time, the Batch service may delete the
 * working directory and all its contents. The default is infinite.
 * 
 * @member {boolean} [jobSpecification.jobReleaseTask.runElevated] Whether to
 * run the Job Release task in elevated mode. The default value is false.
 * 
 * @member {array} [jobSpecification.commonEnvironmentSettings] A list of
 * common environment variable settings. These environment variables are set
 * for all tasks in jobs created under this schedule (including the Job
 * Manager, Job Preparation and Job Release tasks).
 * 
 * @member {object} [jobSpecification.poolInfo] The pool on which the Batch
 * service runs the tasks of jobs created under this schedule.
 * 
 * @member {string} [jobSpecification.poolInfo.poolId] The id of an existing
 * pool. All the tasks of the job will run on the specified pool. You must
 * specify either PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification]
 * Characteristics for a temporary 'auto pool'. The Batch service will create
 * this auto pool and run all of the tasks of the job on it, and will delete
 * the pool once the job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.autoPoolIdPrefix] A
 * prefix to be added to the unique identifier when a pool is automatically
 * created. The prefix can be up to 20 characters long.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [jobSpecification.poolInfo.autoPoolSpecification.pool] The
 * pool specification for the auto pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration]
 * The cloud service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration]
 * The virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.resizeTimeout] The
 * timeout for allocation of compute nodes to the pool.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleFormula]
 * The formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval]
 * A time interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication]
 * Whether the pool permits direct communication between nodes.
 * 
 * @member {object}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.commandLine]
 * The command line of the start task.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.resourceFiles]
 * A list of files that the Batch service will download to the compute node
 * before running the command line.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.environmentSettings]
 * A list of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.runElevated]
 * Whether to run the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount]
 * The maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess]
 * Whether the Batch service should wait for the start task to complete
 * successfully (that is, to exit with exit code 0) before scheduling any
 * tasks on the compute node.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.applicationPackageReferences]
 * The list of application packages to be installed on each compute node in
 * the pool.
 * 
 * @member {array}
 * [jobSpecification.poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [jobSpecification.metadata] A list of name-value pairs
 * associated with each job created under this schedule as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job schedule as metadata. If you do not specify this element, it takes the
 * default value of an empty list; in effect, any existing metadata is
 * deleted.
 * 
 */
export interface JobScheduleUpdateParameter {
    schedule: Schedule;
    jobSpecification: JobSpecification;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the JobDisableParameter class.
 * @constructor
 * Parameters for a CloudJobOperations.Disable request.
 * @member {string} disableTasks What to do with active tasks associated with
 * the job. Possible values include: 'requeue', 'terminate', 'wait'
 * 
 */
export interface JobDisableParameter {
    disableTasks: string;
}

/**
 * @class
 * Initializes a new instance of the JobTerminateParameter class.
 * @constructor
 * Parameters for a CloudJobOperations.Terminate request.
 * @member {string} [terminateReason] The text you want to appear as the job's
 * TerminateReason. The default is 'UserTerminate'.
 * 
 */
export interface JobTerminateParameter {
    terminateReason?: string;
}

/**
 * @class
 * Initializes a new instance of the JobPatchParameter class.
 * @constructor
 * Parameters for a CloudJobOperations.Patch request.
 * @member {number} [priority] The priority of the job. Priority values can
 * range from -1000 to 1000, with -1000 being the lowest priority and 1000
 * being the highest priority. If omitted, the priority of the job is left
 * unchanged.
 * 
 * @member {object} [constraints] The execution constraints for the job. If
 * omitted, the existing execution constraints are left unchanged.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the job may run, measured from the time the job starts.
 * If the job does not complete within the time limit, the Batch service
 * terminates it and any tasks that are still running.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times each task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {object} [poolInfo] The pool on which the Batch service runs the
 * job's tasks. If omitted, the job continues to run on its current pool.
 * 
 * @member {string} [poolInfo.poolId] The id of an existing pool. All the
 * tasks of the job will run on the specified pool. You must specify either
 * PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [poolInfo.autoPoolSpecification] Characteristics for a
 * temporary 'auto pool'. The Batch service will create this auto pool and
 * run all of the tasks of the job on it, and will delete the pool once the
 * job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.autoPoolIdPrefix] A prefix
 * to be added to the unique identifier when a pool is automatically created.
 * The prefix can be up to 20 characters long.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool] The pool
 * specification for the auto pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration] The cloud
 * service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration] The
 * virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.resizeTimeout] The timeout for
 * allocation of compute nodes to the pool.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.autoScaleFormula] The
 * formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication] Whether
 * the pool permits direct communication between nodes.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.startTask.commandLine] The command
 * line of the start task.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.environmentSettings] A list
 * of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.runElevated] Whether to run
 * the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount] The
 * maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess] Whether the
 * Batch service should wait for the start task to complete successfully
 * (that is, to exit with exit code 0) before scheduling any tasks on the
 * compute node.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.applicationPackageReferences] The
 * list of application packages to be installed on each compute node in the
 * pool.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job as metadata. If omitted, the existing job metadata is left unchanged.
 * 
 */
export interface JobPatchParameter {
    priority?: number;
    constraints?: JobConstraints;
    poolInfo?: PoolInformation;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the JobUpdateParameter class.
 * @constructor
 * Parameters for a CloudJobOperations.Update request.
 * @member {number} [priority] The priority of the job. Priority values can
 * range from -1000 to 1000, with -1000 being the lowest priority and 1000
 * being the highest priority. If omitted, the priority of the job is left
 * unchanged.
 * 
 * @member {object} [constraints] The execution constraints for the job. If
 * omitted, the existing execution constraints are left unchanged.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the job may run, measured from the time the job starts.
 * If the job does not complete within the time limit, the Batch service
 * terminates it and any tasks that are still running.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times each task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 * @member {object} poolInfo The pool on which the Batch service runs the
 * job's tasks. If omitted, the job continues to run on its current pool.
 * 
 * @member {string} [poolInfo.poolId] The id of an existing pool. All the
 * tasks of the job will run on the specified pool. You must specify either
 * PoolId or AutoPoolSpecification, but not both.
 * 
 * @member {object} [poolInfo.autoPoolSpecification] Characteristics for a
 * temporary 'auto pool'. The Batch service will create this auto pool and
 * run all of the tasks of the job on it, and will delete the pool once the
 * job has completed. You must specify either PoolId or
 * AutoPoolSpecification, but not both.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.autoPoolIdPrefix] A prefix
 * to be added to the unique identifier when a pool is automatically created.
 * The prefix can be up to 20 characters long.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.poolLifetimeOption] The
 * minimum lifetime of created auto pools, and how multiple jobs on a
 * schedule are assigned to pools. Possible values include: 'jobschedule',
 * 'job', 'unmapped'
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.keepAlive] Whether to
 * keep an auto pool alive after its lifetime expires.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool] The pool
 * specification for the auto pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.displayName] The
 * display name for the pool.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.vmSize] The size of
 * the virtual machines in the pool. All virtual machines in a pool are the
 * same size.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration] The cloud
 * service configuration for the pool. This property and
 * VirtualMachineConfiguration are mutually exclusive and one of the
 * properties must be specified.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.osFamily]
 * The Azure Guest OS family to be installed on the virtual machines in the
 * pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.targetOSVersion]
 * The Azure Guest OS version to be installed on the virtual machines in the
 * pool. The default value is * which specifies the latest operating system
 * version for the specified OS family.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.cloudServiceConfiguration.currentOSVersion]
 * The Azure Guest OS Version currently installed on the virtual machines in
 * the pool. This may differ from TargetOSVersion if the pool state is
 * Upgrading.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration] The
 * virtual machine configuration for the pool. This property and
 * CloudServiceConfiguration are mutually exclusive and one of the properties
 * must be specified.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference]
 * A reference to the Azure Virtual Machines Marketplace image to use.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.publisher]
 * The publisher of the Azure Virtual Machines Marketplace image. For
 * example, Canonical or MicrosoftWindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.offer]
 * The offer type of the Azure Virtual Machines Marketplace image. For
 * example, UbuntuServer or WindowsServer.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.sku]
 * The SKU of the Azure Virtual Machines Marketplace image. For example,
 * 14.04.0-LTS or 2012-R2-Datacenter.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.imageReference.version]
 * The version of the Azure Virtual Machines Marketplace image. A value of
 * 'latest' can be specified to select the latest version of an image. If
 * omitted, the default is 'latest'.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.nodeAgentSKUId]
 * The SKU of Batch Node Agent to be provisioned on the compute node. The
 * Batch node agent is a program that runs on each node in the pool, and
 * provides the command-and-control interface between the node and the Batch
 * service. There are different implementations of the node agent, known as
 * SKUs, for different operating systems.
 * 
 * @member {object}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration]
 * Windows operating system settings on the virtual machine. This property
 * must not be specified if the ImageReference property specifies a Linux OS
 * image.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates]
 * Whether automatic updates are enabled on the virtual machine. If omitted,
 * the default value is true.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.maxTasksPerNode] The
 * maximum number of tasks that can run concurrently on a single compute node
 * in the pool.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy]
 * How tasks are distributed among compute nodes in the pool.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.taskSchedulingPolicy.nodeFillType]
 * How tasks should be distributed across compute nodes. Possible values
 * include: 'spread', 'pack', 'unmapped'
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.resizeTimeout] The timeout for
 * allocation of compute nodes to the pool.
 * 
 * @member {number} [poolInfo.autoPoolSpecification.pool.targetDedicated] The
 * desired number of compute nodes in the pool.
 * 
 * @member {boolean} [poolInfo.autoPoolSpecification.pool.enableAutoScale]
 * Whether the pool size should automatically adjust over time.
 * 
 * @member {string} [poolInfo.autoPoolSpecification.pool.autoScaleFormula] The
 * formula for the desired number of compute nodes in the pool.
 * 
 * @member {moment.duration}
 * [poolInfo.autoPoolSpecification.pool.autoScaleEvaluationInterval] A time
 * interval for the desired AutoScale evaluation period in the pool.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.enableInterNodeCommunication] Whether
 * the pool permits direct communication between nodes.
 * 
 * @member {object} [poolInfo.autoPoolSpecification.pool.startTask] A task to
 * run on each compute node as it joins the pool. The task runs when the node
 * is added to the pool or when the node is restarted.
 * 
 * @member {string}
 * [poolInfo.autoPoolSpecification.pool.startTask.commandLine] The command
 * line of the start task.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.resourceFiles] A list of
 * files that the Batch service will download to the compute node before
 * running the command line.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.startTask.environmentSettings] A list
 * of environment variable settings for the start task.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.runElevated] Whether to run
 * the start task in elevated mode. The default value is false.
 * 
 * @member {number}
 * [poolInfo.autoPoolSpecification.pool.startTask.maxTaskRetryCount] The
 * maximum number of times the task may be retried.
 * 
 * @member {boolean}
 * [poolInfo.autoPoolSpecification.pool.startTask.waitForSuccess] Whether the
 * Batch service should wait for the start task to complete successfully
 * (that is, to exit with exit code 0) before scheduling any tasks on the
 * compute node.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.certificateReferences]
 * A list of certificates to be installed on each compute node in the pool.
 * 
 * @member {array}
 * [poolInfo.autoPoolSpecification.pool.applicationPackageReferences] The
 * list of application packages to be installed on each compute node in the
 * pool.
 * 
 * @member {array} [poolInfo.autoPoolSpecification.pool.metadata] A list of
 * name-value pairs associated with the pool as metadata.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * job as metadata. If omitted, the existing job metadata is left unchanged.
 * 
 */
export interface JobUpdateParameter {
    priority?: number;
    constraints?: JobConstraints;
    poolInfo: PoolInformation;
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the PoolEnableAutoScaleParameter class.
 * @constructor
 * Parameters for a CloudPoolOperations.EnableAutoScale request.
 * @member {string} [autoScaleFormula] The formula for the desired number of
 * compute nodes in the pool.
 * 
 * @member {moment.duration} [autoScaleEvaluationInterval] A time interval for
 * the desired autoscale evaluation period in the pool.
 * 
 */
export interface PoolEnableAutoScaleParameter {
    autoScaleFormula?: string;
    autoScaleEvaluationInterval?: moment.Duration;
}

/**
 * @class
 * Initializes a new instance of the PoolEvaluateAutoScaleParameter class.
 * @constructor
 * Parameters for a CloudJobOperations.EvaluateAutoScale request.
 * @member {string} autoScaleFormula A formula for the desired number of
 * compute nodes in the pool.
 * 
 */
export interface PoolEvaluateAutoScaleParameter {
    autoScaleFormula: string;
}

/**
 * @class
 * Initializes a new instance of the PoolResizeParameter class.
 * @constructor
 * Parameters for a CloudPoolOperations.Resize request.
 * @member {number} targetDedicated The desired number of compute nodes in the
 * pool.
 * 
 * @member {moment.duration} [resizeTimeout] The timeout for allocation of
 * compute nodes to the pool or removal of compute nodes from the pool. The
 * default value is 10 minutes.
 * 
 * @member {string} [nodeDeallocationOption] When nodes may be removed from
 * the pool, if the pool size is decreasing. Possible values include:
 * 'requeue', 'terminate', 'taskcompletion', 'retaineddata'
 * 
 */
export interface PoolResizeParameter {
    targetDedicated: number;
    resizeTimeout?: moment.Duration;
    nodeDeallocationOption?: string;
}

/**
 * @class
 * Initializes a new instance of the PoolUpdatePropertiesParameter class.
 * @constructor
 * Parameters for a CloudPoolOperations.UpdateProperties request.
 * @member {object} [startTask] A task to run on each compute node as it joins
 * the pool. If omitted, any existing start task is removed from the pool.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} certificateReferences A list of certificates to be
 * installed on each compute node in the pool. If you specify an empty
 * collection, any existing certificate references are removed from the pool.
 * 
 * @member {array} applicationPackageReferences A list of application packages
 * to be installed on each compute node in the pool. If you specify an empty
 * collection, any existing application packages references are removed from
 * the pool.
 * 
 * @member {array} metadata A list of name-value pairs associated with the
 * pool as metadata. If you specify an empty collection, any existing
 * metadata is removed from the pool.
 * 
 */
export interface PoolUpdatePropertiesParameter {
    startTask?: StartTask;
    certificateReferences: CertificateReference[];
    applicationPackageReferences: ApplicationPackageReference[];
    metadata: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the PoolUpgradeOSParameter class.
 * @constructor
 * Parameters for a CloudPoolOperations.UpgradeOS request.
 * @member {string} targetOSVersion The Azure Guest OS version to be installed
 * on the virtual machines in the pool.
 * 
 */
export interface PoolUpgradeOSParameter {
    targetOSVersion: string;
}

/**
 * @class
 * Initializes a new instance of the PoolPatchParameter class.
 * @constructor
 * Parameters for a CloudPoolOperations.Patch request.
 * @member {object} [startTask] A task to run on each compute node as it joins
 * the pool. If omitted, any existing start task is left unchanged.
 * 
 * @member {string} [startTask.commandLine] The command line of the start task.
 * 
 * @member {array} [startTask.resourceFiles] A list of files that the Batch
 * service will download to the compute node before running the command line.
 * 
 * @member {array} [startTask.environmentSettings] A list of environment
 * variable settings for the start task.
 * 
 * @member {boolean} [startTask.runElevated] Whether to run the start task in
 * elevated mode. The default value is false.
 * 
 * @member {number} [startTask.maxTaskRetryCount] The maximum number of times
 * the task may be retried.
 * 
 * @member {boolean} [startTask.waitForSuccess] Whether the Batch service
 * should wait for the start task to complete successfully (that is, to exit
 * with exit code 0) before scheduling any tasks on the compute node.
 * 
 * @member {array} [certificateReferences] A list of certificates to be
 * installed on each compute node in the pool. If omitted, any existing
 * certificate references are left unchanged.
 * 
 * @member {array} [applicationPackageReferences] A list of application
 * packages to be installed on each compute node in the pool. If omitted, any
 * existing application package references are left unchanged.
 * 
 * @member {array} [metadata] A list of name-value pairs associated with the
 * pool as metadata. If omitted, any existing metadata is left unchanged.
 * 
 */
export interface PoolPatchParameter {
    startTask?: StartTask;
    certificateReferences?: CertificateReference[];
    applicationPackageReferences?: ApplicationPackageReference[];
    metadata?: MetadataItem[];
}

/**
 * @class
 * Initializes a new instance of the TaskUpdateParameter class.
 * @constructor
 * Parameters for a CloudTaskOperations.Update request.
 * @member {object} [constraints] Constraints that apply to this task. If
 * omitted, the task is given the default constraints.
 * 
 * @member {moment.duration} [constraints.maxWallClockTime] The maximum
 * elapsed time that the task may run, measured from the time the task
 * starts. If the task does not complete within the time limit, the Batch
 * service terminates it.
 * 
 * @member {moment.duration} [constraints.retentionTime] The minimum time to
 * retain the working directory for the task on the compute node where it
 * ran, from the time it completes execution. After this time, the Batch
 * service may delete the working directory and all its contents. The default
 * is infinite.
 * 
 * @member {number} [constraints.maxTaskRetryCount] The maximum number of
 * times the task may be retried. The Batch service retries a task if its
 * exit code is nonzero.
 * 
 */
export interface TaskUpdateParameter {
    constraints?: TaskConstraints;
}

/**
 * @class
 * Initializes a new instance of the NodeUpdateUserParameter class.
 * @constructor
 * Parameters for a ComputeNodeOperations.UpdateUser request.
 * @member {string} [password] The password of the account.
 * 
 * @member {date} [expiryTime] The time at which the account should expire. If
 * omitted, the default is 1 day from the current time.
 * 
 * @member {string} [sshPublicKey] The SSH public key that can be used for
 * remote login to the compute node.
 * 
 */
export interface NodeUpdateUserParameter {
    password?: string;
    expiryTime?: Date;
    sshPublicKey?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeRebootParameter class.
 * @constructor
 * Parameters for a ComputeNodeOperations.Reboot request.
 * @member {string} [nodeRebootOption] When to reboot the compute node and
 * what to do with currently running tasks. The default value is requeue.
 * Possible values include: 'requeue', 'terminate', 'taskcompletion',
 * 'retaineddata'
 * 
 */
export interface NodeRebootParameter {
    nodeRebootOption?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeReimageParameter class.
 * @constructor
 * Parameters for a ComputeNodeOperations.Reimage request.
 * @member {string} [nodeReimageOption] When to reimage the compute node and
 * what to do with currently running tasks. The default value is requeue.
 * Possible values include: 'requeue', 'terminate', 'taskcompletion',
 * 'retaineddata'
 * 
 */
export interface NodeReimageParameter {
    nodeReimageOption?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeDisableSchedulingParameter class.
 * @constructor
 * Parameters for a ComputeNodeOperations.DisableScheduling request.
 * @member {string} [nodeDisableSchedulingOption] What to do with currently
 * running tasks when disable task scheduling on the compute node. The
 * default value is requeue. Possible values include: 'requeue', 'terminate',
 * 'taskcompletion'
 * 
 */
export interface NodeDisableSchedulingParameter {
    nodeDisableSchedulingOption?: string;
}

/**
 * @class
 * Initializes a new instance of the NodeRemoveParameter class.
 * @constructor
 * Parameters for a ComputeNodeOperations.Remove request.
 * @member {array} nodeList A list containing the id of the compute nodes to
 * be removed from the specified pool.
 * 
 * @member {moment.duration} [resizeTimeout] The timeout for removal of
 * compute nodes to the pool. The default value is 10 minutes.
 * 
 * @member {string} [nodeDeallocationOption] When compute nodes may be removed
 * from the pool. Possible values include: 'requeue', 'terminate',
 * 'taskcompletion', 'retaineddata'
 * 
 */
export interface NodeRemoveParameter {
    nodeList: string[];
    resizeTimeout?: moment.Duration;
    nodeDeallocationOption?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ApplicationListOptions {
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ApplicationGetOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolListPoolUsageMetricsOptions class.
 * @constructor
 * Additional parameters for the listPoolUsageMetrics operation.
 * @member {date} [startTime] The earliest time from which to include metrics.
 * This must be at least two and a half hours before the current time.
 * 
 * @member {date} [endTime] The latest time from which to include metrics.
 * This must be at least two hours before the current time.
 * 
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolListPoolUsageMetricsOptions {
    startTime?: Date;
    endTime?: Date;
    filter?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the AccountListNodeAgentSkusOptions class.
 * @constructor
 * Additional parameters for the listNodeAgentSkus operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface AccountListNodeAgentSkusOptions {
    filter?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolGetAllPoolsLifetimeStatisticsOptions class.
 * @constructor
 * Additional parameters for the getAllPoolsLifetimeStatistics operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolGetAllPoolsLifetimeStatisticsOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobGetAllJobsLifetimeStatisticsOptions class.
 * @constructor
 * Additional parameters for the getAllJobsLifetimeStatistics operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobGetAllJobsLifetimeStatisticsOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateAddOptions class.
 * @constructor
 * Additional parameters for the add operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateAddOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateListOptions {
    filter?: string;
    select?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateCancelDeletionOptions class.
 * @constructor
 * Additional parameters for the cancelDeletion operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateCancelDeletionOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateDeleteMethodOptions class.
 * @constructor
 * Additional parameters for the deleteMethod operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateDeleteMethodOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateGetOptions {
    select?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileDeleteFromTaskOptions class.
 * @constructor
 * Additional parameters for the deleteFromTask operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileDeleteFromTaskOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileGetFromTaskOptions class.
 * @constructor
 * Additional parameters for the getFromTask operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ocpRange] The byte range to be retrieved. The default is
 * to retrieve the entire file. The format is startRange-endRange.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface FileGetFromTaskOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ocpRange?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileGetNodeFilePropertiesFromTaskOptions class.
 * @constructor
 * Additional parameters for the getNodeFilePropertiesFromTask operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface FileGetNodeFilePropertiesFromTaskOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileDeleteFromComputeNodeOptions class.
 * @constructor
 * Additional parameters for the deleteFromComputeNode operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileDeleteFromComputeNodeOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileGetFromComputeNodeOptions class.
 * @constructor
 * Additional parameters for the getFromComputeNode operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ocpRange] The byte range to be retrieved. The default is
 * to retrieve the entire file. The format is startRange-endRange.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface FileGetFromComputeNodeOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ocpRange?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileGetNodeFilePropertiesFromComputeNodeOptions class.
 * @constructor
 * Additional parameters for the getNodeFilePropertiesFromComputeNode
 * operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface FileGetNodeFilePropertiesFromComputeNodeOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileListFromTaskOptions class.
 * @constructor
 * Additional parameters for the listFromTask operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileListFromTaskOptions {
    filter?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileListFromComputeNodeOptions class.
 * @constructor
 * Additional parameters for the listFromComputeNode operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileListFromComputeNodeOptions {
    filter?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleExistsOptions class.
 * @constructor
 * Additional parameters for the exists operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleExistsOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleDeleteMethodOptions class.
 * @constructor
 * Additional parameters for the deleteMethod operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleDeleteMethodOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleGetOptions {
    select?: string;
    expand?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobSchedulePatchOptions class.
 * @constructor
 * Additional parameters for the patch operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobSchedulePatchOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleUpdateOptions class.
 * @constructor
 * Additional parameters for the update operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleUpdateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleDisableOptions class.
 * @constructor
 * Additional parameters for the disable operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleDisableOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleEnableOptions class.
 * @constructor
 * Additional parameters for the enable operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleEnableOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleTerminateOptions class.
 * @constructor
 * Additional parameters for the terminate operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobScheduleTerminateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleAddOptions class.
 * @constructor
 * Additional parameters for the add operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobScheduleAddOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobScheduleListOptions {
    filter?: string;
    select?: string;
    expand?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobDeleteMethodOptions class.
 * @constructor
 * Additional parameters for the deleteMethod operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobDeleteMethodOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobGetOptions {
    select?: string;
    expand?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobPatchOptions class.
 * @constructor
 * Additional parameters for the patch operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobPatchOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobUpdateOptions class.
 * @constructor
 * Additional parameters for the update operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobUpdateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobDisableOptions class.
 * @constructor
 * Additional parameters for the disable operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobDisableOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobEnableOptions class.
 * @constructor
 * Additional parameters for the enable operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobEnableOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobTerminateOptions class.
 * @constructor
 * Additional parameters for the terminate operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface JobTerminateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobAddOptions class.
 * @constructor
 * Additional parameters for the add operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobAddOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListOptions {
    filter?: string;
    select?: string;
    expand?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListFromJobScheduleOptions class.
 * @constructor
 * Additional parameters for the listFromJobSchedule operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListFromJobScheduleOptions {
    filter?: string;
    select?: string;
    expand?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListPreparationAndReleaseTaskStatusOptions class.
 * @constructor
 * Additional parameters for the listPreparationAndReleaseTaskStatus operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListPreparationAndReleaseTaskStatusOptions {
    filter?: string;
    select?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolAddOptions class.
 * @constructor
 * Additional parameters for the add operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolAddOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolListOptions {
    filter?: string;
    select?: string;
    expand?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolDeleteMethodOptions class.
 * @constructor
 * Additional parameters for the deleteMethod operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolDeleteMethodOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolExistsOptions class.
 * @constructor
 * Additional parameters for the exists operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolExistsOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolGetOptions {
    select?: string;
    expand?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolPatchOptions class.
 * @constructor
 * Additional parameters for the patch operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolPatchOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolDisableAutoScaleOptions class.
 * @constructor
 * Additional parameters for the disableAutoScale operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolDisableAutoScaleOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolEnableAutoScaleOptions class.
 * @constructor
 * Additional parameters for the enableAutoScale operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolEnableAutoScaleOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolEvaluateAutoScaleOptions class.
 * @constructor
 * Additional parameters for the evaluateAutoScale operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolEvaluateAutoScaleOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolResizeOptions class.
 * @constructor
 * Additional parameters for the resize operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolResizeOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolStopResizeOptions class.
 * @constructor
 * Additional parameters for the stopResize operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolStopResizeOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolUpdatePropertiesOptions class.
 * @constructor
 * Additional parameters for the updateProperties operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolUpdatePropertiesOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolUpgradeOSOptions class.
 * @constructor
 * Additional parameters for the upgradeOS operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolUpgradeOSOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolRemoveNodesOptions class.
 * @constructor
 * Additional parameters for the removeNodes operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface PoolRemoveNodesOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskAddOptions class.
 * @constructor
 * Additional parameters for the add operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface TaskAddOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface TaskListOptions {
    filter?: string;
    select?: string;
    expand?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskAddCollectionOptions class.
 * @constructor
 * Additional parameters for the addCollection operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface TaskAddCollectionOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskDeleteMethodOptions class.
 * @constructor
 * Additional parameters for the deleteMethod operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface TaskDeleteMethodOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {string} [expand] An OData $expand clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface TaskGetOptions {
    select?: string;
    expand?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskUpdateOptions class.
 * @constructor
 * Additional parameters for the update operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface TaskUpdateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskListSubtasksOptions class.
 * @constructor
 * Additional parameters for the listSubtasks operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface TaskListSubtasksOptions {
    select?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskTerminateOptions class.
 * @constructor
 * Additional parameters for the terminate operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 * @member {string} [ifMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag is an exact match as
 * specified.
 * 
 * @member {string} [ifNoneMatch] An ETag is specified. Specify this header to
 * perform the operation only if the resource's ETag does not match the
 * specified ETag.
 * 
 * @member {date} [ifModifiedSince] Specify this header to perform the
 * operation only if the resource has been modified since the specified
 * date/time.
 * 
 * @member {date} [ifUnmodifiedSince] Specify this header to perform the
 * operation only if the resource has not been modified since the specified
 * date/time.
 * 
 */
export interface TaskTerminateOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
    ifMatch?: string;
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
    ifUnmodifiedSince?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeAddUserOptions class.
 * @constructor
 * Additional parameters for the addUser operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeAddUserOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeDeleteUserOptions class.
 * @constructor
 * Additional parameters for the deleteUser operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeDeleteUserOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeUpdateUserOptions class.
 * @constructor
 * Additional parameters for the updateUser operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeUpdateUserOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeGetOptions class.
 * @constructor
 * Additional parameters for the get operation.
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeGetOptions {
    select?: string;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeRebootOptions class.
 * @constructor
 * Additional parameters for the reboot operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeRebootOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeReimageOptions class.
 * @constructor
 * Additional parameters for the reimage operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeReimageOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeDisableSchedulingOptions class.
 * @constructor
 * Additional parameters for the disableScheduling operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeDisableSchedulingOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeEnableSchedulingOptions class.
 * @constructor
 * Additional parameters for the enableScheduling operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeEnableSchedulingOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeGetRemoteLoginSettingsOptions class.
 * @constructor
 * Additional parameters for the getRemoteLoginSettings operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeGetRemoteLoginSettingsOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeGetRemoteDesktopOptions class.
 * @constructor
 * Additional parameters for the getRemoteDesktop operation.
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeGetRemoteDesktopOptions {
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeListOptions class.
 * @constructor
 * Additional parameters for the list operation.
 * @member {string} [filter] An OData $filter clause.
 * 
 * @member {string} [select] An OData $select clause.
 * 
 * @member {number} [maxResults] The maximum number of items to return in the
 * response.
 * 
 * @member {number} [timeout] The maximum time that the server can spend
 * processing the request, in seconds. The default is 30 seconds.
 * 
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeListOptions {
    filter?: string;
    select?: string;
    maxResults?: number;
    timeout?: number;
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ApplicationListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ApplicationListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolListPoolUsageMetricsNextOptions class.
 * @constructor
 * Additional parameters for the listPoolUsageMetricsNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolListPoolUsageMetricsNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the AccountListNodeAgentSkusNextOptions class.
 * @constructor
 * Additional parameters for the listNodeAgentSkusNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface AccountListNodeAgentSkusNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the CertificateListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface CertificateListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileListFromTaskNextOptions class.
 * @constructor
 * Additional parameters for the listFromTaskNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileListFromTaskNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the FileListFromComputeNodeNextOptions class.
 * @constructor
 * Additional parameters for the listFromComputeNodeNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface FileListFromComputeNodeNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobScheduleListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobScheduleListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListFromJobScheduleNextOptions class.
 * @constructor
 * Additional parameters for the listFromJobScheduleNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListFromJobScheduleNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the JobListPreparationAndReleaseTaskStatusNextOptions class.
 * @constructor
 * Additional parameters for the listPreparationAndReleaseTaskStatusNext
 * operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface JobListPreparationAndReleaseTaskStatusNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the PoolListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface PoolListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the TaskListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface TaskListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}

/**
 * @class
 * Initializes a new instance of the ComputeNodeListNextOptions class.
 * @constructor
 * Additional parameters for the listNext operation.
 * @member {string} [clientRequestId] The caller-generated request identity,
 * in the form of a GUID with no decoration such as curly braces, e.g.
 * 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0.
 * 
 * @member {boolean} [returnClientRequestId] Whether the server should return
 * the client-request-id identifier in the response.
 * 
 * @member {date} [ocpDate] The time the request was issued. If not specified,
 * this header will be automatically populated with the current system clock
 * time.
 * 
 */
export interface ComputeNodeListNextOptions {
    clientRequestId?: string;
    returnClientRequestId?: boolean;
    ocpDate?: Date;
}
