Skip to content

Commit

Permalink
fix code reviews
Browse files Browse the repository at this point in the history
Signed-off-by: Ram Lavi <ralavi@redhat.com>
  • Loading branch information
RamLavi committed Jun 10, 2020
1 parent ba88a6d commit 537cb74
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 25 deletions.
21 changes: 11 additions & 10 deletions pkg/manager/leaderelection.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package manager

import (
"context"
"github.com/pkg/errors"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -14,7 +15,7 @@ import (
)

func (k *KubeMacPoolManager) waitToStartLeading(poolManger *poolmanager.PoolManager) error {
<-k.mgr.Elected()
<-k.runtimeManager.Elected()
// If we reach here then we are in the elected pod.

err := poolManger.InitMaps()
Expand All @@ -23,7 +24,7 @@ func (k *KubeMacPoolManager) waitToStartLeading(poolManger *poolmanager.PoolMana
return err
}

err = k.markPodAsLeader()
err = k.AddLeaderLabelToElectedPod()
if err != nil {
log.Error(err, "failed marking pod as leader")
return err
Expand All @@ -37,7 +38,7 @@ func (k *KubeMacPoolManager) waitToStartLeading(poolManger *poolmanager.PoolMana
return nil
}

func (k *KubeMacPoolManager) markPodAsLeader() error {
func (k *KubeMacPoolManager) AddLeaderLabelToElectedPod() error {
err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
pod, err := k.clientset.CoreV1().Pods(k.podNamespace).Get(context.TODO(), k.podName, metav1.GetOptions{})
if err != nil {
Expand All @@ -61,28 +62,28 @@ func (k *KubeMacPoolManager) markPodAsLeader() error {
// By setting this status to true in all pods, we declare the kubemacpool as ready and allow the webhooks to start running.
func (k *KubeMacPoolManager) setLeadershipConditions(status corev1.ConditionStatus) error {
podList := corev1.PodList{}
err := k.mgr.GetClient().List(context.TODO(), &podList, &client.ListOptions{Namespace: k.podNamespace})
err := k.runtimeManager.GetClient().List(context.TODO(), &podList, &client.ListOptions{Namespace: k.podNamespace})
if err != nil {
return err
return errors.Wrap(err, "failed to list kubemacpool manager pods")
}
for _, pod := range podList.Items {
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
podKey := types.NamespacedName{Namespace: k.podNamespace, Name: pod.Name}
err := k.mgr.GetClient().Get(context.TODO(), podKey, &pod)
err := k.runtimeManager.GetClient().Get(context.TODO(), podKey, &pod)
if err != nil {
return err
return errors.Wrap(err, "failed to get kubemacpool manager pods")
}

pod.Status.Conditions = append(pod.Status.Conditions, corev1.PodCondition{Type: "kubemacpool.io/leader-ready", Status: status, LastProbeTime: metav1.Time{}})
pod.Status.Conditions = append(pod.Status.Conditions, corev1.PodCondition{Type: names.READINESS_GATE_LEADERSHIP_LABEL, Status: status, LastProbeTime: metav1.Time{}})

err = k.mgr.GetClient().Status().Update(context.TODO(), &pod)
err = k.runtimeManager.GetClient().Status().Update(context.TODO(), &pod)
if err != nil {
return err
}
return nil
})
if err != nil {
return err
return errors.Wrap(err, "failed to update Leadership readiness gate status to kubemacpool manager pods")
}
}
return nil
Expand Down
34 changes: 19 additions & 15 deletions pkg/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package manager
import (
"context"
"fmt"
"github.com/pkg/errors"
"net"
"os"
"os/signal"
Expand Down Expand Up @@ -50,7 +51,7 @@ type KubeMacPoolManager struct {
podNamespace string // manager pod namespace
podName string // manager pod name
waitingTime int // Duration in second to lock a mac address before it was saved to etcd
mgr manager.Manager // Delegated controller-runtime manager
runtimeManager manager.Manager // Delegated controller-runtime manager
}

func NewKubeMacPoolManager(podNamespace, podName, metricsAddr string, waitingTime int) *KubeMacPoolManager {
Expand Down Expand Up @@ -84,25 +85,18 @@ func (k *KubeMacPoolManager) Run(rangeStart, rangeEnd net.HardwareAddr) error {
}

for k.continueToRunManager {
log.Info("Setting up Manager")
mgr, err := manager.New(k.config, manager.Options{
MetricsBindAddress: k.metricsAddr,
LeaderElection: true,
LeaderElectionID: names.LEADER_ID,
LeaderElectionNamespace: k.podNamespace,
})
k.runtimeManager, err = k.initRuntimeManager()
if err != nil {
return fmt.Errorf("unable to set up manager error %v", err)
return errors.Wrap(err, "unable to set up manager")
}
k.mgr = mgr

err = kubevirt_api.AddToScheme(mgr.GetScheme())
err = kubevirt_api.AddToScheme(k.runtimeManager.GetScheme())
if err != nil {
return fmt.Errorf("unable to register kubevirt scheme error %v", err)
}

isKubevirtInstalled := checkForKubevirt(k.clientset)
poolManager, err := poolmanager.NewPoolManager(k.clientset, rangeStart, rangeEnd, k.podNamespace, isKubevirtInstalled, k.waitingTime, k.mgr)
poolManager, err := poolmanager.NewPoolManager(k.clientset, rangeStart, rangeEnd, k.podNamespace, isKubevirtInstalled, k.waitingTime, k.runtimeManager)
if err != nil {
return fmt.Errorf("unable to create pool manager error %v", err)
}
Expand All @@ -116,18 +110,18 @@ func (k *KubeMacPoolManager) Run(rangeStart, rangeEnd net.HardwareAddr) error {
go k.waitToStartLeading(poolManager)

log.Info("Setting up controllers")
err = controller.AddToManager(mgr, poolManager)
err = controller.AddToManager(k.runtimeManager, poolManager)
if err != nil {
return fmt.Errorf("unable to register controllers to the manager error %v", err)
}

log.Info("Setting up webhooks")
err = webhook.AddToManager(mgr, poolManager)
err = webhook.AddToManager(k.runtimeManager, poolManager)
if err != nil {
return fmt.Errorf("unable to register webhooks to the manager error %v", err)
}

err = mgr.Start(k.restartChannel)
err = k.runtimeManager.Start(k.restartChannel)
if err != nil {
return fmt.Errorf("unable to run the manager error %v", err)
}
Expand All @@ -149,6 +143,16 @@ func checkForKubevirt(kubeClient *kubernetes.Clientset) bool {
return false
}

func (k *KubeMacPoolManager) initRuntimeManager() (manager.Manager, error) {
log.Info("Setting up Manager")
return manager.New(k.config, manager.Options{
MetricsBindAddress: k.metricsAddr,
LeaderElection: true,
LeaderElectionID: names.LEADER_ID,
LeaderElectionNamespace: k.podNamespace,
})
}

// Check for Kubevirt CRD to be available
func (k *KubeMacPoolManager) waitForKubevirt() {
for _ = range time.Tick(5 * time.Second) {
Expand Down
2 changes: 2 additions & 0 deletions pkg/names/names.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,5 @@ const OPENSHIFT_RUNLABEL = "openshift.io/run-level"
const WAITING_VMS_CONFIGMAP = "kubemacpool-vm-configmap"

const WAIT_TIME_ARG = "wait-time"

const READINESS_GATE_LEADERSHIP_LABEL = "kubemacpool.io/leader-ready"

0 comments on commit 537cb74

Please sign in to comment.