defaults.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. Copyright 2015 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package v1beta1
  14. import (
  15. "math"
  16. "k8s.io/api/core/v1"
  17. extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
  18. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  19. "k8s.io/apimachinery/pkg/runtime"
  20. "k8s.io/apimachinery/pkg/util/intstr"
  21. )
  22. func addDefaultingFuncs(scheme *runtime.Scheme) error {
  23. return RegisterDefaults(scheme)
  24. }
  25. func SetDefaults_DaemonSet(obj *extensionsv1beta1.DaemonSet) {
  26. labels := obj.Spec.Template.Labels
  27. // TODO: support templates defined elsewhere when we support them in the API
  28. if labels != nil {
  29. if obj.Spec.Selector == nil {
  30. obj.Spec.Selector = &metav1.LabelSelector{
  31. MatchLabels: labels,
  32. }
  33. }
  34. if len(obj.Labels) == 0 {
  35. obj.Labels = labels
  36. }
  37. }
  38. updateStrategy := &obj.Spec.UpdateStrategy
  39. if updateStrategy.Type == "" {
  40. updateStrategy.Type = extensionsv1beta1.OnDeleteDaemonSetStrategyType
  41. }
  42. if updateStrategy.Type == extensionsv1beta1.RollingUpdateDaemonSetStrategyType {
  43. if updateStrategy.RollingUpdate == nil {
  44. rollingUpdate := extensionsv1beta1.RollingUpdateDaemonSet{}
  45. updateStrategy.RollingUpdate = &rollingUpdate
  46. }
  47. if updateStrategy.RollingUpdate.MaxUnavailable == nil {
  48. // Set default MaxUnavailable as 1 by default.
  49. maxUnavailable := intstr.FromInt(1)
  50. updateStrategy.RollingUpdate.MaxUnavailable = &maxUnavailable
  51. }
  52. }
  53. if obj.Spec.RevisionHistoryLimit == nil {
  54. obj.Spec.RevisionHistoryLimit = new(int32)
  55. *obj.Spec.RevisionHistoryLimit = 10
  56. }
  57. }
  58. func SetDefaults_PodSecurityPolicySpec(obj *extensionsv1beta1.PodSecurityPolicySpec) {
  59. // This field was added after PodSecurityPolicy was released.
  60. // Policies that do not include this field must remain as permissive as they were prior to the introduction of this field.
  61. if obj.AllowPrivilegeEscalation == nil {
  62. t := true
  63. obj.AllowPrivilegeEscalation = &t
  64. }
  65. }
  66. func SetDefaults_Deployment(obj *extensionsv1beta1.Deployment) {
  67. // Default labels and selector to labels from pod template spec.
  68. labels := obj.Spec.Template.Labels
  69. if labels != nil {
  70. if obj.Spec.Selector == nil {
  71. obj.Spec.Selector = &metav1.LabelSelector{MatchLabels: labels}
  72. }
  73. if len(obj.Labels) == 0 {
  74. obj.Labels = labels
  75. }
  76. }
  77. // Set extensionsv1beta1.DeploymentSpec.Replicas to 1 if it is not set.
  78. if obj.Spec.Replicas == nil {
  79. obj.Spec.Replicas = new(int32)
  80. *obj.Spec.Replicas = 1
  81. }
  82. strategy := &obj.Spec.Strategy
  83. // Set default extensionsv1beta1.DeploymentStrategyType as RollingUpdate.
  84. if strategy.Type == "" {
  85. strategy.Type = extensionsv1beta1.RollingUpdateDeploymentStrategyType
  86. }
  87. if strategy.Type == extensionsv1beta1.RollingUpdateDeploymentStrategyType || strategy.RollingUpdate != nil {
  88. if strategy.RollingUpdate == nil {
  89. rollingUpdate := extensionsv1beta1.RollingUpdateDeployment{}
  90. strategy.RollingUpdate = &rollingUpdate
  91. }
  92. if strategy.RollingUpdate.MaxUnavailable == nil {
  93. // Set default MaxUnavailable as 1 by default.
  94. maxUnavailable := intstr.FromInt(1)
  95. strategy.RollingUpdate.MaxUnavailable = &maxUnavailable
  96. }
  97. if strategy.RollingUpdate.MaxSurge == nil {
  98. // Set default MaxSurge as 1 by default.
  99. maxSurge := intstr.FromInt(1)
  100. strategy.RollingUpdate.MaxSurge = &maxSurge
  101. }
  102. }
  103. // Set extensionsv1beta1.DeploymentSpec.ProgressDeadlineSeconds to MaxInt,
  104. // which has the same meaning as unset.
  105. if obj.Spec.ProgressDeadlineSeconds == nil {
  106. obj.Spec.ProgressDeadlineSeconds = new(int32)
  107. *obj.Spec.ProgressDeadlineSeconds = math.MaxInt32
  108. }
  109. // Set extensionsv1beta1.DeploymentSpec.RevisionHistoryLimit to MaxInt32,
  110. // which has the same meaning as unset.
  111. if obj.Spec.RevisionHistoryLimit == nil {
  112. obj.Spec.RevisionHistoryLimit = new(int32)
  113. *obj.Spec.RevisionHistoryLimit = math.MaxInt32
  114. }
  115. }
  116. func SetDefaults_ReplicaSet(obj *extensionsv1beta1.ReplicaSet) {
  117. labels := obj.Spec.Template.Labels
  118. // TODO: support templates defined elsewhere when we support them in the API
  119. if labels != nil {
  120. if obj.Spec.Selector == nil {
  121. obj.Spec.Selector = &metav1.LabelSelector{
  122. MatchLabels: labels,
  123. }
  124. }
  125. if len(obj.Labels) == 0 {
  126. obj.Labels = labels
  127. }
  128. }
  129. if obj.Spec.Replicas == nil {
  130. obj.Spec.Replicas = new(int32)
  131. *obj.Spec.Replicas = 1
  132. }
  133. }
  134. func SetDefaults_NetworkPolicy(obj *extensionsv1beta1.NetworkPolicy) {
  135. // Default any undefined Protocol fields to TCP.
  136. for _, i := range obj.Spec.Ingress {
  137. for _, p := range i.Ports {
  138. if p.Protocol == nil {
  139. proto := v1.ProtocolTCP
  140. p.Protocol = &proto
  141. }
  142. }
  143. }
  144. if len(obj.Spec.PolicyTypes) == 0 {
  145. // Any policy that does not specify policyTypes implies at least "Ingress".
  146. obj.Spec.PolicyTypes = []extensionsv1beta1.PolicyType{extensionsv1beta1.PolicyTypeIngress}
  147. if len(obj.Spec.Egress) != 0 {
  148. obj.Spec.PolicyTypes = append(obj.Spec.PolicyTypes, extensionsv1beta1.PolicyTypeEgress)
  149. }
  150. }
  151. }