Skip to content

Commit 9962272

Browse files
authored
Merge pull request #2330 from newrelic-forks/ms-default-labels
✨set default for machineset labels
2 parents ccd6f55 + 3fbeb1d commit 9962272

File tree

6 files changed

+63
-28
lines changed

6 files changed

+63
-28
lines changed

api/v1alpha3/machineset_types.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ limitations under the License.
1717
package v1alpha3
1818

1919
import (
20-
"log"
21-
2220
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2321
metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
2422
"k8s.io/apimachinery/pkg/labels"
@@ -184,26 +182,6 @@ func (m *MachineSet) Validate() field.ErrorList {
184182
return errors
185183
}
186184

187-
// DefaultingFunction sets default MachineSet field values.
188-
func (m *MachineSet) Default() {
189-
log.Printf("Defaulting fields for MachineSet %s\n", m.Name)
190-
191-
if m.Spec.Replicas == nil {
192-
m.Spec.Replicas = new(int32)
193-
*m.Spec.Replicas = 1
194-
}
195-
196-
if len(m.Namespace) == 0 {
197-
m.Namespace = metav1.NamespaceDefault
198-
}
199-
200-
if m.Spec.DeletePolicy == "" {
201-
randomPolicy := string(RandomMachineSetDeletePolicy)
202-
log.Printf("Defaulting to %s\n", randomPolicy)
203-
m.Spec.DeletePolicy = randomPolicy
204-
}
205-
}
206-
207185
// +kubebuilder:object:root=true
208186
// +kubebuilder:resource:path=machinesets,shortName=ms,scope=Namespaced,categories=cluster-api
209187
// +kubebuilder:storageversion

api/v1alpha3/machineset_webhook.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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{}
3942
var _ 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
4270
func (m *MachineSet) ValidateCreate() error {
4371
return m.validate()

api/v1alpha3/machineset_webhook_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,25 @@ import (
2121

2222
. "github.com/onsi/gomega"
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
"k8s.io/utils/pointer"
2425
)
2526

27+
func TestMachineSetDefault(t *testing.T) {
28+
g := NewWithT(t)
29+
md := &MachineSet{
30+
ObjectMeta: metav1.ObjectMeta{
31+
Name: "test-ms",
32+
},
33+
}
34+
35+
md.Default()
36+
37+
g.Expect(md.Spec.Replicas).To(Equal(pointer.Int32Ptr(1)))
38+
g.Expect(md.Spec.DeletePolicy).To(Equal(string(RandomMachineSetDeletePolicy)))
39+
g.Expect(md.Spec.Selector.MatchLabels).To(HaveKeyWithValue(MachineSetLabelName, "test-ms"))
40+
g.Expect(md.Spec.Template.Labels).To(HaveKeyWithValue(MachineSetLabelName, "test-ms"))
41+
}
42+
2643
func TestMachineSetLabelSelectorMatchValidation(t *testing.T) {
2744
tests := []struct {
2845
name string

config/webhook/manifests.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,24 @@ webhooks:
9696
- UPDATE
9797
resources:
9898
- machinepools
99+
- clientConfig:
100+
caBundle: Cg==
101+
service:
102+
name: webhook-service
103+
namespace: system
104+
path: /mutate-cluster-x-k8s-io-v1alpha3-machineset
105+
failurePolicy: Fail
106+
name: default.machineset.cluster.x-k8s.io
107+
rules:
108+
- apiGroups:
109+
- cluster.x-k8s.io
110+
apiVersions:
111+
- v1alpha3
112+
operations:
113+
- CREATE
114+
- UPDATE
115+
resources:
116+
- machinesets
99117

100118
---
101119
apiVersion: admissionregistration.k8s.io/v1beta1

controllers/machinedeployment_controller_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ var _ = Describe("MachineDeployment Reconciler", func() {
193193
By("Verify machines have expected MachineSetLabelName and MachineDeploymentLabelName")
194194
for _, m := range machines.Items {
195195
Expect(m.Labels[clusterv1.ClusterLabelName]).To(Equal(testCluster.Name))
196-
Expect(m.Labels[clusterv1.MachineSetLabelName]).To(Equal(machineSets.Items[0].Name))
197196
}
198197

199198
firstMachineSet := machineSets.Items[0]

controllers/machineset_controller_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,6 @@ var _ = Describe("MachineSet Reconciler", func() {
195195
return len(machines.Items)
196196
}, timeout).Should(BeEquivalentTo(replicas))
197197

198-
// Verify that machines has MachineSetLabelName label
199-
for _, m := range machines.Items {
200-
Expect(m.Labels[clusterv1.MachineSetLabelName]).To(Equal(instance.Name))
201-
}
202-
203198
// Set the infrastructure reference as ready.
204199
for _, m := range machines.Items {
205200
fakeInfrastructureRefReady(m.Spec.InfrastructureRef, infraResource)

0 commit comments

Comments
 (0)