https://github.com/cilium/cilium
Raw File
Tip revision: 3678be6594920c4f884e8cf87af1d3bafe9d080f authored by Thomas Graf on 08 February 2019, 09:51:04 UTC
Prepare for 1.4.0-rc8
Tip revision: 3678be6
cnp_event.go
// Copyright 2018 Authors of Cilium
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

import (
	"time"

	"github.com/cilium/cilium/pkg/controller"
	"github.com/cilium/cilium/pkg/k8s"
	cilium_v2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2"
	informer "github.com/cilium/cilium/pkg/k8s/client/informers/externalversions"
	k8sUtils "github.com/cilium/cilium/pkg/k8s/utils"
	"github.com/cilium/cilium/pkg/metrics"
	"github.com/cilium/cilium/pkg/policy/groups"
	"github.com/cilium/cilium/pkg/versioned"

	"k8s.io/apimachinery/pkg/util/runtime"
	"k8s.io/apimachinery/pkg/util/wait"
)

const (
	reSyncPeriod = 5 * time.Minute
)

func init() {
	runtime.ErrorHandlers = []func(error){
		k8s.K8sErrorHandler,
	}
}

func enableCNPWatcher() error {
	watcher := k8sUtils.ResourceEventHandlerFactory(
		func(i interface{}) func() error {
			return func() error {
				cnp := i.(*cilium_v2.CiliumNetworkPolicy)
				groups.AddDerivativeCNPIfNeeded(cnp)
				return nil
			}
		},
		func(i interface{}) func() error {
			return func() error {
				// The derivative policy will be deleted by the parent but need
				// to delete the cnp from the pooling.
				groups.DeleteDerivativeFromCache(i.(*cilium_v2.CiliumNetworkPolicy))
				return nil
			}
		},
		func(old, new interface{}) func() error {
			return func() error {
				newCNP := new.(*cilium_v2.CiliumNetworkPolicy)
				oldCNP := old.(*cilium_v2.CiliumNetworkPolicy)
				groups.UpdateDerivativeCNPIfNeeded(newCNP, oldCNP)
				return nil
			}
		},
		func(m versioned.Map) versioned.Map {
			return m
		},
		&cilium_v2.CiliumNetworkPolicy{},
		ciliumK8sClient,
		reSyncPeriod,
		metrics.EventTSK8s,
	)

	si := informer.NewSharedInformerFactory(ciliumK8sClient, reSyncPeriod)
	ciliumV2Controller := si.Cilium().V2().CiliumNetworkPolicies().Informer()
	ciliumV2Controller.AddEventHandler(watcher)
	si.Start(wait.NeverStop)

	controller.NewManager().UpdateController("cnp-to-groups",
		controller.ControllerParams{
			DoFunc: func() error {
				groups.UpdateCNPInformation()
				return nil
			},
			RunInterval: 5 * time.Minute,
		})

	return nil
}
back to top