Add action-based version of secret sync

This commit is contained in:
erthalion
2018-09-12 15:40:40 +02:00
parent a4224f6063
commit 5563078a12
4 changed files with 271 additions and 0 deletions
+65
View File
@@ -160,6 +160,61 @@ func (c *Controller) addCluster(lg *logrus.Entry, clusterName spec.NamespacedNam
return cl
}
func getClusterName(event ClusterEvent) spec.NamespacedName {
hasNewName := eventInSlice(event.EventType, []EventType{
EventAdd, EventSync, EventRepair,
})
if hasNewName {
return util.NameFromMeta(event.NewSpec.ObjectMeta)
} else {
return util.NameFromMeta(event.OldSpec.ObjectMeta)
}
}
func (c *Controller) generatePlan(event ClusterEvent) []cluster.Action {
var clusterName spec.NamespacedName
log := c.logger.WithField("worker", event.WorkerID)
log = log.WithField("cluster-name", getClusterName(event))
switch event.EventType {
case EventAdd:
log.Infof("Creation of the cluster started")
newCluster := c.addCluster(log, clusterName, event.NewSpec)
c.curWorkerCluster.Store(event.WorkerID, newCluster)
return newCluster.PlanForCreate()
default:
return cluster.NoActions
}
}
func (c *Controller) validatePlan(plan []cluster.Action) (err error) {
for _, action := range plan {
err = action.Validate()
if err != nil {
return err
}
}
return nil
}
func (c *Controller) applyPlan(plan []cluster.Action) (err error) {
for _, action := range plan {
err = action.Apply()
if err != nil {
return err
}
}
return nil
}
func (c *Controller) processEvent(event ClusterEvent) {
var clusterName spec.NamespacedName
var clHistory ringlog.RingLogger
@@ -323,6 +378,16 @@ func (c *Controller) processClusterEventsQueue(idx int, stopCh <-chan struct{},
c.logger.Errorf("could not cast to ClusterEvent")
}
// build plan
actions := c.generatePlan(event)
if err := c.validatePlan(actions); err != nil {
c.logger.Errorf("Invalid plan: %v", err)
}
if err := c.applyPlan(actions); err != nil {
c.logger.Errorf("Could not apply the plan: %v", err)
}
// apply legacy actions, that are not in the plan
c.processEvent(event)
}
}
+9
View File
@@ -194,3 +194,12 @@ func (c *Controller) podClusterName(pod *v1.Pod) spec.NamespacedName {
return spec.NamespacedName{}
}
func eventInSlice(a EventType, list []EventType) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}