@@ -24,6 +24,7 @@ import (
2424 "k8s.io/apimachinery/pkg/labels"
2525 runtime "k8s.io/apimachinery/pkg/runtime"
2626 "k8s.io/apimachinery/pkg/util/validation/field"
27+ "k8s.io/utils/pointer"
2728 ctrl "sigs.k8s.io/controller-runtime"
2829 "sigs.k8s.io/controller-runtime/pkg/webhook"
2930)
@@ -35,9 +36,36 @@ func (m *MachineSet) SetupWebhookWithManager(mgr ctrl.Manager) error {
3536}
3637
3738// +kubebuilder:webhook:verbs=create;update,path=/validate-cluster-x-k8s-io-v1alpha3-machineset,mutating=false,failurePolicy=fail,groups=cluster.x-k8s.io,resources=machinesets,versions=v1alpha3,name=validation.machineset.cluster.x-k8s.io
39+ // +kubebuilder:webhook:verbs=create;update,path=/mutate-cluster-x-k8s-io-v1alpha3-machineset,mutating=true,failurePolicy=fail,groups=cluster.x-k8s.io,resources=machinesets,versions=v1alpha3,name=default.machineset.cluster.x-k8s.io
3840
41+ var _ webhook.Defaulter = & MachineSet {}
3942var _ webhook.Validator = & MachineSet {}
4043
44+ // DefaultingFunction sets default MachineSet field values.
45+ func (m * MachineSet ) Default () {
46+ if m .Spec .Replicas == nil {
47+ m .Spec .Replicas = pointer .Int32Ptr (1 )
48+ }
49+
50+ if m .Spec .DeletePolicy == "" {
51+ randomPolicy := string (RandomMachineSetDeletePolicy )
52+ m .Spec .DeletePolicy = randomPolicy
53+ }
54+
55+ if m .Spec .Selector .MatchLabels == nil {
56+ m .Spec .Selector .MatchLabels = make (map [string ]string )
57+ }
58+
59+ if m .Spec .Template .Labels == nil {
60+ m .Spec .Template .Labels = make (map [string ]string )
61+ }
62+
63+ if len (m .Spec .Selector .MatchLabels ) == 0 && len (m .Spec .Selector .MatchExpressions ) == 0 {
64+ m .Spec .Selector .MatchLabels [MachineSetLabelName ] = m .Name
65+ m .Spec .Template .Labels [MachineSetLabelName ] = m .Name
66+ }
67+ }
68+
4169// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
4270func (m * MachineSet ) ValidateCreate () error {
4371 return m .validate ()
0 commit comments