...

Source file src/github.com/chaos-mesh/chaos-mesh/controllers/kernelchaos_controller.go

Documentation: github.com/chaos-mesh/chaos-mesh/controllers

     1  // Copyright 2020 Chaos Mesh Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package controllers
    15  
    16  import (
    17  	"github.com/go-logr/logr"
    18  
    19  	"github.com/chaos-mesh/chaos-mesh/controllers/common"
    20  
    21  	"github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
    22  	"github.com/chaos-mesh/chaos-mesh/controllers/kernelchaos"
    23  
    24  	"k8s.io/client-go/tools/record"
    25  	ctrl "sigs.k8s.io/controller-runtime"
    26  	"sigs.k8s.io/controller-runtime/pkg/client"
    27  )
    28  
    29  // KernelChaosReconciler reconciles a KernelChaos object
    30  type KernelChaosReconciler struct {
    31  	client.Client
    32  	client.Reader
    33  	Log logr.Logger
    34  	record.EventRecorder
    35  }
    36  
    37  // +kubebuilder:rbac:groups=chaos-mesh.org,resources=kernelchaos,verbs=get;list;watch;create;update;patch;delete
    38  // +kubebuilder:rbac:groups=chaos-mesh.org,resources=kernelchaos/status,verbs=get;update;patch
    39  
    40  // Reconcile reconciles a request from controller
    41  func (r *KernelChaosReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
    42  	logger := r.Log.WithValues("reconciler", "kernelchaos")
    43  
    44  	if !common.ControllerCfg.ClusterScoped && req.Namespace != common.ControllerCfg.TargetNamespace {
    45  		// NOOP
    46  		logger.Info("ignore chaos which belongs to an unexpected namespace within namespace scoped mode",
    47  			"chaosName", req.Name, "expectedNamespace", common.ControllerCfg.TargetNamespace, "actualNamespace", req.Namespace)
    48  		return ctrl.Result{}, nil
    49  	}
    50  
    51  	reconciler := kernelchaos.Reconciler{
    52  		Client:        r.Client,
    53  		Reader:        r.Reader,
    54  		Log:           logger,
    55  		EventRecorder: r.EventRecorder,
    56  	}
    57  
    58  	return reconciler.Reconcile(req)
    59  }
    60  
    61  // SetupWithManager sets up a kernel chaos reconciler on controller-manager
    62  func (r *KernelChaosReconciler) SetupWithManager(mgr ctrl.Manager) error {
    63  	return ctrl.NewControllerManagedBy(mgr).
    64  		For(&v1alpha1.KernelChaos{}).
    65  		Complete(r)
    66  }
    67