// Sync syncs all ipvs rules present in state to kernel
Sync syncs all ipvs rules present in state to kernel
// Sync syncs all ipvs rules present in state to kernel
func (ipvs *Ipvs) Sync(state state.State) error {
	start := time.Now()
	defer func() {
		log.Debugf("[ipvs] Sync took %v", time.Since(start))
	}()
	ipvs.Lock()
	defer ipvs.Unlock()
	log.Debug("[ipvs] Syncing")
	stateSet := ipvs.getStateServicesSet(state)
	currentSet, err := ipvs.getCurrentServicesSet()
	if err != nil {
		return err
	}
	rulesToAdd := stateSet.Difference(currentSet)
	rulesToRemove := currentSet.Difference(stateSet)
	for r := range rulesToAdd.Iter() {
		service := r.(types.Service)
		dsts := state.GetDestinations(&service)
		if err := ipvs.addServiceAndDestinations(service, dsts); err != nil {
			return err
		}
		log.Debugf("[ipvs] Added service: %#v with destinations: %#v", service, dsts)
	}
	for r := range rulesToRemove.Iter() {
		service := r.(types.Service)
		err := ipvs.handler.DelService(ToIpvsService(&service))
		if err != nil {
			return err
		}
		log.Debugf("[ipvs] Removed service: %#v", service)
	}
	for _, s := range state.GetServices() {
		if err := ipvs.syncDestinations(state, s); err != nil {
			return err
		}
	}
	return nil
}
func ( ipvs * Ipvs ) Sync ( state state . State ) error { start := time . Now ( ) defer func ( ) { log . Debugf ( " " , time . Since ( start ) ) } ( ) ipvs . Lock ( ) defer ipvs . Unlock ( ) log . Debug ( " " ) stateSet := ipvs . getStateServicesSet ( state ) currentSet , err := ipvs . getCurrentServicesSet ( ) if err != nil { return err } rulesToAdd := stateSet . Difference ( currentSet ) rulesToRemove := currentSet . Difference ( stateSet ) for r := range rulesToAdd . Iter ( ) { service := r . ( types . Service ) dsts := state . GetDestinations ( & service ) if err := ipvs . addServiceAndDestinations ( service , dsts ) ; err != nil { return err } log . Debugf ( " " , service , dsts ) } for r := range rulesToRemove . Iter ( ) { service := r . ( types . Service ) err := ipvs . handler . DelService ( ToIpvsService ( & service ) ) if err != nil { return err } log . Debugf ( " " , service ) } for _ , s := range state . GetServices ( ) { if err := ipvs . syncDestinations ( state , s ) ; err != nil { return err } } return nil }
Sync syncs all ipvs rules present in state to kernel
Sync syncs all ipvs rules present in state to kernel
// Adding services and destinations missing // Cleaning rules // Syncing destination rules