Skip to content

Instantly share code, notes, and snippets.

@dholbach
Created October 14, 2019 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dholbach/d55b93f8055ca6eb8df5e7895bb5e94c to your computer and use it in GitHub Desktop.
Save dholbach/d55b93f8055ca6eb8df5e7895bb5e94c to your computer and use it in GitHub Desktop.
diff -ruN ./api/v1alpha1/coredns_types.go /home/daniel/dev/addon-operators/coredns/api/v1alpha1/coredns_types.go
--- ./api/v1alpha1/coredns_types.go 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/api/v1alpha1/coredns_types.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,74 +0,0 @@
-
-
-package v1alpha1
-
-import (
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- addonv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/apis/v1alpha1"
-)
-
-// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
-// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
-
-// CoreDNSSpec defines the desired state of CoreDNS
-type CoreDNSSpec struct {
- addonv1alpha1.CommonSpec `json:",inline"`
- addonv1alpha1.PatchSpec `json:",inline"`
-
- // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
- // Important: Run "make" to regenerate code after modifying this file
-}
-
-// CoreDNSStatus defines the observed state of CoreDNS
-type CoreDNSStatus struct {
- addonv1alpha1.CommonStatus `json:",inline"`
-
- // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
- // Important: Run "make" to regenerate code after modifying this file
-}
-
-// +kubebuilder:object:root=true
-
-// CoreDNS is the Schema for the API
-type CoreDNS struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
-
- Spec CoreDNSSpec `json:"spec,omitempty"`
- Status CoreDNSStatus `json:"status,omitempty"`
-}
-
-var _ addonv1alpha1.CommonObject = &CoreDNS{}
-
-func (o *CoreDNS) ComponentName() string {
- return "coredns"
-}
-
-func (o *CoreDNS) CommonSpec() addonv1alpha1.CommonSpec {
- return o.Spec.CommonSpec
-}
-
-func (o *CoreDNS) PatchSpec() addonv1alpha1.PatchSpec {
- return o.Spec.PatchSpec
-}
-
-func (o *CoreDNS) GetCommonStatus() addonv1alpha1.CommonStatus {
- return o.Status.CommonStatus
-}
-
-func (o *CoreDNS) SetCommonStatus(s addonv1alpha1.CommonStatus) {
- o.Status.CommonStatus = s
-}
-
-// +kubebuilder:object:root=true
-
-// CoreDNSList contains a list of CoreDNS
-type CoreDNSList struct {
- metav1.TypeMeta `json:",inline"`
- metav1.ListMeta `json:"metadata,omitempty"`
- Items []CoreDNS `json:"items"`
-}
-
-func init() {
- SchemeBuilder.Register(&CoreDNS{}, &CoreDNSList{})
-}
diff -ruN ./api/v1alpha1/groupversion_info.go /home/daniel/dev/addon-operators/coredns/api/v1alpha1/groupversion_info.go
--- ./api/v1alpha1/groupversion_info.go 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/api/v1alpha1/groupversion_info.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,35 +0,0 @@
-/*
-
-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 v1alpha1 contains API Schema definitions for the addons v1alpha1 API group
-// +kubebuilder:object:generate=true
-// +groupName=addons.k8s.io
-package v1alpha1
-
-import (
- "k8s.io/apimachinery/pkg/runtime/schema"
- "sigs.k8s.io/controller-runtime/pkg/scheme"
-)
-
-var (
- // GroupVersion is group version used to register these objects
- GroupVersion = schema.GroupVersion{Group: "addons.k8s.io", Version: "v1alpha1"}
-
- // SchemeBuilder is used to add go types to the GroupVersionKind scheme
- SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
-
- // AddToScheme adds the types in this group-version to the given scheme.
- AddToScheme = SchemeBuilder.AddToScheme
-)
diff -ruN ./channels/packages/coredns/0.0.1/manifest.yaml /home/daniel/dev/addon-operators/coredns/channels/packages/coredns/0.0.1/manifest.yaml
--- ./channels/packages/coredns/0.0.1/manifest.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/channels/packages/coredns/0.0.1/manifest.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-# Placeholder manifest - replace with the manifest for your addon
diff -ruN ./cmd/manager/main.go /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go
--- ./cmd/manager/main.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go 2019-07-01 14:57:36.616341088 +0200
@@ -0,0 +1,88 @@
+/*
+
+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 (
+ "flag"
+ "os"
+
+ _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
+ "k8s.io/klog"
+ "k8s.io/klog/klogr"
+ "sigs.k8s.io/addon-operators/coredns/pkg/apis"
+ "sigs.k8s.io/addon-operators/coredns/pkg/controller"
+ "sigs.k8s.io/addon-operators/coredns/pkg/webhook"
+ "sigs.k8s.io/controller-runtime/pkg/client/config"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
+ "sigs.k8s.io/controller-runtime/pkg/runtime/signals"
+ "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
+)
+
+func main() {
+ klog.InitFlags(nil)
+ addon.Init()
+
+ var metricsAddr string
+ flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
+ flag.Parse()
+ logf.SetLogger(klogr.New())
+
+ // Get a config to talk to the apiserver
+ klog.Info("setting up client for manager")
+ cfg, err := config.GetConfig()
+ if err != nil {
+ klog.Error(err, "unable to set up client config")
+ os.Exit(1)
+ }
+
+ // Create a new Cmd to provide shared dependencies and start components
+ klog.Info("setting up manager")
+ mgr, err := manager.New(cfg, manager.Options{MetricsBindAddress: metricsAddr})
+ if err != nil {
+ klog.Error(err, "unable to set up overall controller manager")
+ os.Exit(1)
+ }
+
+ klog.Info("Registering Components.")
+
+ // Setup Scheme for all resources
+ klog.Info("setting up scheme")
+ if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
+ klog.Error(err, "unable add APIs to scheme")
+ os.Exit(1)
+ }
+
+ // Setup all Controllers
+ klog.Info("Setting up controller")
+ if err := controller.AddToManager(mgr); err != nil {
+ klog.Error(err, "unable to register controllers to the manager")
+ os.Exit(1)
+ }
+
+ klog.Info("setting up webhooks")
+ if err := webhook.AddToManager(mgr); err != nil {
+ klog.Error(err, "unable to register webhooks to the manager")
+ os.Exit(1)
+ }
+
+ // Start the Cmd
+ klog.Info("Starting the Cmd.")
+ if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
+ klog.Error(err, "unable to run the manager")
+ os.Exit(1)
+ }
+}
diff -ruN ./config/certmanager/certificate.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/certificate.yaml
--- ./config/certmanager/certificate.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/certificate.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-# The following manifests contain a self-signed issuer CR and a certificate CR.
-# More document can be found at https://docs.cert-manager.io
-apiVersion: certmanager.k8s.io/v1alpha1
-kind: Issuer
-metadata:
- name: selfsigned-issuer
- namespace: system
-spec:
- selfSigned: {}
----
-apiVersion: certmanager.k8s.io/v1alpha1
-kind: Certificate
-metadata:
- name: serving-cert # this name should match the one appeared in kustomizeconfig.yaml
- namespace: system
-spec:
- # $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize
- commonName: $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc
- dnsNames:
- - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local
- issuerRef:
- kind: Issuer
- name: selfsigned-issuer
- secretName: webhook-server-cert # this secret will not be prefixed, since it's not managed by kustomize
diff -ruN ./config/certmanager/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomization.yaml
--- ./config/certmanager/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +0,0 @@
-resources:
-- certificate.yaml
-
-configurations:
-- kustomizeconfig.yaml
diff -ruN ./config/certmanager/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml
--- ./config/certmanager/kustomizeconfig.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-# This configuration is for teaching kustomize how to update name ref and var substitution
-nameReference:
-- kind: Issuer
- group: certmanager.k8s.io
- fieldSpecs:
- - kind: Certificate
- group: certmanager.k8s.io
- path: spec/issuerRef/name
-
-varReference:
-- kind: Certificate
- group: certmanager.k8s.io
- path: spec/commonName
-- kind: Certificate
- group: certmanager.k8s.io
- path: spec/dnsNames
diff -ruN ./config/crd/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/crd/kustomization.yaml
--- ./config/crd/kustomization.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/crd/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-# This kustomization.yaml is not intended to be run by itself,
-# since it depends on service name and namespace that are out of this kustomize package.
-# It should be run by config/default
-resources:
-- bases/addons.k8s.io_coredns.yaml
-# +kubebuilder:scaffold:crdkustomizeresource
-
-patchesStrategicMerge:
-# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
-# patches here are for enabling the conversion webhook for each CRD
-#- patches/webhook_in_coredns.yaml
-# +kubebuilder:scaffold:crdkustomizewebhookpatch
-
-# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix.
-# patches here are for enabling the CA injection for each CRD
-#- patches/cainjection_in_coredns.yaml
-# +kubebuilder:scaffold:crdkustomizecainjectionpatch
-
-# the following config is for teaching kustomize how to do kustomization for CRDs.
-configurations:
-- kustomizeconfig.yaml
diff -ruN ./config/crd/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/crd/kustomizeconfig.yaml
--- ./config/crd/kustomizeconfig.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/crd/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-# This file is for teaching kustomize how to substitute name and namespace reference in CRD
-nameReference:
-- kind: Service
- version: v1
- fieldSpecs:
- - kind: CustomResourceDefinition
- group: apiextensions.k8s.io
- path: spec/conversion/webhookClientConfig/service/name
-
-namespace:
-- kind: CustomResourceDefinition
- group: apiextensions.k8s.io
- path: spec/conversion/webhookClientConfig/service/namespace
- create: false
-
-varReference:
-- path: metadata/annotations
diff -ruN ./config/crd/patches/cainjection_in_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crd/patches/cainjection_in_coredns.yaml
--- ./config/crd/patches/cainjection_in_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/crd/patches/cainjection_in_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,8 +0,0 @@
-# The following patch adds a directive for certmanager to inject CA into the CRD
-# CRD conversion requires k8s 1.13 or later.
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
- name: coredns.addons.k8s.io
diff -ruN ./config/crd/patches/webhook_in_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crd/patches/webhook_in_coredns.yaml
--- ./config/crd/patches/webhook_in_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/crd/patches/webhook_in_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-# The following patch enables conversion webhook for CRD
-# CRD conversion requires k8s 1.13 or later.
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: coredns.addons.k8s.io
-spec:
- conversion:
- strategy: Webhook
- webhookClientConfig:
- # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank,
- # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager)
- caBundle: Cg==
- service:
- namespace: system
- name: webhook-service
- path: /convert
diff -ruN ./config/crds/addons_v1alpha1_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crds/addons_v1alpha1_coredns.yaml
--- ./config/crds/addons_v1alpha1_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/config/crds/addons_v1alpha1_coredns.yaml 2019-07-01 14:57:36.616341088 +0200
@@ -0,0 +1,61 @@
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+ creationTimestamp: null
+ labels:
+ controller-tools.k8s.io: "1.0"
+ name: coredns.addons.k8s.io
+spec:
+ group: addons.k8s.io
+ names:
+ kind: CoreDNS
+ plural: coredns
+ scope: Namespaced
+ validation:
+ openAPIV3Schema:
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation
+ of an object. Servers should convert recognized schemas to the latest
+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this
+ object represents. Servers may infer this from the endpoint the client
+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ properties:
+ channel:
+ description: 'Channel specifies a channel that can be used to resolve
+ a specific addon, eg: stable It will be ignored if Version is specified'
+ type: string
+ patches:
+ items:
+ type: object
+ type: array
+ version:
+ description: Version specifies the exact addon version to be deployed,
+ eg 1.2.3 It should not be specified if Channel is specified
+ type: string
+ type: object
+ status:
+ properties:
+ errors:
+ items:
+ type: string
+ type: array
+ healthy:
+ type: boolean
+ required:
+ - healthy
+ type: object
+ version: v1alpha1
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff -ruN ./config/default/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/default/kustomization.yaml
--- ./config/default/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/default/kustomization.yaml 2019-07-01 14:57:36.616341088 +0200
@@ -1,27 +1,35 @@
# Adds namespace to all resources.
-namespace: test-system
+namespace: coredns-system
# Value of this field is prepended to the
# names of all resources, e.g. a deployment named
# "wordpress" becomes "alices-wordpress".
# Note that it should also match with the prefix (text before '-') of the namespace
# field above.
-namePrefix: test-
+namePrefix: coredns-
# Labels to add to all resources and selectors.
#commonLabels:
# someName: someValue
-bases:
-- ../crd
-- ../rbac
-- ../manager
-# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in crd/kustomization.yaml
-#- ../webhook
-# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required.
-#- ../certmanager
+# Each entry in this list must resolve to an existing
+# resource definition in YAML. These are the resource
+# files that kustomize reads, modifies and emits as a
+# YAML string, with resources separated by document
+# markers ("---").
+resources:
+- ../rbac/rbac_role.yaml
+- ../rbac/rbac_role_binding.yaml
+- ../manager/manager.yaml
+ # Comment the following 3 lines if you want to disable
+ # the auth proxy (https://github.com/brancz/kube-rbac-proxy)
+ # which protects your /metrics endpoint.
+- ../rbac/auth_proxy_service.yaml
+- ../rbac/auth_proxy_role.yaml
+- ../rbac/auth_proxy_role_binding.yaml
-patchesStrategicMerge:
+patches:
+- manager_image_patch.yaml
# Protect the /metrics endpoint by putting it behind auth.
# Only one of manager_auth_proxy_patch.yaml and
# manager_prometheus_metrics_patch.yaml should be enabled.
@@ -33,40 +41,9 @@
# manager_prometheus_metrics_patch.yaml should be enabled.
#- manager_prometheus_metrics_patch.yaml
-# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in crd/kustomization.yaml
-#- manager_webhook_patch.yaml
-
-# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'.
-# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks.
-# 'CERTMANAGER' needs to be enabled to use ca injection
-#- webhookcainjection_patch.yaml
-
-# the following config is for teaching kustomize how to do var substitution
vars:
-# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix.
-#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
-# objref:
-# kind: Certificate
-# group: certmanager.k8s.io
-# version: v1alpha1
-# name: serving-cert # this name should match the one in certificate.yaml
-# fieldref:
-# fieldpath: metadata.namespace
-#- name: CERTIFICATE_NAME
-# objref:
-# kind: Certificate
-# group: certmanager.k8s.io
-# version: v1alpha1
-# name: serving-cert # this name should match the one in certificate.yaml
-#- name: SERVICE_NAMESPACE # namespace of the service
-# objref:
-# kind: Service
-# version: v1
-# name: webhook-service
-# fieldref:
-# fieldpath: metadata.namespace
-#- name: SERVICE_NAME
-# objref:
-# kind: Service
-# version: v1
-# name: webhook-service
+- name: WEBHOOK_SECRET_NAME
+ objref:
+ kind: Secret
+ name: webhook-server-secret
+ apiVersion: v1
diff -ruN ./config/default/manager_auth_proxy_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_auth_proxy_patch.yaml
--- ./config/default/manager_auth_proxy_patch.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_auth_proxy_patch.yaml 2019-07-01 14:57:36.616341088 +0200
@@ -1,7 +1,7 @@
# This patch inject a sidecar container which is a HTTP proxy for the controller manager,
# it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews.
apiVersion: apps/v1
-kind: Deployment
+kind: StatefulSet
metadata:
name: controller-manager
namespace: system
@@ -10,7 +10,7 @@
spec:
containers:
- name: kube-rbac-proxy
- image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.1
+ image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0
args:
- "--secure-listen-address=0.0.0.0:8443"
- "--upstream=http://127.0.0.1:8080/"
@@ -22,4 +22,3 @@
- name: manager
args:
- "--metrics-addr=127.0.0.1:8080"
- - "--enable-leader-election"
diff -ruN ./config/default/manager_image_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_image_patch.yaml
--- ./config/default/manager_image_patch.yaml 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_image_patch.yaml 2019-07-01 14:57:36.616341088 +0200
@@ -0,0 +1,12 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: controller-manager
+ namespace: system
+spec:
+ template:
+ spec:
+ containers:
+ # Change the value of image field below to your controller image URL
+ - image: IMAGE_URL
+ name: manager
diff -ruN ./config/default/manager_prometheus_metrics_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_prometheus_metrics_patch.yaml
--- ./config/default/manager_prometheus_metrics_patch.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_prometheus_metrics_patch.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -1,6 +1,6 @@
# This patch enables Prometheus scraping for the manager pod.
apiVersion: apps/v1
-kind: Deployment
+kind: StatefulSet
metadata:
name: controller-manager
namespace: system
diff -ruN ./config/default/manager_webhook_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_webhook_patch.yaml
--- ./config/default/manager_webhook_patch.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_webhook_patch.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: controller-manager
- namespace: system
-spec:
- template:
- spec:
- containers:
- - name: manager
- ports:
- - containerPort: 9443
- name: webhook-server
- protocol: TCP
- volumeMounts:
- - mountPath: /tmp/k8s-webhook-server/serving-certs
- name: cert
- readOnly: true
- volumes:
- - name: cert
- secret:
- defaultMode: 420
- secretName: webhook-server-cert
diff -ruN ./config/default/webhookcainjection_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/webhookcainjection_patch.yaml
--- ./config/default/webhookcainjection_patch.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/default/webhookcainjection_patch.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-# This patch add annotation to admission webhook config and
-# the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize.
-apiVersion: admissionregistration.k8s.io/v1beta1
-kind: MutatingWebhookConfiguration
-metadata:
- name: mutating-webhook-configuration
- annotations:
- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
----
-apiVersion: admissionregistration.k8s.io/v1beta1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: validating-webhook-configuration
- annotations:
- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
diff -ruN ./config/manager/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml
--- ./config/manager/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-resources:
-- manager.yaml
diff -ruN ./config/manager/manager.yaml /home/daniel/dev/addon-operators/coredns/config/manager/manager.yaml
--- ./config/manager/manager.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/manager/manager.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -3,32 +3,57 @@
metadata:
labels:
control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
name: system
---
+apiVersion: v1
+kind: Service
+metadata:
+ name: controller-manager-service
+ namespace: system
+ labels:
+ control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
+spec:
+ selector:
+ control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
+ ports:
+ - port: 443
+---
apiVersion: apps/v1
-kind: Deployment
+kind: StatefulSet
metadata:
name: controller-manager
namespace: system
labels:
control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
spec:
selector:
matchLabels:
control-plane: controller-manager
- replicas: 1
+ controller-tools.k8s.io: "1.0"
+ serviceName: controller-manager-service
template:
metadata:
labels:
control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
spec:
containers:
- command:
- /manager
- args:
- - --enable-leader-election
image: controller:latest
+ imagePullPolicy: Always
name: manager
+ env:
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: SECRET_NAME
+ value: $(WEBHOOK_SECRET_NAME)
resources:
limits:
cpu: 100m
@@ -36,4 +61,23 @@
requests:
cpu: 100m
memory: 20Mi
+ ports:
+ - containerPort: 9876
+ name: webhook-server
+ protocol: TCP
+ volumeMounts:
+ - mountPath: /tmp/cert
+ name: cert
+ readOnly: true
terminationGracePeriodSeconds: 10
+ volumes:
+ - name: cert
+ secret:
+ defaultMode: 420
+ secretName: webhook-server-secret
+---
+apiVersion: v1
+kind: Secret
+metadata:
+ name: webhook-server-secret
+ namespace: system
diff -ruN ./config/rbac/auth_proxy_service.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/auth_proxy_service.yaml
--- ./config/rbac/auth_proxy_service.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/auth_proxy_service.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -7,6 +7,7 @@
prometheus.io/scrape: "true"
labels:
control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
name: controller-manager-metrics-service
namespace: system
spec:
@@ -16,3 +17,4 @@
targetPort: https
selector:
control-plane: controller-manager
+ controller-tools.k8s.io: "1.0"
diff -ruN ./config/rbac/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml
--- ./config/rbac/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-resources:
-- role.yaml
-- role_binding.yaml
-- leader_election_role.yaml
-- leader_election_role_binding.yaml
-# Comment the following 3 lines if you want to disable
-# the auth proxy (https://github.com/brancz/kube-rbac-proxy)
-# which protects your /metrics endpoint.
-- auth_proxy_service.yaml
-- auth_proxy_role.yaml
-- auth_proxy_role_binding.yaml
diff -ruN ./config/rbac/leader_election_role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role_binding.yaml
--- ./config/rbac/leader_election_role_binding.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,12 +0,0 @@
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: leader-election-rolebinding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: leader-election-role
-subjects:
-- kind: ServiceAccount
- name: default
- namespace: system
diff -ruN ./config/rbac/leader_election_role.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role.yaml
--- ./config/rbac/leader_election_role.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-# permissions to do leader election.
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: leader-election-role
-rules:
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
-- apiGroups:
- - ""
- resources:
- - configmaps/status
- verbs:
- - get
- - update
- - patch
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
diff -ruN ./config/rbac/manager_role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role_binding.yaml
--- ./config/rbac/manager_role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role_binding.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,12 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ creationTimestamp: null
+ name: manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: manager-role
+subjects:
+- kind: ServiceAccount
+ name: ""
diff -ruN ./config/rbac/manager_role.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role.yaml
--- ./config/rbac/manager_role.yaml 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,116 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ creationTimestamp: null
+ name: manager-role
+rules:
+- apiGroups:
+ - addons.k8s.io
+ resources:
+ - coredns
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - addons.k8s.io
+ resources:
+ - coredns/status
+ verbs:
+ - get
+ - update
+ - patch
+- apiGroups:
+ - apps
+ - extensions
+ resources:
+ - deployments
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ - serviceaccounts
+ - services
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - rbac.authorization.k8s.io
+ resources:
+ - roles
+ - rolebindings
+ - clusterroles
+ - clusterrolebindings
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - namespaces
+ - nodes
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
diff -ruN ./config/rbac/role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/role_binding.yaml
--- ./config/rbac/role_binding.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,12 +0,0 @@
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: manager-rolebinding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: manager-role
-subjects:
-- kind: ServiceAccount
- name: default
- namespace: system
diff -ruN ./config/samples/addons_v1alpha1_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/samples/addons_v1alpha1_coredns.yaml
--- ./config/samples/addons_v1alpha1_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/samples/addons_v1alpha1_coredns.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -1,7 +1,15 @@
apiVersion: addons.k8s.io/v1alpha1
kind: CoreDNS
metadata:
- name: coredns-sample
+ name: default
+ namespace: kube-system
spec:
- # Add fields here
- foo: bar
+ channel: stable
+ patches:
+ - apiVersion: apps/v1
+ kind: Deployment
+ metadata:
+ name: coredns
+ namespace: kube-system
+ labels:
+ foo: bar
diff -ruN ./config/webhook/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/kustomization.yaml
--- ./config/webhook/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-resources:
-- manifests.yaml
-- service.yaml
-
-configurations:
-- kustomizeconfig.yaml
diff -ruN ./config/webhook/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/kustomizeconfig.yaml
--- ./config/webhook/kustomizeconfig.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-# the following config is for teaching kustomize where to look at when substituting vars.
-# It requires kustomize v2.1.0 or newer to work properly.
-nameReference:
-- kind: Service
- version: v1
- fieldSpecs:
- - kind: MutatingWebhookConfiguration
- group: admissionregistration.k8s.io
- path: webhooks/clientConfig/service/name
- - kind: ValidatingWebhookConfiguration
- group: admissionregistration.k8s.io
- path: webhooks/clientConfig/service/name
-
-namespace:
-- kind: MutatingWebhookConfiguration
- group: admissionregistration.k8s.io
- path: webhooks/clientConfig/service/namespace
- create: true
-- kind: ValidatingWebhookConfiguration
- group: admissionregistration.k8s.io
- path: webhooks/clientConfig/service/namespace
- create: true
-
-varReference:
-- path: metadata/annotations
diff -ruN ./config/webhook/service.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/service.yaml
--- ./config/webhook/service.yaml 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/service.yaml 1970-01-01 01:00:00.000000000 +0100
@@ -1,12 +0,0 @@
-
-apiVersion: v1
-kind: Service
-metadata:
- name: webhook-service
- namespace: system
-spec:
- ports:
- - port: 443
- targetPort: 9443
- selector:
- control-plane: controller-manager
diff -ruN ./controllers/coredns_controller.go /home/daniel/dev/addon-operators/coredns/controllers/coredns_controller.go
--- ./controllers/coredns_controller.go 2019-10-14 16:24:09.149459210 +0200
+++ /home/daniel/dev/addon-operators/coredns/controllers/coredns_controller.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,73 +0,0 @@
-
-
-package controllers
-
-import (
- "sigs.k8s.io/controller-runtime/pkg/controller"
- "sigs.k8s.io/controller-runtime/pkg/handler"
- "sigs.k8s.io/controller-runtime/pkg/reconcile"
- "sigs.k8s.io/controller-runtime/pkg/source"
- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/status"
- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative"
-
- "github.com/go-logr/logr"
- ctrl "sigs.k8s.io/controller-runtime"
- "sigs.k8s.io/controller-runtime/pkg/client"
-
- api "github.com/kubernetes-sigs/test/api/v1alpha1"
-)
-
-var _ reconcile.Reconciler = &CoreDNSReconciler{}
-
-// CoreDNSReconciler reconciles a CoreDNS object
-type CoreDNSReconciler struct {
- client.Client
- Log logr.Logger
-
- declarative.Reconciler
-}
-
-// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns,verbs=get;list;watch;create;update;patch;delete
-// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns/status,verbs=get;update;patch
-
-func (r *CoreDNSReconciler) SetupWithManager(mgr ctrl.Manager) error {
- addon.Init()
-
- labels := map[string]string{
- "k8s-app": "coredns",
- }
-
- watchLabels := declarative.SourceLabel(mgr.GetScheme())
-
- if err := r.Reconciler.Init(mgr, &api.CoreDNS{},
- declarative.WithObjectTransform(declarative.AddLabels(labels)),
- declarative.WithOwner(declarative.SourceAsOwner),
- declarative.WithLabels(watchLabels),
- declarative.WithStatus(status.NewBasic(mgr.GetClient())),
- // TODO: add an application to your manifest: declarative.WithObjectTransform(addon.TransformApplicationFromStatus),
- // TODO: add an application to your manifest: declarative.WithManagedApplication(watchLabels),
- declarative.WithObjectTransform(addon.ApplyPatches),
- ); err != nil {
- return err
- }
-
- c, err := controller.New("coredns-controller", mgr, controller.Options{Reconciler: r})
- if err != nil {
- return err
- }
-
- // Watch for changes to CoreDNS
- err = c.Watch(&source.Kind{Type: &api.CoreDNS{}}, &handler.EnqueueRequestForObject{})
- if err != nil {
- return err
- }
-
- // Watch for changes to deployed objects
- _, err = declarative.WatchAll(mgr.GetConfig(), c, r, watchLabels)
- if err != nil {
- return err
- }
-
- return nil
-}
diff -ruN ./diff /home/daniel/dev/addon-operators/coredns/diff
--- ./diff 2019-10-14 16:26:42.045858915 +0200
+++ /home/daniel/dev/addon-operators/coredns/diff 1970-01-01 01:00:00.000000000 +0100
@@ -1,1094 +0,0 @@
-diff -ruN ./api/v1alpha1/coredns_types.go /home/daniel/dev/addon-operators/coredns/api/v1alpha1/coredns_types.go
---- ./api/v1alpha1/coredns_types.go 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/api/v1alpha1/coredns_types.go 1970-01-01 01:00:00.000000000 +0100
-@@ -1,74 +0,0 @@
--
--
--package v1alpha1
--
--import (
-- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-- addonv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/apis/v1alpha1"
--)
--
--// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
--// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
--
--// CoreDNSSpec defines the desired state of CoreDNS
--type CoreDNSSpec struct {
-- addonv1alpha1.CommonSpec `json:",inline"`
-- addonv1alpha1.PatchSpec `json:",inline"`
--
-- // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
-- // Important: Run "make" to regenerate code after modifying this file
--}
--
--// CoreDNSStatus defines the observed state of CoreDNS
--type CoreDNSStatus struct {
-- addonv1alpha1.CommonStatus `json:",inline"`
--
-- // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
-- // Important: Run "make" to regenerate code after modifying this file
--}
--
--// +kubebuilder:object:root=true
--
--// CoreDNS is the Schema for the API
--type CoreDNS struct {
-- metav1.TypeMeta `json:",inline"`
-- metav1.ObjectMeta `json:"metadata,omitempty"`
--
-- Spec CoreDNSSpec `json:"spec,omitempty"`
-- Status CoreDNSStatus `json:"status,omitempty"`
--}
--
--var _ addonv1alpha1.CommonObject = &CoreDNS{}
--
--func (o *CoreDNS) ComponentName() string {
-- return "coredns"
--}
--
--func (o *CoreDNS) CommonSpec() addonv1alpha1.CommonSpec {
-- return o.Spec.CommonSpec
--}
--
--func (o *CoreDNS) PatchSpec() addonv1alpha1.PatchSpec {
-- return o.Spec.PatchSpec
--}
--
--func (o *CoreDNS) GetCommonStatus() addonv1alpha1.CommonStatus {
-- return o.Status.CommonStatus
--}
--
--func (o *CoreDNS) SetCommonStatus(s addonv1alpha1.CommonStatus) {
-- o.Status.CommonStatus = s
--}
--
--// +kubebuilder:object:root=true
--
--// CoreDNSList contains a list of CoreDNS
--type CoreDNSList struct {
-- metav1.TypeMeta `json:",inline"`
-- metav1.ListMeta `json:"metadata,omitempty"`
-- Items []CoreDNS `json:"items"`
--}
--
--func init() {
-- SchemeBuilder.Register(&CoreDNS{}, &CoreDNSList{})
--}
-diff -ruN ./api/v1alpha1/groupversion_info.go /home/daniel/dev/addon-operators/coredns/api/v1alpha1/groupversion_info.go
---- ./api/v1alpha1/groupversion_info.go 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/api/v1alpha1/groupversion_info.go 1970-01-01 01:00:00.000000000 +0100
-@@ -1,35 +0,0 @@
--/*
--
--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 v1alpha1 contains API Schema definitions for the addons v1alpha1 API group
--// +kubebuilder:object:generate=true
--// +groupName=addons.k8s.io
--package v1alpha1
--
--import (
-- "k8s.io/apimachinery/pkg/runtime/schema"
-- "sigs.k8s.io/controller-runtime/pkg/scheme"
--)
--
--var (
-- // GroupVersion is group version used to register these objects
-- GroupVersion = schema.GroupVersion{Group: "addons.k8s.io", Version: "v1alpha1"}
--
-- // SchemeBuilder is used to add go types to the GroupVersionKind scheme
-- SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
--
-- // AddToScheme adds the types in this group-version to the given scheme.
-- AddToScheme = SchemeBuilder.AddToScheme
--)
-diff -ruN ./channels/packages/coredns/0.0.1/manifest.yaml /home/daniel/dev/addon-operators/coredns/channels/packages/coredns/0.0.1/manifest.yaml
---- ./channels/packages/coredns/0.0.1/manifest.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/channels/packages/coredns/0.0.1/manifest.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1 +0,0 @@
--# Placeholder manifest - replace with the manifest for your addon
-diff -ruN ./cmd/manager/main.go /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go
---- ./cmd/manager/main.go 1970-01-01 01:00:00.000000000 +0100
-+++ /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go 2019-07-01 14:57:36.616341088 +0200
-@@ -0,0 +1,88 @@
-+/*
-+
-+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 (
-+ "flag"
-+ "os"
-+
-+ _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
-+ "k8s.io/klog"
-+ "k8s.io/klog/klogr"
-+ "sigs.k8s.io/addon-operators/coredns/pkg/apis"
-+ "sigs.k8s.io/addon-operators/coredns/pkg/controller"
-+ "sigs.k8s.io/addon-operators/coredns/pkg/webhook"
-+ "sigs.k8s.io/controller-runtime/pkg/client/config"
-+ "sigs.k8s.io/controller-runtime/pkg/manager"
-+ logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
-+ "sigs.k8s.io/controller-runtime/pkg/runtime/signals"
-+ "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
-+)
-+
-+func main() {
-+ klog.InitFlags(nil)
-+ addon.Init()
-+
-+ var metricsAddr string
-+ flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
-+ flag.Parse()
-+ logf.SetLogger(klogr.New())
-+
-+ // Get a config to talk to the apiserver
-+ klog.Info("setting up client for manager")
-+ cfg, err := config.GetConfig()
-+ if err != nil {
-+ klog.Error(err, "unable to set up client config")
-+ os.Exit(1)
-+ }
-+
-+ // Create a new Cmd to provide shared dependencies and start components
-+ klog.Info("setting up manager")
-+ mgr, err := manager.New(cfg, manager.Options{MetricsBindAddress: metricsAddr})
-+ if err != nil {
-+ klog.Error(err, "unable to set up overall controller manager")
-+ os.Exit(1)
-+ }
-+
-+ klog.Info("Registering Components.")
-+
-+ // Setup Scheme for all resources
-+ klog.Info("setting up scheme")
-+ if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
-+ klog.Error(err, "unable add APIs to scheme")
-+ os.Exit(1)
-+ }
-+
-+ // Setup all Controllers
-+ klog.Info("Setting up controller")
-+ if err := controller.AddToManager(mgr); err != nil {
-+ klog.Error(err, "unable to register controllers to the manager")
-+ os.Exit(1)
-+ }
-+
-+ klog.Info("setting up webhooks")
-+ if err := webhook.AddToManager(mgr); err != nil {
-+ klog.Error(err, "unable to register webhooks to the manager")
-+ os.Exit(1)
-+ }
-+
-+ // Start the Cmd
-+ klog.Info("Starting the Cmd.")
-+ if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
-+ klog.Error(err, "unable to run the manager")
-+ os.Exit(1)
-+ }
-+}
-diff -ruN ./config/certmanager/certificate.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/certificate.yaml
---- ./config/certmanager/certificate.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/certificate.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,24 +0,0 @@
--# The following manifests contain a self-signed issuer CR and a certificate CR.
--# More document can be found at https://docs.cert-manager.io
--apiVersion: certmanager.k8s.io/v1alpha1
--kind: Issuer
--metadata:
-- name: selfsigned-issuer
-- namespace: system
--spec:
-- selfSigned: {}
-----
--apiVersion: certmanager.k8s.io/v1alpha1
--kind: Certificate
--metadata:
-- name: serving-cert # this name should match the one appeared in kustomizeconfig.yaml
-- namespace: system
--spec:
-- # $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize
-- commonName: $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc
-- dnsNames:
-- - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local
-- issuerRef:
-- kind: Issuer
-- name: selfsigned-issuer
-- secretName: webhook-server-cert # this secret will not be prefixed, since it's not managed by kustomize
-diff -ruN ./config/certmanager/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomization.yaml
---- ./config/certmanager/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,5 +0,0 @@
--resources:
--- certificate.yaml
--
--configurations:
--- kustomizeconfig.yaml
-diff -ruN ./config/certmanager/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml
---- ./config/certmanager/kustomizeconfig.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,16 +0,0 @@
--# This configuration is for teaching kustomize how to update name ref and var substitution
--nameReference:
--- kind: Issuer
-- group: certmanager.k8s.io
-- fieldSpecs:
-- - kind: Certificate
-- group: certmanager.k8s.io
-- path: spec/issuerRef/name
--
--varReference:
--- kind: Certificate
-- group: certmanager.k8s.io
-- path: spec/commonName
--- kind: Certificate
-- group: certmanager.k8s.io
-- path: spec/dnsNames
-diff -ruN ./config/crd/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/crd/kustomization.yaml
---- ./config/crd/kustomization.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/crd/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,21 +0,0 @@
--# This kustomization.yaml is not intended to be run by itself,
--# since it depends on service name and namespace that are out of this kustomize package.
--# It should be run by config/default
--resources:
--- bases/addons.k8s.io_coredns.yaml
--# +kubebuilder:scaffold:crdkustomizeresource
--
--patchesStrategicMerge:
--# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
--# patches here are for enabling the conversion webhook for each CRD
--#- patches/webhook_in_coredns.yaml
--# +kubebuilder:scaffold:crdkustomizewebhookpatch
--
--# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix.
--# patches here are for enabling the CA injection for each CRD
--#- patches/cainjection_in_coredns.yaml
--# +kubebuilder:scaffold:crdkustomizecainjectionpatch
--
--# the following config is for teaching kustomize how to do kustomization for CRDs.
--configurations:
--- kustomizeconfig.yaml
-diff -ruN ./config/crd/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/crd/kustomizeconfig.yaml
---- ./config/crd/kustomizeconfig.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/crd/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,17 +0,0 @@
--# This file is for teaching kustomize how to substitute name and namespace reference in CRD
--nameReference:
--- kind: Service
-- version: v1
-- fieldSpecs:
-- - kind: CustomResourceDefinition
-- group: apiextensions.k8s.io
-- path: spec/conversion/webhookClientConfig/service/name
--
--namespace:
--- kind: CustomResourceDefinition
-- group: apiextensions.k8s.io
-- path: spec/conversion/webhookClientConfig/service/namespace
-- create: false
--
--varReference:
--- path: metadata/annotations
-diff -ruN ./config/crd/patches/cainjection_in_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crd/patches/cainjection_in_coredns.yaml
---- ./config/crd/patches/cainjection_in_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/crd/patches/cainjection_in_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,8 +0,0 @@
--# The following patch adds a directive for certmanager to inject CA into the CRD
--# CRD conversion requires k8s 1.13 or later.
--apiVersion: apiextensions.k8s.io/v1beta1
--kind: CustomResourceDefinition
--metadata:
-- annotations:
-- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
-- name: coredns.addons.k8s.io
-diff -ruN ./config/crd/patches/webhook_in_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crd/patches/webhook_in_coredns.yaml
---- ./config/crd/patches/webhook_in_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/crd/patches/webhook_in_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,17 +0,0 @@
--# The following patch enables conversion webhook for CRD
--# CRD conversion requires k8s 1.13 or later.
--apiVersion: apiextensions.k8s.io/v1beta1
--kind: CustomResourceDefinition
--metadata:
-- name: coredns.addons.k8s.io
--spec:
-- conversion:
-- strategy: Webhook
-- webhookClientConfig:
-- # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank,
-- # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager)
-- caBundle: Cg==
-- service:
-- namespace: system
-- name: webhook-service
-- path: /convert
-diff -ruN ./config/crds/addons_v1alpha1_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/crds/addons_v1alpha1_coredns.yaml
---- ./config/crds/addons_v1alpha1_coredns.yaml 1970-01-01 01:00:00.000000000 +0100
-+++ /home/daniel/dev/addon-operators/coredns/config/crds/addons_v1alpha1_coredns.yaml 2019-07-01 14:57:36.616341088 +0200
-@@ -0,0 +1,61 @@
-+apiVersion: apiextensions.k8s.io/v1beta1
-+kind: CustomResourceDefinition
-+metadata:
-+ creationTimestamp: null
-+ labels:
-+ controller-tools.k8s.io: "1.0"
-+ name: coredns.addons.k8s.io
-+spec:
-+ group: addons.k8s.io
-+ names:
-+ kind: CoreDNS
-+ plural: coredns
-+ scope: Namespaced
-+ validation:
-+ openAPIV3Schema:
-+ properties:
-+ apiVersion:
-+ description: 'APIVersion defines the versioned schema of this representation
-+ of an object. Servers should convert recognized schemas to the latest
-+ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
-+ type: string
-+ kind:
-+ description: 'Kind is a string value representing the REST resource this
-+ object represents. Servers may infer this from the endpoint the client
-+ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
-+ type: string
-+ metadata:
-+ type: object
-+ spec:
-+ properties:
-+ channel:
-+ description: 'Channel specifies a channel that can be used to resolve
-+ a specific addon, eg: stable It will be ignored if Version is specified'
-+ type: string
-+ patches:
-+ items:
-+ type: object
-+ type: array
-+ version:
-+ description: Version specifies the exact addon version to be deployed,
-+ eg 1.2.3 It should not be specified if Channel is specified
-+ type: string
-+ type: object
-+ status:
-+ properties:
-+ errors:
-+ items:
-+ type: string
-+ type: array
-+ healthy:
-+ type: boolean
-+ required:
-+ - healthy
-+ type: object
-+ version: v1alpha1
-+status:
-+ acceptedNames:
-+ kind: ""
-+ plural: ""
-+ conditions: []
-+ storedVersions: []
-diff -ruN ./config/default/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/default/kustomization.yaml
---- ./config/default/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/default/kustomization.yaml 2019-07-01 14:57:36.616341088 +0200
-@@ -1,27 +1,35 @@
- # Adds namespace to all resources.
--namespace: test-system
-+namespace: coredns-system
-
- # Value of this field is prepended to the
- # names of all resources, e.g. a deployment named
- # "wordpress" becomes "alices-wordpress".
- # Note that it should also match with the prefix (text before '-') of the namespace
- # field above.
--namePrefix: test-
-+namePrefix: coredns-
-
- # Labels to add to all resources and selectors.
- #commonLabels:
- # someName: someValue
-
--bases:
--- ../crd
--- ../rbac
--- ../manager
--# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in crd/kustomization.yaml
--#- ../webhook
--# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required.
--#- ../certmanager
-+# Each entry in this list must resolve to an existing
-+# resource definition in YAML. These are the resource
-+# files that kustomize reads, modifies and emits as a
-+# YAML string, with resources separated by document
-+# markers ("---").
-+resources:
-+- ../rbac/rbac_role.yaml
-+- ../rbac/rbac_role_binding.yaml
-+- ../manager/manager.yaml
-+ # Comment the following 3 lines if you want to disable
-+ # the auth proxy (https://github.com/brancz/kube-rbac-proxy)
-+ # which protects your /metrics endpoint.
-+- ../rbac/auth_proxy_service.yaml
-+- ../rbac/auth_proxy_role.yaml
-+- ../rbac/auth_proxy_role_binding.yaml
-
--patchesStrategicMerge:
-+patches:
-+- manager_image_patch.yaml
- # Protect the /metrics endpoint by putting it behind auth.
- # Only one of manager_auth_proxy_patch.yaml and
- # manager_prometheus_metrics_patch.yaml should be enabled.
-@@ -33,40 +41,9 @@
- # manager_prometheus_metrics_patch.yaml should be enabled.
- #- manager_prometheus_metrics_patch.yaml
-
--# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in crd/kustomization.yaml
--#- manager_webhook_patch.yaml
--
--# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'.
--# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks.
--# 'CERTMANAGER' needs to be enabled to use ca injection
--#- webhookcainjection_patch.yaml
--
--# the following config is for teaching kustomize how to do var substitution
- vars:
--# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix.
--#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
--# objref:
--# kind: Certificate
--# group: certmanager.k8s.io
--# version: v1alpha1
--# name: serving-cert # this name should match the one in certificate.yaml
--# fieldref:
--# fieldpath: metadata.namespace
--#- name: CERTIFICATE_NAME
--# objref:
--# kind: Certificate
--# group: certmanager.k8s.io
--# version: v1alpha1
--# name: serving-cert # this name should match the one in certificate.yaml
--#- name: SERVICE_NAMESPACE # namespace of the service
--# objref:
--# kind: Service
--# version: v1
--# name: webhook-service
--# fieldref:
--# fieldpath: metadata.namespace
--#- name: SERVICE_NAME
--# objref:
--# kind: Service
--# version: v1
--# name: webhook-service
-+- name: WEBHOOK_SECRET_NAME
-+ objref:
-+ kind: Secret
-+ name: webhook-server-secret
-+ apiVersion: v1
-diff -ruN ./config/default/manager_auth_proxy_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_auth_proxy_patch.yaml
---- ./config/default/manager_auth_proxy_patch.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_auth_proxy_patch.yaml 2019-07-01 14:57:36.616341088 +0200
-@@ -1,7 +1,7 @@
- # This patch inject a sidecar container which is a HTTP proxy for the controller manager,
- # it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews.
- apiVersion: apps/v1
--kind: Deployment
-+kind: StatefulSet
- metadata:
- name: controller-manager
- namespace: system
-@@ -10,7 +10,7 @@
- spec:
- containers:
- - name: kube-rbac-proxy
-- image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.1
-+ image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0
- args:
- - "--secure-listen-address=0.0.0.0:8443"
- - "--upstream=http://127.0.0.1:8080/"
-@@ -22,4 +22,3 @@
- - name: manager
- args:
- - "--metrics-addr=127.0.0.1:8080"
-- - "--enable-leader-election"
-diff -ruN ./config/default/manager_image_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_image_patch.yaml
---- ./config/default/manager_image_patch.yaml 1970-01-01 01:00:00.000000000 +0100
-+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_image_patch.yaml 2019-07-01 14:57:36.616341088 +0200
-@@ -0,0 +1,12 @@
-+apiVersion: apps/v1
-+kind: StatefulSet
-+metadata:
-+ name: controller-manager
-+ namespace: system
-+spec:
-+ template:
-+ spec:
-+ containers:
-+ # Change the value of image field below to your controller image URL
-+ - image: IMAGE_URL
-+ name: manager
-diff -ruN ./config/default/manager_prometheus_metrics_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_prometheus_metrics_patch.yaml
---- ./config/default/manager_prometheus_metrics_patch.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_prometheus_metrics_patch.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -1,6 +1,6 @@
- # This patch enables Prometheus scraping for the manager pod.
- apiVersion: apps/v1
--kind: Deployment
-+kind: StatefulSet
- metadata:
- name: controller-manager
- namespace: system
-diff -ruN ./config/default/manager_webhook_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/manager_webhook_patch.yaml
---- ./config/default/manager_webhook_patch.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_webhook_patch.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,23 +0,0 @@
--apiVersion: apps/v1
--kind: Deployment
--metadata:
-- name: controller-manager
-- namespace: system
--spec:
-- template:
-- spec:
-- containers:
-- - name: manager
-- ports:
-- - containerPort: 9443
-- name: webhook-server
-- protocol: TCP
-- volumeMounts:
-- - mountPath: /tmp/k8s-webhook-server/serving-certs
-- name: cert
-- readOnly: true
-- volumes:
-- - name: cert
-- secret:
-- defaultMode: 420
-- secretName: webhook-server-cert
-diff -ruN ./config/default/webhookcainjection_patch.yaml /home/daniel/dev/addon-operators/coredns/config/default/webhookcainjection_patch.yaml
---- ./config/default/webhookcainjection_patch.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/default/webhookcainjection_patch.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,15 +0,0 @@
--# This patch add annotation to admission webhook config and
--# the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize.
--apiVersion: admissionregistration.k8s.io/v1beta1
--kind: MutatingWebhookConfiguration
--metadata:
-- name: mutating-webhook-configuration
-- annotations:
-- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
-----
--apiVersion: admissionregistration.k8s.io/v1beta1
--kind: ValidatingWebhookConfiguration
--metadata:
-- name: validating-webhook-configuration
-- annotations:
-- certmanager.k8s.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
-diff -ruN ./config/manager/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml
---- ./config/manager/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,2 +0,0 @@
--resources:
--- manager.yaml
-diff -ruN ./config/manager/manager.yaml /home/daniel/dev/addon-operators/coredns/config/manager/manager.yaml
---- ./config/manager/manager.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/manager/manager.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -3,32 +3,57 @@
- metadata:
- labels:
- control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
- name: system
- ---
-+apiVersion: v1
-+kind: Service
-+metadata:
-+ name: controller-manager-service
-+ namespace: system
-+ labels:
-+ control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
-+spec:
-+ selector:
-+ control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
-+ ports:
-+ - port: 443
-+---
- apiVersion: apps/v1
--kind: Deployment
-+kind: StatefulSet
- metadata:
- name: controller-manager
- namespace: system
- labels:
- control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
- spec:
- selector:
- matchLabels:
- control-plane: controller-manager
-- replicas: 1
-+ controller-tools.k8s.io: "1.0"
-+ serviceName: controller-manager-service
- template:
- metadata:
- labels:
- control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
- spec:
- containers:
- - command:
- - /manager
-- args:
-- - --enable-leader-election
- image: controller:latest
-+ imagePullPolicy: Always
- name: manager
-+ env:
-+ - name: POD_NAMESPACE
-+ valueFrom:
-+ fieldRef:
-+ fieldPath: metadata.namespace
-+ - name: SECRET_NAME
-+ value: $(WEBHOOK_SECRET_NAME)
- resources:
- limits:
- cpu: 100m
-@@ -36,4 +61,23 @@
- requests:
- cpu: 100m
- memory: 20Mi
-+ ports:
-+ - containerPort: 9876
-+ name: webhook-server
-+ protocol: TCP
-+ volumeMounts:
-+ - mountPath: /tmp/cert
-+ name: cert
-+ readOnly: true
- terminationGracePeriodSeconds: 10
-+ volumes:
-+ - name: cert
-+ secret:
-+ defaultMode: 420
-+ secretName: webhook-server-secret
-+---
-+apiVersion: v1
-+kind: Secret
-+metadata:
-+ name: webhook-server-secret
-+ namespace: system
-diff -ruN ./config/rbac/auth_proxy_service.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/auth_proxy_service.yaml
---- ./config/rbac/auth_proxy_service.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/auth_proxy_service.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -7,6 +7,7 @@
- prometheus.io/scrape: "true"
- labels:
- control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
- name: controller-manager-metrics-service
- namespace: system
- spec:
-@@ -16,3 +17,4 @@
- targetPort: https
- selector:
- control-plane: controller-manager
-+ controller-tools.k8s.io: "1.0"
-diff -ruN ./config/rbac/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml
---- ./config/rbac/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,11 +0,0 @@
--resources:
--- role.yaml
--- role_binding.yaml
--- leader_election_role.yaml
--- leader_election_role_binding.yaml
--# Comment the following 3 lines if you want to disable
--# the auth proxy (https://github.com/brancz/kube-rbac-proxy)
--# which protects your /metrics endpoint.
--- auth_proxy_service.yaml
--- auth_proxy_role.yaml
--- auth_proxy_role_binding.yaml
-diff -ruN ./config/rbac/leader_election_role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role_binding.yaml
---- ./config/rbac/leader_election_role_binding.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,12 +0,0 @@
--apiVersion: rbac.authorization.k8s.io/v1
--kind: RoleBinding
--metadata:
-- name: leader-election-rolebinding
--roleRef:
-- apiGroup: rbac.authorization.k8s.io
-- kind: Role
-- name: leader-election-role
--subjects:
--- kind: ServiceAccount
-- name: default
-- namespace: system
-diff -ruN ./config/rbac/leader_election_role.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role.yaml
---- ./config/rbac/leader_election_role.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,32 +0,0 @@
--# permissions to do leader election.
--apiVersion: rbac.authorization.k8s.io/v1
--kind: Role
--metadata:
-- name: leader-election-role
--rules:
--- apiGroups:
-- - ""
-- resources:
-- - configmaps
-- verbs:
-- - get
-- - list
-- - watch
-- - create
-- - update
-- - patch
-- - delete
--- apiGroups:
-- - ""
-- resources:
-- - configmaps/status
-- verbs:
-- - get
-- - update
-- - patch
--- apiGroups:
-- - ""
-- resources:
-- - events
-- verbs:
-- - create
-diff -ruN ./config/rbac/manager_role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role_binding.yaml
---- ./config/rbac/manager_role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role_binding.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -0,0 +1,12 @@
-+apiVersion: rbac.authorization.k8s.io/v1
-+kind: ClusterRoleBinding
-+metadata:
-+ creationTimestamp: null
-+ name: manager-rolebinding
-+roleRef:
-+ apiGroup: rbac.authorization.k8s.io
-+ kind: ClusterRole
-+ name: manager-role
-+subjects:
-+- kind: ServiceAccount
-+ name: ""
-diff -ruN ./config/rbac/manager_role.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role.yaml
---- ./config/rbac/manager_role.yaml 1970-01-01 01:00:00.000000000 +0100
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/manager_role.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -0,0 +1,116 @@
-+apiVersion: rbac.authorization.k8s.io/v1
-+kind: ClusterRole
-+metadata:
-+ creationTimestamp: null
-+ name: manager-role
-+rules:
-+- apiGroups:
-+ - addons.k8s.io
-+ resources:
-+ - coredns
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - patch
-+ - delete
-+- apiGroups:
-+ - addons.k8s.io
-+ resources:
-+ - coredns/status
-+ verbs:
-+ - get
-+ - update
-+ - patch
-+- apiGroups:
-+ - apps
-+ - extensions
-+ resources:
-+ - deployments
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - delete
-+ - patch
-+- apiGroups:
-+ - ""
-+ resources:
-+ - configmaps
-+ - serviceaccounts
-+ - services
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - delete
-+ - patch
-+- apiGroups:
-+ - rbac.authorization.k8s.io
-+ resources:
-+ - roles
-+ - rolebindings
-+ - clusterroles
-+ - clusterrolebindings
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - delete
-+ - patch
-+- apiGroups:
-+ - ""
-+ resources:
-+ - endpoints
-+ - namespaces
-+ - nodes
-+ - pods
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+- apiGroups:
-+ - admissionregistration.k8s.io
-+ resources:
-+ - mutatingwebhookconfigurations
-+ - validatingwebhookconfigurations
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - patch
-+ - delete
-+- apiGroups:
-+ - ""
-+ resources:
-+ - secrets
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - patch
-+ - delete
-+- apiGroups:
-+ - ""
-+ resources:
-+ - services
-+ verbs:
-+ - get
-+ - list
-+ - watch
-+ - create
-+ - update
-+ - patch
-+ - delete
-diff -ruN ./config/rbac/role_binding.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/role_binding.yaml
---- ./config/rbac/role_binding.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/rbac/role_binding.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,12 +0,0 @@
--apiVersion: rbac.authorization.k8s.io/v1
--kind: ClusterRoleBinding
--metadata:
-- name: manager-rolebinding
--roleRef:
-- apiGroup: rbac.authorization.k8s.io
-- kind: ClusterRole
-- name: manager-role
--subjects:
--- kind: ServiceAccount
-- name: default
-- namespace: system
-diff -ruN ./config/samples/addons_v1alpha1_coredns.yaml /home/daniel/dev/addon-operators/coredns/config/samples/addons_v1alpha1_coredns.yaml
---- ./config/samples/addons_v1alpha1_coredns.yaml 2019-10-14 16:24:08.777447288 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/samples/addons_v1alpha1_coredns.yaml 2019-07-01 14:57:36.620341144 +0200
-@@ -1,7 +1,15 @@
- apiVersion: addons.k8s.io/v1alpha1
- kind: CoreDNS
- metadata:
-- name: coredns-sample
-+ name: default
-+ namespace: kube-system
- spec:
-- # Add fields here
-- foo: bar
-+ channel: stable
-+ patches:
-+ - apiVersion: apps/v1
-+ kind: Deployment
-+ metadata:
-+ name: coredns
-+ namespace: kube-system
-+ labels:
-+ foo: bar
-diff -ruN ./config/webhook/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/kustomization.yaml
---- ./config/webhook/kustomization.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,6 +0,0 @@
--resources:
--- manifests.yaml
--- service.yaml
--
--configurations:
--- kustomizeconfig.yaml
-diff -ruN ./config/webhook/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/kustomizeconfig.yaml
---- ./config/webhook/kustomizeconfig.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,25 +0,0 @@
--# the following config is for teaching kustomize where to look at when substituting vars.
--# It requires kustomize v2.1.0 or newer to work properly.
--nameReference:
--- kind: Service
-- version: v1
-- fieldSpecs:
-- - kind: MutatingWebhookConfiguration
-- group: admissionregistration.k8s.io
-- path: webhooks/clientConfig/service/name
-- - kind: ValidatingWebhookConfiguration
-- group: admissionregistration.k8s.io
-- path: webhooks/clientConfig/service/name
--
--namespace:
--- kind: MutatingWebhookConfiguration
-- group: admissionregistration.k8s.io
-- path: webhooks/clientConfig/service/namespace
-- create: true
--- kind: ValidatingWebhookConfiguration
-- group: admissionregistration.k8s.io
-- path: webhooks/clientConfig/service/namespace
-- create: true
--
--varReference:
--- path: metadata/annotations
-diff -ruN ./config/webhook/service.yaml /home/daniel/dev/addon-operators/coredns/config/webhook/service.yaml
---- ./config/webhook/service.yaml 2019-10-14 16:23:40.252832287 +0200
-+++ /home/daniel/dev/addon-operators/coredns/config/webhook/service.yaml 1970-01-01 01:00:00.000000000 +0100
-@@ -1,12 +0,0 @@
--
--apiVersion: v1
--kind: Service
--metadata:
-- name: webhook-service
-- namespace: system
--spec:
-- ports:
-- - port: 443
-- targetPort: 9443
-- selector:
-- control-plane: controller-manager
-diff -ruN ./controllers/coredns_controller.go /home/daniel/dev/addon-operators/coredns/controllers/coredns_controller.go
---- ./controllers/coredns_controller.go 2019-10-14 16:24:09.149459210 +0200
-+++ /home/daniel/dev/addon-operators/coredns/controllers/coredns_controller.go 1970-01-01 01:00:00.000000000 +0100
-@@ -1,73 +0,0 @@
--
--
--package controllers
--
--import (
-- "sigs.k8s.io/controller-runtime/pkg/controller"
-- "sigs.k8s.io/controller-runtime/pkg/handler"
-- "sigs.k8s.io/controller-runtime/pkg/reconcile"
-- "sigs.k8s.io/controller-runtime/pkg/source"
-- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
-- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/status"
-- "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative"
--
-- "github.com/go-logr/logr"
-- ctrl "sigs.k8s.io/controller-runtime"
-- "sigs.k8s.io/controller-runtime/pkg/client"
--
-- api "github.com/kubernetes-sigs/test/api/v1alpha1"
--)
--
--var _ reconcile.Reconciler = &CoreDNSReconciler{}
--
--// CoreDNSReconciler reconciles a CoreDNS object
--type CoreDNSReconciler struct {
-- client.Client
-- Log logr.Logger
--
-- declarative.Reconciler
--}
--
--// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns,verbs=get;list;watch;create;update;patch;delete
--// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns/status,verbs=get;update;patch
--
--func (r *CoreDNSReconciler) SetupWithManager(mgr ctrl.Manager) error {
-- addon.Init()
--
-- labels := map[string]string{
-- "k8s-app": "coredns",
-- }
--
-- watchLabels := declarative.SourceLabel(mgr.GetScheme())
--
-- if err := r.Reconciler.Init(mgr, &api.CoreDNS{},
-- declarative.WithObjectTransform(declarative.AddLabels(labels)),
-- declarative.WithOwner(declarative.SourceAsOwner),
-- declarative.WithLabels(watchLabels),
-- declarative.WithStatus(status.NewBasic(mgr.GetClient())),
-- // TODO: add an application to your manifest: declarative.WithObjectTransform(addon.TransformApplicationFromStatus),
-- // TODO: add an application to your manifest: declarative.WithManagedApplication(watchLabels),
-- declarative.WithObjectTransform(addon.ApplyPatches),
-- ); err != nil {
-- return err
-- }
--
-- c, err := controller.New("coredns-controller", mgr, controller.Options{Reconciler: r})
-- if err != nil {
-- return err
-- }
--
-- // Watch for changes to CoreDNS
-- err = c.Watch(&source.Kind{Type: &api.CoreDNS{}}, &handler.EnqueueRequestForObject{})
-- if err != nil {
-- return err
-- }
--
-- // Watch for changes to deployed objects
-- _, err = declarative.WatchAll(mgr.GetConfig(), c, r, watchLabels)
-- if err != nil {
-- return err
-- }
--
-- return nil
--}
diff -ruN ./Dockerfile /home/daniel/dev/addon-operators/coredns/Dockerfile
--- ./Dockerfile 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/Dockerfile 1970-01-01 01:00:00.000000000 +0100
@@ -1,27 +0,0 @@
-# Build the manager binary
-FROM golang:1.12.5 as builder
-
-WORKDIR /workspace
-# Copy the Go Modules manifests
-COPY go.mod go.mod
-COPY go.sum go.sum
-# cache deps before building and copying source so that we don't need to re-download as much
-# and so that source changes don't invalidate our downloaded layer
-RUN go mod download
-
-# Copy the go source
-COPY main.go main.go
-COPY api/ api/
-COPY controllers/ controllers/
-
-# Build
-RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go
-
-# Use distroless as minimal base image to package the manager binary
-# Refer to https://github.com/GoogleContainerTools/distroless for more details
-FROM gcr.io/distroless/static:nonroot
-WORKDIR /
-COPY --from=builder /workspace/manager .
-USER nonroot:nonroot
-
-ENTRYPOINT ["/manager"]
diff -ruN ./.gitignore /home/daniel/dev/addon-operators/coredns/.gitignore
--- ./.gitignore 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/.gitignore 2019-07-01 14:57:36.616341088 +0200
@@ -1,3 +1,4 @@
+.build/
# Binaries for programs and plugins
*.exe
diff -ruN ./go.mod /home/daniel/dev/addon-operators/coredns/go.mod
--- ./go.mod 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/go.mod 2019-07-01 14:57:36.620341144 +0200
@@ -1,8 +1,100 @@
-
-module github.com/kubernetes-sigs/test
+module sigs.k8s.io/addon-operators/coredns
go 1.12
require (
- sigs.k8s.io/controller-runtime v0.2.2
+ github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
+ github.com/BurntSushi/toml v0.3.0 // indirect
+ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 // indirect
+ github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30 // indirect
+ github.com/coreos/bbolt v1.3.1-coreos.6 // indirect
+ github.com/coreos/etcd v3.3.10+incompatible // indirect
+ github.com/coreos/go-oidc v0.0.0-20180117170138-065b426bd416 // indirect
+ github.com/coreos/go-semver v0.0.0-20180108230905-e214231b295a // indirect
+ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 // indirect
+ github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea // indirect
+ github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 // indirect
+ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 // indirect
+ github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e // indirect
+ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 // indirect
+ github.com/ghodss/yaml v1.0.0 // indirect
+ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 // indirect
+ github.com/go-logr/logr v0.1.0 // indirect
+ github.com/go-logr/zapr v0.1.1 // indirect
+ github.com/go-openapi/analysis v0.17.2 // indirect
+ github.com/go-openapi/errors v0.17.2 // indirect
+ github.com/go-openapi/jsonpointer v0.19.0 // indirect
+ github.com/go-openapi/jsonreference v0.19.0 // indirect
+ github.com/go-openapi/loads v0.17.2 // indirect
+ github.com/go-openapi/runtime v0.17.2 // indirect
+ github.com/go-openapi/spec v0.17.2 // indirect
+ github.com/go-openapi/swag v0.17.2 // indirect
+ github.com/go-openapi/validate v0.18.0 // indirect
+ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
+ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 // indirect
+ github.com/google/btree v1.0.0 // indirect
+ github.com/google/go-cmp v0.2.0 // indirect
+ github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect
+ github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d // indirect
+ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c // indirect
+ github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect
+ github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79 // indirect
+ github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20170330212424-2500245aa611 // indirect
+ github.com/grpc-ecosystem/grpc-gateway v1.3.0 // indirect
+ github.com/hashicorp/golang-lru v0.5.0 // indirect
+ github.com/imdario/mergo v0.3.7 // indirect
+ github.com/inconshreveable/mousetrap v1.0.0 // indirect
+ github.com/jonboulle/clockwork v0.0.0-20141017032234-72f9bd7c4e0c // indirect
+ github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be // indirect
+ github.com/markbates/inflect v1.0.4 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
+ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d // indirect
+ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
+ github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
+ github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3 // indirect
+ github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
+ github.com/philhofer/fwd v1.0.0 // indirect
+ github.com/pkg/errors v0.8.0 // indirect
+ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect
+ github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20 // indirect
+ github.com/prometheus/client_golang v0.9.2 // indirect
+ github.com/sirupsen/logrus v1.2.0 // indirect
+ github.com/soheilhy/cmux v0.1.3 // indirect
+ github.com/spf13/afero v1.2.2 // indirect
+ github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937 // indirect
+ github.com/tinylib/msgp v1.1.0 // indirect
+ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 // indirect
+ github.com/ugorji/go v0.0.0-20171019201919-bdcc60b419d1 // indirect
+ github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18 // indirect
+ go.uber.org/atomic v1.3.2 // indirect
+ go.uber.org/multierr v1.1.0 // indirect
+ go.uber.org/zap v1.9.1 // indirect
+ golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 // indirect
+ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a // indirect
+ golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db // indirect
+ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
+ google.golang.org/appengine v1.5.0 // indirect
+ google.golang.org/genproto v0.0.0-20170731182057-09f6ed296fc6 // indirect
+ google.golang.org/grpc v1.13.0 // indirect
+ gopkg.in/inf.v0 v0.9.0 // indirect
+ gopkg.in/natefinch/lumberjack.v2 v2.0.0-20150622162204-20b71e5b60d7 // indirect
+ gopkg.in/square/go-jose.v2 v2.0.0-20180411045311-89060dee6a84 // indirect
+ gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect
+ gotest.tools v2.2.0+incompatible // indirect
+ k8s.io/api v0.0.0-20190222213804-5cb15d344471
+ k8s.io/apiextensions-apiserver v0.0.0-20190325193600-475668423e9f // indirect
+ k8s.io/apimachinery v0.0.0-20190221213512-86fb29eff628
+ k8s.io/apiserver v0.0.0-20190319190228-a4358799e4fe // indirect
+ k8s.io/client-go v10.0.0+incompatible
+ k8s.io/code-generator v0.0.0-20190419212335-ff26e7842f9d
+ k8s.io/klog v0.3.0
+ k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 // indirect
+ k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7 // indirect
+ sigs.k8s.io/controller-runtime v0.1.10
+ sigs.k8s.io/controller-tools v0.1.10
+ sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20190624171758-3bfb5869c8b7
+ sigs.k8s.io/structured-merge-diff v0.0.0-20190302045857-e85c7b244fd2 // indirect
+ sigs.k8s.io/testing_frameworks v0.1.1 // indirect
+ sigs.k8s.io/yaml v1.1.0 // indirect
)
diff -ruN ./go.sum /home/daniel/dev/addon-operators/coredns/go.sum
--- ./go.sum 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/go.sum 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,283 @@
+cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
+github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30 h1:Kn3rqvbUFqSepE2OqVu0Pn1CbDw9IuMlONapol0zuwk=
+github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30/go.mod h1:4AJxUpXUhv4N+ziTvIcWWXgeorXpxPZOfk9HdEVr96M=
+github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-oidc v0.0.0-20180117170138-065b426bd416/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/coreos/go-semver v0.0.0-20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/evanphx/json-patch v4.0.0+incompatible h1:xregGRMLBeuRcwiOTHRCsPPuzCQlqhxUPbqdw+zNkLc=
+github.com/evanphx/json-patch v4.0.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v0.0.0-20180820084758-c7ce16629ff4/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE=
+github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
+github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
+github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
+github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
+github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
+github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
+github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
+github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
+github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
+github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
+github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
+github.com/go-openapi/runtime v0.17.2/go.mod h1:QO936ZXeisByFmZEO1IS1Dqhtf4QV1sYYFtIq6Ld86Q=
+github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
+github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
+github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
+github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
+github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
+github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
+github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
+github.com/gobuffalo/envy v1.6.5 h1:X3is06x7v0nW2xiy2yFbbIjwHz57CD6z6MkvqULTCm8=
+github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
+github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 h1:WSBJMqJbLxsn+bTCPyPYZfqHdJmc8MK4wrBjMft6BAM=
+github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck=
+github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
+github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
+github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4=
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
+github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20170330212424-2500245aa611/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
+github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI=
+github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
+github.com/jonboulle/clockwork v0.0.0-20141017032234-72f9bd7c4e0c/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be h1:AHimNtVIpiBjPUhEF5KNCkrUyqTSA5zWUl8sQ2bfGBE=
+github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g=
+github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
+github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3 h1:EooPXg51Tn+xmWPXJUGCnJhJSpeuMlBmfJVcqIRmmv8=
+github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
+github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
+github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
+github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
+github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M=
+github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740=
+github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8=
+github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE=
+github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937 h1:+ryWjMVzFAkEz5zT+Ms49aROZwxlJce3x3zLTFpkz3Y=
+github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v0.0.0-20171019201919-bdcc60b419d1/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
+github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.9.1 h1:XCJQEf3W6eZaVwhRBof6ImoYGJSITeKWsyeh3HFu/5o=
+go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo=
+golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190206173232-65e2d4e15006 h1:bfLnR+k0tq5Lqt6dflRLcZiz6UaXCMt3vhYJ1l4FQ80=
+golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
+golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU=
+golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
+gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
+gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
+google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20170731182057-09f6ed296fc6/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/grpc v1.13.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
+gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0-20150622162204-20b71e5b60d7/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/square/go-jose.v2 v2.0.0-20180411045311-89060dee6a84/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
+gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+k8s.io/api v0.0.0-20190222213804-5cb15d344471 h1:MzQGt8qWQCR+39kbYRd0uQqsvSidpYqJLFeWiJ9l4OE=
+k8s.io/api v0.0.0-20190222213804-5cb15d344471/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
+k8s.io/api v0.0.0-20190425012535-181e1f9c52c1 h1:VfWCVGGx0+ll/JC2oT+5ClpHdiLKLhuko1l7LKG4dh4=
+k8s.io/api v0.0.0-20190425012535-181e1f9c52c1/go.mod h1:AhUc3Ph6fhRc0SCpt0Hwv0E+Q8QiEAASkXKwfmT2JwU=
+k8s.io/apiextensions-apiserver v0.0.0-20190325193600-475668423e9f h1:+GpMltIq6SUOswgSQ3HcxgldikyBCreeRDkCYOzwfGk=
+k8s.io/apiextensions-apiserver v0.0.0-20190325193600-475668423e9f/go.mod h1:IxkesAMoaCRoLrPJdZNZUQp9NfZnzqaVzLhb2VEQzXE=
+k8s.io/apiextensions-apiserver v0.0.0-20190426053235-842c4571cde0 h1:blst2tV97kE1/Mxaxx3zzh6zUGpxCbGNq0CdFf9/N8s=
+k8s.io/apiextensions-apiserver v0.0.0-20190426053235-842c4571cde0/go.mod h1:IPM+7P9C3mY4uik+2wHMNbydKfSZpl9Hnu0Ze0447Wg=
+k8s.io/apimachinery v0.0.0-20190221213512-86fb29eff628 h1:UYfHH+KEF88OTg+GojQUwFTNxbxwmoktLwutUzR0GPg=
+k8s.io/apimachinery v0.0.0-20190221213512-86fb29eff628/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
+k8s.io/apimachinery v0.0.0-20190424052434-11f1676e3da4/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw=
+k8s.io/apimachinery v0.0.0-20190424212440-527a9d33701e/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw=
+k8s.io/apimachinery v0.0.0-20190425132440-17f84483f500 h1:WP0qwo6Cks8BJpy/B2EOUWOyuVoGEYu3x9kVpON7wTs=
+k8s.io/apimachinery v0.0.0-20190425132440-17f84483f500/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw=
+k8s.io/apiserver v0.0.0-20190319190228-a4358799e4fe h1:zD63Eo0qbcR9JzZ90yQsFMzXYSbfsCa5ICB2D2nX1tg=
+k8s.io/apiserver v0.0.0-20190319190228-a4358799e4fe/go.mod h1:6bqaTSOSJavUIXUtfaR9Os9JtTCm8ZqH2SUl2S60C4w=
+k8s.io/apiserver v0.0.0-20190426012941-33871ad74f4b/go.mod h1:omlj40TPI/OV4YFwPP09JuOkEkKbpS5bNE2T2sPeY80=
+k8s.io/apiserver v0.0.0-20190426133039-accf7b6d6716 h1:gByi/idNjfDDk+lWNRqWk2uE1/KAsJtYXRMEc2M1a1k=
+k8s.io/client-go v0.0.0-20190425172711-65184652c889/go.mod h1:PeVFCnjeDy6EwLN+wdDIZd1DwDY6jnkpQt9psMo5YRU=
+k8s.io/client-go v10.0.0+incompatible h1:F1IqCqw7oMBzDkqlcBymRq1450wD0eNqLE9jzUrIi34=
+k8s.io/client-go v10.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s=
+k8s.io/client-go v11.0.0+incompatible h1:LBbX2+lOwY9flffWlJM7f1Ct8V2SRNiMRDFeiwnJo9o=
+k8s.io/client-go v11.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s=
+k8s.io/code-generator v0.0.0-20190419212335-ff26e7842f9d h1:QY1FeareEgkYrWnF2D2XxZFlF0k5Ir4uE8YjD1kHi94=
+k8s.io/code-generator v0.0.0-20190419212335-ff26e7842f9d/go.mod h1:rVrFWfTVftGH7bb972nWC6N4QkJ4LU7FOXu8GH2UkJo=
+k8s.io/component-base v0.0.0-20190424053038-9fe063da3132/go.mod h1:pi2NQz+AaW5UMjaswai1Hfzqzhh7bV6ssi3X3k4s03g=
+k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af h1:SwjZbO0u5ZuaV6TRMWOGB40iaycX8sbdMQHtjNZ19dk=
+k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog v0.3.0 h1:0VPpR+sizsiivjIfIAQH/rl8tan6jvWkS7lU+0di3lE=
+k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 h1:TRb4wNWoBVrH9plmkp2q86FIDppkbrEXdXlxU3a3BMI=
+k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
+k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
+k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7 h1:8r+l4bNWjRlsFYlQJnKJ2p7s1YQPj4XyXiJVqDHRx7c=
+k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
+modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
+modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
+modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
+modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
+modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
+sigs.k8s.io/controller-runtime v0.1.10 h1:amLOmcekVdnsD1uIpmgRqfTbQWJ2qxvQkcdeFhcotn4=
+sigs.k8s.io/controller-runtime v0.1.10/go.mod h1:HFAYoOh6XMV+jKF1UjFwrknPbowfyHEHHRdJMf2jMX8=
+sigs.k8s.io/controller-tools v0.1.10 h1:onJbaVxkLKbLhy3BcLdesjkP6y+6WFVzg1BJv28BpCo=
+sigs.k8s.io/controller-tools v0.1.10/go.mod h1:6g08p9m9G/So3sBc1AOQifHfhxH/mb6Sc4z0LMI8XMw=
+sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20190404154250-8bafc34fd655 h1:xzJa5Jmx3J18LQZeAWSbSPCcorx36asgETRwoCjD7wk=
+sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20190404154250-8bafc34fd655/go.mod h1:ykt5oDuxE2+6o1OMDpAjLqFRzPdf4OHnCpvftPsUIIc=
+sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20190624171758-3bfb5869c8b7 h1:MJsfBngQLTX7v99ZsNEJLtpX1n5mzKesZxRfgb6De2M=
+sigs.k8s.io/kubebuilder-declarative-pattern v0.0.0-20190624171758-3bfb5869c8b7/go.mod h1:ykt5oDuxE2+6o1OMDpAjLqFRzPdf4OHnCpvftPsUIIc=
+sigs.k8s.io/structured-merge-diff v0.0.0-20190302045857-e85c7b244fd2/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
+sigs.k8s.io/testing_frameworks v0.1.1 h1:cP2l8fkA3O9vekpy5Ks8mmA0NW/F7yBdXf8brkWhVrs=
+sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U=
+sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
diff -ruN ./k8s/manager.yaml /home/daniel/dev/addon-operators/coredns/k8s/manager.yaml
--- ./k8s/manager.yaml 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/k8s/manager.yaml 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,178 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: coredns-operator
+ labels:
+ k8s-app: coredns-operator
+rules:
+- apiGroups:
+ - addons.k8s.io
+ resources:
+ - coredns
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - addons.k8s.io
+ resources:
+ - coredns/status
+ verbs:
+ - get
+ - update
+ - patch
+- apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - apps
+ - extensions
+ resources:
+ - deployments
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ - serviceaccounts
+ - services
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - rbac.authorization.k8s.io
+ resources:
+ - roles
+ - rolebindings
+ - clusterroles
+ - clusterrolebindings
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - namespaces
+ - nodes
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: coredns-operator
+ labels:
+ k8s-app: coredns-operator
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: coredns-operator
+subjects:
+- kind: ServiceAccount
+ name: coredns-operator
+ namespace: kube-system
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: coredns-operator
+ namespace: kube-system
+ labels:
+ k8s-app: coredns-operator
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ k8s-app: coredns-operator
+ name: coredns-operator
+ namespace: kube-system
+spec:
+ selector:
+ matchLabels:
+ k8s-app: coredns-operator
+ template:
+ metadata:
+ labels:
+ k8s-app: coredns-operator
+ spec:
+ containers:
+ - args:
+ - --metrics-addr=127.0.0.1:8080
+ command:
+ - /manager
+ env:
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ image: IMAGE_NAME
+ imagePullPolicy: Always
+ name: manager
+ resources:
+ limits:
+ memory: 200Mi
+ requests:
+ cpu: 100m
+ memory: 200Mi
+ serviceAccount: coredns-operator
+ terminationGracePeriodSeconds: 10
diff -ruN ./main.go /home/daniel/dev/addon-operators/coredns/main.go
--- ./main.go 2019-10-14 16:24:09.157459465 +0200
+++ /home/daniel/dev/addon-operators/coredns/main.go 1970-01-01 01:00:00.000000000 +0100
@@ -1,80 +0,0 @@
-/*
-
-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 (
- "flag"
- "os"
-
- addonsv1alpha1 "github.com/kubernetes-sigs/test/api/v1alpha1"
- "github.com/kubernetes-sigs/test/controllers"
- "k8s.io/apimachinery/pkg/runtime"
- clientgoscheme "k8s.io/client-go/kubernetes/scheme"
- _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
- ctrl "sigs.k8s.io/controller-runtime"
- "sigs.k8s.io/controller-runtime/pkg/log/zap"
- // +kubebuilder:scaffold:imports
-)
-
-var (
- scheme = runtime.NewScheme()
- setupLog = ctrl.Log.WithName("setup")
-)
-
-func init() {
- _ = clientgoscheme.AddToScheme(scheme)
-
- _ = addonsv1alpha1.AddToScheme(scheme)
- // +kubebuilder:scaffold:scheme
-}
-
-func main() {
- var metricsAddr string
- var enableLeaderElection bool
- flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
- flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
- "Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.")
- flag.Parse()
-
- ctrl.SetLogger(zap.Logger(true))
-
- mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
- Scheme: scheme,
- MetricsBindAddress: metricsAddr,
- LeaderElection: enableLeaderElection,
- Port: 9443,
- })
- if err != nil {
- setupLog.Error(err, "unable to start manager")
- os.Exit(1)
- }
-
- if err = (&controllers.CoreDNSReconciler{
- Client: mgr.GetClient(),
- Log: ctrl.Log.WithName("controllers").WithName("CoreDNS"),
- Scheme: mgr.GetScheme(),
- }).SetupWithManager(mgr); err != nil {
- setupLog.Error(err, "unable to create controller", "controller", "CoreDNS")
- os.Exit(1)
- }
- // +kubebuilder:scaffold:builder
-
- setupLog.Info("starting manager")
- if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
- setupLog.Error(err, "problem running manager")
- os.Exit(1)
- }
-}
diff -ruN ./Makefile /home/daniel/dev/addon-operators/coredns/Makefile
--- ./Makefile 2019-10-14 16:23:40.252832287 +0200
+++ /home/daniel/dev/addon-operators/coredns/Makefile 2019-07-01 14:57:36.616341088 +0200
@@ -1,69 +1,66 @@
# Image URL to use all building/pushing image targets
-IMG ?= controller:latest
-# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
-CRD_OPTIONS ?= "crd:trivialVersions=true"
-
-# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
-ifeq (,$(shell go env GOBIN))
-GOBIN=$(shell go env GOPATH)/bin
-else
-GOBIN=$(shell go env GOBIN)
-endif
+IMG ?= ${USER}/coredns-operator:latest
-all: manager
+all: test manager
# Run tests
test: generate fmt vet manifests
- go test ./... -coverprofile cover.out
+ go test ./pkg/... ./cmd/... -coverprofile cover.out
# Build manager binary
manager: generate fmt vet
- go build -o bin/manager main.go
+ go build -o bin/manager sigs.k8s.io/addon-operators/coredns/cmd/manager
# Run against the configured Kubernetes cluster in ~/.kube/config
-run: generate fmt vet manifests
- go run ./main.go
+run: generate fmt vet
+ go run ./cmd/manager/main.go
# Install CRDs into a cluster
install: manifests
- kustomize build config/crd | kubectl apply -f -
+ kubectl apply -f config/crds
# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
deploy: manifests
- cd config/manager && kustomize edit set image controller=${IMG}
- kustomize build config/default | kubectl apply -f -
+ kubectl apply -f config/crds
+ cat k8s/manager.yaml | sed -e "s@IMAGE_NAME@${IMG}@g" | kubectl apply -f -
# Generate manifests e.g. CRD, RBAC etc.
-manifests: controller-gen
- $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
+manifests:
+ go run vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go all
# Run go fmt against code
fmt:
- go fmt ./...
+ go fmt ./pkg/... ./cmd/...
# Run go vet against code
vet:
- go vet ./...
+ go vet ./pkg/... ./cmd/...
# Generate code
-generate: controller-gen
- $(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths="./..."
+generate:
+ifndef GOPATH
+ $(error GOPATH not defined, please define GOPATH. Run "go help gopath" to learn more about GOPATH)
+endif
+ go generate ./pkg/... ./cmd/...
# Build the docker image
docker-build: test
docker build . -t ${IMG}
+ @echo "updating kustomize image patch file for manager resource"
+ sed -i'' -e 's@image: .*@image: '"${IMG}"'@' ./config/default/manager_image_patch.yaml
# Push the docker image
docker-push:
docker push ${IMG}
-# find or download controller-gen
-# download controller-gen if necessary
-controller-gen:
-ifeq (, $(shell which controller-gen))
- go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.1
-CONTROLLER_GEN=$(GOBIN)/controller-gen
-else
-CONTROLLER_GEN=$(shell which controller-gen)
-endif
+push-image:
+ mkdir -p .build
+ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o .build/manager ./cmd/manager
+ mkdir -p .build/bin
+ cd .build/bin; wget -N https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl
+ chmod +x .build/bin/kubectl
+ tar cvf .build/layer.tar -C .build manager bin/kubectl
+ tar rvf .build/layer.tar channels/
+ crane append --base gcr.io/distroless/static:latest --new_layer .build/layer.tar --new_tag ${IMG} --output .build/merged.tar
+ crane push .build/merged.tar ${IMG}
diff -ruN ./pkg/apis/addons/group.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/group.go
--- ./pkg/apis/addons/group.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/group.go 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,17 @@
+/*
+
+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 addons contains addons API versions
+package addons
diff -ruN ./pkg/apis/addons/v1alpha1/coredns_types.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/coredns_types.go
--- ./pkg/apis/addons/v1alpha1/coredns_types.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/coredns_types.go 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,81 @@
+/*
+
+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 v1alpha1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ addonv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/apis/v1alpha1"
+)
+
+// CoreDNSSpec defines the desired state of CoreDNS
+type CoreDNSSpec struct {
+ addonv1alpha1.CommonSpec `json:",inline"`
+ addonv1alpha1.PatchSpec `json:",inline"`
+}
+
+// CoreDNSStatus defines the observed state of CoreDNS
+type CoreDNSStatus struct {
+ addonv1alpha1.CommonStatus `json:",inline"`
+}
+
+var _ addonv1alpha1.CommonObject = &CoreDNS{}
+var _ addonv1alpha1.Patchable = &CoreDNS{}
+
+func (c *CoreDNS) ComponentName() string {
+ return "coredns"
+}
+
+func (c *CoreDNS) CommonSpec() addonv1alpha1.CommonSpec {
+ return c.Spec.CommonSpec
+}
+
+func (c *CoreDNS) GetCommonStatus() addonv1alpha1.CommonStatus {
+ return c.Status.CommonStatus
+}
+
+func (c *CoreDNS) SetCommonStatus(s addonv1alpha1.CommonStatus) {
+ c.Status.CommonStatus = s
+}
+
+func (c *CoreDNS) PatchSpec() addonv1alpha1.PatchSpec {
+ return c.Spec.PatchSpec
+}
+
+// +genclient
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// CoreDNS is the Schema for the coredns API
+// +k8s:openapi-gen=true
+type CoreDNS struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ObjectMeta `json:"metadata,omitempty"`
+
+ Spec CoreDNSSpec `json:"spec,omitempty"`
+ Status CoreDNSStatus `json:"status,omitempty"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// CoreDNSList contains a list of CoreDNS
+type CoreDNSList struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ListMeta `json:"metadata,omitempty"`
+ Items []CoreDNS `json:"items"`
+}
+
+func init() {
+ SchemeBuilder.Register(&CoreDNS{}, &CoreDNSList{})
+}
diff -ruN ./pkg/apis/addons/v1alpha1/doc.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/doc.go
--- ./pkg/apis/addons/v1alpha1/doc.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/doc.go 2019-07-01 14:57:36.620341144 +0200
@@ -0,0 +1,22 @@
+/*
+
+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 v1alpha1 contains API Schema definitions for the addons v1alpha1 API group
+// +k8s:openapi-gen=true
+// +k8s:deepcopy-gen=package,register
+// +k8s:conversion-gen=sigs.k8s.io/addon-operators/coredns/pkg/apis/addons
+// +k8s:defaulter-gen=TypeMeta
+// +groupName=addons.k8s.io
+package v1alpha1
diff -ruN ./pkg/apis/addons/v1alpha1/register.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/register.go
--- ./pkg/apis/addons/v1alpha1/register.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/register.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,45 @@
+/*
+
+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.
+*/
+
+// NOTE: Boilerplate only. Ignore this file.
+
+// Package v1alpha1 contains API Schema definitions for the addons v1alpha1 API group
+// +k8s:openapi-gen=true
+// +k8s:deepcopy-gen=package,register
+// +k8s:conversion-gen=sigs.k8s.io/addon-operators/coredns/pkg/apis/addons
+// +k8s:defaulter-gen=TypeMeta
+// +groupName=addons.k8s.io
+package v1alpha1
+
+import (
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "sigs.k8s.io/controller-runtime/pkg/runtime/scheme"
+)
+
+var (
+ // SchemeGroupVersion is group version used to register these objects
+ SchemeGroupVersion = schema.GroupVersion{Group: "addons.k8s.io", Version: "v1alpha1"}
+
+ // SchemeBuilder is used to add go types to the GroupVersionKind scheme
+ SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
+
+ // AddToScheme is required by pkg/client/...
+ AddToScheme = SchemeBuilder.AddToScheme
+)
+
+// Resource is required by pkg/client/listers/...
+func Resource(resource string) schema.GroupResource {
+ return SchemeGroupVersion.WithResource(resource).GroupResource()
+}
diff -ruN ./pkg/apis/addons/v1alpha1/zz_generated.deepcopy.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/zz_generated.deepcopy.go
--- ./pkg/apis/addons/v1alpha1/zz_generated.deepcopy.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/zz_generated.deepcopy.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,119 @@
+// +build !ignore_autogenerated
+
+/*
+
+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.
+*/
+// Code generated by main. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+ runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CoreDNS) DeepCopyInto(out *CoreDNS) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+ in.Spec.DeepCopyInto(&out.Spec)
+ in.Status.DeepCopyInto(&out.Status)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreDNS.
+func (in *CoreDNS) DeepCopy() *CoreDNS {
+ if in == nil {
+ return nil
+ }
+ out := new(CoreDNS)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *CoreDNS) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CoreDNSList) DeepCopyInto(out *CoreDNSList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ out.ListMeta = in.ListMeta
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]CoreDNS, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreDNSList.
+func (in *CoreDNSList) DeepCopy() *CoreDNSList {
+ if in == nil {
+ return nil
+ }
+ out := new(CoreDNSList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *CoreDNSList) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CoreDNSSpec) DeepCopyInto(out *CoreDNSSpec) {
+ *out = *in
+ out.CommonSpec = in.CommonSpec
+ in.PatchSpec.DeepCopyInto(&out.PatchSpec)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreDNSSpec.
+func (in *CoreDNSSpec) DeepCopy() *CoreDNSSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(CoreDNSSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CoreDNSStatus) DeepCopyInto(out *CoreDNSStatus) {
+ *out = *in
+ in.CommonStatus.DeepCopyInto(&out.CommonStatus)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreDNSStatus.
+func (in *CoreDNSStatus) DeepCopy() *CoreDNSStatus {
+ if in == nil {
+ return nil
+ }
+ out := new(CoreDNSStatus)
+ in.DeepCopyInto(out)
+ return out
+}
diff -ruN ./pkg/apis/addtoscheme_addons_v1alpha1.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addtoscheme_addons_v1alpha1.go
--- ./pkg/apis/addtoscheme_addons_v1alpha1.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addtoscheme_addons_v1alpha1.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,25 @@
+/*
+
+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 apis
+
+import (
+ "sigs.k8s.io/addon-operators/coredns/pkg/apis/addons/v1alpha1"
+)
+
+func init() {
+ // Register the types with the Scheme so the components can map objects to GroupVersionKinds and back
+ AddToSchemes = append(AddToSchemes, v1alpha1.SchemeBuilder.AddToScheme)
+}
diff -ruN ./pkg/apis/apis.go /home/daniel/dev/addon-operators/coredns/pkg/apis/apis.go
--- ./pkg/apis/apis.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/apis.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,32 @@
+/*
+
+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.
+*/
+
+// Generate deepcopy for apis
+//go:generate go run ../../vendor/k8s.io/code-generator/cmd/deepcopy-gen/main.go -O zz_generated.deepcopy -i ./... -h ../../hack/boilerplate.go.txt
+
+// Package apis contains Kubernetes API groups.
+package apis
+
+import (
+ "k8s.io/apimachinery/pkg/runtime"
+)
+
+// AddToSchemes may be used to add all resources defined in the project to a Scheme
+var AddToSchemes runtime.SchemeBuilder
+
+// AddToScheme adds all Resources to the Scheme
+func AddToScheme(s *runtime.Scheme) error {
+ return AddToSchemes.AddToScheme(s)
+}
diff -ruN ./pkg/controller/add_coredns.go /home/daniel/dev/addon-operators/coredns/pkg/controller/add_coredns.go
--- ./pkg/controller/add_coredns.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/controller/add_coredns.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,25 @@
+/*
+
+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 controller
+
+import (
+ "sigs.k8s.io/addon-operators/coredns/pkg/controller/coredns"
+)
+
+func init() {
+ // AddToManagerFuncs is a list of functions to create controllers and add them to a manager.
+ AddToManagerFuncs = append(AddToManagerFuncs, coredns.Add)
+}
diff -ruN ./pkg/controller/controller.go /home/daniel/dev/addon-operators/coredns/pkg/controller/controller.go
--- ./pkg/controller/controller.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/controller/controller.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,33 @@
+/*
+
+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 controller
+
+import (
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+)
+
+// AddToManagerFuncs is a list of functions to add all Controllers to the Manager
+var AddToManagerFuncs []func(manager.Manager) error
+
+// AddToManager adds all Controllers to the Manager
+func AddToManager(m manager.Manager) error {
+ for _, f := range AddToManagerFuncs {
+ if err := f(m); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff -ruN ./pkg/controller/coredns/coredns_controller.go /home/daniel/dev/addon-operators/coredns/pkg/controller/coredns/coredns_controller.go
--- ./pkg/controller/coredns/coredns_controller.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/controller/coredns/coredns_controller.go 2019-08-07 10:00:22.090860940 +0200
@@ -0,0 +1,142 @@
+/*
+
+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 coredns
+
+import (
+ "context"
+ "fmt"
+ "net"
+ "strings"
+
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/klog"
+ api "sigs.k8s.io/addon-operators/coredns/pkg/apis/addons/v1alpha1"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+ "sigs.k8s.io/controller-runtime/pkg/controller"
+ "sigs.k8s.io/controller-runtime/pkg/handler"
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
+ "sigs.k8s.io/controller-runtime/pkg/source"
+ "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
+ "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/status"
+ "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative"
+)
+
+// Add creates a new CoreDNS Controller and adds it to the Manager with default RBAC. The Manager will set fields on the Controller
+// and Start it when the Manager is Started.
+func Add(mgr manager.Manager) error {
+ return add(mgr, newReconciler(mgr))
+}
+
+// newReconciler returns a new reconcile.Reconciler
+func newReconciler(mgr manager.Manager) *ReconcileCoreDNS {
+ labels := map[string]string{
+ "k8s-app": "coredns",
+ }
+
+ r := &ReconcileCoreDNS{}
+
+ replacePlaceholders := func(ctx context.Context, object declarative.DeclarativeObject, s string) (string, error) {
+ // TODO: Should we default and if so where?
+ dnsDomain := "" // o.Spec.DNSDomain
+ if dnsDomain == "" {
+ dnsDomain = "cluster.local"
+ }
+
+ dnsServerIP := "" // o.Spec.DNSServerIP
+ if dnsServerIP == "" {
+ ip, err := findDNSClusterIP(ctx, mgr.GetClient())
+ if err != nil {
+ return "", fmt.Errorf("unable to find kube-dns IP: %v", err)
+ }
+ dnsServerIP = ip
+ }
+
+ s = strings.Replace(s, "__PILLAR__DNS__DOMAIN__", dnsDomain, -1)
+ s = strings.Replace(s, "__PILLAR__DNS__SERVER__", dnsServerIP, -1)
+
+ return s, nil
+ }
+
+ r.Reconciler.Init(mgr, &api.CoreDNS{},
+ declarative.WithRawManifestOperation(replacePlaceholders),
+ declarative.WithObjectTransform(declarative.AddLabels(labels)),
+ declarative.WithOwner(declarative.SourceAsOwner),
+ declarative.WithLabels(declarative.SourceLabel(mgr.GetScheme())),
+ declarative.WithStatus(status.NewBasic(mgr.GetClient())),
+ declarative.WithObjectTransform(addon.ApplyPatches),
+ )
+
+ return r
+}
+
+func add(mgr manager.Manager, r *ReconcileCoreDNS) error {
+ // Create a new controller
+ c, err := controller.New("coredns-controller", mgr, controller.Options{Reconciler: r})
+ if err != nil {
+ return err
+ }
+
+ // Watch for changes to CoreDNS
+ err = c.Watch(&source.Kind{Type: &api.CoreDNS{}}, &handler.EnqueueRequestForObject{})
+ if err != nil {
+ return err
+ }
+
+ // Watch for changes to deployed objects
+ _, err = declarative.WatchAll(mgr.GetConfig(), c, r, declarative.SourceLabel(mgr.GetScheme()))
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+var _ reconcile.Reconciler = &ReconcileCoreDNS{}
+
+// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns,verbs=get;list;watch;create;update;patch;delete
+// +kubebuilder:rbac:groups=addons.k8s.io,resources=coredns/status,verbs=get;update;patch
+// +kubebuilder:rbac:groups=apps;extensions,resources=deployments,verbs=get;list;watch;create;update;delete;patch
+// +kubebuilder:rbac:groups="",resources=configmaps;serviceaccounts;services,verbs=get;list;watch;create;update;delete;patch
+// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=roles;rolebindings;clusterroles;clusterrolebindings,verbs=get;list;watch;create;update;delete;patch
+// To grant permissions to CoreDNS, we need those permissions:
+// +kubebuilder:rbac:groups="",resources=endpoints;namespaces;nodes;pods,verbs=get;list;watch
+// ReconcileCoreDNS reconciles a CoreDNS object
+type ReconcileCoreDNS struct {
+ declarative.Reconciler
+}
+
+func findDNSClusterIP(ctx context.Context, c client.Client) (string, error) {
+ kubernetesService := &corev1.Service{}
+ id := client.ObjectKey{Namespace: "default", Name: "kubernetes"}
+ if err := c.Get(ctx, id, kubernetesService); err != nil {
+ return "", fmt.Errorf("error getting service %s: %v", id, err)
+ }
+
+ ip := net.ParseIP(kubernetesService.Spec.ClusterIP)
+ if ip == nil {
+ return "", fmt.Errorf("cannot parse kubernetes ClusterIP %q", kubernetesService.Spec.ClusterIP)
+ }
+
+ // The kubernetes Service ClusterIP is the 1st IP in the Service Subnet.
+ // Increment the right-most byte by 9 to get to the 10th address, canonically used for kube-dns.
+ // This works for both IPV4, IPV6, and 16-byte IPV4 addresses.
+ ip[len(ip)-1] += 9
+
+ result := ip.String()
+ klog.Infof("determined ClusterIP for kube-dns should be %q", result)
+ return result, nil
+}
diff -ruN ./pkg/webhook/webhook.go /home/daniel/dev/addon-operators/coredns/pkg/webhook/webhook.go
--- ./pkg/webhook/webhook.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/pkg/webhook/webhook.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,36 @@
+/*
+
+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 webhook
+
+import (
+ "sigs.k8s.io/controller-runtime/pkg/manager"
+)
+
+// AddToManagerFuncs is a list of functions to add all Controllers to the Manager
+var AddToManagerFuncs []func(manager.Manager) error
+
+// AddToManager adds all Controllers to the Manager
+// +kubebuilder:rbac:groups=admissionregistration.k8s.io,resources=mutatingwebhookconfigurations;validatingwebhookconfigurations,verbs=get;list;watch;create;update;patch;delete
+// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update;patch;delete
+// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
+func AddToManager(m manager.Manager) error {
+ for _, f := range AddToManagerFuncs {
+ if err := f(m); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff -ruN ./PROJECT /home/daniel/dev/addon-operators/coredns/PROJECT
--- ./PROJECT 2019-10-14 16:24:08.777447288 +0200
+++ /home/daniel/dev/addon-operators/coredns/PROJECT 2019-07-01 14:57:36.616341088 +0200
@@ -1,7 +1,3 @@
-version: "2"
+version: "1"
domain: k8s.io
-repo: github.com/kubernetes-sigs/test
-resources:
-- group: addons
- version: v1alpha1
- kind: CoreDNS
+repo: sigs.k8s.io/addon-operators/coredns
diff -ruN ./README.md /home/daniel/dev/addon-operators/coredns/README.md
--- ./README.md 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/README.md 2019-08-07 10:00:16.318786759 +0200
@@ -0,0 +1,82 @@
+# Example operator for CoreDNS
+
+Broadly based on [kubebuilder-declarative-pattern walkthrough](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/blob/master/docs/addon/walkthrough/README.md)
+
+A few differences so we can use go modules and [crane](https://github.com/google/go-containerregistry/blob/master/cmd/crane/doc/crane.md) - neither of which are required, just personal preference.
+
+Created with kubebuilder:
+
+```bash
+kubebuilder init --dep=false --domain=k8s.io --license apache2
+
+kubebuilder create api --controller=true --example=false --group=addons --kind=CoreDNS --make=false --namespaced=true --resource=true --version=v1alpha1
+
+```
+
+Switched to go modules:
+
+```bash
+export GO111MODULE=on
+go mod init sigs.k8s.io/addon-operators/coredns
+
+# Insert our tools.go for extra dependencies
+cp ../tools.go tools.go
+
+go get -m k8s.io/client-go@v10.0.0
+go get -m k8s.io/api@kubernetes-1.13.5
+go get -m k8s.io/apimachinery@kubernetes-1.13.5
+go get -m k8s.io/apiserver@kubernetes-1.13.5
+go get -m k8s.io/apiextensions-apiserver@kubernetes-1.13.5
+
+go mod vendor
+
+rm Gopkg.toml
+```
+
+Delete the test suites that are more checking that kubebuilder is working:
+
+```bash
+find . -name "*_test.go" -delete
+```
+
+Commit
+
+```bash
+git add .
+git reset HEAD vendor
+git commit -m "Initial CoreDNS scaffolding"
+```
+
+
+
+Create the manifests (we bake them into the addon-operator by default):
+
+```bash
+mkdir -p channels/packages/coredns/1.3.1/
+pushd channels/packages/coredns/1.3.1/
+wget https://raw.githubusercontent.com/kubernetes/kubernetes/9b437f95207c04bf2f25ef3110fac9b356d1fa91/cluster/addons/dns/coredns/coredns.yaml.base
+cat coredns.yaml.base > manifest.yaml
+popd
+```
+
+Define the stable channel:
+
+```bash
+
+cat > channels/stable <<EOF
+manifests:
+- version: 1.3.1
+EOF
+
+```
+
+
+Generally follow the [main instructions](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/blob/master/docs/addon/walkthrough/README.md) at this point:
+
+* [enable the declarative pattern library in your types](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/tree/master/docs/addon/walkthrough#adding-the-framework-into-our-types) and
+* [enable to declarative pattern in your controller](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/tree/master/docs/addon/walkthrough#using-the-framework-in-the-controller)
+* finally add the [call to addon.Init](https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/tree/master/docs/addon/walkthrough#misc)
+
+Note that we intend to build these three steps into kubebuilder!
+
+Then follow the instructions for deploying onto kubernetes.
diff -ruN ./tools.go /home/daniel/dev/addon-operators/coredns/tools.go
--- ./tools.go 1970-01-01 01:00:00.000000000 +0100
+++ /home/daniel/dev/addon-operators/coredns/tools.go 2019-07-01 14:57:36.624341199 +0200
@@ -0,0 +1,9 @@
+// +build tools
+package coredns
+
+// Additional go module dependencies
+
+import (
+ _ "k8s.io/code-generator/cmd/deepcopy-gen"
+ _ "sigs.k8s.io/controller-tools/cmd/controller-gen"
+)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment