k3s/pkg/etcd/controller.go

90 lines
2.1 KiB
Go
Raw Normal View History

package etcd
import (
"context"
"os"
"time"
controllerv1 "github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1"
"github.com/sirupsen/logrus"
v1 "k8s.io/api/core/v1"
)
const (
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
NodeID = "etcd.k3s.cattle.io/node-name"
NodeAddress = "etcd.k3s.cattle.io/node-address"
master = "node-role.kubernetes.io/master"
etcdRole = "node-role.kubernetes.io/etcd"
)
type NodeControllerGetter func() controllerv1.NodeController
func Register(ctx context.Context, etcd *ETCD, nodes controllerv1.NodeController) {
h := &handler{
etcd: etcd,
nodeController: nodes,
ctx: ctx,
}
nodes.OnChange(ctx, "managed-etcd-controller", h.sync)
nodes.OnRemove(ctx, "managed-etcd-controller", h.onRemove)
}
type handler struct {
etcd *ETCD
nodeController controllerv1.NodeController
ctx context.Context
}
func (h *handler) sync(key string, node *v1.Node) (*v1.Node, error) {
if node == nil {
return nil, nil
}
nodeName := os.Getenv("NODE_NAME")
if nodeName == "" {
logrus.Debug("waiting for node to be assigned for etcd controller")
h.nodeController.EnqueueAfter(key, 5*time.Second)
return node, nil
}
if key == nodeName {
return h.handleSelf(node)
}
return node, nil
}
func (h *handler) handleSelf(node *v1.Node) (*v1.Node, error) {
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
if node.Annotations[NodeID] == h.etcd.name &&
node.Annotations[NodeAddress] == h.etcd.address &&
node.Labels[etcdRole] == "true" &&
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
node.Labels[master] == "true" ||
h.etcd.config.DisableETCD {
return node, nil
}
node = node.DeepCopy()
if node.Annotations == nil {
node.Annotations = map[string]string{}
}
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
node.Annotations[NodeID] = h.etcd.name
node.Annotations[NodeAddress] = h.etcd.address
node.Labels[etcdRole] = "true"
node.Labels[master] = "true"
return h.nodeController.Update(node)
}
func (h *handler) onRemove(key string, node *v1.Node) (*v1.Node, error) {
if _, ok := node.Labels[etcdRole]; !ok {
return node, nil
}
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
id := node.Annotations[NodeID]
address, ok := node.Annotations[NodeAddress]
if !ok {
return node, nil
}
[release-1.19] Add disable components flags (#3023) * Add disable flags for control components (#2900) * Add disable flags to control components Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fixes to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add comments to functions Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Fix joining problem Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * golint Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix ticker Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * fix role labels Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * more fixes Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * update dynamiclistener Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * remove etcd member if disable etcd is passed Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Mark disable components flags as experimental Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * change error to warn when removing self from etcd members Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * Add hidden to disable flags Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com> * go mod Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
2021-03-04 22:28:56 +00:00
return node, h.etcd.removePeer(h.ctx, id, address, false)
}