From 76ea287332c076d63b2f5ecb74a970c69a64cfc4 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Sat, 1 Jun 2019 09:46:47 -0700 Subject: [PATCH] Support error handler callback for node status (#648) This moves the logic for re-creating the a missing node up into the CLI. We can make this optional, but for now I've just preserved existing functionality. --- virtual-kubelet/commands/root/root.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/virtual-kubelet/commands/root/root.go b/virtual-kubelet/commands/root/root.go index 4ba7b9d..aa64890 100644 --- a/virtual-kubelet/commands/root/root.go +++ b/virtual-kubelet/commands/root/root.go @@ -29,6 +29,7 @@ import ( "github.com/virtual-kubelet/virtual-kubelet/providers/register" "github.com/virtual-kubelet/virtual-kubelet/vkubelet" corev1 "k8s.io/api/core/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" kubeinformers "k8s.io/client-go/informers" @@ -146,6 +147,21 @@ func runRootCommand(ctx context.Context, c Opts) error { client.CoordinationV1beta1().Leases(corev1.NamespaceNodeLease), client.CoreV1().Nodes(), vkubelet.WithNodeDisableLease(!c.EnableNodeLease), + vkubelet.WithNodeStatusUpdateErrorHandler(func(ctx context.Context, err error) error { + if !k8serrors.IsNotFound(err) { + return err + } + + log.G(ctx).Debug("node not found") + newNode := pNode.DeepCopy() + newNode.ResourceVersion = "" + _, err = client.CoreV1().Nodes().Create(newNode) + if err != nil { + return err + } + log.G(ctx).Debug("created new node") + return nil + }), ) if err != nil { log.G(ctx).Fatal(err)