/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the batch-2016-08-10.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.Batch.Model
{
    /// 
    /// The details for container properties that are returned by DescribeJobs
    /// for jobs that use Amazon EKS.
    /// 
    public partial class EksContainerDetail
    {
        private List _args = new List();
        private List _command = new List();
        private List _env = new List();
        private int? _exitCode;
        private string _image;
        private string _imagePullPolicy;
        private string _name;
        private string _reason;
        private EksContainerResourceRequirements _resources;
        private EksContainerSecurityContext _securityContext;
        private List _volumeMounts = new List();
        /// 
        /// Gets and sets the property Args. 
        /// 
        /// An array of arguments to the entrypoint. If this isn't specified, the CMD
        /// of the container image is used. This corresponds to the args member in
        /// the Entrypoint
        /// portion of the Pod
        /// in Kubernetes. Environment variable references are expanded using the container's
        /// environment.
        /// 
        ///  
        /// 
        /// If the referenced environment variable doesn't exist, the reference in the command
        /// isn't changed. For example, if the reference is to "$(NAME1)" and the
        /// NAME1 environment variable doesn't exist, the command string will remain
        /// "$(NAME1)". $$ is replaced with $ and the resulting
        /// string isn't expanded. For example, $$(VAR_NAME) is passed as $(VAR_NAME)
        /// whether or not the VAR_NAME environment variable exists. For more information,
        /// see CMD in the
        /// Dockerfile reference and Define
        /// a command and arguments for a pod in the Kubernetes documentation.
        /// 
        /// 
        public List Args
        {
            get { return this._args; }
            set { this._args = value; }
        }
        // Check to see if Args property is set
        internal bool IsSetArgs()
        {
            return this._args != null && this._args.Count > 0; 
        }
        /// 
        /// Gets and sets the property Command. 
        /// 
        /// The entrypoint for the container. For more information, see Entrypoint
        /// in the Kubernetes documentation.
        /// 
        /// 
        public List Command
        {
            get { return this._command; }
            set { this._command = value; }
        }
        // Check to see if Command property is set
        internal bool IsSetCommand()
        {
            return this._command != null && this._command.Count > 0; 
        }
        /// 
        /// Gets and sets the property Env. 
        /// 
        /// The environment variables to pass to a container.
        /// 
        ///   
        /// 
        /// Environment variables cannot start with "AWS_BATCH". This naming convention
        /// is reserved for variables that Batch sets.
        /// 
        ///  
        /// 
        public List Env
        {
            get { return this._env; }
            set { this._env = value; }
        }
        // Check to see if Env property is set
        internal bool IsSetEnv()
        {
            return this._env != null && this._env.Count > 0; 
        }
        /// 
        /// Gets and sets the property ExitCode. 
        /// 
        /// The exit code for the job attempt. A non-zero exit code is considered failed.
        /// 
        /// 
        public int ExitCode
        {
            get { return this._exitCode.GetValueOrDefault(); }
            set { this._exitCode = value; }
        }
        // Check to see if ExitCode property is set
        internal bool IsSetExitCode()
        {
            return this._exitCode.HasValue; 
        }
        /// 
        /// Gets and sets the property Image. 
        /// 
        /// The Docker image used to start the container.
        /// 
        /// 
        public string Image
        {
            get { return this._image; }
            set { this._image = value; }
        }
        // Check to see if Image property is set
        internal bool IsSetImage()
        {
            return this._image != null;
        }
        /// 
        /// Gets and sets the property ImagePullPolicy. 
        /// 
        /// The image pull policy for the container. Supported values are Always,
        /// IfNotPresent, and Never. This parameter defaults to Always
        /// if the :latest tag is specified, IfNotPresent otherwise.
        /// For more information, see Updating
        /// images in the Kubernetes documentation.
        /// 
        /// 
        public string ImagePullPolicy
        {
            get { return this._imagePullPolicy; }
            set { this._imagePullPolicy = value; }
        }
        // Check to see if ImagePullPolicy property is set
        internal bool IsSetImagePullPolicy()
        {
            return this._imagePullPolicy != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The name of the container. If the name isn't specified, the default name "Default"
        /// is used. Each container in a pod must have a unique name.
        /// 
        /// 
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
        /// 
        /// Gets and sets the property Reason. 
        /// 
        /// A short human-readable string to provide additional details for a running or stopped
        /// container. It can be up to 255 characters long.
        /// 
        /// 
        public string Reason
        {
            get { return this._reason; }
            set { this._reason = value; }
        }
        // Check to see if Reason property is set
        internal bool IsSetReason()
        {
            return this._reason != null;
        }
        /// 
        /// Gets and sets the property Resources. 
        /// 
        /// The type and amount of resources to assign to a container. The supported resources
        /// include memory, cpu, and nvidia.com/gpu. For
        /// more information, see Resource
        /// management for pods and containers in the Kubernetes documentation.
        /// 
        /// 
        public EksContainerResourceRequirements Resources
        {
            get { return this._resources; }
            set { this._resources = value; }
        }
        // Check to see if Resources property is set
        internal bool IsSetResources()
        {
            return this._resources != null;
        }
        /// 
        /// Gets and sets the property SecurityContext. 
        /// 
        /// The security context for a job. For more information, see Configure
        /// a security context for a pod or container in the Kubernetes documentation.
        /// 
        /// 
        public EksContainerSecurityContext SecurityContext
        {
            get { return this._securityContext; }
            set { this._securityContext = value; }
        }
        // Check to see if SecurityContext property is set
        internal bool IsSetSecurityContext()
        {
            return this._securityContext != null;
        }
        /// 
        /// Gets and sets the property VolumeMounts. 
        /// 
        /// The volume mounts for the container. Batch supports emptyDir, hostPath,
        /// and secret volume types. For more information about volumes and volume
        /// mounts in Kubernetes, see Volumes
        /// in the Kubernetes documentation.
        /// 
        /// 
        public List VolumeMounts
        {
            get { return this._volumeMounts; }
            set { this._volumeMounts = value; }
        }
        // Check to see if VolumeMounts property is set
        internal bool IsSetVolumeMounts()
        {
            return this._volumeMounts != null && this._volumeMounts.Count > 0; 
        }
    }
}