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