Skip to content

Commit f95bc2b

Browse files
committed
Stronger link between Machine* <-> Cluster
Signed-off-by: Vince Prignano <[email protected]>
1 parent 14b40f3 commit f95bc2b

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

Gopkg.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/controller/machine/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ go_library(
1616
"//vendor/k8s.io/api/core/v1:go_default_library",
1717
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
1818
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
19+
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
1920
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
2021
"//vendor/k8s.io/klog:go_default_library",
2122
"//vendor/sigs.k8s.io/controller-runtime/pkg/client:go_default_library",

pkg/controller/machine/controller.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"errors"
2222
"os"
2323

24+
"k8s.io/apimachinery/pkg/fields"
25+
2426
corev1 "k8s.io/api/core/v1"
2527
apierrors "k8s.io/apimachinery/pkg/api/errors"
2628
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -37,7 +39,10 @@ import (
3739
"sigs.k8s.io/controller-runtime/pkg/source"
3840
)
3941

40-
const NodeNameEnvVar = "NODE_NAME"
42+
const (
43+
NodeNameEnvVar = "NODE_NAME"
44+
MachineClusterLabelName = "cluster.k8s.io/clusterName"
45+
)
4146

4247
var DefaultActuator Actuator
4348

@@ -117,8 +122,7 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
117122
// for machine management.
118123
cluster, err := r.getCluster(ctx, m)
119124
if err != nil {
120-
// Just log the error here.
121-
klog.V(4).Infof("Cluster not found, machine actuation might fail: %v", err)
125+
return reconcile.Result{}, err
122126
}
123127
// If object hasn't been deleted and doesn't have a finalizer, add one
124128
// Add a finalizer to newly created objects.
@@ -194,9 +198,15 @@ func (r *ReconcileMachine) Reconcile(request reconcile.Request) (reconcile.Resul
194198
}
195199

196200
func (r *ReconcileMachine) getCluster(ctx context.Context, machine *clusterv1.Machine) (*clusterv1.Cluster, error) {
201+
if machine.Labels[MachineClusterLabelName] == "" {
202+
klog.Infof("Machine %q in namespace %q doesn't specify %q label, assuming nil cluster", machine.Name, MachineClusterLabelName, machine.Namespace)
203+
return nil, nil
204+
}
205+
197206
clusterList := clusterv1.ClusterList{}
198207
listOptions := &client.ListOptions{
199-
Namespace: machine.Namespace,
208+
FieldSelector: fields.OneTermEqualSelector("metadata.name", machine.Labels[MachineClusterLabelName]),
209+
Namespace: machine.Namespace,
200210
// This is set so the fake client can be used for unit test. See:
201211
// https://github.com/kubernetes-sigs/controller-runtime/issues/168
202212
Raw: &metav1.ListOptions{

pkg/controller/machine/controller_test.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ func TestReconcileRequest(t *testing.T) {
3737
Name: "create",
3838
Namespace: "default",
3939
Finalizers: []string{v1alpha1.MachineFinalizer},
40+
Labels: map[string]string{
41+
MachineClusterLabelName: "testcluster",
42+
},
4043
},
4144
}
4245
machine2 := v1alpha1.Machine{
@@ -47,6 +50,9 @@ func TestReconcileRequest(t *testing.T) {
4750
Name: "update",
4851
Namespace: "default",
4952
Finalizers: []string{v1alpha1.MachineFinalizer},
53+
Labels: map[string]string{
54+
MachineClusterLabelName: "testcluster",
55+
},
5056
},
5157
}
5258
time := metav1.Now()
@@ -59,6 +65,9 @@ func TestReconcileRequest(t *testing.T) {
5965
Namespace: "default",
6066
Finalizers: []string{v1alpha1.MachineFinalizer},
6167
DeletionTimestamp: &time,
68+
Labels: map[string]string{
69+
MachineClusterLabelName: "testcluster",
70+
},
6271
},
6372
}
6473
clusterList := v1alpha1.ClusterList{
@@ -71,10 +80,19 @@ func TestReconcileRequest(t *testing.T) {
7180
Kind: "Cluster",
7281
},
7382
ObjectMeta: metav1.ObjectMeta{
74-
Name: "cluster",
83+
Name: "testcluster",
7584
Namespace: "default",
7685
},
7786
},
87+
{
88+
TypeMeta: metav1.TypeMeta{
89+
Kind: "Cluster",
90+
},
91+
ObjectMeta: metav1.ObjectMeta{
92+
Name: "rainbow",
93+
Namespace: "foo",
94+
},
95+
},
7896
},
7997
}
8098

pkg/controller/machinedeployment/util/util_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,6 @@ func TestMaxUnavailable(t *testing.T) {
698698
}
699699

700700
for _, test := range tests {
701-
t.Log(test.name)
702701
t.Run(test.name, func(t *testing.T) {
703702
maxUnavailable := MaxUnavailable(test.deployment)
704703
if test.expected != maxUnavailable {

0 commit comments

Comments
 (0)