...

Source file src/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/defaults.go

Documentation: k8s.io/kubernetes/pkg/apis/extensions/v1beta1

     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  }
   171  

View as plain text