// <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.Linq;

    /// <summary>
    /// Spec to control the desired behavior of rolling update.
    /// </summary>
    public partial class V1RollingUpdateDeployment
    {
        /// <summary>
        /// Initializes a new instance of the V1RollingUpdateDeployment class.
        /// </summary>
        public V1RollingUpdateDeployment()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1RollingUpdateDeployment class.
        /// </summary>
        /// <param name="maxSurge">The maximum number of pods that can be
        /// scheduled above the desired number of pods. Value can be an
        /// absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
        /// This can not be 0 if MaxUnavailable is 0. Absolute number is
        /// calculated from percentage by rounding up. Defaults to 25%.
        /// Example: when this is set to 30%, the new ReplicaSet can be scaled
        /// up immediately when the rolling update starts, such that the total
        /// number of old and new pods do not exceed 130% of desired pods. Once
        /// old pods have been killed, new ReplicaSet can be scaled up further,
        /// ensuring that total number of pods running at any time during the
        /// update is at most 130% of desired pods.</param>
        /// <param name="maxUnavailable">The maximum number of pods that can be
        /// unavailable during the update. Value can be an absolute number (ex:
        /// 5) or a percentage of desired pods (ex: 10%). Absolute number is
        /// calculated from percentage by rounding down. This can not be 0 if
        /// MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%,
        /// the old ReplicaSet can be scaled down to 70% of desired pods
        /// immediately when the rolling update starts. Once new pods are
        /// ready, old ReplicaSet can be scaled down further, followed by
        /// scaling up the new ReplicaSet, ensuring that the total number of
        /// pods available at all times during the update is at least 70% of
        /// desired pods.</param>
        public V1RollingUpdateDeployment(IntstrIntOrString maxSurge = default(IntstrIntOrString), IntstrIntOrString maxUnavailable = default(IntstrIntOrString))
        {
            MaxSurge = maxSurge;
            MaxUnavailable = maxUnavailable;
            CustomInit();
        }

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

        /// <summary>
        /// Gets or sets the maximum number of pods that can be scheduled above
        /// the desired number of pods. Value can be an absolute number (ex: 5)
        /// or a percentage of desired pods (ex: 10%). This can not be 0 if
        /// MaxUnavailable is 0. Absolute number is calculated from percentage
        /// by rounding up. Defaults to 25%. Example: when this is set to 30%,
        /// the new ReplicaSet can be scaled up immediately when the rolling
        /// update starts, such that the total number of old and new pods do
        /// not exceed 130% of desired pods. Once old pods have been killed,
        /// new ReplicaSet can be scaled up further, ensuring that total number
        /// of pods running at any time during the update is at most 130% of
        /// desired pods.
        /// </summary>
        [JsonProperty(PropertyName = "maxSurge")]
        public IntstrIntOrString MaxSurge { get; set; }

        /// <summary>
        /// Gets or sets the maximum number of pods that can be unavailable
        /// during the update. Value can be an absolute number (ex: 5) or a
        /// percentage of desired pods (ex: 10%). Absolute number is calculated
        /// from percentage by rounding down. This can not be 0 if MaxSurge is
        /// 0. Defaults to 25%. Example: when this is set to 30%, the old
        /// ReplicaSet can be scaled down to 70% of desired pods immediately
        /// when the rolling update starts. Once new pods are ready, old
        /// ReplicaSet can be scaled down further, followed by scaling up the
        /// new ReplicaSet, ensuring that the total number of pods available at
        /// all times during the update is at least 70% of desired pods.
        /// </summary>
        [JsonProperty(PropertyName = "maxUnavailable")]
        public IntstrIntOrString MaxUnavailable { get; set; }

    }
}
