Skip to content

Commit 61b5b1b

Browse files
controller: update is node done check to handle image mode disabling case
1 parent 151424a commit 61b5b1b

File tree

2 files changed

+15
-54
lines changed

2 files changed

+15
-54
lines changed

pkg/controller/common/layered_node_state.go

Lines changed: 15 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,16 @@ func NewLayeredNodeState(n *corev1.Node) *LayeredNodeState {
2626
return &LayeredNodeState{node: n}
2727
}
2828

29-
// Checks if the node is done "working" and that the node is targeting is MachineConfig
30-
// determined by the pool. If in layered mode, the image annotations are also checked
31-
// checked against the OCL objects.
29+
// Checks if the node is done "working." For a node in both layered and non-layered MCPs, the
30+
// node's state annotation must be "Done" and it must be targeting the correct MachineConfig. For
31+
// `layered` MCPs, the node's desired image annotation must match the image defined in the
32+
// MachineOsConfig and the desired MachineConfig must match the config version defined in the
33+
// MachineOSBuild. For non-layered MCPs, the node must not have a desired image annotation value.
3234
func (l *LayeredNodeState) IsDone(mcp *mcfgv1.MachineConfigPool, layered bool, mosc *mcfgv1.MachineOSConfig, mosb *mcfgv1.MachineOSBuild) bool {
33-
// if layered {
34-
// klog.Errorf("in IsDone and layered")
35-
// return l.IsNodeDone() && l.IsDesiredMachineConfigEqualToPool(mcp) && l.IsDesiredEqualToBuild(mosc, mosb)
36-
// }
37-
// klog.Errorf("in IsDone and NOT layered")
38-
// return l.IsNodeDone() && l.IsDesiredMachineConfigEqualToPool(mcp)
39-
return l.IsNodeDone() && l.IsDesiredMachineConfigEqualToPool(mcp) && l.IsDesiredEqualToBuild(mosc, mosb)
35+
if layered {
36+
return l.IsNodeDone() && l.IsDesiredMachineConfigEqualToPool(mcp) && l.IsDesiredEqualToBuild(mosc, mosb)
37+
}
38+
return l.IsNodeDone() && l.IsDesiredMachineConfigEqualToPool(mcp) && !l.IsDesiredImageAnnotationPresentOnNode()
4039
}
4140

4241
// The original behavior of getUnavailableMachines is: getUnavailableMachines
@@ -70,28 +69,19 @@ func (l *LayeredNodeState) IsUnavailableForUpdate() bool {
7069
// node's desired image annotation and compares the MachineConfig specified by the
7170
// MachineOSBuild to the one specified by the node's desired MachineConfig annotation.
7271
func (l *LayeredNodeState) IsDesiredEqualToBuild(mosc *mcfgv1.MachineOSConfig, mosb *mcfgv1.MachineOSBuild) bool {
73-
klog.Errorf("in IsDesiredEqualToBuild")
74-
return l.isDesiredImageEqualToMachineOSConfig(mosc) && l.isDesiredMachineConfigEqualToBuild(mosb)
72+
return (mosc != nil && l.isDesiredImageEqualToMachineOSConfig(mosc)) && (mosb != nil && l.isDesiredMachineConfigEqualToBuild(mosb))
7573
}
7674

7775
// Compares the desired image annotation on the node against the CurrentImagePullSpec
7876
// specified by the MachineOSConfig object.
7977
func (l *LayeredNodeState) isDesiredImageEqualToMachineOSConfig(mosc *mcfgv1.MachineOSConfig) bool {
80-
klog.Errorf("in isDesiredImageEqualToMachineOSConfig")
8178
return l.isImageAnnotationEqualToMachineOSConfig(daemonconsts.DesiredImageAnnotationKey, mosc)
8279
}
8380

8481
// Compares the MachineConfig specified by the MachineConfigPool to the MachineConfig
8582
// specified by the node's desired MachineConfig annotation.
8683
func (l *LayeredNodeState) isDesiredMachineConfigEqualToBuild(mosb *mcfgv1.MachineOSBuild) bool {
87-
mosbName := ""
88-
// Handle case when MOSB is nil (image mode is being disabled)
89-
if mosb != nil {
90-
// TODO: check if this comes back as nil or empty string
91-
mosbName = mosb.Spec.MachineConfig.Name
92-
}
93-
94-
return l.node.Annotations[daemonconsts.DesiredMachineConfigAnnotationKey] == mosbName
84+
return l.node.Annotations[daemonconsts.DesiredMachineConfigAnnotationKey] == mosb.Spec.MachineConfig.Name
9585

9686
}
9787

@@ -104,9 +94,7 @@ func (l *LayeredNodeState) IsCurrentMachineConfigEqualToPool(mcp *mcfgv1.Machine
10494
// Compares the MachineConfig specified by the MachineConfigPool to the one
10595
// specified by the node's desired MachineConfig annotation.
10696
func (l *LayeredNodeState) IsDesiredMachineConfigEqualToPool(mcp *mcfgv1.MachineConfigPool) bool {
107-
ret := l.node.Annotations[daemonconsts.DesiredMachineConfigAnnotationKey] == mcp.Spec.Configuration.Name
108-
klog.Errorf("in IsDesiredMachineConfigEqualToPool, returning %v", ret)
109-
return ret
97+
return l.node.Annotations[daemonconsts.DesiredMachineConfigAnnotationKey] == mcp.Spec.Configuration.Name
11098
}
11199

112100
// Checks if both the current and desired image annotation are present on the node.
@@ -127,42 +115,23 @@ func (l *LayeredNodeState) IsCurrentImageAnnotationPresentOnNode() bool {
127115
// Compares the CurrentImagePullSpec specified by the MachineOSConfig object against the
128116
// image specified by the annotation passed in.
129117
func (l *LayeredNodeState) isImageAnnotationEqualToMachineOSConfig(anno string, mosc *mcfgv1.MachineOSConfig) bool {
130-
moscImage := ""
131-
132-
// // Handle case when MOSC is nil (image mode is being disabled)
133-
// if mosc != nil {
134-
// // TOOD: check if this comes back as nil or empty string
135-
// return moscName =
136-
// }
118+
moscs := NewMachineOSConfigState(mosc)
137119

138-
// Get the image annotation from the node
139120
val, ok := l.node.Annotations[anno]
140-
klog.Errorf("in isImageAnnotationEqualToMachineOSConfig, val: %v, ok: %v", val, ok)
141-
142-
// // Handle case when MOSC is nil (image mode is being disabled)
143-
// if mosc == nil {
144-
// // TOOD: check if this comes back as nil or empty string
145-
// return val == ""
146-
// }
147121

148122
// If a layered node does not have an image annotation and has a valid MOSC, then the image is being built
149123
if val == "" || !ok {
150-
klog.Errorf("in isImageAnnotationEqualToMachineOSConfig returning false cause val == '' or !ok")
151124
return false
152125
}
153126

154-
// Get the MachineOSConfigState
155-
moscs := NewMachineOSConfigState(mosc)
156-
klog.Errorf("in isImageAnnotationEqualToMachineOSConfig with moscs")
157-
158127
if moscs.HasOSImage() {
159128
// If the MOSC image has an image, the image annotation on the node can be directly compared.
160-
moscImage = moscs.GetOSImage()
129+
return moscs.GetOSImage() == val
161130
}
162131

163132
// If the MOSC does not have an image, but the node has an older image annotation, the image is still likely
164133
// being built.
165-
return moscImage == val
134+
return false
166135
}
167136

168137
// Sets the desired MachineConfig annotations from the MachineConfigPool.
@@ -208,26 +177,21 @@ func (l *LayeredNodeState) Node() *corev1.Node {
208177
// isNodeDone returns true if the current == desired and the MCD has marked done.
209178
func (l *LayeredNodeState) IsNodeDone() bool {
210179
if l.node.Annotations == nil {
211-
klog.Error("in IsNodeDone, returning false, 1")
212180
return false
213181
}
214182

215183
if !l.isNodeConfigDone() {
216-
klog.Error("in IsNodeDone, returning false, 2")
217184
return false
218185
}
219186

220187
if !l.isNodeImageDone() {
221-
klog.Error("in IsNodeDone, returning false, 3")
222188
return false
223189
}
224190

225191
if !l.isNodeMCDState(daemonconsts.MachineConfigDaemonStateDone) {
226-
klog.Error("in IsNodeDone, returning false, 4")
227192
return false
228193
}
229194

230-
klog.Error("in IsNodeDone, returning true")
231195
return true
232196
}
233197

pkg/controller/node/status.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ func (ctrl *Controller) calculateStatus(mcs []*mcfgv1.MachineConfigNode, cconfig
206206

207207
// this is # 1 priority, get the upgrade states actually reporting
208208
if degradedMachineCount+readyMachineCount+unavailableMachineCount+updatingMachineCount != int32(len(nodes)) {
209-
klog.Errorf("In degraded + ready + unavailable + updating != nodes...")
210209

211210
updatedMachines = getUpdatedMachines(pool, nodes, mosc, mosb, isLayeredPool)
212211
updatedMachineCount = int32(len(updatedMachines))
@@ -219,8 +218,6 @@ func (ctrl *Controller) calculateStatus(mcs []*mcfgv1.MachineConfigNode, cconfig
219218

220219
degradedMachines = getDegradedMachines(nodes)
221220
degradedMachineCount = int32(len(degradedMachines))
222-
} else {
223-
klog.Errorf("In degraded + ready + unavailable + updating == nodes... Not where we want to be.")
224221
}
225222

226223
for _, n := range degradedMachines {

0 commit comments

Comments
 (0)