/**
 * Argo Workflows API
 * Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. For more information, please see https://argoproj.github.io/argo-workflows/
 *
 * OpenAPI spec version: VERSION
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { IoArgoprojWorkflowV1alpha1ArtifactLocation } from '../models/IoArgoprojWorkflowV1alpha1ArtifactLocation';
import { IoArgoprojWorkflowV1alpha1ContainerSetTemplate } from '../models/IoArgoprojWorkflowV1alpha1ContainerSetTemplate';
import { IoArgoprojWorkflowV1alpha1DAGTemplate } from '../models/IoArgoprojWorkflowV1alpha1DAGTemplate';
import { IoArgoprojWorkflowV1alpha1Data } from '../models/IoArgoprojWorkflowV1alpha1Data';
import { IoArgoprojWorkflowV1alpha1ExecutorConfig } from '../models/IoArgoprojWorkflowV1alpha1ExecutorConfig';
import { IoArgoprojWorkflowV1alpha1HTTP } from '../models/IoArgoprojWorkflowV1alpha1HTTP';
import { IoArgoprojWorkflowV1alpha1Inputs } from '../models/IoArgoprojWorkflowV1alpha1Inputs';
import { IoArgoprojWorkflowV1alpha1Memoize } from '../models/IoArgoprojWorkflowV1alpha1Memoize';
import { IoArgoprojWorkflowV1alpha1Metadata } from '../models/IoArgoprojWorkflowV1alpha1Metadata';
import { IoArgoprojWorkflowV1alpha1Metrics } from '../models/IoArgoprojWorkflowV1alpha1Metrics';
import { IoArgoprojWorkflowV1alpha1Outputs } from '../models/IoArgoprojWorkflowV1alpha1Outputs';
import { IoArgoprojWorkflowV1alpha1ResourceTemplate } from '../models/IoArgoprojWorkflowV1alpha1ResourceTemplate';
import { IoArgoprojWorkflowV1alpha1RetryStrategy } from '../models/IoArgoprojWorkflowV1alpha1RetryStrategy';
import { IoArgoprojWorkflowV1alpha1ScriptTemplate } from '../models/IoArgoprojWorkflowV1alpha1ScriptTemplate';
import { IoArgoprojWorkflowV1alpha1SuspendTemplate } from '../models/IoArgoprojWorkflowV1alpha1SuspendTemplate';
import { IoArgoprojWorkflowV1alpha1Synchronization } from '../models/IoArgoprojWorkflowV1alpha1Synchronization';
import { IoArgoprojWorkflowV1alpha1UserContainer } from '../models/IoArgoprojWorkflowV1alpha1UserContainer';
import { IoArgoprojWorkflowV1alpha1WorkflowStep } from '../models/IoArgoprojWorkflowV1alpha1WorkflowStep';
import { IoK8sApiCoreV1Affinity } from '../models/IoK8sApiCoreV1Affinity';
import { IoK8sApiCoreV1Container } from '../models/IoK8sApiCoreV1Container';
import { IoK8sApiCoreV1HostAlias } from '../models/IoK8sApiCoreV1HostAlias';
import { IoK8sApiCoreV1PodSecurityContext } from '../models/IoK8sApiCoreV1PodSecurityContext';
import { IoK8sApiCoreV1Toleration } from '../models/IoK8sApiCoreV1Toleration';
import { IoK8sApiCoreV1Volume } from '../models/IoK8sApiCoreV1Volume';
import { HttpFile } from '../http/http';

/**
* Template is a reusable and composable unit of execution in a workflow
*/
export class IoArgoprojWorkflowV1alpha1Template {
    'activeDeadlineSeconds'?: string;
    'affinity'?: IoK8sApiCoreV1Affinity;
    'archiveLocation'?: IoArgoprojWorkflowV1alpha1ArtifactLocation;
    /**
    * AutomountServiceAccountToken indicates whether a service account token should be automatically mounted in pods. ServiceAccountName of ExecutorConfig must be specified if this value is false.
    */
    'automountServiceAccountToken'?: boolean;
    'container'?: IoK8sApiCoreV1Container;
    'containerSet'?: IoArgoprojWorkflowV1alpha1ContainerSetTemplate;
    /**
    * Daemon will allow a workflow to proceed to the next step so long as the container reaches readiness
    */
    'daemon'?: boolean;
    'dag'?: IoArgoprojWorkflowV1alpha1DAGTemplate;
    'data'?: IoArgoprojWorkflowV1alpha1Data;
    'executor'?: IoArgoprojWorkflowV1alpha1ExecutorConfig;
    /**
    * FailFast, if specified, will fail this template if any of its child pods has failed. This is useful for when this template is expanded with `withItems`, etc.
    */
    'failFast'?: boolean;
    /**
    * HostAliases is an optional list of hosts and IPs that will be injected into the pod spec
    */
    'hostAliases'?: Array<IoK8sApiCoreV1HostAlias>;
    'http'?: IoArgoprojWorkflowV1alpha1HTTP;
    /**
    * InitContainers is a list of containers which run before the main container.
    */
    'initContainers'?: Array<IoArgoprojWorkflowV1alpha1UserContainer>;
    'inputs'?: IoArgoprojWorkflowV1alpha1Inputs;
    'memoize'?: IoArgoprojWorkflowV1alpha1Memoize;
    'metadata'?: IoArgoprojWorkflowV1alpha1Metadata;
    'metrics'?: IoArgoprojWorkflowV1alpha1Metrics;
    /**
    * Name is the name of the template
    */
    'name'?: string;
    /**
    * NodeSelector is a selector to schedule this step of the workflow to be run on the selected node(s). Overrides the selector set at the workflow level.
    */
    'nodeSelector'?: { [key: string]: string; };
    'outputs'?: IoArgoprojWorkflowV1alpha1Outputs;
    /**
    * Parallelism limits the max total parallel pods that can execute at the same time within the boundaries of this template invocation. If additional steps/dag templates are invoked, the pods created by those templates will not be counted towards this total.
    */
    'parallelism'?: number;
    /**
    * Plugin is an Object with exactly one key
    */
    'plugin'?: any;
    /**
    * PodSpecPatch holds strategic merge patch to apply against the pod spec. Allows parameterization of container fields which are not strings (e.g. resource limits).
    */
    'podSpecPatch'?: string;
    /**
    * Priority to apply to workflow pods.
    */
    'priority'?: number;
    /**
    * PriorityClassName to apply to workflow pods.
    */
    'priorityClassName'?: string;
    'resource'?: IoArgoprojWorkflowV1alpha1ResourceTemplate;
    'retryStrategy'?: IoArgoprojWorkflowV1alpha1RetryStrategy;
    /**
    * If specified, the pod will be dispatched by specified scheduler. Or it will be dispatched by workflow scope scheduler if specified. If neither specified, the pod will be dispatched by default scheduler.
    */
    'schedulerName'?: string;
    'script'?: IoArgoprojWorkflowV1alpha1ScriptTemplate;
    'securityContext'?: IoK8sApiCoreV1PodSecurityContext;
    /**
    * ServiceAccountName to apply to workflow pods
    */
    'serviceAccountName'?: string;
    /**
    * Sidecars is a list of containers which run alongside the main container Sidecars are automatically killed when the main container completes
    */
    'sidecars'?: Array<IoArgoprojWorkflowV1alpha1UserContainer>;
    /**
    * Steps define a series of sequential/parallel workflow steps
    */
    'steps'?: Array<Array<IoArgoprojWorkflowV1alpha1WorkflowStep>>;
    'suspend'?: IoArgoprojWorkflowV1alpha1SuspendTemplate;
    'synchronization'?: IoArgoprojWorkflowV1alpha1Synchronization;
    /**
    * Timeout allows to set the total node execution timeout duration counting from the node\'s start time. This duration also includes time in which the node spends in Pending state. This duration may not be applied to Step or DAG templates.
    */
    'timeout'?: string;
    /**
    * Tolerations to apply to workflow pods.
    */
    'tolerations'?: Array<IoK8sApiCoreV1Toleration>;
    /**
    * Volumes is a list of volumes that can be mounted by containers in a template.
    */
    'volumes'?: Array<IoK8sApiCoreV1Volume>;

    static readonly discriminator: string | undefined = undefined;

    static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
        {
            "name": "activeDeadlineSeconds",
            "baseName": "activeDeadlineSeconds",
            "type": "string",
            "format": ""
        },
        {
            "name": "affinity",
            "baseName": "affinity",
            "type": "IoK8sApiCoreV1Affinity",
            "format": ""
        },
        {
            "name": "archiveLocation",
            "baseName": "archiveLocation",
            "type": "IoArgoprojWorkflowV1alpha1ArtifactLocation",
            "format": ""
        },
        {
            "name": "automountServiceAccountToken",
            "baseName": "automountServiceAccountToken",
            "type": "boolean",
            "format": ""
        },
        {
            "name": "container",
            "baseName": "container",
            "type": "IoK8sApiCoreV1Container",
            "format": ""
        },
        {
            "name": "containerSet",
            "baseName": "containerSet",
            "type": "IoArgoprojWorkflowV1alpha1ContainerSetTemplate",
            "format": ""
        },
        {
            "name": "daemon",
            "baseName": "daemon",
            "type": "boolean",
            "format": ""
        },
        {
            "name": "dag",
            "baseName": "dag",
            "type": "IoArgoprojWorkflowV1alpha1DAGTemplate",
            "format": ""
        },
        {
            "name": "data",
            "baseName": "data",
            "type": "IoArgoprojWorkflowV1alpha1Data",
            "format": ""
        },
        {
            "name": "executor",
            "baseName": "executor",
            "type": "IoArgoprojWorkflowV1alpha1ExecutorConfig",
            "format": ""
        },
        {
            "name": "failFast",
            "baseName": "failFast",
            "type": "boolean",
            "format": ""
        },
        {
            "name": "hostAliases",
            "baseName": "hostAliases",
            "type": "Array<IoK8sApiCoreV1HostAlias>",
            "format": ""
        },
        {
            "name": "http",
            "baseName": "http",
            "type": "IoArgoprojWorkflowV1alpha1HTTP",
            "format": ""
        },
        {
            "name": "initContainers",
            "baseName": "initContainers",
            "type": "Array<IoArgoprojWorkflowV1alpha1UserContainer>",
            "format": ""
        },
        {
            "name": "inputs",
            "baseName": "inputs",
            "type": "IoArgoprojWorkflowV1alpha1Inputs",
            "format": ""
        },
        {
            "name": "memoize",
            "baseName": "memoize",
            "type": "IoArgoprojWorkflowV1alpha1Memoize",
            "format": ""
        },
        {
            "name": "metadata",
            "baseName": "metadata",
            "type": "IoArgoprojWorkflowV1alpha1Metadata",
            "format": ""
        },
        {
            "name": "metrics",
            "baseName": "metrics",
            "type": "IoArgoprojWorkflowV1alpha1Metrics",
            "format": ""
        },
        {
            "name": "name",
            "baseName": "name",
            "type": "string",
            "format": ""
        },
        {
            "name": "nodeSelector",
            "baseName": "nodeSelector",
            "type": "{ [key: string]: string; }",
            "format": ""
        },
        {
            "name": "outputs",
            "baseName": "outputs",
            "type": "IoArgoprojWorkflowV1alpha1Outputs",
            "format": ""
        },
        {
            "name": "parallelism",
            "baseName": "parallelism",
            "type": "number",
            "format": ""
        },
        {
            "name": "plugin",
            "baseName": "plugin",
            "type": "any",
            "format": ""
        },
        {
            "name": "podSpecPatch",
            "baseName": "podSpecPatch",
            "type": "string",
            "format": ""
        },
        {
            "name": "priority",
            "baseName": "priority",
            "type": "number",
            "format": ""
        },
        {
            "name": "priorityClassName",
            "baseName": "priorityClassName",
            "type": "string",
            "format": ""
        },
        {
            "name": "resource",
            "baseName": "resource",
            "type": "IoArgoprojWorkflowV1alpha1ResourceTemplate",
            "format": ""
        },
        {
            "name": "retryStrategy",
            "baseName": "retryStrategy",
            "type": "IoArgoprojWorkflowV1alpha1RetryStrategy",
            "format": ""
        },
        {
            "name": "schedulerName",
            "baseName": "schedulerName",
            "type": "string",
            "format": ""
        },
        {
            "name": "script",
            "baseName": "script",
            "type": "IoArgoprojWorkflowV1alpha1ScriptTemplate",
            "format": ""
        },
        {
            "name": "securityContext",
            "baseName": "securityContext",
            "type": "IoK8sApiCoreV1PodSecurityContext",
            "format": ""
        },
        {
            "name": "serviceAccountName",
            "baseName": "serviceAccountName",
            "type": "string",
            "format": ""
        },
        {
            "name": "sidecars",
            "baseName": "sidecars",
            "type": "Array<IoArgoprojWorkflowV1alpha1UserContainer>",
            "format": ""
        },
        {
            "name": "steps",
            "baseName": "steps",
            "type": "Array<Array<IoArgoprojWorkflowV1alpha1WorkflowStep>>",
            "format": ""
        },
        {
            "name": "suspend",
            "baseName": "suspend",
            "type": "IoArgoprojWorkflowV1alpha1SuspendTemplate",
            "format": ""
        },
        {
            "name": "synchronization",
            "baseName": "synchronization",
            "type": "IoArgoprojWorkflowV1alpha1Synchronization",
            "format": ""
        },
        {
            "name": "timeout",
            "baseName": "timeout",
            "type": "string",
            "format": ""
        },
        {
            "name": "tolerations",
            "baseName": "tolerations",
            "type": "Array<IoK8sApiCoreV1Toleration>",
            "format": ""
        },
        {
            "name": "volumes",
            "baseName": "volumes",
            "type": "Array<IoK8sApiCoreV1Volume>",
            "format": ""
        }    ];

    static getAttributeTypeMap() {
        return IoArgoprojWorkflowV1alpha1Template.attributeTypeMap;
    }

    public constructor() {
    }
}

