// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// PodStatus represents information about the status of a pod. Status may
    /// trail the actual state of a system, especially if the node that hosts
    /// the pod cannot contact the control plane.
    /// </summary>
    public partial class V1PodStatus
    {
        /// <summary>
        /// Initializes a new instance of the V1PodStatus class.
        /// </summary>
        public V1PodStatus()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1PodStatus class.
        /// </summary>
        /// <param name="conditions">Current service state of pod. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions</param>
        /// <param name="containerStatuses">The list has one entry per
        /// container in the manifest. Each entry is currently the output of
        /// `docker inspect`. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status</param>
        /// <param name="ephemeralContainerStatuses">Status for any ephemeral
        /// containers that have run in this pod. This field is alpha-level and
        /// is only populated by servers that enable the EphemeralContainers
        /// feature.</param>
        /// <param name="hostIP">IP address of the host to which the pod is
        /// assigned. Empty if not yet scheduled.</param>
        /// <param name="initContainerStatuses">The list has one entry per init
        /// container in the manifest. The most recent successful init
        /// container will have ready = true, the most recently started
        /// container will have startTime set. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status</param>
        /// <param name="message">A human readable message indicating details
        /// about why the pod is in this condition.</param>
        /// <param name="nominatedNodeName">nominatedNodeName is set only when
        /// this pod preempts other pods on the node, but it cannot be
        /// scheduled right away as preemption victims receive their graceful
        /// termination periods. This field does not guarantee that the pod
        /// will be scheduled on this node. Scheduler may decide to place the
        /// pod elsewhere if other nodes become available sooner. Scheduler may
        /// also decide to give the resources on this node to a higher priority
        /// pod that is created after preemption. As a result, this field may
        /// be different than PodSpec.nodeName when the pod is
        /// scheduled.</param>
        /// <param name="phase">The phase of a Pod is a simple, high-level
        /// summary of where the Pod is in its lifecycle. The conditions array,
        /// the reason and message fields, and the individual container status
        /// arrays contain more detail about the pod's status. There are five
        /// possible phase values:
        ///
        /// Pending: The pod has been accepted by the Kubernetes system, but
        /// one or more of the container images has not been created. This
        /// includes time before being scheduled as well as time spent
        /// downloading images over the network, which could take a while.
        /// Running: The pod has been bound to a node, and all of the
        /// containers have been created. At least one container is still
        /// running, or is in the process of starting or restarting. Succeeded:
        /// All containers in the pod have terminated in success, and will not
        /// be restarted. Failed: All containers in the pod have terminated,
        /// and at least one container has terminated in failure. The container
        /// either exited with non-zero status or was terminated by the system.
        /// Unknown: For some reason the state of the pod could not be
        /// obtained, typically due to an error in communicating with the host
        /// of the pod.
        ///
        /// More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase</param>
        /// <param name="podIP">IP address allocated to the pod. Routable at
        /// least within the cluster. Empty if not yet allocated.</param>
        /// <param name="podIPs">podIPs holds the IP addresses allocated to the
        /// pod. If this field is specified, the 0th entry must match the podIP
        /// field. Pods may be allocated at most 1 value for each of IPv4 and
        /// IPv6. This list is empty if no IPs have been allocated yet.</param>
        /// <param name="qosClass">The Quality of Service (QOS) classification
        /// assigned to the pod based on resource requirements See PodQOSClass
        /// type for available QOS classes More info:
        /// https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md</param>
        /// <param name="reason">A brief CamelCase message indicating details
        /// about why the pod is in this state. e.g. 'Evicted'</param>
        /// <param name="startTime">RFC 3339 date and time at which the object
        /// was acknowledged by the Kubelet. This is before the Kubelet pulled
        /// the container image(s) for the pod.</param>
        public V1PodStatus(IList<V1PodCondition> conditions = default(IList<V1PodCondition>), IList<V1ContainerStatus> containerStatuses = default(IList<V1ContainerStatus>), IList<V1ContainerStatus> ephemeralContainerStatuses = default(IList<V1ContainerStatus>), string hostIP = default(string), IList<V1ContainerStatus> initContainerStatuses = default(IList<V1ContainerStatus>), string message = default(string), string nominatedNodeName = default(string), string phase = default(string), string podIP = default(string), IList<V1PodIP> podIPs = default(IList<V1PodIP>), string qosClass = default(string), string reason = default(string), System.DateTime? startTime = default(System.DateTime?))
        {
            Conditions = conditions;
            ContainerStatuses = containerStatuses;
            EphemeralContainerStatuses = ephemeralContainerStatuses;
            HostIP = hostIP;
            InitContainerStatuses = initContainerStatuses;
            Message = message;
            NominatedNodeName = nominatedNodeName;
            Phase = phase;
            PodIP = podIP;
            PodIPs = podIPs;
            QosClass = qosClass;
            Reason = reason;
            StartTime = startTime;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets current service state of pod. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
        /// </summary>
        [JsonProperty(PropertyName = "conditions")]
        public IList<V1PodCondition> Conditions { get; set; }

        /// <summary>
        /// Gets or sets the list has one entry per container in the manifest.
        /// Each entry is currently the output of `docker inspect`. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
        /// </summary>
        [JsonProperty(PropertyName = "containerStatuses")]
        public IList<V1ContainerStatus> ContainerStatuses { get; set; }

        /// <summary>
        /// Gets or sets status for any ephemeral containers that have run in
        /// this pod. This field is alpha-level and is only populated by
        /// servers that enable the EphemeralContainers feature.
        /// </summary>
        [JsonProperty(PropertyName = "ephemeralContainerStatuses")]
        public IList<V1ContainerStatus> EphemeralContainerStatuses { get; set; }

        /// <summary>
        /// Gets or sets IP address of the host to which the pod is assigned.
        /// Empty if not yet scheduled.
        /// </summary>
        [JsonProperty(PropertyName = "hostIP")]
        public string HostIP { get; set; }

        /// <summary>
        /// Gets or sets the list has one entry per init container in the
        /// manifest. The most recent successful init container will have ready
        /// = true, the most recently started container will have startTime
        /// set. More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
        /// </summary>
        [JsonProperty(PropertyName = "initContainerStatuses")]
        public IList<V1ContainerStatus> InitContainerStatuses { get; set; }

        /// <summary>
        /// Gets or sets a human readable message indicating details about why
        /// the pod is in this condition.
        /// </summary>
        [JsonProperty(PropertyName = "message")]
        public string Message { get; set; }

        /// <summary>
        /// Gets or sets nominatedNodeName is set only when this pod preempts
        /// other pods on the node, but it cannot be scheduled right away as
        /// preemption victims receive their graceful termination periods. This
        /// field does not guarantee that the pod will be scheduled on this
        /// node. Scheduler may decide to place the pod elsewhere if other
        /// nodes become available sooner. Scheduler may also decide to give
        /// the resources on this node to a higher priority pod that is created
        /// after preemption. As a result, this field may be different than
        /// PodSpec.nodeName when the pod is scheduled.
        /// </summary>
        [JsonProperty(PropertyName = "nominatedNodeName")]
        public string NominatedNodeName { get; set; }

        /// <summary>
        /// Gets or sets the phase of a Pod is a simple, high-level summary of
        /// where the Pod is in its lifecycle. The conditions array, the reason
        /// and message fields, and the individual container status arrays
        /// contain more detail about the pod's status. There are five possible
        /// phase values:
        ///
        /// Pending: The pod has been accepted by the Kubernetes system, but
        /// one or more of the container images has not been created. This
        /// includes time before being scheduled as well as time spent
        /// downloading images over the network, which could take a while.
        /// Running: The pod has been bound to a node, and all of the
        /// containers have been created. At least one container is still
        /// running, or is in the process of starting or restarting. Succeeded:
        /// All containers in the pod have terminated in success, and will not
        /// be restarted. Failed: All containers in the pod have terminated,
        /// and at least one container has terminated in failure. The container
        /// either exited with non-zero status or was terminated by the system.
        /// Unknown: For some reason the state of the pod could not be
        /// obtained, typically due to an error in communicating with the host
        /// of the pod.
        ///
        /// More info:
        /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
        /// </summary>
        [JsonProperty(PropertyName = "phase")]
        public string Phase { get; set; }

        /// <summary>
        /// Gets or sets IP address allocated to the pod. Routable at least
        /// within the cluster. Empty if not yet allocated.
        /// </summary>
        [JsonProperty(PropertyName = "podIP")]
        public string PodIP { get; set; }

        /// <summary>
        /// Gets or sets podIPs holds the IP addresses allocated to the pod. If
        /// this field is specified, the 0th entry must match the podIP field.
        /// Pods may be allocated at most 1 value for each of IPv4 and IPv6.
        /// This list is empty if no IPs have been allocated yet.
        /// </summary>
        [JsonProperty(PropertyName = "podIPs")]
        public IList<V1PodIP> PodIPs { get; set; }

        /// <summary>
        /// Gets or sets the Quality of Service (QOS) classification assigned
        /// to the pod based on resource requirements See PodQOSClass type for
        /// available QOS classes More info:
        /// https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
        /// </summary>
        [JsonProperty(PropertyName = "qosClass")]
        public string QosClass { get; set; }

        /// <summary>
        /// Gets or sets a brief CamelCase message indicating details about why
        /// the pod is in this state. e.g. 'Evicted'
        /// </summary>
        [JsonProperty(PropertyName = "reason")]
        public string Reason { get; set; }

        /// <summary>
        /// Gets or sets RFC 3339 date and time at which the object was
        /// acknowledged by the Kubelet. This is before the Kubelet pulled the
        /// container image(s) for the pod.
        /// </summary>
        [JsonProperty(PropertyName = "startTime")]
        public System.DateTime? StartTime { get; set; }

    }
}
