package controllerutil

原文链接:https://s0godoc0org.icopy.site/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil

import "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

软件包controllerutil包含用于使用和实现Controller的实用程序功能.

demo

package main

import (
    "context"

    appsv1 "k8s.io/api/apps/v1"
    corev1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

    "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
    logf "sigs.k8s.io/controller-runtime/pkg/log"
)

var (
    log = logf.Log.WithName("controllerutil-examples")
)

// This example creates or updates an existing deployment
func main() {
    // c is client.Client

    // Create or Update the deployment default/foo
    deploy := &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}

    op, err := controllerutil.CreateOrUpdate(context.TODO(), c, deploy, func() error {

        // Deployment selector is immutable so we set this value only if
        // a new object is going to be created
        if deploy.ObjectMeta.CreationTimestamp.IsZero() {
            deploy.Spec.Selector = &metav1.LabelSelector{
                MatchLabels: map[string]string{"foo": "bar"},
            }
        }

        // update the Deployment pod template
        deploy.Spec.Template = corev1.PodTemplateSpec{
            ObjectMeta: metav1.ObjectMeta{
                Labels: map[string]string{
                    "foo": "bar",
                },
            },
            Spec: corev1.PodSpec{
                Containers: []corev1.Container{
                    {
                        Name:  "busybox",
                        Image: "busybox",
                    },
                },
            },
        }

        return nil
    })

    if err != nil {
        log.Error(err, "Deployment reconcile failed")
    } else {
        log.Info("Deployment successfully reconciled", "operation", op)
    }
}
原文地址:https://www.cnblogs.com/wangjq19920210/p/13129550.html