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.
This commit is contained in:
@@ -29,6 +29,7 @@ import (
|
|||||||
"github.com/virtual-kubelet/virtual-kubelet/providers/register"
|
"github.com/virtual-kubelet/virtual-kubelet/providers/register"
|
||||||
"github.com/virtual-kubelet/virtual-kubelet/vkubelet"
|
"github.com/virtual-kubelet/virtual-kubelet/vkubelet"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
kubeinformers "k8s.io/client-go/informers"
|
kubeinformers "k8s.io/client-go/informers"
|
||||||
@@ -146,6 +147,21 @@ func runRootCommand(ctx context.Context, c Opts) error {
|
|||||||
client.CoordinationV1beta1().Leases(corev1.NamespaceNodeLease),
|
client.CoordinationV1beta1().Leases(corev1.NamespaceNodeLease),
|
||||||
client.CoreV1().Nodes(),
|
client.CoreV1().Nodes(),
|
||||||
vkubelet.WithNodeDisableLease(!c.EnableNodeLease),
|
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 {
|
if err != nil {
|
||||||
log.G(ctx).Fatal(err)
|
log.G(ctx).Fatal(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user