Created
July 9, 2019 15:11
-
-
Save dholbach/d3a4dd8b7c7d80508ab945f53ef51e09 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -ruN ./cmd/manager/main.go /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go | |
--- ./cmd/manager/main.go 2019-07-09 15:48:21.739951967 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/cmd/manager/main.go 2019-07-01 14:57:36.616341088 +0200 | |
@@ -19,65 +19,70 @@ | |
"flag" | |
"os" | |
- "github.com/weaveworks/addon-test/pkg/apis" | |
- "github.com/weaveworks/addon-test/pkg/controller" | |
- "github.com/weaveworks/addon-test/pkg/webhook" | |
_ "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(logf.ZapLogger(false)) | |
- log := logf.Log.WithName("entrypoint") | |
+ logf.SetLogger(klogr.New()) | |
// Get a config to talk to the apiserver | |
- log.Info("setting up client for manager") | |
+ klog.Info("setting up client for manager") | |
cfg, err := config.GetConfig() | |
if err != nil { | |
- log.Error(err, "unable to set up client config") | |
+ klog.Error(err, "unable to set up client config") | |
os.Exit(1) | |
} | |
// Create a new Cmd to provide shared dependencies and start components | |
- log.Info("setting up manager") | |
+ klog.Info("setting up manager") | |
mgr, err := manager.New(cfg, manager.Options{MetricsBindAddress: metricsAddr}) | |
if err != nil { | |
- log.Error(err, "unable to set up overall controller manager") | |
+ klog.Error(err, "unable to set up overall controller manager") | |
os.Exit(1) | |
} | |
- log.Info("Registering Components.") | |
+ klog.Info("Registering Components.") | |
// Setup Scheme for all resources | |
- log.Info("setting up scheme") | |
+ klog.Info("setting up scheme") | |
if err := apis.AddToScheme(mgr.GetScheme()); err != nil { | |
- log.Error(err, "unable add APIs to scheme") | |
+ klog.Error(err, "unable add APIs to scheme") | |
os.Exit(1) | |
} | |
// Setup all Controllers | |
- log.Info("Setting up controller") | |
+ klog.Info("Setting up controller") | |
if err := controller.AddToManager(mgr); err != nil { | |
- log.Error(err, "unable to register controllers to the manager") | |
+ klog.Error(err, "unable to register controllers to the manager") | |
os.Exit(1) | |
} | |
- log.Info("setting up webhooks") | |
+ klog.Info("setting up webhooks") | |
if err := webhook.AddToManager(mgr); err != nil { | |
- log.Error(err, "unable to register webhooks to the manager") | |
+ klog.Error(err, "unable to register webhooks to the manager") | |
os.Exit(1) | |
} | |
// Start the Cmd | |
- log.Info("Starting the Cmd.") | |
+ klog.Info("Starting the Cmd.") | |
if err := mgr.Start(signals.SetupSignalHandler()); err != nil { | |
- log.Error(err, "unable to run the manager") | |
+ 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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/certificate.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,24 @@ | |
+# 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: | |
+ # $(SERVICENAME) and $(NAMESPACE) will be substituted by kustomize | |
+ commonName: $(SERVICENAME).$(NAMESPACE).svc | |
+ dnsNames: | |
+ - $(SERVICENAME).$(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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomization.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,26 @@ | |
+resources: | |
+- certificate.yaml | |
+ | |
+# the following config is for teaching kustomize how to do var substitution | |
+vars: | |
+- name: NAMESPACE # namespace of the service and the certificate CR | |
+ objref: | |
+ kind: Service | |
+ version: v1 | |
+ name: webhook-service | |
+ fieldref: | |
+ fieldpath: metadata.namespace | |
+- name: CERTIFICATENAME | |
+ objref: | |
+ kind: Certificate | |
+ group: certmanager.k8s.io | |
+ version: v1alpha1 | |
+ name: serving-cert # this name should match the one in certificate.yaml | |
+- name: SERVICENAME | |
+ objref: | |
+ kind: Service | |
+ version: v1 | |
+ name: webhook-service | |
+ | |
+configurations: | |
+- kustomizeconfig.yaml | |
diff -ruN ./config/certmanager/kustomizeconfig.yaml /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml | |
--- ./config/certmanager/kustomizeconfig.yaml 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/certmanager/kustomizeconfig.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,16 @@ | |
+# 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/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-07-09 15:48:21.739951967 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/config/default/kustomization.yaml 2019-07-01 14:57:36.616341088 +0200 | |
@@ -1,12 +1,12 @@ | |
# Adds namespace to all resources. | |
-namespace: addon-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: addon-test- | |
+namePrefix: coredns- | |
# Labels to add to all resources and selectors. | |
#commonLabels: | |
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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/default/manager_webhook_patch.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,23 @@ | |
+apiVersion: apps/v1 | |
+kind: Deployment | |
+metadata: | |
+ name: controller-manager | |
+ namespace: system | |
+spec: | |
+ template: | |
+ spec: | |
+ containers: | |
+ - name: manager | |
+ ports: | |
+ - containerPort: 443 | |
+ 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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/default/webhookcainjection_patch.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,15 @@ | |
+# This patch add annotation to admission webhook config and | |
+# the variables $(NAMESPACE) and $(CERTIFICATENAME) will be substituted by kustomize. | |
+apiVersion: admissionregistration.k8s.io/v1beta1 | |
+kind: MutatingWebhookConfiguration | |
+metadata: | |
+ name: mutating-webhook-configuration | |
+ annotations: | |
+ certmanager.k8s.io/inject-ca-from: $(NAMESPACE)/$(CERTIFICATENAME) | |
+--- | |
+apiVersion: admissionregistration.k8s.io/v1beta1 | |
+kind: ValidatingWebhookConfiguration | |
+metadata: | |
+ name: validating-webhook-configuration | |
+ annotations: | |
+ certmanager.k8s.io/inject-ca-from: $(NAMESPACE)/$(CERTIFICATENAME) | |
diff -ruN ./config/manager/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml | |
--- ./config/manager/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/manager/kustomization.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,2 @@ | |
+resources: | |
+- manager.yaml | |
diff -ruN ./config/rbac/kustomization.yaml /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml | |
--- ./config/rbac/kustomization.yaml 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/kustomization.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,11 @@ | |
+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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role_binding.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,12 @@ | |
+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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/leader_election_role.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,26 @@ | |
+# 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 | |
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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/rbac/role_binding.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,12 @@ | |
+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-07-09 15:48:36.075991316 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/config/samples/addons_v1alpha1_coredns.yaml 2019-07-01 14:57:36.620341144 +0200 | |
@@ -1,9 +1,15 @@ | |
apiVersion: addons.k8s.io/v1alpha1 | |
kind: CoreDNS | |
metadata: | |
- labels: | |
- controller-tools.k8s.io: "1.0" | |
- 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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomization.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,6 @@ | |
+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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/kustomizeconfig.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,25 @@ | |
+# 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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/config/webhook/service.yaml 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,12 @@ | |
+ | |
+apiVersion: v1 | |
+kind: Service | |
+metadata: | |
+ name: webhook-service | |
+ namespace: system | |
+spec: | |
+ ports: | |
+ - port: 443 | |
+ targetPort: 443 | |
+ selector: | |
+ control-plane: controller-manager | |
diff -ruN ./Dockerfile /home/daniel/dev/addon-operators/coredns/Dockerfile | |
--- ./Dockerfile 2019-07-09 15:48:21.739951967 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/Dockerfile 2019-07-01 14:55:24.094429277 +0200 | |
@@ -1,17 +1,25 @@ | |
# Build the manager binary | |
-FROM golang:1.10.3 as builder | |
+FROM golang:1.12.5 as builder | |
-# Copy in the go src | |
-WORKDIR /go/src/github.com/weaveworks/addon-test | |
-COPY pkg/ pkg/ | |
-COPY cmd/ cmd/ | |
-COPY vendor/ vendor/ | |
+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 go build -a -o manager github.com/weaveworks/addon-test/cmd/manager | |
+RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go | |
-# Copy the controller-manager into a thin image | |
-FROM ubuntu:latest | |
+# 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:latest | |
WORKDIR / | |
-COPY --from=builder /go/src/github.com/weaveworks/addon-test/manager . | |
+COPY --from=builder /workspace/manager . | |
ENTRYPOINT ["/manager"] | |
diff -ruN ./.gitignore /home/daniel/dev/addon-operators/coredns/.gitignore | |
--- ./.gitignore 2019-07-09 15:48:21.739951967 +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-07-09 15:49:36.488182055 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/go.mod 2019-07-01 14:57:36.620341144 +0200 | |
@@ -3,38 +3,98 @@ | |
go 1.12 | |
require ( | |
+ 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/gogo/protobuf v1.2.1 // indirect | |
- github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // 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/gofuzz v1.0.0 // indirect | |
- github.com/googleapis/gnostic v0.3.0 // indirect | |
- github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect | |
- github.com/hashicorp/golang-lru v0.5.1 // 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/onsi/gomega v1.5.0 | |
- github.com/pborman/uuid v1.2.0 // 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/prometheus/client_golang v1.0.0 // indirect | |
- github.com/spf13/pflag v1.0.3 // indirect | |
- go.uber.org/atomic v1.4.0 // 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.10.0 // indirect | |
- golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect | |
- golang.org/x/net v0.0.0-20190628185345-da137c7871d7 | |
- golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // 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 | |
- gopkg.in/inf.v0 v0.9.1 // 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/klog v0.3.3 // indirect | |
- k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058 // indirect | |
- sigs.k8s.io/controller-runtime v0.1.12 | |
+ 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 2019-07-09 15:49:36.484182043 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/go.sum 2019-07-01 14:57:36.620341144 +0200 | |
@@ -1,180 +1,282 @@ | |
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.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | |
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | |
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | |
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | |
-github.com/appscode/jsonpatch v2.0.0+incompatible h1:DEsgcSnA7ui6pICc75uxDpyN8Bx4DLFTS8aRym702nE= | |
+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/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= | |
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | |
-github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
+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-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | |
+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/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | |
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | |
+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/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= | |
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | |
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= | |
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | |
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | |
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | |
-github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= | |
-github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= | |
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= | |
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | |
+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/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= | |
-github.com/golang/protobuf v1.3.1/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/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= | |
-github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= | |
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | |
+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-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | |
-github.com/googleapis/gnostic v0.3.0 h1:CcQijm0XKekKjP/YCz28LXVSpgguuB+nCxaSjCe09y0= | |
-github.com/googleapis/gnostic v0.3.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | |
-github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= | |
-github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= | |
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= | |
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | |
+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/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | |
-github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= | |
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | |
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | |
-github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= | |
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | |
+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/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | |
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= | |
+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 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | |
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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | |
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | |
+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-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | |
-github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= | |
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | |
+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 v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | |
+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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | |
-github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= | |
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= | |
+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/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= | |
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | |
-github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= | |
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | |
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | |
-github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= | |
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | |
+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/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | |
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= | |
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | |
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |
+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 v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |
+github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= | |
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | |
-go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= | |
-go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | |
+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 v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= | |
-go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | |
+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-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= | |
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |
+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-20181114220301-adae6a3d119a/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/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= | |
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= | |
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |
+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-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
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-20181116152217-5ac8a444bdc5/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.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | |
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= | |
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-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |
+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= | |
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | |
+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.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | |
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | |
+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/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= | |
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | |
-k8s.io/klog v0.3.3 h1:niceAagH1tzskmaie/icWd7ci1wbG7Bf2c6YGcQv+3c= | |
-k8s.io/klog v0.3.3/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= | |
-k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058 h1:di3XCwddOR9cWBNpfgXaskhh6cgJuwcK54rvtwUaC10= | |
-k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= | |
-sigs.k8s.io/controller-runtime v0.1.12 h1:ovDq28E64PeY1yR+6H7DthakIC09soiDCrKvfP2tPYo= | |
-sigs.k8s.io/controller-runtime v0.1.12/go.mod h1:HFAYoOh6XMV+jKF1UjFwrknPbowfyHEHHRdJMf2jMX8= | |
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= | |
+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= | |
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 1970-01-01 01:00:00.000000000 +0100 | |
+++ /home/daniel/dev/addon-operators/coredns/main.go 2019-07-01 14:55:24.094429277 +0200 | |
@@ -0,0 +1,66 @@ | |
+/* | |
+ | |
+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/apimachinery/pkg/runtime" | |
+ _ "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() { | |
+ | |
+ // +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, | |
+ }) | |
+ if err != nil { | |
+ setupLog.Error(err, "unable to start manager") | |
+ 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-07-09 15:48:21.739951967 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/Makefile 2019-07-01 14:57:36.616341088 +0200 | |
@@ -1,6 +1,6 @@ | |
# Image URL to use all building/pushing image targets | |
-IMG ?= controller:latest | |
+IMG ?= ${USER}/coredns-operator:latest | |
all: test manager | |
@@ -10,7 +10,7 @@ | |
# Build manager binary | |
manager: generate fmt vet | |
- go build -o bin/manager github.com/weaveworks/addon-test/cmd/manager | |
+ 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 | |
@@ -23,7 +23,7 @@ | |
# Deploy controller in the configured Kubernetes cluster in ~/.kube/config | |
deploy: manifests | |
kubectl apply -f config/crds | |
- kustomize build config/default | kubectl apply -f - | |
+ cat k8s/manager.yaml | sed -e "s@IMAGE_NAME@${IMG}@g" | kubectl apply -f - | |
# Generate manifests e.g. CRD, RBAC etc. | |
manifests: | |
@@ -53,3 +53,14 @@ | |
# Push the docker image | |
docker-push: | |
docker push ${IMG} | |
+ | |
+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/v1alpha1/coredns_types.go /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/coredns_types.go | |
--- ./pkg/apis/addons/v1alpha1/coredns_types.go 2019-07-09 15:48:36.055991260 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/coredns_types.go 2019-07-01 14:57:36.620341144 +0200 | |
@@ -17,21 +17,41 @@ | |
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 { | |
- // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster | |
- // Important: Run "make" to regenerate code after modifying this file | |
+ addonv1alpha1.CommonSpec `json:",inline"` | |
+ addonv1alpha1.PatchSpec `json:",inline"` | |
} | |
// CoreDNSStatus defines the observed state of CoreDNS | |
type CoreDNSStatus struct { | |
- // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster | |
- // Important: Run "make" to regenerate code after modifying this file | |
+ 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 | |
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 2019-07-09 15:48:36.067991293 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/doc.go 2019-07-01 14:57:36.620341144 +0200 | |
@@ -16,7 +16,7 @@ | |
// Package v1alpha1 contains API Schema definitions for the addons v1alpha1 API group | |
// +k8s:openapi-gen=true | |
// +k8s:deepcopy-gen=package,register | |
-// +k8s:conversion-gen=github.com/weaveworks/addon-test/pkg/apis/addons | |
+// +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 2019-07-09 15:48:36.051991248 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addons/v1alpha1/register.go 2019-07-01 14:57:36.624341199 +0200 | |
@@ -18,7 +18,7 @@ | |
// Package v1alpha1 contains API Schema definitions for the addons v1alpha1 API group | |
// +k8s:openapi-gen=true | |
// +k8s:deepcopy-gen=package,register | |
-// +k8s:conversion-gen=github.com/weaveworks/addon-test/pkg/apis/addons | |
+// +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/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 2019-07-09 15:48:36.071991305 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/apis/addtoscheme_addons_v1alpha1.go 2019-07-01 14:57:36.624341199 +0200 | |
@@ -16,10 +16,10 @@ | |
package apis | |
import ( | |
- api "github.com/weaveworks/addon-test/pkg/apis/addons/v1alpha1" | |
+ "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, api.SchemeBuilder.AddToScheme) | |
+ AddToSchemes = append(AddToSchemes, v1alpha1.SchemeBuilder.AddToScheme) | |
} | |
diff -ruN ./pkg/controller/add_coredns.go /home/daniel/dev/addon-operators/coredns/pkg/controller/add_coredns.go | |
--- ./pkg/controller/add_coredns.go 2019-07-09 15:48:36.539992630 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/controller/add_coredns.go 2019-07-01 14:57:36.624341199 +0200 | |
@@ -16,7 +16,7 @@ | |
package controller | |
import ( | |
- "github.com/weaveworks/addon-test/pkg/controller/coredns" | |
+ "sigs.k8s.io/addon-operators/coredns/pkg/controller/coredns" | |
) | |
func init() { | |
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 2019-07-09 15:48:36.539992630 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/pkg/controller/coredns/coredns_controller.go 2019-07-01 14:57:36.624341199 +0200 | |
@@ -17,24 +17,24 @@ | |
import ( | |
"context" | |
- | |
- addonsv1alpha1 "github.com/weaveworks/addon-test/pkg/apis/addons/v1alpha1" | |
- appsv1 "k8s.io/api/apps/v1" | |
- "k8s.io/apimachinery/pkg/api/errors" | |
- "k8s.io/apimachinery/pkg/runtime" | |
+ "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" | |
) | |
-/** | |
-* USER ACTION REQUIRED: This is a scaffold file intended for the user to modify with their own Controller | |
-* business logic. Delete these comments after modifying this file.* | |
- */ | |
- | |
// 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 { | |
@@ -42,12 +42,48 @@ | |
} | |
// newReconciler returns a new reconcile.Reconciler | |
-func newReconciler(mgr manager.Manager) reconcile.Reconciler { | |
- return &ReconcileCoreDNS{Client: mgr.GetClient(), scheme: mgr.GetScheme()} | |
+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 | |
} | |
-// add adds a new Controller to mgr with r as the reconcile.Reconciler | |
-func add(mgr manager.Manager, r reconcile.Reconciler) error { | |
+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 { | |
@@ -55,17 +91,13 @@ | |
} | |
// Watch for changes to CoreDNS | |
- err = c.Watch(&source.Kind{Type: &addonsv1alpha1.CoreDNS{}}, &handler.EnqueueRequestForObject{}) | |
+ err = c.Watch(&source.Kind{Type: &api.CoreDNS{}}, &handler.EnqueueRequestForObject{}) | |
if err != nil { | |
return err | |
} | |
- // TODO(user): Modify this to be the types you create | |
- // Uncomment watch a Deployment created by CoreDNS - change this for objects you create | |
- err = c.Watch(&source.Kind{Type: &appsv1.Deployment{}}, &handler.EnqueueRequestForOwner{ | |
- IsController: true, | |
- OwnerType: &addonsv1alpha1.CoreDNS{}, | |
- }) | |
+ // Watch for changes to deployed objects | |
+ _, err = declarative.WatchAll(mgr.GetConfig(), c, r, declarative.SourceLabel(mgr.GetScheme())) | |
if err != nil { | |
return err | |
} | |
@@ -75,31 +107,39 @@ | |
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 { | |
- client.Client | |
- scheme *runtime.Scheme | |
+ declarative.Reconciler | |
} | |
-// Reconcile reads that state of the cluster for a CoreDNS object and makes changes based on the state read | |
-// and what is in the CoreDNS.Spec | |
-// TODO(user): Modify this Reconcile function to implement your Controller logic. The scaffolding writes | |
-// a Deployment as an example | |
-// +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 *ReconcileCoreDNS) Reconcile(request reconcile.Request) (reconcile.Result, error) { | |
- // Fetch the CoreDNS instance | |
- instance := &addonsv1alpha1.CoreDNS{} | |
- err := r.Get(context.TODO(), request.NamespacedName, instance) | |
- if err != nil { | |
- if errors.IsNotFound(err) { | |
- // Object not found, return. Created objects are automatically garbage collected. | |
- // For additional cleanup logic use finalizers. | |
- return reconcile.Result{}, nil | |
- } | |
- // Error reading the object - requeue the request. | |
- return reconcile.Result{}, err | |
+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) | |
+ } | |
+ | |
+ clusterIP := kubernetesService.Spec.ClusterIP | |
+ | |
+ // Assume it is .1, and we want .10 | |
+ ip := net.ParseIP(clusterIP) | |
+ if ip == nil { | |
+ return "", fmt.Errorf("cannot parse kubernetes ClusterIP %q", clusterIP) | |
+ } | |
+ ipv4 := ip.To4() | |
+ if ipv4 == nil { | |
+ return "", fmt.Errorf("expected IPv4 kubernetes ClusterIP %q", clusterIP) | |
} | |
+ ipv4[3] = 10 | |
+ | |
+ klog.Infof("determined ClusterIP for kube-dns should be %q", ipv4) | |
- return reconcile.Result{}, nil | |
+ return ipv4.String(), nil | |
} | |
diff -ruN ./PROJECT /home/daniel/dev/addon-operators/coredns/PROJECT | |
--- ./PROJECT 2019-07-09 15:48:21.735951957 +0200 | |
+++ /home/daniel/dev/addon-operators/coredns/PROJECT 2019-07-01 14:57:36.616341088 +0200 | |
@@ -1,3 +1,3 @@ | |
version: "1" | |
domain: k8s.io | |
-repo: github.com/weaveworks/addon-test | |
+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-07-01 14:57:48.216503980 +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 --fetch-deps=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