daemon/cluster: handle partial attachment entries during configure
We have seen a panic when re-joining a node to a swarm cluster. The
cause of the issue is unknown, so we just need to add a test for nil
objects and log when we get the condition. Hopefully this can prevent
the crash and we can recover the config at a later time.
Signed-off-by: Stephen J Day <stephen.day@docker.com>
(cherry picked from commit 454128c6e82cded211c1412e3eb350b1f7533ee2)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
diff --git a/daemon/cluster/executor/container/executor.go b/daemon/cluster/executor/container/executor.go
index 2c4f619..da245ed 100644
--- a/daemon/cluster/executor/container/executor.go
+++ b/daemon/cluster/executor/container/executor.go
@@ -141,13 +141,22 @@
attachments := make(map[string]string)
for _, na := range node.Attachments {
+ if na == nil || na.Network == nil || len(na.Addresses) == 0 {
+ // this should not happen, but we got a panic here and don't have a
+ // good idea about what the underlying data structure looks like.
+ logrus.WithField("NetworkAttachment", fmt.Sprintf("%#v", na)).
+ Warnf("skipping nil or malformed node network attachment entry")
+ continue
+ }
+
if na.Network.Spec.Ingress {
ingressNA = na
}
+
attachments[na.Network.ID] = na.Addresses[0]
}
- if (ingressNA == nil) && (node.Attachment != nil) {
+ if (ingressNA == nil) && (node.Attachment != nil) && (len(node.Attachment.Addresses) > 0) {
ingressNA = node.Attachment
attachments[ingressNA.Network.ID] = ingressNA.Addresses[0]
}