From 2f022a7de09fbc8fe120cf7d43df3c9cb72931d4 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 8 Jul 2020 16:58:29 +0530 Subject: [PATCH 01/23] added support for ephemeral storage Signed-off-by: prabhaker24 --- go.mod | 1 + go.sum | 3 + .../v1beta1/zookeepercluster_types.go | 8 ++- .../zookeepercluster_controller.go | 2 +- pkg/test/e2e/e2eutil/spec_util.go | 6 ++ pkg/zk/generators.go | 63 +++++++++++-------- test/e2e/ephemeral_test.go | 61 ++++++++++++++++++ test/e2e/zookeepercluster_test.go | 1 + 8 files changed, 116 insertions(+), 29 deletions(-) create mode 100644 test/e2e/ephemeral_test.go diff --git a/go.mod b/go.mod index f4f7396e6..cc93e879b 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.13 require ( github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/go-logr/logr v0.1.0 + github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf // indirect github.com/onsi/ginkgo v1.12.0 github.com/onsi/gomega v1.9.0 github.com/opennota/check v0.0.0-20180911053232-0c771f5545ff // indirect diff --git a/go.sum b/go.sum index 8c85c3f46..b267543e9 100644 --- a/go.sum +++ b/go.sum @@ -461,6 +461,8 @@ github.com/gophercloud/gophercloud v0.6.0 h1:Xb2lcqZtml1XjgYZxbeayEemq7ASbeTp09m github.com/gophercloud/gophercloud v0.6.0/go.mod h1:GICNByuaEBibcjmjvI7QvYJSZEbGkcYwAR7EZK2WMqM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20191106031601-ce3c9ade29de/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf h1:vc7Dmrk4JwS0ZPS6WZvWlwDflgDTA26jItmbSj83nug= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -567,6 +569,7 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALr github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 09e1d1a56..2c8bded64 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -67,6 +67,10 @@ type ZookeeperClusterSpec struct { // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. Persistence *Persistence `json:"persistence,omitempty"` + //specifying EmptyDirVolumeSource parameter will enable the Ephemeral storage + //At anypoint only one of Persistence or EmptyDirVolumeSource should be present in the manifest + EmptyDirVolumeSource *v1.EmptyDirVolumeSource `json:"emptydirvolumesource,omitempty"` + // Conf is the zookeeper configuration, which will be used to generate the // static zookeeper configuration. If no configuration is provided required // default values will be provided, and optional values will be excluded. @@ -157,11 +161,11 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Persistence == nil { + if s.Persistence == nil && s.EmptyDirVolumeSource == nil { s.Persistence = &Persistence{} changed = true } - if s.Persistence.withDefaults() { + if s.EmptyDirVolumeSource == nil && s.Persistence.withDefaults() { changed = true } return changed diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller.go b/pkg/controller/zookeepercluster/zookeepercluster_controller.go index bfb6505e1..33a398516 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller.go @@ -620,7 +620,7 @@ func (r *ReconcileZookeeperCluster) yamlConfigMap(instance *zookeeperv1beta1.Zoo } func (r *ReconcileZookeeperCluster) reconcileFinalizers(instance *zookeeperv1beta1.ZookeeperCluster) (err error) { - if instance.Spec.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { + if instance.Spec.Persistence != nil && instance.Spec.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { return nil } if instance.DeletionTimestamp.IsZero() { diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 72c429bdd..1489bb9ca 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -40,3 +40,9 @@ func NewClusterWithVersion(namespace, version string) *api.ZookeeperCluster { } return cluster } + +func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { + cluster := NewDefaultCluster(namespace) + cluster.Spec.EmptyDirVolumeSource.Medium = "" + return cluster +} diff --git a/pkg/zk/generators.go b/pkg/zk/generators.go index 5083b8510..053a1c47a 100644 --- a/pkg/zk/generators.go +++ b/pkg/zk/generators.go @@ -38,8 +38,29 @@ func headlessSvcName(z *v1beta1.ZookeeperCluster) string { return fmt.Sprintf("%s-headless", z.GetName()) } +var zkDataVolume = "data" + // MakeStatefulSet return a zookeeper stateful set from the zk spec func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { + extraVolumes := []v1.Volume{} + persistence := z.Spec.Persistence + pvcs := []v1.PersistentVolumeClaim{} + if persistence != nil { + pvcs = append(pvcs, v1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: zkDataVolume, + Labels: map[string]string{"app": z.GetName()}, + }, + Spec: persistence.PersistentVolumeClaimSpec, + }) + } else { + extraVolumes = append(extraVolumes, v1.Volume{ + Name: zkDataVolume, + VolumeSource: v1.VolumeSource{ + EmptyDir: z.Spec.EmptyDirVolumeSource, + }, + }) + } return &appsv1.StatefulSet{ TypeMeta: metav1.TypeMeta{ Kind: "StatefulSet", @@ -70,23 +91,14 @@ func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { "kind": "ZookeeperMember", }, }, - Spec: makeZkPodSpec(z), - }, - VolumeClaimTemplates: []v1.PersistentVolumeClaim{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "data", - Namespace: z.Namespace, - Labels: map[string]string{"app": z.GetName()}, - }, - Spec: z.Spec.Persistence.PersistentVolumeClaimSpec, - }, + Spec: makeZkPodSpec(z, extraVolumes), }, + VolumeClaimTemplates: pvcs, }, } } -func makeZkPodSpec(z *v1beta1.ZookeeperCluster) v1.PodSpec { +func makeZkPodSpec(z *v1beta1.ZookeeperCluster, volumes []v1.Volume) v1.PodSpec { zkContainer := v1.Container{ Name: "zookeeper", Image: z.Spec.Image.ToString(), @@ -132,30 +144,29 @@ func makeZkPodSpec(z *v1beta1.ZookeeperCluster) v1.PodSpec { if z.Spec.Pod.Resources.Limits != nil || z.Spec.Pod.Resources.Requests != nil { zkContainer.Resources = z.Spec.Pod.Resources } + volumes = append(volumes, v1.Volume{ + Name: "conf", + VolumeSource: v1.VolumeSource{ + ConfigMap: &v1.ConfigMapVolumeSource{ + LocalObjectReference: v1.LocalObjectReference{ + Name: z.ConfigMapName(), + }, + }, + }, + }) + zkContainer.Env = append(zkContainer.Env, z.Spec.Pod.Env...) podSpec := v1.PodSpec{ Containers: []v1.Container{zkContainer}, Affinity: z.Spec.Pod.Affinity, - Volumes: []v1.Volume{ - { - Name: "conf", - VolumeSource: v1.VolumeSource{ - ConfigMap: &v1.ConfigMapVolumeSource{ - LocalObjectReference: v1.LocalObjectReference{ - Name: z.ConfigMapName(), - }, - }, - }, - }, - }, - TerminationGracePeriodSeconds: &z.Spec.Pod.TerminationGracePeriodSeconds, + Volumes: volumes, } if reflect.DeepEqual(v1.PodSecurityContext{}, z.Spec.Pod.SecurityContext) { podSpec.SecurityContext = z.Spec.Pod.SecurityContext } podSpec.NodeSelector = z.Spec.Pod.NodeSelector podSpec.Tolerations = z.Spec.Pod.Tolerations - + podSpec.TerminationGracePeriodSeconds = &z.Spec.Pod.TerminationGracePeriodSeconds return podSpec } diff --git a/test/e2e/ephemeral_test.go b/test/e2e/ephemeral_test.go new file mode 100644 index 000000000..bfe2cea8e --- /dev/null +++ b/test/e2e/ephemeral_test.go @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2018 Dell Inc., or its subsidiaries. All Rights Reserved. + * + * 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 + */ + +package e2e + +import ( + "testing" + + . "github.com/onsi/gomega" + framework "github.com/operator-framework/operator-sdk/pkg/test" + zk_e2eutil "github.com/pravega/zookeeper-operator/pkg/test/e2e/e2eutil" +) + +// Test create and recreate a Zookeeper cluster with the same name +func testephemeralstorage(t *testing.T) { + g := NewGomegaWithT(t) + + doCleanup := true + ctx := framework.NewTestCtx(t) + defer func() { + if doCleanup { + ctx.Cleanup() + } + }() + + namespace, err := ctx.GetNamespace() + g.Expect(err).NotTo(HaveOccurred()) + f := framework.Global + + defaultCluster := zk_e2eutil.NewClusterWithEmptyDir(namespace) + defaultCluster.WithDefaults() + defaultCluster.Status.Init() + + zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) + g.Expect(err).NotTo(HaveOccurred()) + + // A default Zookeeper cluster should have 3 replicas + podSize := 3 + err = zk_e2eutil.WaitForClusterToBecomeReady(t, f, ctx, zk, podSize) + g.Expect(err).NotTo(HaveOccurred()) + + err = zk_e2eutil.DeleteCluster(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + + err = zk_e2eutil.WaitForClusterToTerminate(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + + // No need to do cleanup since the cluster CR has already been deleted + doCleanup = false + + err = zk_e2eutil.WaitForClusterToTerminate(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + +} diff --git a/test/e2e/zookeepercluster_test.go b/test/e2e/zookeepercluster_test.go index b4262f5ae..1db326abe 100644 --- a/test/e2e/zookeepercluster_test.go +++ b/test/e2e/zookeepercluster_test.go @@ -62,6 +62,7 @@ func testZookeeperCluster(t *testing.T) { "testUpgradeCluster": testUpgradeCluster, "testCreateRecreateCluster": testCreateRecreateCluster, "testScaleCluster": testScaleCluster, + "testephemeralstorage": testephemeralstorage, } for name, f := range testFuncs { From 8e02a9243e053eb1fd0d443d407d8d630aa75514 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 8 Jul 2020 17:06:31 +0530 Subject: [PATCH 02/23] changed emepheral ete Signed-off-by: prabhaker24 --- test/e2e/ephemeral_test.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/test/e2e/ephemeral_test.go b/test/e2e/ephemeral_test.go index bfe2cea8e..b80c572ca 100644 --- a/test/e2e/ephemeral_test.go +++ b/test/e2e/ephemeral_test.go @@ -46,10 +46,37 @@ func testephemeralstorage(t *testing.T) { err = zk_e2eutil.WaitForClusterToBecomeReady(t, f, ctx, zk, podSize) g.Expect(err).NotTo(HaveOccurred()) - err = zk_e2eutil.DeleteCluster(t, f, ctx, zk) + // This is to get the latest zk cluster object + zk, err = zk_e2eutil.GetCluster(t, f, ctx, zk) g.Expect(err).NotTo(HaveOccurred()) - err = zk_e2eutil.WaitForClusterToTerminate(t, f, ctx, zk) + // Scale up zk cluster, increase replicas to 5 + + zk.Spec.Replicas = 5 + podSize = 5 + + err = zk_e2eutil.UpdateCluster(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + + err = zk_e2eutil.WaitForClusterToBecomeReady(t, f, ctx, zk, podSize) + g.Expect(err).NotTo(HaveOccurred()) + + // This is to get the latest zk cluster object + zk, err = zk_e2eutil.GetCluster(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + + // Scale down zk cluster back to default + zk.Spec.Replicas = 3 + podSize = 3 + + err = zk_e2eutil.UpdateCluster(t, f, ctx, zk) + g.Expect(err).NotTo(HaveOccurred()) + + err = zk_e2eutil.WaitForClusterToBecomeReady(t, f, ctx, zk, podSize) + g.Expect(err).NotTo(HaveOccurred()) + + // Delete cluster + err = zk_e2eutil.DeleteCluster(t, f, ctx, zk) g.Expect(err).NotTo(HaveOccurred()) // No need to do cleanup since the cluster CR has already been deleted From ba3e2414d797c804753ec430c5f29a8c7758623d Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 8 Jul 2020 19:00:13 +0530 Subject: [PATCH 03/23] fixed test Signed-off-by: prabhaker24 --- pkg/test/e2e/e2eutil/spec_util.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 1489bb9ca..096701d21 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -13,6 +13,7 @@ package e2eutil import ( api "github.com/pravega/zookeeper-operator/pkg/apis/zookeeper/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/api/core/v1" ) // NewDefaultCluster returns a cluster with an empty spec, which will be filled @@ -43,6 +44,10 @@ func NewClusterWithVersion(namespace, version string) *api.ZookeeperCluster { func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) - cluster.Spec.EmptyDirVolumeSource.Medium = "" + cluster.Spec = api.ZookeeperClusterSpec{ + EmptyDirVolumeSource: &v1.EmptyDirVolumeSource{ + Medium: "", + }, + } return cluster } From 17f5dffeac8d580924b3ee0987646d85f8e5a0aa Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 8 Jul 2020 19:13:17 +0530 Subject: [PATCH 04/23] fixed format Signed-off-by: prabhaker24 --- pkg/test/e2e/e2eutil/spec_util.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 096701d21..a890382e4 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -12,8 +12,8 @@ package e2eutil import ( api "github.com/pravega/zookeeper-operator/pkg/apis/zookeeper/v1beta1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/api/core/v1" ) // NewDefaultCluster returns a cluster with an empty spec, which will be filled @@ -46,7 +46,7 @@ func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ EmptyDirVolumeSource: &v1.EmptyDirVolumeSource{ - Medium: "", + Medium: "", }, } return cluster From e549b2daf7d6a4b19eba4b7aae20862be38e9437 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 9 Jul 2020 16:03:46 +0530 Subject: [PATCH 05/23] doc changes and ut added Signed-off-by: prabhaker24 --- README.md | 30 +++++++++++++++++++ charts/zookeeper/README.md | 3 ++ charts/zookeeper/templates/zookeeper.yaml | 8 +++++ charts/zookeeper/values.yaml | 6 ++++ .../v1beta1/zookeepercluster_types.go | 25 +++++++++++----- pkg/test/e2e/e2eutil/spec_util.go | 5 ++-- pkg/zk/generators.go | 2 +- pkg/zk/generators_test.go | 30 +++++++++++++++++++ 8 files changed, 98 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0fb272bcd..82ce0e5bc 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ The project is currently alpha. While no breaking API changes are currently plan * [Usage](#usage) * [Installation of the Operator](#install-the-operator) * [Deploy a sample Zookeeper Cluster](#deploy-a-sample-zookeeper-cluster) + * [Deploy a sample ZooKeeper Cluster with Ephemeral Storage](#Deploy-a-sample-zookeeper-cluster-with -ephemeral-storage) * [Deploy a sample Zookeeper Cluster to a cluster using Istio](#deploy-a-sample-zookeeper-cluster-with-istio) * [Upgrade a Zookeeper Cluster](#upgrade-a-zookeeper-cluster) * [Uninstall the Zookeeper Cluster](#uninstall-the-zookeeper-cluster) @@ -131,6 +132,35 @@ svc/example-client ClusterIP 10.31.243.173 2181/TCP svc/example-headless ClusterIP None 2888/TCP,3888/TCP 2m ``` +### Deploy a sample Zookeeper cluster with Ephemeral storage + +Create a Yaml file called `zk.yaml` with the following content to install a 3-node Zookeeper cluster. + +```yaml +apiVersion: "zookeeper.pravega.io/v1beta1" +kind: "ZookeeperCluster" +metadata: + name: "example" +spec: + replicas: 3 + ephemeral: + enabled: true +``` + +``` +$ kubectl create -f zk.yaml +``` + +After a couple of minutes, all cluster members should become ready. + +``` +$ kubectl get zk + +NAME REPLICAS READY REPLICAS VERSION DESIRED VERSION INTERNAL ENDPOINT EXTERNAL ENDPOINT AGE +example 3 3 0.2.7 0.2.7 10.100.200.18:2181 N/A 94s +``` +>Note: User should only provide either persistence or ephemeral in the spec, if none of the values is specified default is persistence + ### Deploy a sample Zookeeper cluster with Istio Create a Yaml file called `zk-with-istio.yaml` with the following content to install a 3-node Zookeeper cluster. diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 9417fa9a8..3e540ed87 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -62,3 +62,6 @@ The following table lists the configurable parameters of the Zookeeper chart and | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | +| `ephemeral.enabled` | whether ephemeral storage is enabled or not | `false` | +| `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | +| `ephemeral.emptydirvolumesource.volumeSize` | Total amount of local storage required for the EmptyDir volume. | `20Gi` | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index b6d52104a..eab8f0edc 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -43,6 +43,13 @@ spec: syncLimit: {{ .Values.config.syncLimit }} quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} + {{- if .Values.ehemeral }} + ephemeral: + enabled: {{ .Values.ephemeral.enabled }} + emptydirvolumesource: + medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} + sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} + {{- else }} persistence: reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} spec: @@ -50,3 +57,4 @@ spec: resources: requests: storage: {{ .Values.persistence.volumeSize }} + {{- end }} diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 253b44ab2..64a504c2e 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -26,6 +26,12 @@ config: {} # syncLimit: 2 # quorumListenOnAllIPs: false +ephemeral: + enabled: false + #emptydirvolumesource: + #medium: ""/Memory + #sizeLimit: 15Gi + persistence: storageClassName: standard ## specifying reclaim policy for PersistentVolumes diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 2c8bded64..09fb60700 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -67,9 +67,9 @@ type ZookeeperClusterSpec struct { // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. Persistence *Persistence `json:"persistence,omitempty"` - //specifying EmptyDirVolumeSource parameter will enable the Ephemeral storage - //At anypoint only one of Persistence or EmptyDirVolumeSource should be present in the manifest - EmptyDirVolumeSource *v1.EmptyDirVolumeSource `json:"emptydirvolumesource,omitempty"` + //Ephemeral is the configuration which helps create ephemeral storage + //At anypoint only one of Persistence or Ephemeral should be present in the manifest + Ephemeral *Ephemeral `json:"ephemeral,omitempty"` // Conf is the zookeeper configuration, which will be used to generate the // static zookeeper configuration. If no configuration is provided required @@ -161,11 +161,11 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Persistence == nil && s.EmptyDirVolumeSource == nil { + if s.Persistence == nil && (s.Ephemeral == nil || s.Ephemeral.Enabled == false) { s.Persistence = &Persistence{} changed = true } - if s.EmptyDirVolumeSource == nil && s.Persistence.withDefaults() { + if s.Persistence != nil && s.Persistence.withDefaults() { changed = true } return changed @@ -393,11 +393,22 @@ type Persistence struct { // The default value is Retain. VolumeReclaimPolicy VolumeReclaimPolicy `json:"reclaimPolicy,omitempty"` // PersistentVolumeClaimSpec is the spec to describe PVC for the container - // This field is optional. If no PVC spec, stateful containers will use - // emptyDir as volume. + // This field is optional. If no PVC is specified by default persistentvolume + // will get created. PersistentVolumeClaimSpec v1.PersistentVolumeClaimSpec `json:"spec,omitempty"` } +type Ephemeral struct { + // Enabled specifies whether or not ephemeral storage is enabled + // By default, external access is not enabled + Enabled bool `json:"enabled"` + //EmptyDirVolumeSource is optional and this will create the emptydir volume + //It has two parameters Medium and SizeLimit which are optional as well + //Medium specifies What type of storage medium should back this directory. + //SizeLimit specifies Total amount of local storage required for this EmptyDir volume. + EmptyDirVolumeSource v1.EmptyDirVolumeSource `json:"emptydirvolumesource,omitempty"` +} + func (p *Persistence) withDefaults() (changed bool) { if !p.VolumeReclaimPolicy.isValid() { changed = true diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index a890382e4..e01c84bfb 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -12,7 +12,6 @@ package e2eutil import ( api "github.com/pravega/zookeeper-operator/pkg/apis/zookeeper/v1beta1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -45,8 +44,8 @@ func NewClusterWithVersion(namespace, version string) *api.ZookeeperCluster { func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ - EmptyDirVolumeSource: &v1.EmptyDirVolumeSource{ - Medium: "", + Ephemeral: &api.Ephemeral{ + Enabled: true, }, } return cluster diff --git a/pkg/zk/generators.go b/pkg/zk/generators.go index 053a1c47a..c3494141d 100644 --- a/pkg/zk/generators.go +++ b/pkg/zk/generators.go @@ -57,7 +57,7 @@ func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { extraVolumes = append(extraVolumes, v1.Volume{ Name: zkDataVolume, VolumeSource: v1.VolumeSource{ - EmptyDir: z.Spec.EmptyDirVolumeSource, + EmptyDir: &z.Spec.Ephemeral.EmptyDirVolumeSource, }, }) } diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index 82c34dbd8..109e6bbac 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -11,11 +11,14 @@ package zk_test import ( + "fmt" + "strings" "testing" "github.com/pravega/zookeeper-operator/pkg/apis/zookeeper/v1beta1" "github.com/pravega/zookeeper-operator/pkg/utils" "github.com/pravega/zookeeper-operator/pkg/zk" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" policyv1beta1 "k8s.io/api/policy/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -119,6 +122,33 @@ var _ = Describe("Generators Spec", func() { }) }) + Context("#MakeStatefulSet with Ephemeral storage", func() { + var sts *appsv1.StatefulSet + + Context("with defaults", func() { + + BeforeEach(func() { + z := &v1beta1.ZookeeperCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example", + Namespace: "default", + }, + Spec: v1beta1.ZookeeperClusterSpec{}, + } + z.Spec = v1beta1.ZookeeperClusterSpec{ + Ephemeral: &v1beta1.Ephemeral{ + Enabled: true, + }, + } + z.WithDefaults() + sts = zk.MakeStatefulSet(z) + }) + It("Checking the sts spec contains volumesource as EmptyDir", func() { + Ω(strings.ContainsAny(fmt.Sprintf("%v", sts.Spec.Template.Spec.Volumes), "EmptyDirVolumeSource")).Should(Equal(true)) + }) + }) + }) + Context("#MakeClientService", func() { var s *v1.Service var domainName string From dada1684d15ebd7a479d1dca5343bc78441cd7d2 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 9 Jul 2020 16:10:32 +0530 Subject: [PATCH 06/23] fixed doc Signed-off-by: prabhaker24 --- README.md | 2 +- charts/zookeeper/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82ce0e5bc..77f09fc1a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The project is currently alpha. While no breaking API changes are currently plan * [Usage](#usage) * [Installation of the Operator](#install-the-operator) * [Deploy a sample Zookeeper Cluster](#deploy-a-sample-zookeeper-cluster) - * [Deploy a sample ZooKeeper Cluster with Ephemeral Storage](#Deploy-a-sample-zookeeper-cluster-with -ephemeral-storage) + * [Deploy a sample ZooKeeper Cluster with Ephemeral Storage](#Deploy-a-sample-zookeeper-cluster-with-ephemeral-storage) * [Deploy a sample Zookeeper Cluster to a cluster using Istio](#deploy-a-sample-zookeeper-cluster-with-istio) * [Upgrade a Zookeeper Cluster](#upgrade-a-zookeeper-cluster) * [Uninstall the Zookeeper Cluster](#uninstall-the-zookeeper-cluster) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 3e540ed87..74e3127a2 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -64,4 +64,4 @@ The following table lists the configurable parameters of the Zookeeper chart and | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | | `ephemeral.enabled` | whether ephemeral storage is enabled or not | `false` | | `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | -| `ephemeral.emptydirvolumesource.volumeSize` | Total amount of local storage required for the EmptyDir volume. | `20Gi` | +| `ephemeral.emptydirvolumesource.volumeSize` | Total amount of local storage required for the EmptyDir volume. | `nil` | From 5f20b7e46a8f6c05ae8fc1d8e22bf1328f5c1f65 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 10 Jul 2020 10:27:27 +0530 Subject: [PATCH 07/23] changed charts Signed-off-by: prabhaker24 --- charts/zookeeper/templates/zookeeper.yaml | 2 +- test/e2e/resources/rbac-operator.yaml | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index eab8f0edc..2a504a452 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -43,7 +43,7 @@ spec: syncLimit: {{ .Values.config.syncLimit }} quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} - {{- if .Values.ehemeral }} + {{- if .Values.ehemeral.enabled }} ephemeral: enabled: {{ .Values.ephemeral.enabled }} emptydirvolumesource: diff --git a/test/e2e/resources/rbac-operator.yaml b/test/e2e/resources/rbac-operator.yaml index 5db8db9f5..648e3be57 100644 --- a/test/e2e/resources/rbac-operator.yaml +++ b/test/e2e/resources/rbac-operator.yaml @@ -3,8 +3,6 @@ kind: ServiceAccount metadata: name: zookeeper-operator - - --- kind: ClusterRole @@ -46,10 +44,8 @@ rules: verbs: - "*" - - - --- + kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: @@ -63,10 +59,8 @@ roleRef: name: zookeeper-operator apiGroup: rbac.authorization.k8s.io - - - --- + apiVersion: apps/v1 kind: Deployment metadata: @@ -95,7 +89,7 @@ spec: fieldPath: metadata.name - name: OPERATOR_NAME value: zookeeper-operator - image: pravega/zookeeper-operator:latest + image: testzkop/zookeeper-operator-testimages:v0.2.8-rc0-4-dirty imagePullPolicy: Always name: zookeeper-operator ports: From 143a52b6bad978d1577c79e71a13f191bb39c76a Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 15 Jul 2020 20:14:02 +0530 Subject: [PATCH 08/23] addressed review comments Signed-off-by: prabhaker24 --- README.md | 5 +-- charts/zookeeper/README.md | 1 + charts/zookeeper/templates/zookeeper.yaml | 33 ++++++++++-------- charts/zookeeper/values.yaml | 21 ++++++------ go.mod | 2 ++ go.sum | 4 +++ pkg/apis/zookeeper/v1beta1/deepcopy_test.go | 2 +- .../v1beta1/zookeepercluster_types.go | 34 ++++++++++++------- .../v1beta1/zookeepercluster_types_test.go | 6 ++-- .../v1beta1/zz_generated.deepcopy.go | 7 ++-- .../zookeepercluster_controller.go | 2 +- .../zookeepercluster_controller_test.go | 2 +- pkg/test/e2e/e2eutil/spec_util.go | 6 ++-- pkg/zk/generators.go | 6 ++-- pkg/zk/generators_test.go | 6 ++-- test/e2e/resources/rbac-operator.yaml | 12 +++++-- 16 files changed, 90 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 77f09fc1a..bbbe9d164 100644 --- a/README.md +++ b/README.md @@ -143,8 +143,9 @@ metadata: name: "example" spec: replicas: 3 - ephemeral: - enabled: true + storage: + ephemeral: + enabled: true ``` ``` diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 74e3127a2..38ab3222f 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -59,6 +59,7 @@ The following table lists the configurable parameters of the Zookeeper chart and | `config.tickTime` | Length of a single tick which is the basic time unit used by Zookeeper (measured in milliseconds) | `2000` | | `config.syncLimit` | Amount of time (in ticks) to allow followers to sync with Zookeeper | `2` | | `config.quorumListenOnAllIPs` | Whether Zookeeper server will listen for connections from its peers on all available IP addresses | `false` | +| `persistence.enabled` | whether persistence storage is enabled or not | `true` | | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index 2a504a452..628220275 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -43,18 +43,21 @@ spec: syncLimit: {{ .Values.config.syncLimit }} quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} - {{- if .Values.ehemeral.enabled }} - ephemeral: - enabled: {{ .Values.ephemeral.enabled }} - emptydirvolumesource: - medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} - sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} - {{- else }} - persistence: - reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} - spec: - storageClassName: {{ .Values.persistence.storageClassName }} - resources: - requests: - storage: {{ .Values.persistence.volumeSize }} - {{- end }} + storage: + ephemeral: + enabled: {{ .Values.ephemeral.enabled }} + {{- if .Values.ephemeral.emptydirvolumesource }} + emptydirvolumesource: + medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} + sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} + {{- end }} + persistence: + enabled: {{ .Values.persistence.enabled }} + {{- if .Values.persistence.enabled }} + reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} + spec: + storageClassName: {{ .Values.persistence.storageClassName }} + resources: + requests: + storage: {{ .Values.persistence.volumeSize }} + {{- end }} diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 64a504c2e..7f4ef8255 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -26,19 +26,20 @@ config: {} # syncLimit: 2 # quorumListenOnAllIPs: false -ephemeral: - enabled: false - #emptydirvolumesource: +persistence: + enabled: true + storageClassName: standard + # specifying reclaim policy for PersistentVolumes + # accepted values - Delete / Retain + reclaimPolicy: Delete + volumeSize: 20Gi + +ephemeral: + enabled: false + #emptydirvolumesource: {} #medium: ""/Memory #sizeLimit: 15Gi -persistence: - storageClassName: standard - ## specifying reclaim policy for PersistentVolumes - ## accepted values - Delete / Retain - reclaimPolicy: Delete - volumeSize: 20Gi - hooks: image: repository: lachlanevenson/k8s-kubectl diff --git a/go.mod b/go.mod index cc93e879b..abc5f719f 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,8 @@ module github.com/pravega/zookeeper-operator go 1.13 require ( + 4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec // indirect + 4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4 // indirect github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/go-logr/logr v0.1.0 github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf // indirect diff --git a/go.sum b/go.sum index b267543e9..6d3da9881 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,7 @@ +4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec h1:LArU+LLj2RRPagtrxuBE+xs+zJzOCWvX99TIoGac1gE= +4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec/go.mod h1:Sk40JNJmh0koZukOjJfaBNLZazbZthFfHnLHIcZNS6A= +4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4 h1:bf5qocEKjrY58JO2GwywfLsb1199lIVs7qHkiplwHy0= +4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4/go.mod h1:4o1i5aXtIF5tJFt3UD1knCVmWOXg7fLYdHVu6jeNcnM= bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg= diff --git a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go index bb8783900..a3c2b6e9d 100644 --- a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go +++ b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go @@ -69,7 +69,7 @@ var _ = Describe("ZookeeperCluster DeepCopy", func() { z2.Spec.Ports[0].ContainerPort = p.ContainerPort z1.SetAnnotations(m) z2.Spec.Pod.Annotations = z1.Spec.Pod.Annotations - z2.Spec.Persistence = z1.Spec.Persistence.DeepCopy() + z2.Spec.Storage.Persistence = *z1.Spec.Storage.Persistence.DeepCopy() z1.Spec.Pod.DeepCopyInto(&z2.Spec.Pod) z1.Status.Members.Ready = []string{"zk-0", "zk-1"} z1.Status.Members.Unready = []string{"zk-2"} diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 09fb60700..9deb069d9 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -59,17 +59,11 @@ type ZookeeperClusterSpec struct { Ports []v1.ContainerPort `json:"ports,omitempty"` // Pod defines the policy to create pod for the zookeeper cluster. - // // Updating the Pod does not take effect on any existing pods. Pod PodPolicy `json:"pod,omitempty"` - // Persistence is the configuration for zookeeper persistent layer. - // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. - Persistence *Persistence `json:"persistence,omitempty"` - - //Ephemeral is the configuration which helps create ephemeral storage - //At anypoint only one of Persistence or Ephemeral should be present in the manifest - Ephemeral *Ephemeral `json:"ephemeral,omitempty"` + //storage is used to define which storagetype we will be using + Storage *Storage `json:"storage,omitempty"` // Conf is the zookeeper configuration, which will be used to generate the // static zookeeper configuration. If no configuration is provided required @@ -161,11 +155,13 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Persistence == nil && (s.Ephemeral == nil || s.Ephemeral.Enabled == false) { - s.Persistence = &Persistence{} + if s.Storage == nil || (s.Storage.Ephemeral.Enabled == false && s.Storage.Persistence.Enabled == false) { + s.Storage = &Storage{} + s.Storage.Persistence = Persistence{} + s.Storage.Persistence.Enabled = true changed = true } - if s.Persistence != nil && s.Persistence.withDefaults() { + if s.Storage.Persistence.Enabled == true && s.Storage.Persistence.withDefaults() { changed = true } return changed @@ -387,7 +383,21 @@ func (c *ZookeeperConfig) withDefaults() (changed bool) { return changed } +type Storage struct { + //Default storage is Persistence storage + // Persistence is the configuration for zookeeper persistent layer. + // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. + Persistence Persistence `json:"persistence,omitempty"` + + // Ephemeral is the configuration which helps create ephemeral storage + // At anypoint only one of Persistence or Ephemeral should be present in the manifest + Ephemeral Ephemeral `json:"ephemeral,omitempty"` +} + type Persistence struct { + // Enabled specifies whether or not persistent storage is enabled + // By default, Persistence is not enabled + Enabled bool `json:"enabled"` // VolumeReclaimPolicy is a zookeeper operator configuration. If it's set to Delete, // the corresponding PVCs will be deleted by the operator when zookeeper cluster is deleted. // The default value is Retain. @@ -400,7 +410,7 @@ type Persistence struct { type Ephemeral struct { // Enabled specifies whether or not ephemeral storage is enabled - // By default, external access is not enabled + // By default, ephemeral is not enabled Enabled bool `json:"enabled"` //EmptyDirVolumeSource is optional and this will create the emptydir volume //It has two parameters Medium and SizeLimit which are optional as well diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go index cfe58aa88..6efa268a8 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go @@ -90,12 +90,12 @@ var _ = Describe("ZookeeperCluster Types", func() { var z1 v1beta1.ZookeeperCluster BeforeEach(func() { z1 = *z.DeepCopy() - z1.Spec.Persistence.VolumeReclaimPolicy = "Delete" + z1.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" z1.WithDefaults() }) It("should set the Volumeclaimpolicy to Delete", func() { - Ω(fmt.Sprintf("%s", z1.Spec.Persistence.VolumeReclaimPolicy)).To(Equal("Delete")) + Ω(fmt.Sprintf("%s", z1.Spec.Storage.Persistence.VolumeReclaimPolicy)).To(Equal("Delete")) }) }) @@ -204,7 +204,7 @@ var _ = Describe("ZookeeperCluster Types", func() { var p corev1.PersistentVolumeClaimSpec BeforeEach(func() { - p = z.Spec.Persistence.PersistentVolumeClaimSpec + p = z.Spec.Storage.Persistence.PersistentVolumeClaimSpec }) It("should be an RWO volume", func() { diff --git a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go index 75152243c..4fea7dc2f 100644 --- a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go @@ -224,10 +224,9 @@ func (in *ZookeeperClusterSpec) DeepCopyInto(out *ZookeeperClusterSpec) { copy(*out, *in) } in.Pod.DeepCopyInto(&out.Pod) - if in.Persistence != nil { - in, out := &in.Persistence, &out.Persistence - *out = new(Persistence) - (*in).DeepCopyInto(*out) + if in.Storage != nil { + in, out := in.Storage.Persistence, out.Storage.Persistence + (in).DeepCopyInto(&out) } out.Conf = in.Conf return diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller.go b/pkg/controller/zookeepercluster/zookeepercluster_controller.go index 33a398516..170090bab 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller.go @@ -620,7 +620,7 @@ func (r *ReconcileZookeeperCluster) yamlConfigMap(instance *zookeeperv1beta1.Zoo } func (r *ReconcileZookeeperCluster) reconcileFinalizers(instance *zookeeperv1beta1.ZookeeperCluster) (err error) { - if instance.Spec.Persistence != nil && instance.Spec.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { + if instance.Spec.Storage.Persistence.Enabled == true && instance.Spec.Storage.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { return nil } if instance.DeletionTimestamp.IsZero() { diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go b/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go index 2d8ed9629..825fc9572 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go @@ -489,7 +489,7 @@ var _ = Describe("ZookeeperCluster Controller", func() { Ω(count).To(Equal(0)) }) It("should not raise an error", func() { - z.Spec.Persistence.VolumeReclaimPolicy = v1beta1.VolumeReclaimPolicyDelete + z.Spec.Storage.Persistence.VolumeReclaimPolicy = v1beta1.VolumeReclaimPolicyDelete cl.Update(context.TODO(), z) err = r.reconcileFinalizers(z) Ω(err).To(BeNil()) diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index e01c84bfb..6414db9ec 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -44,8 +44,10 @@ func NewClusterWithVersion(namespace, version string) *api.ZookeeperCluster { func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ - Ephemeral: &api.Ephemeral{ - Enabled: true, + Storage: &api.Storage{ + Ephemeral: api.Ephemeral{ + Enabled: true, + }, }, } return cluster diff --git a/pkg/zk/generators.go b/pkg/zk/generators.go index c3494141d..071242c85 100644 --- a/pkg/zk/generators.go +++ b/pkg/zk/generators.go @@ -43,9 +43,9 @@ var zkDataVolume = "data" // MakeStatefulSet return a zookeeper stateful set from the zk spec func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { extraVolumes := []v1.Volume{} - persistence := z.Spec.Persistence + persistence := z.Spec.Storage.Persistence pvcs := []v1.PersistentVolumeClaim{} - if persistence != nil { + if persistence.Enabled == true { pvcs = append(pvcs, v1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ Name: zkDataVolume, @@ -57,7 +57,7 @@ func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { extraVolumes = append(extraVolumes, v1.Volume{ Name: zkDataVolume, VolumeSource: v1.VolumeSource{ - EmptyDir: &z.Spec.Ephemeral.EmptyDirVolumeSource, + EmptyDir: &z.Spec.Storage.Ephemeral.EmptyDirVolumeSource, }, }) } diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index 109e6bbac..87e964383 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -136,8 +136,10 @@ var _ = Describe("Generators Spec", func() { Spec: v1beta1.ZookeeperClusterSpec{}, } z.Spec = v1beta1.ZookeeperClusterSpec{ - Ephemeral: &v1beta1.Ephemeral{ - Enabled: true, + Storage: &v1beta1.Storage{ + Ephemeral: v1beta1.Ephemeral{ + Enabled: true, + }, }, } z.WithDefaults() diff --git a/test/e2e/resources/rbac-operator.yaml b/test/e2e/resources/rbac-operator.yaml index 648e3be57..5db8db9f5 100644 --- a/test/e2e/resources/rbac-operator.yaml +++ b/test/e2e/resources/rbac-operator.yaml @@ -3,6 +3,8 @@ kind: ServiceAccount metadata: name: zookeeper-operator + + --- kind: ClusterRole @@ -44,8 +46,10 @@ rules: verbs: - "*" ---- + + +--- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: @@ -59,8 +63,10 @@ roleRef: name: zookeeper-operator apiGroup: rbac.authorization.k8s.io ---- + + +--- apiVersion: apps/v1 kind: Deployment metadata: @@ -89,7 +95,7 @@ spec: fieldPath: metadata.name - name: OPERATOR_NAME value: zookeeper-operator - image: testzkop/zookeeper-operator-testimages:v0.2.8-rc0-4-dirty + image: pravega/zookeeper-operator:latest imagePullPolicy: Always name: zookeeper-operator ports: From 5b747c705eaa1b673e8d5babc32c3054360dc287 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Wed, 15 Jul 2020 20:59:09 +0530 Subject: [PATCH 09/23] fixed ete Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 2 +- go.mod | 1 + go.sum | 12 ++++++++++++ test/e2e/basic_test.go | 4 ++-- test/e2e/multiple_zk_test.go | 8 ++++---- test/e2e/pod_deletion_test.go | 2 +- test/e2e/scale_test.go | 2 +- test/e2e/upgrade_test.go | 2 +- 8 files changed, 23 insertions(+), 10 deletions(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 38ab3222f..9786a6a51 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -59,7 +59,7 @@ The following table lists the configurable parameters of the Zookeeper chart and | `config.tickTime` | Length of a single tick which is the basic time unit used by Zookeeper (measured in milliseconds) | `2000` | | `config.syncLimit` | Amount of time (in ticks) to allow followers to sync with Zookeeper | `2` | | `config.quorumListenOnAllIPs` | Whether Zookeeper server will listen for connections from its peers on all available IP addresses | `false` | -| `persistence.enabled` | whether persistence storage is enabled or not | `true` | +| `persistence.enabled` | whether persistence storage is enabled or not | `false` | | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | diff --git a/go.mod b/go.mod index abc5f719f..3716f4f2f 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/operator-framework/operator-sdk v0.17.0 github.com/pkg/errors v0.9.1 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da + github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 // indirect k8s.io/api v0.17.5 k8s.io/apimachinery v0.17.5 k8s.io/client-go v12.0.0+incompatible diff --git a/go.sum b/go.sum index 6d3da9881..17bd67916 100644 --- a/go.sum +++ b/go.sum @@ -590,6 +590,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE= @@ -597,6 +598,7 @@ github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LE github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/leanovate/gopter v0.2.4/go.mod h1:gNcbPWNEWRe4lm+bycKqxUYoH5uoVje5SkOJ3uoLer8= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -688,6 +690,7 @@ github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwd github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozillazg/go-cos v0.13.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= @@ -702,6 +705,8 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -857,6 +862,8 @@ github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdh github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 h1:rq2/kILQnPtq5oL4+IAjgVOjh5e2yj2aaCYi7squEvI= +github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -955,6 +962,7 @@ github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSf github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= @@ -1036,6 +1044,7 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -1210,9 +1219,12 @@ golang.org/x/tools v0.0.0-20191111182352-50fa39b762bc/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200115044656-831fdb1e1868/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200327195553-82bb89366a1e h1:qCZ8SbsZMjT0OuDPCEBxgLZic4NMj8Gj4vNXiTVRAaA= golang.org/x/tools v0.0.0-20200327195553-82bb89366a1e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331202046-9d5940d49312 h1:2PHG+Ia3gK1K2kjxZnSylizb//eyaMG8gDFbOG7wLV8= +golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= diff --git a/test/e2e/basic_test.go b/test/e2e/basic_test.go index de5f49d51..bebe54800 100644 --- a/test/e2e/basic_test.go +++ b/test/e2e/basic_test.go @@ -38,7 +38,7 @@ func testCreateRecreateCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -57,7 +57,7 @@ func testCreateRecreateCluster(t *testing.T) { defaultCluster = zk_e2eutil.NewDefaultCluster(namespace) defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk, err = zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/multiple_zk_test.go b/test/e2e/multiple_zk_test.go index 323f93d50..328b94e20 100644 --- a/test/e2e/multiple_zk_test.go +++ b/test/e2e/multiple_zk_test.go @@ -41,7 +41,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk1" - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk1, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -55,7 +55,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" defaultCluster.ObjectMeta.Name = "zk2" initialVersion := "0.2.7" upgradeVersion := "0.2.8-rc0" @@ -79,7 +79,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk3" - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk3, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -168,7 +168,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk1" - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk1, err = zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/pod_deletion_test.go b/test/e2e/pod_deletion_test.go index 8153000ef..553b0f6f0 100644 --- a/test/e2e/pod_deletion_test.go +++ b/test/e2e/pod_deletion_test.go @@ -39,7 +39,7 @@ func testDeletePods(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/scale_test.go b/test/e2e/scale_test.go index 2ce513010..2f728baa3 100644 --- a/test/e2e/scale_test.go +++ b/test/e2e/scale_test.go @@ -37,7 +37,7 @@ func testScaleCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) diff --git a/test/e2e/upgrade_test.go b/test/e2e/upgrade_test.go index 0e0f0dbf2..d7ab8991d 100644 --- a/test/e2e/upgrade_test.go +++ b/test/e2e/upgrade_test.go @@ -38,7 +38,7 @@ func testUpgradeCluster(t *testing.T) { cluster.WithDefaults() cluster.Status.Init() - cluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" + cluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" initialVersion := "0.2.7" upgradeVersion := "0.2.8-rc0" cluster.Spec.Image = api.ContainerImage{ From fefa36420d314a660a7e8b24d0fed5ed8792b96b Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 16 Jul 2020 09:53:39 +0530 Subject: [PATCH 10/23] changed readme file Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 9786a6a51..3fe1ce079 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -65,4 +65,4 @@ The following table lists the configurable parameters of the Zookeeper chart and | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | | `ephemeral.enabled` | whether ephemeral storage is enabled or not | `false` | | `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | -| `ephemeral.emptydirvolumesource.volumeSize` | Total amount of local storage required for the EmptyDir volume. | `nil` | +| `ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | `nil` | From df5ca92520a6fdb744c87f670e163064c270144e Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 16 Jul 2020 15:30:33 +0530 Subject: [PATCH 11/23] addressed comments Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 2 +- charts/zookeeper/templates/zookeeper.yaml | 5 ++++- charts/zookeeper/values.yaml | 12 ++++++++---- pkg/apis/zookeeper/v1beta1/deepcopy_test.go | 2 +- .../zookeeper/v1beta1/zookeepercluster_types.go | 14 +++++--------- .../zookeeper/v1beta1/zz_generated.deepcopy.go | 4 ++-- .../zookeepercluster_controller.go | 2 +- pkg/test/e2e/e2eutil/spec_util.go | 2 +- pkg/zk/generators.go | 2 +- pkg/zk/generators_test.go | 2 +- 10 files changed, 25 insertions(+), 22 deletions(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 3fe1ce079..c0b26fb6d 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -59,7 +59,7 @@ The following table lists the configurable parameters of the Zookeeper chart and | `config.tickTime` | Length of a single tick which is the basic time unit used by Zookeeper (measured in milliseconds) | `2000` | | `config.syncLimit` | Amount of time (in ticks) to allow followers to sync with Zookeeper | `2` | | `config.quorumListenOnAllIPs` | Whether Zookeeper server will listen for connections from its peers on all available IP addresses | `false` | -| `persistence.enabled` | whether persistence storage is enabled or not | `false` | +| `storageType.type` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index 628220275..3e01370c1 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -44,6 +44,7 @@ spec: quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} storage: + {{- if eq .Values.storage.storageType.type "ephemeral" }} ephemeral: enabled: {{ .Values.ephemeral.enabled }} {{- if .Values.ephemeral.emptydirvolumesource }} @@ -51,8 +52,9 @@ spec: medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} {{- end }} + {{- end }} + {{- if eq .Values.storage.storageType.type "persistence" }} persistence: - enabled: {{ .Values.persistence.enabled }} {{- if .Values.persistence.enabled }} reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} spec: @@ -61,3 +63,4 @@ spec: requests: storage: {{ .Values.persistence.volumeSize }} {{- end }} + {{- end }} diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 7f4ef8255..c47e6b138 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -25,17 +25,21 @@ config: {} # tickTime: 2000 # syncLimit: 2 # quorumListenOnAllIPs: false +storageType: + ## configure the storage backend type + ## accepted values : persistence/ephemeral + ## default option is + type: persistence -persistence: - enabled: true +persistence: storageClassName: standard # specifying reclaim policy for PersistentVolumes # accepted values - Delete / Retain reclaimPolicy: Delete volumeSize: 20Gi -ephemeral: - enabled: false +ephemeral: + enabled: true #emptydirvolumesource: {} #medium: ""/Memory #sizeLimit: 15Gi diff --git a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go index a3c2b6e9d..8f459eeb4 100644 --- a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go +++ b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go @@ -69,7 +69,7 @@ var _ = Describe("ZookeeperCluster DeepCopy", func() { z2.Spec.Ports[0].ContainerPort = p.ContainerPort z1.SetAnnotations(m) z2.Spec.Pod.Annotations = z1.Spec.Pod.Annotations - z2.Spec.Storage.Persistence = *z1.Spec.Storage.Persistence.DeepCopy() + z2.Spec.Storage.Persistence = z1.Spec.Storage.Persistence.DeepCopy() z1.Spec.Pod.DeepCopyInto(&z2.Spec.Pod) z1.Status.Members.Ready = []string{"zk-0", "zk-1"} z1.Status.Members.Unready = []string{"zk-2"} diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 9deb069d9..8bd90a386 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -155,13 +155,12 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Storage == nil || (s.Storage.Ephemeral.Enabled == false && s.Storage.Persistence.Enabled == false) { + if s.Storage == nil || (s.Storage.Ephemeral == nil && s.Storage.Persistence == nil) { s.Storage = &Storage{} - s.Storage.Persistence = Persistence{} - s.Storage.Persistence.Enabled = true + s.Storage.Persistence = &Persistence{} changed = true } - if s.Storage.Persistence.Enabled == true && s.Storage.Persistence.withDefaults() { + if s.Storage != nil && s.Storage.Persistence != nil && s.Storage.Persistence.withDefaults() { changed = true } return changed @@ -387,17 +386,14 @@ type Storage struct { //Default storage is Persistence storage // Persistence is the configuration for zookeeper persistent layer. // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. - Persistence Persistence `json:"persistence,omitempty"` + Persistence *Persistence `json:"persistence,omitempty"` // Ephemeral is the configuration which helps create ephemeral storage // At anypoint only one of Persistence or Ephemeral should be present in the manifest - Ephemeral Ephemeral `json:"ephemeral,omitempty"` + Ephemeral *Ephemeral `json:"ephemeral,omitempty"` } type Persistence struct { - // Enabled specifies whether or not persistent storage is enabled - // By default, Persistence is not enabled - Enabled bool `json:"enabled"` // VolumeReclaimPolicy is a zookeeper operator configuration. If it's set to Delete, // the corresponding PVCs will be deleted by the operator when zookeeper cluster is deleted. // The default value is Retain. diff --git a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go index 4fea7dc2f..ca4c0dc57 100644 --- a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go @@ -224,8 +224,8 @@ func (in *ZookeeperClusterSpec) DeepCopyInto(out *ZookeeperClusterSpec) { copy(*out, *in) } in.Pod.DeepCopyInto(&out.Pod) - if in.Storage != nil { - in, out := in.Storage.Persistence, out.Storage.Persistence + if in.Storage != nil && in.Storage.Persistence != nil { + in, out := *in.Storage.Persistence, *out.Storage.Persistence (in).DeepCopyInto(&out) } out.Conf = in.Conf diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller.go b/pkg/controller/zookeepercluster/zookeepercluster_controller.go index 170090bab..9ee0079fc 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller.go @@ -620,7 +620,7 @@ func (r *ReconcileZookeeperCluster) yamlConfigMap(instance *zookeeperv1beta1.Zoo } func (r *ReconcileZookeeperCluster) reconcileFinalizers(instance *zookeeperv1beta1.ZookeeperCluster) (err error) { - if instance.Spec.Storage.Persistence.Enabled == true && instance.Spec.Storage.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { + if instance.Spec.Storage.Persistence != nil && instance.Spec.Storage.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { return nil } if instance.DeletionTimestamp.IsZero() { diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 6414db9ec..08b84f3c6 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -45,7 +45,7 @@ func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ Storage: &api.Storage{ - Ephemeral: api.Ephemeral{ + Ephemeral: &api.Ephemeral{ Enabled: true, }, }, diff --git a/pkg/zk/generators.go b/pkg/zk/generators.go index 071242c85..79f0021b0 100644 --- a/pkg/zk/generators.go +++ b/pkg/zk/generators.go @@ -45,7 +45,7 @@ func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { extraVolumes := []v1.Volume{} persistence := z.Spec.Storage.Persistence pvcs := []v1.PersistentVolumeClaim{} - if persistence.Enabled == true { + if persistence != nil { pvcs = append(pvcs, v1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ Name: zkDataVolume, diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index 87e964383..ba9152b85 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -137,7 +137,7 @@ var _ = Describe("Generators Spec", func() { } z.Spec = v1beta1.ZookeeperClusterSpec{ Storage: &v1beta1.Storage{ - Ephemeral: v1beta1.Ephemeral{ + Ephemeral: &v1beta1.Ephemeral{ Enabled: true, }, }, From e663fc75a17d4872317bb49d1314306615d82d71 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 16 Jul 2020 16:21:51 +0530 Subject: [PATCH 12/23] fixed charts Signed-off-by: prabhaker24 --- charts/zookeeper/templates/zookeeper.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index 3e01370c1..aeeae02a3 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -44,7 +44,7 @@ spec: quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} storage: - {{- if eq .Values.storage.storageType.type "ephemeral" }} + {{- if eq .Values.storageType.type "ephemeral" }} ephemeral: enabled: {{ .Values.ephemeral.enabled }} {{- if .Values.ephemeral.emptydirvolumesource }} @@ -53,14 +53,12 @@ spec: sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} {{- end }} {{- end }} - {{- if eq .Values.storage.storageType.type "persistence" }} + {{- if eq .Values.storageType.type "persistence" }} persistence: - {{- if .Values.persistence.enabled }} reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} spec: storageClassName: {{ .Values.persistence.storageClassName }} resources: requests: storage: {{ .Values.persistence.volumeSize }} - {{- end }} {{- end }} From 023271fed5686fbcf484378206df6d2d10d7e8c6 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 17 Jul 2020 09:35:47 +0530 Subject: [PATCH 13/23] addressed comments Signed-off-by: prabhaker24 --- README.md | 3 +-- charts/zookeeper/templates/zookeeper.yaml | 13 ++++++------- charts/zookeeper/values.yaml | 15 +++++++-------- .../v1beta1/zookeepercluster_types.go | 18 +++++++++++------- .../v1beta1/zookeepercluster_types_test.go | 13 +++++++++++++ pkg/test/e2e/e2eutil/spec_util.go | 4 +--- pkg/zk/generators_test.go | 4 +--- 7 files changed, 40 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index aa48ce3c3..7caf1565b 100644 --- a/README.md +++ b/README.md @@ -144,8 +144,7 @@ metadata: spec: replicas: 3 storage: - ephemeral: - enabled: true + storagetype: ephemeral ``` ``` diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index aeeae02a3..f06eef79d 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -44,16 +44,15 @@ spec: quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} storage: - {{- if eq .Values.storageType.type "ephemeral" }} + storagetype: {{ .Values.storage.type }} + {{- if eq .Values.storage.type "ephemeral" }} ephemeral: - enabled: {{ .Values.ephemeral.enabled }} - {{- if .Values.ephemeral.emptydirvolumesource }} + {{- if .Values.emptydirvolumesource }} emptydirvolumesource: - medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} - sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} + medium: {{ .Values.emptydirvolumesource.medium }} + sizeLimit: {{ .Values.emptydirvolumesource.sizeLimit }} {{- end }} - {{- end }} - {{- if eq .Values.storageType.type "persistence" }} + {{- else }} persistence: reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} spec: diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index c47e6b138..24633fd23 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -25,11 +25,12 @@ config: {} # tickTime: 2000 # syncLimit: 2 # quorumListenOnAllIPs: false -storageType: - ## configure the storage backend type + +storage: + ## configure the storage type ## accepted values : persistence/ephemeral ## default option is - type: persistence + type: ephemeral persistence: storageClassName: standard @@ -38,11 +39,9 @@ persistence: reclaimPolicy: Delete volumeSize: 20Gi -ephemeral: - enabled: true - #emptydirvolumesource: {} - #medium: ""/Memory - #sizeLimit: 15Gi +emptydirvolumesource: {} + #medium: ""/Memory + #sizeLimit: 15Gi hooks: image: diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 8bd90a386..0bc8b95c7 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -155,11 +155,17 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Storage == nil || (s.Storage.Ephemeral == nil && s.Storage.Persistence == nil) { + if s.Storage == nil || (s.Storage.Persistence == nil && s.Storage.Storagetype != "ephemeral") { s.Storage = &Storage{} + s.Storage.Storagetype = "persistence" s.Storage.Persistence = &Persistence{} changed = true } + if s.Storage != nil && s.Storage.Storagetype == "ephemeral" && s.Storage.Ephemeral == nil { + s.Storage.Ephemeral = &Ephemeral{} + s.Storage.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} + changed = true + } if s.Storage != nil && s.Storage.Persistence != nil && s.Storage.Persistence.withDefaults() { changed = true } @@ -167,7 +173,6 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // ZookeeperCluster is the Schema for the zookeeperclusters API // +k8s:openapi-gen=true type ZookeeperCluster struct { @@ -383,11 +388,13 @@ func (c *ZookeeperConfig) withDefaults() (changed bool) { } type Storage struct { - //Default storage is Persistence storage + //storagetype is used to tell which type of storage we will be using + //It can take either Ephemeral or persistence + //Default Storagetype is Persistence storage + Storagetype string `json:"storagetype,omitempty"` // Persistence is the configuration for zookeeper persistent layer. // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. Persistence *Persistence `json:"persistence,omitempty"` - // Ephemeral is the configuration which helps create ephemeral storage // At anypoint only one of Persistence or Ephemeral should be present in the manifest Ephemeral *Ephemeral `json:"ephemeral,omitempty"` @@ -405,9 +412,6 @@ type Persistence struct { } type Ephemeral struct { - // Enabled specifies whether or not ephemeral storage is enabled - // By default, ephemeral is not enabled - Enabled bool `json:"enabled"` //EmptyDirVolumeSource is optional and this will create the emptydir volume //It has two parameters Medium and SizeLimit which are optional as well //Medium specifies What type of storage medium should back this directory. diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go index 6efa268a8..2988d770b 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go @@ -99,6 +99,19 @@ var _ = Describe("ZookeeperCluster Types", func() { }) }) + Context(" Ephemeral Storage", func() { + var z1 v1beta1.ZookeeperCluster + BeforeEach(func() { + z1 = *z.DeepCopy() + z1.Spec.Storage.Storagetype = "ephemeral" + z1.WithDefaults() + }) + + It("should set the ephemeralstorage and value for EmptyDirVolumeSource.Medium to ''", func() { + Ω(fmt.Sprintf("%s", z1.Spec.Storage.Ephemeral.EmptyDirVolumeSource.Medium)).To(Equal("")) + }) + }) + Context("Conf", func() { var c v1beta1.ZookeeperConfig diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 08b84f3c6..54f7da435 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -45,9 +45,7 @@ func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ Storage: &api.Storage{ - Ephemeral: &api.Ephemeral{ - Enabled: true, - }, + Storagetype: "ephemeral", }, } return cluster diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index ba9152b85..7ba7640c9 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -137,9 +137,7 @@ var _ = Describe("Generators Spec", func() { } z.Spec = v1beta1.ZookeeperClusterSpec{ Storage: &v1beta1.Storage{ - Ephemeral: &v1beta1.Ephemeral{ - Enabled: true, - }, + Storagetype: "ephemeral", }, } z.WithDefaults() From 4967437954e6bef6a8e3a95acb2256003872d280 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 17 Jul 2020 09:41:22 +0530 Subject: [PATCH 14/23] changed default storage to persistence Signed-off-by: prabhaker24 --- charts/zookeeper/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 24633fd23..88862cdd4 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -30,7 +30,7 @@ storage: ## configure the storage type ## accepted values : persistence/ephemeral ## default option is - type: ephemeral + type: persistence persistence: storageClassName: standard From 5560fa504388a16c98953aba028a7d00e3b633b3 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 23 Jul 2020 10:14:16 +0530 Subject: [PATCH 15/23] changed doc Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 1 - charts/zookeeper/templates/zookeeper.yaml | 4 ++-- charts/zookeeper/values.yaml | 7 ++++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index c0b26fb6d..48cf77b1b 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -63,6 +63,5 @@ The following table lists the configurable parameters of the Zookeeper chart and | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | -| `ephemeral.enabled` | whether ephemeral storage is enabled or not | `false` | | `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | | `ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | `nil` | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index f06eef79d..d8c48bafc 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -49,8 +49,8 @@ spec: ephemeral: {{- if .Values.emptydirvolumesource }} emptydirvolumesource: - medium: {{ .Values.emptydirvolumesource.medium }} - sizeLimit: {{ .Values.emptydirvolumesource.sizeLimit }} + medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} + sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} {{- end }} {{- else }} persistence: diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 88862cdd4..ad471a321 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -39,9 +39,10 @@ persistence: reclaimPolicy: Delete volumeSize: 20Gi -emptydirvolumesource: {} - #medium: ""/Memory - #sizeLimit: 15Gi +ephemeral: + emptydirvolumesource: {} + #medium: ""/Memory + #sizeLimit: 15Gi hooks: image: From ebe8cca8327e5b5fe48b71a5808c3dd1863977e0 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 23 Jul 2020 12:46:51 +0530 Subject: [PATCH 16/23] changed in zookeeper.yaml Signed-off-by: prabhaker24 --- charts/zookeeper/templates/zookeeper.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index d8c48bafc..e9c683aa5 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -47,7 +47,7 @@ spec: storagetype: {{ .Values.storage.type }} {{- if eq .Values.storage.type "ephemeral" }} ephemeral: - {{- if .Values.emptydirvolumesource }} + {{- if .Values.ephemeral.emptydirvolumesource }} emptydirvolumesource: medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} From 0b5d7c995f2ee58111a8afd0127940b3751bb4d1 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 24 Jul 2020 12:45:48 +0530 Subject: [PATCH 17/23] addressed comments Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 12 +++++----- charts/zookeeper/templates/zookeeper.yaml | 16 +++++++------ charts/zookeeper/values.yaml | 24 +++++++++---------- .../v1beta1/zookeepercluster_types.go | 17 ++++++------- .../v1beta1/zookeepercluster_types_test.go | 2 +- pkg/test/e2e/e2eutil/spec_util.go | 2 +- pkg/zk/generators_test.go | 2 +- test/e2e/ephemeral_test.go | 2 +- test/e2e/zookeepercluster_test.go | 2 +- 9 files changed, 41 insertions(+), 38 deletions(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 48cf77b1b..4c84491bd 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -59,9 +59,9 @@ The following table lists the configurable parameters of the Zookeeper chart and | `config.tickTime` | Length of a single tick which is the basic time unit used by Zookeeper (measured in milliseconds) | `2000` | | `config.syncLimit` | Amount of time (in ticks) to allow followers to sync with Zookeeper | `2` | | `config.quorumListenOnAllIPs` | Whether Zookeeper server will listen for connections from its peers on all available IP addresses | `false` | -| `storageType.type` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | -| `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | -| `persistence.storageClassName` | Storage class for persistent volumes | `standard` | -| `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | -| `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | -| `ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | `nil` | +| `storage.type` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | +| `storage.persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | +| `storage.persistence.storageClassName` | Storage class for persistent volumes | `standard` | +| `storage.persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | +| `storage.ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | +| `storage.ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | `` | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index e9c683aa5..9f7163cd5 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -44,20 +44,22 @@ spec: quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} storage: - storagetype: {{ .Values.storage.type }} + storageType: {{ .Values.storage.type }} {{- if eq .Values.storage.type "ephemeral" }} ephemeral: - {{- if .Values.ephemeral.emptydirvolumesource }} + {{- if .Values.storage.ephemeral.emptydirvolumesource }} emptydirvolumesource: - medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} - sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} + medium: {{ .Values.storage.ephemeral.emptydirvolumesource.medium }} + {{- if .Values.storage.ephemeral.emptydirvolumesource.sizeLimit }} + sizeLimit: {{ .Values.storage.ephemeral.emptydirvolumesource.sizeLimit }} + {{- end }} {{- end }} {{- else }} persistence: - reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} + reclaimPolicy: {{ .Values.storage.persistence.reclaimPolicy }} spec: - storageClassName: {{ .Values.persistence.storageClassName }} + storageClassName: {{ .Values.storage.persistence.storageClassName }} resources: requests: - storage: {{ .Values.persistence.volumeSize }} + storage: {{ .Values.storage.persistence.volumeSize }} {{- end }} diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index ad471a321..e487169c1 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -31,18 +31,18 @@ storage: ## accepted values : persistence/ephemeral ## default option is type: persistence - -persistence: - storageClassName: standard - # specifying reclaim policy for PersistentVolumes - # accepted values - Delete / Retain - reclaimPolicy: Delete - volumeSize: 20Gi - -ephemeral: - emptydirvolumesource: {} - #medium: ""/Memory - #sizeLimit: 15Gi + persistence: + storageClassName: standard + ## specifying reclaim policy for PersistentVolumes + ## accepted values - Delete / Retain + reclaimPolicy: Delete + volumeSize: 20Gi + ephemeral: + emptydirvolumesource: + ## specifying Medium for emptydirvolumesource + ## accepted values - ""/Memory + #medium: "" + #sizeLimit: 20Gi hooks: image: diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 0bc8b95c7..7965c3099 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -12,6 +12,7 @@ package v1beta1 import ( "fmt" + "strings" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -62,7 +63,7 @@ type ZookeeperClusterSpec struct { // Updating the Pod does not take effect on any existing pods. Pod PodPolicy `json:"pod,omitempty"` - //storage is used to define which storagetype we will be using + //storage is used to define which StorageType we will be using Storage *Storage `json:"storage,omitempty"` // Conf is the zookeeper configuration, which will be used to generate the @@ -155,13 +156,13 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Storage == nil || (s.Storage.Persistence == nil && s.Storage.Storagetype != "ephemeral") { + if s.Storage == nil || (s.Storage.Persistence == nil && !strings.EqualFold(s.Storage.StorageType, "ephemeral")) { s.Storage = &Storage{} - s.Storage.Storagetype = "persistence" + s.Storage.StorageType = "persistence" s.Storage.Persistence = &Persistence{} changed = true } - if s.Storage != nil && s.Storage.Storagetype == "ephemeral" && s.Storage.Ephemeral == nil { + if s.Storage != nil && strings.EqualFold(s.Storage.StorageType, "ephemeral") && s.Storage.Ephemeral == nil { s.Storage.Ephemeral = &Ephemeral{} s.Storage.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} changed = true @@ -388,10 +389,10 @@ func (c *ZookeeperConfig) withDefaults() (changed bool) { } type Storage struct { - //storagetype is used to tell which type of storage we will be using + //StorageType is used to tell which type of storage we will be using //It can take either Ephemeral or persistence - //Default Storagetype is Persistence storage - Storagetype string `json:"storagetype,omitempty"` + //Default StorageType is Persistence storage + StorageType string `json:"storageType,omitempty"` // Persistence is the configuration for zookeeper persistent layer. // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. Persistence *Persistence `json:"persistence,omitempty"` @@ -406,7 +407,7 @@ type Persistence struct { // The default value is Retain. VolumeReclaimPolicy VolumeReclaimPolicy `json:"reclaimPolicy,omitempty"` // PersistentVolumeClaimSpec is the spec to describe PVC for the container - // This field is optional. If no PVC is specified by default persistentvolume + // This field is optional. If no PVC is specified default persistentvolume // will get created. PersistentVolumeClaimSpec v1.PersistentVolumeClaimSpec `json:"spec,omitempty"` } diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go index 2988d770b..375de95d9 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go @@ -103,7 +103,7 @@ var _ = Describe("ZookeeperCluster Types", func() { var z1 v1beta1.ZookeeperCluster BeforeEach(func() { z1 = *z.DeepCopy() - z1.Spec.Storage.Storagetype = "ephemeral" + z1.Spec.Storage.StorageType = "ephemeral" z1.WithDefaults() }) diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 54f7da435..3f1e57505 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -45,7 +45,7 @@ func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ Storage: &api.Storage{ - Storagetype: "ephemeral", + StorageType: "ephemeral", }, } return cluster diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index 7ba7640c9..7c67a64ff 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -137,7 +137,7 @@ var _ = Describe("Generators Spec", func() { } z.Spec = v1beta1.ZookeeperClusterSpec{ Storage: &v1beta1.Storage{ - Storagetype: "ephemeral", + StorageType: "ephemeral", }, } z.WithDefaults() diff --git a/test/e2e/ephemeral_test.go b/test/e2e/ephemeral_test.go index b80c572ca..74eb0dc7b 100644 --- a/test/e2e/ephemeral_test.go +++ b/test/e2e/ephemeral_test.go @@ -19,7 +19,7 @@ import ( ) // Test create and recreate a Zookeeper cluster with the same name -func testephemeralstorage(t *testing.T) { +func testEphemeralStorage(t *testing.T) { g := NewGomegaWithT(t) doCleanup := true diff --git a/test/e2e/zookeepercluster_test.go b/test/e2e/zookeepercluster_test.go index 1db326abe..b708c79f5 100644 --- a/test/e2e/zookeepercluster_test.go +++ b/test/e2e/zookeepercluster_test.go @@ -62,7 +62,7 @@ func testZookeeperCluster(t *testing.T) { "testUpgradeCluster": testUpgradeCluster, "testCreateRecreateCluster": testCreateRecreateCluster, "testScaleCluster": testScaleCluster, - "testephemeralstorage": testephemeralstorage, + "testEphemeralStorage": testEphemeralStorage, } for name, f := range testFuncs { From 6c5e449456094ebf4c21911e9d84b5aeb2327c4a Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 24 Jul 2020 15:27:28 +0530 Subject: [PATCH 18/23] addressed comments Signed-off-by: prabhaker24 --- README.md | 2 +- .../zookeeper_v1beta1_zookeepercluster_cr.yaml | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7caf1565b..dbb5c8240 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ metadata: spec: replicas: 3 storage: - storagetype: ephemeral + storageType: ephemeral ``` ``` diff --git a/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml b/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml index 659691c29..882970715 100644 --- a/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml +++ b/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml @@ -6,11 +6,13 @@ spec: replicas: 3 image: repository: pravega/zookeeper - tag: 0.2.7 - persistence: - reclaimPolicy: Delete - spec: - storageClassName: "standard" - resources: - requests: - storage: 20Gi + tag: 0.2.8 + storage: + storageType: persistence + persistence: + reclaimPolicy: Delete + spec: + storageClassName: "standard" + resources: + requests: + storage: 20Gi From 11cf150959412df70cff577d77f92cb4bcb359c0 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Tue, 28 Jul 2020 14:29:19 +0530 Subject: [PATCH 19/23] changed structure for ephemeral storage Signed-off-by: prabhaker24 --- README.md | 5 +-- charts/zookeeper/README.md | 10 ++--- charts/zookeeper/templates/zookeeper.yaml | 39 +++++++++--------- charts/zookeeper/values.yaml | 35 ++++++++-------- ...zookeeper_v1beta1_zookeepercluster_cr.yaml | 18 ++++---- pkg/apis/zookeeper/v1beta1/deepcopy_test.go | 2 +- .../v1beta1/zookeepercluster_types.go | 41 ++++++++----------- .../v1beta1/zookeepercluster_types_test.go | 10 ++--- .../v1beta1/zz_generated.deepcopy.go | 4 +- .../zookeepercluster_controller.go | 2 +- .../zookeepercluster_controller_test.go | 2 +- pkg/test/e2e/e2eutil/spec_util.go | 4 +- pkg/zk/generators.go | 18 ++++---- pkg/zk/generators_test.go | 4 +- test/e2e/basic_test.go | 4 +- test/e2e/multiple_zk_test.go | 8 ++-- test/e2e/pod_deletion_test.go | 2 +- test/e2e/scale_test.go | 2 +- test/e2e/upgrade_test.go | 2 +- 19 files changed, 100 insertions(+), 112 deletions(-) diff --git a/README.md b/README.md index e93ab6643..af96e7d1d 100644 --- a/README.md +++ b/README.md @@ -166,9 +166,8 @@ kind: "ZookeeperCluster" metadata: name: "example" spec: - replicas: 3 - storage: - storageType: ephemeral + replicas: 3 + storageType: ephemeral ``` ``` diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index bce5deac4..7362a4aed 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -59,9 +59,9 @@ The following table lists the configurable parameters of the Zookeeper chart and | `config.tickTime` | Length of a single tick which is the basic time unit used by Zookeeper (measured in milliseconds) | `2000` | | `config.syncLimit` | Amount of time (in ticks) to allow followers to sync with Zookeeper | `2` | | `config.quorumListenOnAllIPs` | Whether Zookeeper server will listen for connections from its peers on all available IP addresses | `false` | -| `storage.type` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | -| `storage.persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | -| `storage.persistence.storageClassName` | Storage class for persistent volumes | `standard` | +| `storageType` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | +| `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | +| `persistence.storageClassName` | Storage class for persistent volumes | `standard` | | `storage.persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | -| `storage.ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | -| `storage.ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | `` | +| `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | +| `ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | | diff --git a/charts/zookeeper/templates/zookeeper.yaml b/charts/zookeeper/templates/zookeeper.yaml index 9f7163cd5..33740b674 100644 --- a/charts/zookeeper/templates/zookeeper.yaml +++ b/charts/zookeeper/templates/zookeeper.yaml @@ -43,23 +43,22 @@ spec: syncLimit: {{ .Values.config.syncLimit }} quorumListenOnAllIPs: {{ .Values.config.quorumListenOnAllIPs }} {{- end }} - storage: - storageType: {{ .Values.storage.type }} - {{- if eq .Values.storage.type "ephemeral" }} - ephemeral: - {{- if .Values.storage.ephemeral.emptydirvolumesource }} - emptydirvolumesource: - medium: {{ .Values.storage.ephemeral.emptydirvolumesource.medium }} - {{- if .Values.storage.ephemeral.emptydirvolumesource.sizeLimit }} - sizeLimit: {{ .Values.storage.ephemeral.emptydirvolumesource.sizeLimit }} - {{- end }} - {{- end }} - {{- else }} - persistence: - reclaimPolicy: {{ .Values.storage.persistence.reclaimPolicy }} - spec: - storageClassName: {{ .Values.storage.persistence.storageClassName }} - resources: - requests: - storage: {{ .Values.storage.persistence.volumeSize }} - {{- end }} + storageType: {{ .Values.storageType }} + {{- if eq .Values.storageType "ephemeral" }} + ephemeral: + {{- if .Values.ephemeral.emptydirvolumesource }} + emptydirvolumesource: + medium: {{ .Values.ephemeral.emptydirvolumesource.medium }} + {{- if .Values.ephemeral.emptydirvolumesource.sizeLimit }} + sizeLimit: {{ .Values.ephemeral.emptydirvolumesource.sizeLimit }} + {{- end }} + {{- end }} + {{- else }} + persistence: + reclaimPolicy: {{ .Values.persistence.reclaimPolicy }} + spec: + storageClassName: {{ .Values.persistence.storageClassName }} + resources: + requests: + storage: {{ .Values.persistence.volumeSize }} + {{- end }} diff --git a/charts/zookeeper/values.yaml b/charts/zookeeper/values.yaml index 3b250d5c5..3d80d7372 100644 --- a/charts/zookeeper/values.yaml +++ b/charts/zookeeper/values.yaml @@ -26,23 +26,24 @@ config: {} # syncLimit: 2 # quorumListenOnAllIPs: false -storage: - ## configure the storage type - ## accepted values : persistence/ephemeral - ## default option is - type: persistence - persistence: - storageClassName: standard - ## specifying reclaim policy for PersistentVolumes - ## accepted values - Delete / Retain - reclaimPolicy: Delete - volumeSize: 20Gi - ephemeral: - emptydirvolumesource: - ## specifying Medium for emptydirvolumesource - ## accepted values - ""/Memory - #medium: "" - #sizeLimit: 20Gi +## configure the storage type +## accepted values : persistence/ephemeral +## default option is persistence +storageType: persistence + +persistence: + storageClassName: standard + ## specifying reclaim policy for PersistentVolumes + ## accepted values - Delete / Retain + reclaimPolicy: Delete + volumeSize: 20Gi + +ephemeral: + emptydirvolumesource: + ## specifying Medium for emptydirvolumesource + ## accepted values - ""/Memory + #medium: "" + #sizeLimit: 20Gi hooks: image: diff --git a/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml b/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml index 56fc62f21..fa55d183d 100644 --- a/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml +++ b/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml @@ -7,13 +7,11 @@ spec: image: repository: pravega/zookeeper tag: 0.2.8 - storage: - storageType: persistence - persistence: - reclaimPolicy: Delete - spec: - storageClassName: "standard" - resources: - requests: - storage: 20Gi - + storageType: persistence + persistence: + reclaimPolicy: Retain + spec: + storageClassName: "standard" + resources: + requests: + storage: 20Gi diff --git a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go index 8f459eeb4..bb8783900 100644 --- a/pkg/apis/zookeeper/v1beta1/deepcopy_test.go +++ b/pkg/apis/zookeeper/v1beta1/deepcopy_test.go @@ -69,7 +69,7 @@ var _ = Describe("ZookeeperCluster DeepCopy", func() { z2.Spec.Ports[0].ContainerPort = p.ContainerPort z1.SetAnnotations(m) z2.Spec.Pod.Annotations = z1.Spec.Pod.Annotations - z2.Spec.Storage.Persistence = z1.Spec.Storage.Persistence.DeepCopy() + z2.Spec.Persistence = z1.Spec.Persistence.DeepCopy() z1.Spec.Pod.DeepCopyInto(&z2.Spec.Pod) z1.Status.Members.Ready = []string{"zk-0", "zk-1"} z1.Status.Members.Unready = []string{"zk-2"} diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 514717c9a..7b3eafaf4 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -63,8 +63,16 @@ type ZookeeperClusterSpec struct { // Updating the Pod does not take effect on any existing pods. Pod PodPolicy `json:"pod,omitempty"` - //storage is used to define which StorageType we will be using - Storage *Storage `json:"storage,omitempty"` + //StorageType is used to tell which type of storage we will be using + //It can take either Ephemeral or persistence + //Default StorageType is Persistence storage + StorageType string `json:"storageType,omitempty"` + // Persistence is the configuration for zookeeper persistent layer. + // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. + Persistence *Persistence `json:"persistence,omitempty"` + // Ephemeral is the configuration which helps create ephemeral storage + // At anypoint only one of Persistence or Ephemeral should be present in the manifest + Ephemeral *Ephemeral `json:"ephemeral,omitempty"` // Conf is the zookeeper configuration, which will be used to generate the // static zookeeper configuration. If no configuration is provided required @@ -156,18 +164,18 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Storage == nil || (s.Storage.Persistence == nil && !strings.EqualFold(s.Storage.StorageType, "ephemeral")) { - s.Storage = &Storage{} - s.Storage.StorageType = "persistence" - s.Storage.Persistence = &Persistence{} + if s.Persistence == nil && !strings.EqualFold(s.StorageType, "ephemeral") { + s.StorageType = "persistence" + s.Persistence = &Persistence{} changed = true } - if s.Storage != nil && strings.EqualFold(s.Storage.StorageType, "ephemeral") && s.Storage.Ephemeral == nil { - s.Storage.Ephemeral = &Ephemeral{} - s.Storage.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} + if strings.EqualFold(s.StorageType, "ephemeral") && s.Ephemeral == nil { + s.Ephemeral = &Ephemeral{} + s.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} changed = true } - if s.Storage != nil && s.Storage.Persistence != nil && s.Storage.Persistence.withDefaults() { + if !strings.EqualFold(s.StorageType, "ephemeral") && s.Persistence != nil && s.Persistence.withDefaults() { + s.StorageType = "persistence" changed = true } return changed @@ -388,19 +396,6 @@ func (c *ZookeeperConfig) withDefaults() (changed bool) { return changed } -type Storage struct { - //StorageType is used to tell which type of storage we will be using - //It can take either Ephemeral or persistence - //Default StorageType is Persistence storage - StorageType string `json:"storageType,omitempty"` - // Persistence is the configuration for zookeeper persistent layer. - // PersistentVolumeClaimSpec and VolumeReclaimPolicy can be specified in here. - Persistence *Persistence `json:"persistence,omitempty"` - // Ephemeral is the configuration which helps create ephemeral storage - // At anypoint only one of Persistence or Ephemeral should be present in the manifest - Ephemeral *Ephemeral `json:"ephemeral,omitempty"` -} - type Persistence struct { // VolumeReclaimPolicy is a zookeeper operator configuration. If it's set to Delete, // the corresponding PVCs will be deleted by the operator when zookeeper cluster is deleted. diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go index 3fdaf929a..b1eddf61a 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types_test.go @@ -90,12 +90,12 @@ var _ = Describe("ZookeeperCluster Types", func() { var z1 v1beta1.ZookeeperCluster BeforeEach(func() { z1 = *z.DeepCopy() - z1.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + z1.Spec.Persistence.VolumeReclaimPolicy = "Delete" z1.WithDefaults() }) It("should set the Volumeclaimpolicy to Delete", func() { - Ω(fmt.Sprintf("%s", z1.Spec.Storage.Persistence.VolumeReclaimPolicy)).To(Equal("Delete")) + Ω(fmt.Sprintf("%s", z1.Spec.Persistence.VolumeReclaimPolicy)).To(Equal("Delete")) }) }) @@ -103,12 +103,12 @@ var _ = Describe("ZookeeperCluster Types", func() { var z1 v1beta1.ZookeeperCluster BeforeEach(func() { z1 = *z.DeepCopy() - z1.Spec.Storage.StorageType = "ephemeral" + z1.Spec.StorageType = "ephemeral" z1.WithDefaults() }) It("should set the ephemeralstorage and value for EmptyDirVolumeSource.Medium to ''", func() { - Ω(fmt.Sprintf("%s", z1.Spec.Storage.Ephemeral.EmptyDirVolumeSource.Medium)).To(Equal("")) + Ω(fmt.Sprintf("%s", z1.Spec.Ephemeral.EmptyDirVolumeSource.Medium)).To(Equal("")) }) }) @@ -217,7 +217,7 @@ var _ = Describe("ZookeeperCluster Types", func() { var p corev1.PersistentVolumeClaimSpec BeforeEach(func() { - p = z.Spec.Storage.Persistence.PersistentVolumeClaimSpec + p = z.Spec.Persistence.PersistentVolumeClaimSpec }) It("should be an RWO volume", func() { diff --git a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go index ca4c0dc57..b1c12aa9a 100644 --- a/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/zookeeper/v1beta1/zz_generated.deepcopy.go @@ -224,8 +224,8 @@ func (in *ZookeeperClusterSpec) DeepCopyInto(out *ZookeeperClusterSpec) { copy(*out, *in) } in.Pod.DeepCopyInto(&out.Pod) - if in.Storage != nil && in.Storage.Persistence != nil { - in, out := *in.Storage.Persistence, *out.Storage.Persistence + if in.Persistence != nil { + in, out := *in.Persistence, *out.Persistence (in).DeepCopyInto(&out) } out.Conf = in.Conf diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller.go b/pkg/controller/zookeepercluster/zookeepercluster_controller.go index e1d18ff91..4bf432e1e 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller.go @@ -610,7 +610,7 @@ func (r *ReconcileZookeeperCluster) yamlConfigMap(instance *zookeeperv1beta1.Zoo } func (r *ReconcileZookeeperCluster) reconcileFinalizers(instance *zookeeperv1beta1.ZookeeperCluster) (err error) { - if instance.Spec.Storage.Persistence != nil && instance.Spec.Storage.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { + if instance.Spec.Persistence != nil && instance.Spec.Persistence.VolumeReclaimPolicy != zookeeperv1beta1.VolumeReclaimPolicyDelete { return nil } if instance.DeletionTimestamp.IsZero() { diff --git a/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go b/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go index 825fc9572..2d8ed9629 100644 --- a/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go +++ b/pkg/controller/zookeepercluster/zookeepercluster_controller_test.go @@ -489,7 +489,7 @@ var _ = Describe("ZookeeperCluster Controller", func() { Ω(count).To(Equal(0)) }) It("should not raise an error", func() { - z.Spec.Storage.Persistence.VolumeReclaimPolicy = v1beta1.VolumeReclaimPolicyDelete + z.Spec.Persistence.VolumeReclaimPolicy = v1beta1.VolumeReclaimPolicyDelete cl.Update(context.TODO(), z) err = r.reconcileFinalizers(z) Ω(err).To(BeNil()) diff --git a/pkg/test/e2e/e2eutil/spec_util.go b/pkg/test/e2e/e2eutil/spec_util.go index 3f1e57505..9594ef9e2 100644 --- a/pkg/test/e2e/e2eutil/spec_util.go +++ b/pkg/test/e2e/e2eutil/spec_util.go @@ -44,9 +44,7 @@ func NewClusterWithVersion(namespace, version string) *api.ZookeeperCluster { func NewClusterWithEmptyDir(namespace string) *api.ZookeeperCluster { cluster := NewDefaultCluster(namespace) cluster.Spec = api.ZookeeperClusterSpec{ - Storage: &api.Storage{ - StorageType: "ephemeral", - }, + StorageType: "ephemeral", } return cluster } diff --git a/pkg/zk/generators.go b/pkg/zk/generators.go index 4ad64b21c..5f6952952 100644 --- a/pkg/zk/generators.go +++ b/pkg/zk/generators.go @@ -42,9 +42,16 @@ var zkDataVolume = "data" // MakeStatefulSet return a zookeeper stateful set from the zk spec func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { extraVolumes := []v1.Volume{} - persistence := z.Spec.Storage.Persistence + persistence := z.Spec.Persistence pvcs := []v1.PersistentVolumeClaim{} - if persistence != nil { + if strings.EqualFold(z.Spec.StorageType, "ephemeral") { + extraVolumes = append(extraVolumes, v1.Volume{ + Name: zkDataVolume, + VolumeSource: v1.VolumeSource{ + EmptyDir: &z.Spec.Ephemeral.EmptyDirVolumeSource, + }, + }) + } else { pvcs = append(pvcs, v1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ Name: zkDataVolume, @@ -52,13 +59,6 @@ func MakeStatefulSet(z *v1beta1.ZookeeperCluster) *appsv1.StatefulSet { }, Spec: persistence.PersistentVolumeClaimSpec, }) - } else { - extraVolumes = append(extraVolumes, v1.Volume{ - Name: zkDataVolume, - VolumeSource: v1.VolumeSource{ - EmptyDir: &z.Spec.Storage.Ephemeral.EmptyDirVolumeSource, - }, - }) } return &appsv1.StatefulSet{ TypeMeta: metav1.TypeMeta{ diff --git a/pkg/zk/generators_test.go b/pkg/zk/generators_test.go index 7c67a64ff..c1bae9e1c 100644 --- a/pkg/zk/generators_test.go +++ b/pkg/zk/generators_test.go @@ -136,9 +136,7 @@ var _ = Describe("Generators Spec", func() { Spec: v1beta1.ZookeeperClusterSpec{}, } z.Spec = v1beta1.ZookeeperClusterSpec{ - Storage: &v1beta1.Storage{ - StorageType: "ephemeral", - }, + StorageType: "ephemeral", } z.WithDefaults() sts = zk.MakeStatefulSet(z) diff --git a/test/e2e/basic_test.go b/test/e2e/basic_test.go index bebe54800..de5f49d51 100644 --- a/test/e2e/basic_test.go +++ b/test/e2e/basic_test.go @@ -38,7 +38,7 @@ func testCreateRecreateCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -57,7 +57,7 @@ func testCreateRecreateCluster(t *testing.T) { defaultCluster = zk_e2eutil.NewDefaultCluster(namespace) defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk, err = zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/multiple_zk_test.go b/test/e2e/multiple_zk_test.go index 328b94e20..323f93d50 100644 --- a/test/e2e/multiple_zk_test.go +++ b/test/e2e/multiple_zk_test.go @@ -41,7 +41,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk1" - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk1, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -55,7 +55,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" defaultCluster.ObjectMeta.Name = "zk2" initialVersion := "0.2.7" upgradeVersion := "0.2.8-rc0" @@ -79,7 +79,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk3" - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk3, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) @@ -168,7 +168,7 @@ func testMultiZKCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() defaultCluster.ObjectMeta.Name = "zk1" - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk1, err = zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/pod_deletion_test.go b/test/e2e/pod_deletion_test.go index 553b0f6f0..8153000ef 100644 --- a/test/e2e/pod_deletion_test.go +++ b/test/e2e/pod_deletion_test.go @@ -39,7 +39,7 @@ func testDeletePods(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) g.Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/scale_test.go b/test/e2e/scale_test.go index 2f728baa3..2ce513010 100644 --- a/test/e2e/scale_test.go +++ b/test/e2e/scale_test.go @@ -37,7 +37,7 @@ func testScaleCluster(t *testing.T) { defaultCluster.WithDefaults() defaultCluster.Status.Init() - defaultCluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + defaultCluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" zk, err := zk_e2eutil.CreateCluster(t, f, ctx, defaultCluster) diff --git a/test/e2e/upgrade_test.go b/test/e2e/upgrade_test.go index d7ab8991d..0e0f0dbf2 100644 --- a/test/e2e/upgrade_test.go +++ b/test/e2e/upgrade_test.go @@ -38,7 +38,7 @@ func testUpgradeCluster(t *testing.T) { cluster.WithDefaults() cluster.Status.Init() - cluster.Spec.Storage.Persistence.VolumeReclaimPolicy = "Delete" + cluster.Spec.Persistence.VolumeReclaimPolicy = "Delete" initialVersion := "0.2.7" upgradeVersion := "0.2.8-rc0" cluster.Spec.Image = api.ContainerImage{ From 942e972c110c2907c27c0abadaea62117fad9708 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Mon, 3 Aug 2020 10:46:00 +0530 Subject: [PATCH 20/23] doc added Signed-off-by: prabhaker24 --- README.md | 2 + go.mod | 8 +- go.sum | 244 +----------------------------------------------------- 3 files changed, 7 insertions(+), 247 deletions(-) diff --git a/README.md b/README.md index af96e7d1d..1d83022f3 100644 --- a/README.md +++ b/README.md @@ -184,6 +184,8 @@ example 3 3 0.2.7 0.2.7 10.100.200.18 ``` >Note: User should only provide either persistence or ephemeral in the spec, if none of the values is specified default is persistence +>Note: We don't guarantee Data Recovery in case of Ephemeral Storage, so the users should keep in mind that in the case of zookeeper pod restarts user might lose the data. + ### Deploy a sample Zookeeper cluster with Istio Create a Yaml file called `zk-with-istio.yaml` with the following content to install a 3-node Zookeeper cluster. diff --git a/go.mod b/go.mod index 3716f4f2f..9be7beb59 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,18 @@ module github.com/pravega/zookeeper-operator go 1.13 require ( - 4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec // indirect - 4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4 // indirect github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/go-logr/logr v0.1.0 - github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf // indirect github.com/onsi/ginkgo v1.12.0 github.com/onsi/gomega v1.9.0 - github.com/opennota/check v0.0.0-20180911053232-0c771f5545ff // indirect github.com/operator-framework/operator-sdk v0.17.0 github.com/pkg/errors v0.9.1 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da - github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 // indirect + golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f // indirect + golang.org/x/tools v0.0.0-20200331202046-9d5940d49312 // indirect k8s.io/api v0.17.5 k8s.io/apimachinery v0.17.5 k8s.io/client-go v12.0.0+incompatible - k8s.io/kubernetes v1.17.5 // indirect sigs.k8s.io/controller-runtime v0.5.2 ) diff --git a/go.sum b/go.sum index 17bd67916..d5d559f1e 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,4 @@ -4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec h1:LArU+LLj2RRPagtrxuBE+xs+zJzOCWvX99TIoGac1gE= -4d63.com/gochecknoglobals v0.0.0-20190306162314-7c3491d2b6ec/go.mod h1:Sk40JNJmh0koZukOjJfaBNLZazbZthFfHnLHIcZNS6A= -4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4 h1:bf5qocEKjrY58JO2GwywfLsb1199lIVs7qHkiplwHy0= -4d63.com/gochecknoinits v0.0.0-20200108094044-eb73b47b9fc4/go.mod h1:4o1i5aXtIF5tJFt3UD1knCVmWOXg7fLYdHVu6jeNcnM= bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -27,13 +22,9 @@ github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiU github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v36.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v11.2.8+incompatible h1:Q2feRPMlcfVcqz3pF87PJzkm5lZrL+x6BDtzhODzNJM= -github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v13.3.2+incompatible h1:VxzPyuhtnlBOzc4IWCZHqpyH2d+QMLQEuy3wREyY4oc= github.com/Azure/go-autorest v13.3.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -47,10 +38,9 @@ github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSW github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= github.com/Azure/go-autorest/autorest/to v0.3.1-0.20191028180845-3492b2aff503/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/autorest/validation v0.2.1-0.20191028180845-3492b2aff503/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= @@ -61,8 +51,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= -github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -71,25 +59,20 @@ github.com/Masterminds/sprig/v3 v3.0.2/go.mod h1:oesJ8kPONMONaZgtiHNzUShJbksypC5 github.com/Masterminds/vcs v1.13.1/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.6/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -98,7 +81,6 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -110,44 +92,31 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= -github.com/bazelbuild/bazel-gazelle v0.18.2/go.mod h1:D0ehMSbS+vesFsLGiD6JXu3mVEzOlfUl8wNnq+x/9p0= -github.com/bazelbuild/bazel-gazelle v0.19.1-0.20191105222053-70208cbdc798/go.mod h1:rPwzNHUqEzngx1iVBfO/2X2npKaT3tqPqqHW6rVsn/A= -github.com/bazelbuild/buildtools v0.0.0-20190731111112-f720930ceb60/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= -github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= -github.com/bazelbuild/rules_go v0.0.0-20190719190356-6dae44dc5cab/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/brancz/gojsontoyaml v0.0.0-20190425155809-e8bd32d46b3d/go.mod h1:IyUJYN1gvWjtLF5ZuygmxbnsAyP3aJS6cHzIuZY50B0= github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c/go.mod h1:Xe6ZsFhtM8HrDku0pxJ3/Lr51rwykrzgFwpmTzleatY= github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -155,22 +124,15 @@ github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tj github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/checkpoint-restore/go-criu v0.0.0-20190109184317-bdb7599cd87b/go.mod h1:TrMrLQfeENAPYPRsJuq3jsqdlRh3lvi6trTZJG8+tho= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= -github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/containerd v1.0.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.2.7/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= @@ -180,9 +142,6 @@ github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/coredns/corefile-migration v1.0.4/go.mod h1:OFwBp/Wc9dJt5cAZzHWMNhK1r5L0p0jDwIBc6j8NC8E= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= @@ -190,7 +149,6 @@ github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHo github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -229,12 +187,10 @@ github.com/docker/distribution v0.0.0-20191216044856-a8371794149d/go.mod h1:0+TT github.com/docker/distribution v2.7.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libnetwork v0.8.0-dev.2.0.20190624125649-f0e46a78ea34/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -255,7 +211,6 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.1.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= @@ -263,10 +218,8 @@ github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb/go.mod h1:bH6Xx7IW64qjjJq8M2u4dxNaBiDfKK+z/3eGDpXEQhc= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structtag v1.1.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= 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= @@ -276,18 +229,13 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= 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-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= -github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= -github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= @@ -295,7 +243,6 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= 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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= 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= @@ -351,23 +298,9 @@ github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= @@ -379,7 +312,6 @@ github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIavi github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= -github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -396,7 +328,6 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -408,29 +339,11 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM= -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= -github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= -github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.18.0/go.mod h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg= -github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU= -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= -github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cadvisor v0.35.0/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -465,18 +378,13 @@ github.com/gophercloud/gophercloud v0.6.0 h1:Xb2lcqZtml1XjgYZxbeayEemq7ASbeTp09m github.com/gophercloud/gophercloud v0.6.0/go.mod h1:GICNByuaEBibcjmjvI7QvYJSZEbGkcYwAR7EZK2WMqM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20191106031601-ce3c9ade29de/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf h1:vc7Dmrk4JwS0ZPS6WZvWlwDflgDTA26jItmbSj83nug= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -513,12 +421,10 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= @@ -527,8 +433,6 @@ github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.1.5/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.5/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= -github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= -github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/helm/helm-2to3 v0.5.1/go.mod h1:AXFpQX2cSQpss+47ROPEeu7Sm4+CRJ1jKWCEQdHP3/c= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -543,10 +447,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb v1.7.7/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -570,17 +472,11 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= -github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -588,9 +484,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE= @@ -598,22 +492,12 @@ github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LE github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/leanovate/gopter v0.2.4/go.mod h1:gNcbPWNEWRe4lm+bycKqxUYoH5uoVje5SkOJ3uoLer8= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.0/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY= -github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= -github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= 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/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -624,7 +508,6 @@ github.com/maorfr/helm-plugin-utils v0.0.0-20200216074820-36d2fcf6ae86/go.mod h1 github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g= github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -635,38 +518,28 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.9/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/mesos/mesos-go v0.0.9/go.mod h1:kPYCMQ9gsOXVAle1OsoY4I1+9kPu8GHkf88aV59fDr4= -github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/mikefarah/yaml/v2 v2.4.0/go.mod h1:ahVqZF4n1W4NqwvVnZzC4es67xsW9uR/RRf2RRxieJU= github.com/mikefarah/yq/v2 v2.4.1/go.mod h1:i8SYf1XdgUvY2OFwSqGAtWOOgimD2McJ6iutoxRm4k0= -github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= github.com/minio/minio-go/v6 v6.0.49/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= @@ -674,7 +547,6 @@ github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1: github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -686,27 +558,16 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/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/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mozillazg/go-cos v0.13.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE= github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60= -github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= -github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -724,7 +585,6 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -739,13 +599,8 @@ github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.3.1-0.20190929122143-5215b1806f52/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= -github.com/opennota/check v0.0.0-20180911053232-0c771f5545ff h1:lRHufowVGvUvxGsPveAZOpSa/9T5Gpxg6d7UbHCA9MQ= -github.com/opennota/check v0.0.0-20180911053232-0c771f5545ff/go.mod h1:tydB+MZxWpY8M/NRu7jQhND/mXuLAPsKcSV6JkzofsA= github.com/openshift/api v0.0.0-20200205133042-34f0ec8dab87/go.mod h1:fT6U/JfG8uZzemTRwZA2kBDJP5nWz7v05UHnty/D+pk= github.com/openshift/client-go v0.0.0-20190923180330-3b6373338c9b/go.mod h1:6rzn+JTr7+WYS2E1TExP4gByoABxMznR6y2SnUIkmxk= github.com/openshift/origin v0.0.0-20160503220234-8f127d736703/go.mod h1:0Rox5r9C8aQn6j1oAOQ0c1uC86mYbUFObzjBRvUKHII= @@ -773,7 +628,6 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 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/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= @@ -788,7 +642,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= 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/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -833,12 +686,9 @@ github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oA github.com/prometheus/prometheus v1.8.2-0.20200110114423-1e64d757f711/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI= github.com/prometheus/prometheus v2.3.2+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/robfig/cron v0.0.0-20170526150127-736158dc09e1/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -847,12 +697,9 @@ github.com/rogpeppe/go-internal v1.5.0 h1:Usqs0/lDK/NqTkvrmKSwA/3XkZAs7ZAW/eLeQ2 github.com/rogpeppe/go-internal v1.5.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rubenv/sql-migrate v0.0.0-20191025130928-9355dd04f4b3/go.mod h1:WS0rl9eEliYI8DPnr3TOwz4439pay+qNgzJoVya/DmY= -github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= -github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/samuel/go-zookeeper v0.0.0-20190810000440-0ceca61e4d75/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -861,23 +708,14 @@ github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 h1:rq2/kILQnPtq5oL4+IAjgVOjh5e2yj2aaCYi7squEvI= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -888,48 +726,37 @@ github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUr github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= 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/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/thanos-io/thanos v0.11.0/go.mod h1:N/Yes7J68KqvmY+xM6J5CJqEvWIvKSR5sqGtmuD6wDc= -github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -937,19 +764,9 @@ github.com/uber/jaeger-client-go v2.20.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMW github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= -github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= @@ -998,21 +815,14 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190424203555-c05e17bb3b2d/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1044,6 +854,7 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -1053,14 +864,11 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/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-20180911220305-26e67e76b6c3/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-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181108082009-03003ca0c849/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1070,11 +878,9 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/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-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= @@ -1100,7 +906,6 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= 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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1108,7 +913,6 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1119,12 +923,9 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190122071731-054c452bb702/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1133,7 +934,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190425145619-16072639606e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190426135247-a129542de9ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1159,7 +959,6 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180805044716-cb6730876b98/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1170,32 +969,23 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425222832-ad9eeb80039a/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -1207,7 +997,6 @@ golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDq golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190918214516-5a1a30219888/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1240,7 +1029,6 @@ google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+ google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1293,7 +1081,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= gopkg.in/imdario/mergo.v0 v0.3.7/go.mod h1:9qPP6AGrlC1G2PTNXko614FwGZvorN7MiBU0Eppok+U= @@ -1301,14 +1088,12 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473/go.mod h1:N1eN2tsCx0Ydtgjl4cqmbRCsY4/+z4cYDeqwZTk6zog= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/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/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.1.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1320,10 +1105,7 @@ gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= helm.sh/helm/v3 v3.1.0/go.mod h1:WYsFJuMASa/4XUqLyv54s0U/f3mlAaRErGmyy4z921g= helm.sh/helm/v3 v3.1.2/go.mod h1:WYsFJuMASa/4XUqLyv54s0U/f3mlAaRErGmyy4z921g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1331,7 +1113,6 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= @@ -1346,16 +1127,11 @@ k8s.io/autoscaler v0.0.0-20190607113959-1b4f1855cb8e/go.mod h1:QEXezc9uKPT91dwqh k8s.io/cli-runtime v0.17.5/go.mod h1:MgU0RZdbJoDThMLacP4ik4W7qpI0wOf2uiMyzVvB/BE= k8s.io/client-go v0.17.5 h1:Sm/9AQ415xPAX42JLKbJZnreXFgD2rVfDUDwOTm0gzA= k8s.io/client-go v0.17.5/go.mod h1:S8uZpBpjJJdEH/fEyxcqg7Rn0P5jH+ilkgBHjriSmNo= -k8s.io/cloud-provider v0.17.5/go.mod h1:0c++pXLaTXm0HzIh9RSZ0z7P7+Tlk7j4IMOsFFb/Y1o= -k8s.io/cluster-bootstrap v0.17.5/go.mod h1:jKpZ209mo/1MLNuwzkbj4B62JBgsY4kZ1Aj+JyQcarg= k8s.io/code-generator v0.17.6-beta.0/go.mod h1:qdiSCSTKtS+3WtPelj2h57fylSQcPUlhMVm+TD9Dvqc= k8s.io/component-base v0.17.5/go.mod h1:cZQAW1AUbBjD1lh+e/krbiIpqGz6fipI+vHslOBbuHE= -k8s.io/cri-api v0.17.7-rc.0/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/csi-translation-lib v0.17.5/go.mod h1:8DHduJ0h+9KT32JIRQkafmpDIfCKgMfnB3bQNVwoydw= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/helm v2.16.3+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= @@ -1364,24 +1140,14 @@ k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/kube-aggregator v0.17.5/go.mod h1:J7vHaOF1VmPbX76YCPAS6bwqTNedHFdISm0/kuUQzJs= -k8s.io/kube-controller-manager v0.17.5/go.mod h1:TN+e1LARup+dgebIiCszTy5mVxMnrrssk175MA9Rqv0= k8s.io/kube-openapi v0.0.0-20190320154901-5e45bb682580/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d h1:jocF7XFucw2pEiv2wS7wk2FRFCjDFGV1oa4TMs0SAT0= k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= -k8s.io/kube-proxy v0.17.5/go.mod h1:nzZOHUUxN05KH7pRRG1rqTc6hVyI6iO1TRHO0F15u64= -k8s.io/kube-scheduler v0.17.5/go.mod h1:gIsdloj6ReI6h4J5YAgRsD3ZQSqjWGM7mDrapzCURpE= k8s.io/kube-state-metrics v1.7.2/go.mod h1:U2Y6DRi07sS85rmVPmBFlmv+2peBcL8IWGjM+IjYA/E= k8s.io/kubectl v0.17.5/go.mod h1:S88pLHOv131dkFt+zrUKmIqdxZE/ZtvskM6cmsSZSS4= -k8s.io/kubelet v0.17.5/go.mod h1:X/sLoRojOT5elpfUKw+Qy1+3JuhLBqGvmTYElopzIgU= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/kubernetes v1.17.5 h1:ZPZDhS4wRIPSKahglFHK5Q8wcUH/Q2QE5AbopkuLYyU= -k8s.io/kubernetes v1.17.5/go.mod h1:4A7Bm7SHrj2SCb9vxMBil1wu2uJy3k1zSjoD43SS8Zg= -k8s.io/legacy-cloud-providers v0.17.5/go.mod h1:atyAqbM6a6J06102HbPDJaLVFSKaPC7b3QdrhEyxHEQ= k8s.io/metrics v0.17.5/go.mod h1:s9EezeDItnjT9MJkujZD3eDp3Z5wNkZWZ/koT9HTq0I= -k8s.io/repo-infra v0.0.1-alpha.1/go.mod h1:wO1t9WaB99V80ljbeENTnayuEEwNZt7gECYh/CEyOJ8= -k8s.io/sample-apiserver v0.17.5/go.mod h1:msePoMBif/i9TJTpV1nPyChd5lRXcUUz0f83E5XGhWQ= -k8s.io/system-validators v1.0.4/go.mod h1:HgSgTg4NAGNoYYjKsUyk52gdNi2PVDswQ9Iyn66R7NI= k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -1392,9 +1158,6 @@ 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= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= sigs.k8s.io/controller-runtime v0.5.2 h1:pyXbUfoTo+HA3jeIfr0vgi+1WtmNh0CwlcnQGLXwsSw= @@ -1406,5 +1169,4 @@ sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:w sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= From 2d44c1eab9d1d2f010463944257bf5a2440fcdfc Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Mon, 3 Aug 2020 11:28:15 +0530 Subject: [PATCH 21/23] fixed readme Signed-off-by: prabhaker24 --- charts/zookeeper/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/zookeeper/README.md b/charts/zookeeper/README.md index 7362a4aed..8166e9ff2 100644 --- a/charts/zookeeper/README.md +++ b/charts/zookeeper/README.md @@ -62,6 +62,6 @@ The following table lists the configurable parameters of the Zookeeper chart and | `storageType` | Type of storage that can be used it can take either ephemeral or persistence as value | `persistence` | | `persistence.reclaimPolicy` | Reclaim policy for persistent volumes | `Delete` | | `persistence.storageClassName` | Storage class for persistent volumes | `standard` | -| `storage.persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | +| `persistence.volumeSize` | Size of the volume requested for persistent volumes | `20Gi` | | `ephemeral.emptydirvolumesource.medium` | What type of storage medium should back the directory. | `""` | | `ephemeral.emptydirvolumesource.sizeLimit` | Total amount of local storage required for the EmptyDir volume. | | From 6b4259f5b285cfdfd7019e21e4e1646cf1331937 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Thu, 13 Aug 2020 23:48:03 +0530 Subject: [PATCH 22/23] addressed comments Signed-off-by: prabhaker24 --- README.md | 4 +-- ...zookeeper_v1beta1_zookeepercluster_cr.yaml | 0 ...zookeeper_v1beta1_zookeepercluster_cr.yaml | 17 +++++++++++ .../v1beta1/zookeepercluster_types.go | 30 ++++++++++--------- 4 files changed, 35 insertions(+), 16 deletions(-) rename deploy/{crds => cr/ECS}/zookeeper_v1beta1_zookeepercluster_cr.yaml (100%) create mode 100644 deploy/cr/pravega/zookeeper_v1beta1_zookeepercluster_cr.yaml diff --git a/README.md b/README.md index 1d83022f3..358396691 100644 --- a/README.md +++ b/README.md @@ -182,9 +182,9 @@ $ kubectl get zk NAME REPLICAS READY REPLICAS VERSION DESIRED VERSION INTERNAL ENDPOINT EXTERNAL ENDPOINT AGE example 3 3 0.2.7 0.2.7 10.100.200.18:2181 N/A 94s ``` ->Note: User should only provide either persistence or ephemeral in the spec, if none of the values is specified default is persistence +>Note: User should only provide value for either the field persistence or ephemeral in the spec if none of the values is specified default is persistence ->Note: We don't guarantee Data Recovery in case of Ephemeral Storage, so the users should keep in mind that in the case of zookeeper pod restarts user might lose the data. +>Note: In case of ephemeral storage, the cluster may not be able to come back up if more than quorum number of nodes are restarted simultaneously. ### Deploy a sample Zookeeper cluster with Istio Create a Yaml file called `zk-with-istio.yaml` with the following content to install a 3-node Zookeeper cluster. diff --git a/deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml b/deploy/cr/ECS/zookeeper_v1beta1_zookeepercluster_cr.yaml similarity index 100% rename from deploy/crds/zookeeper_v1beta1_zookeepercluster_cr.yaml rename to deploy/cr/ECS/zookeeper_v1beta1_zookeepercluster_cr.yaml diff --git a/deploy/cr/pravega/zookeeper_v1beta1_zookeepercluster_cr.yaml b/deploy/cr/pravega/zookeeper_v1beta1_zookeepercluster_cr.yaml new file mode 100644 index 000000000..be0dafdde --- /dev/null +++ b/deploy/cr/pravega/zookeeper_v1beta1_zookeepercluster_cr.yaml @@ -0,0 +1,17 @@ +apiVersion: zookeeper.pravega.io/v1beta1 +kind: ZookeeperCluster +metadata: + name: zookeeper +spec: + replicas: 3 + image: + repository: pravega/zookeeper + tag: 0.2.8 + storageType: persistence + persistence: + reclaimPolicy: Delete + spec: + storageClassName: "standard" + resources: + requests: + storage: 20Gi diff --git a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go index 7b3eafaf4..51404a5dd 100644 --- a/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go +++ b/pkg/apis/zookeeper/v1beta1/zookeepercluster_types.go @@ -164,19 +164,22 @@ func (s *ZookeeperClusterSpec) withDefaults(z *ZookeeperCluster) (changed bool) if s.Pod.withDefaults(z) { changed = true } - if s.Persistence == nil && !strings.EqualFold(s.StorageType, "ephemeral") { - s.StorageType = "persistence" - s.Persistence = &Persistence{} - changed = true - } - if strings.EqualFold(s.StorageType, "ephemeral") && s.Ephemeral == nil { - s.Ephemeral = &Ephemeral{} - s.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} - changed = true - } - if !strings.EqualFold(s.StorageType, "ephemeral") && s.Persistence != nil && s.Persistence.withDefaults() { - s.StorageType = "persistence" - changed = true + if strings.EqualFold(s.StorageType, "ephemeral") { + if s.Ephemeral == nil { + s.Ephemeral = &Ephemeral{} + s.Ephemeral.EmptyDirVolumeSource = v1.EmptyDirVolumeSource{} + changed = true + } + } else { + if s.Persistence == nil { + s.StorageType = "persistence" + s.Persistence = &Persistence{} + changed = true + } + if s.Persistence.withDefaults() { + s.StorageType = "persistence" + changed = true + } } return changed } @@ -420,7 +423,6 @@ func (p *Persistence) withDefaults() (changed bool) { changed = true p.VolumeReclaimPolicy = VolumeReclaimPolicyRetain } - p.PersistentVolumeClaimSpec.AccessModes = []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, } From 1db7f350cb48e6107e4b3037d5cb0c5c1a446e17 Mon Sep 17 00:00:00 2001 From: prabhaker24 Date: Fri, 14 Aug 2020 09:59:33 +0530 Subject: [PATCH 23/23] addressed comment Signed-off-by: prabhaker24 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 358396691..78377a60c 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,8 @@ example 3 3 0.2.7 0.2.7 10.100.200.18 >Note: In case of ephemeral storage, the cluster may not be able to come back up if more than quorum number of nodes are restarted simultaneously. +>Note: In case of ephemeral storage, there will be loss of data when the node gets restarted. + ### Deploy a sample Zookeeper cluster with Istio Create a Yaml file called `zk-with-istio.yaml` with the following content to install a 3-node Zookeeper cluster.