Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
feat(shipyard-controller): Subscribe to events using Jetstream (#6834)
Browse files Browse the repository at this point in the history
* feat: Upgrade Nats dependency to 0.13.0

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* added nats receiver to shipyard controller

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* subscribe shipyard controller via jetstream

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* reduce cognitive complexity

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* reduce cognitive complexity

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* trigger build

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* fix warnings

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* added integration test for zero downtime

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* disable startupProbe for nats because of openshift incompatibility

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* revert accidental change

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt integration tests

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* fixed merge conflicts

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt tests

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt tests

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* clean up distributor env vars in installer chart

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* pr feedback

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* fix self healing test

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt default nats URL in distributor

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt default nats URL in distributor

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* cleanup

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* delete duplicate value for nats URL

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt self healing test

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* adapt test

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* debug self healing test

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* added delay after deploying the unleash service

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>

* reenable tests

Signed-off-by: Florian Bacher <florian.bacher@dynatrace.com>
  • Loading branch information
bacherfl committed Feb 22, 2022
1 parent 3ccbd77 commit 753547b
Show file tree
Hide file tree
Showing 44 changed files with 1,038 additions and 77 deletions.
2 changes: 1 addition & 1 deletion api/deploy/service.yaml
Expand Up @@ -78,7 +78,7 @@ spec:
protocol: TCP
env:
- name: PUBSUB_URL
value: nats://keptn-nats-cluster
value: nats://keptn-nats
- name: VERSION
valueFrom:
fieldRef:
Expand Down
2 changes: 1 addition & 1 deletion approval-service/deploy/service.yaml
Expand Up @@ -57,7 +57,7 @@ spec:
cpu: "100m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.approval.>'
- name: PUBSUB_RECIPIENT
Expand Down
4 changes: 2 additions & 2 deletions distributor/README.md
Expand Up @@ -11,7 +11,7 @@ Thus, each service has its own distributor that is configured by the two environ
- `HTTP_POLLING_INTERVAL` - Interval (in seconds) in which the distributor will check for new triggered events on the Keptn API. default = `10`
- `EVENT_FORWARDING_PATH` - Path on which the distributor will listen for incoming events from its execution plane service. default = `/event`
- `HTTP_SSL_VERIFY` - Determines whether the distributor should check the validity of SSL certificates when sending requests to a Keptn API endpoint via HTTPS. default = `true`
- `PUBSUB_URL` - The URL of the nats cluster the distributor should connect to when the distributor is running within the Keptn cluster. default = `nats://keptn-nats-cluster`
- `PUBSUB_URL` - The URL of the nats cluster the distributor should connect to when the distributor is running within the Keptn cluster. default = `nats://keptn-nats`
- `PUBSUB_TOPIC` - Comma separated list of topics (i.e. event types) the distributor should listen to (see https://github.com/keptn/keptn/blob/master/specification/cloudevents.md for details). When running within the Keptn cluster, it is possible to use NATS [Subject hierarchies](https://nats-io.github.io/docs/developer/concepts/subjects.html#matching-a-single-token). When running outside of the cluster (polling events via HTTP), wildcards can not be used. In this case, each specific topic has to be included in the list.
- `PUBSUB_RECIPIENT` - Hostname of the execution plane service the distributor should forward incoming CloudEvents to. default = `http://127.0.0.1`
- `PUBSUB_RECIPIENT_PORT` - Port of the execution plane service the distributor should forward incoming CloudEvents to. default = `8080`
Expand Down Expand Up @@ -146,7 +146,7 @@ spec:
cpu: "500m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.internal.event.some-event'
- name: PUBSUB_RECIPIENT
Expand Down
2 changes: 1 addition & 1 deletion distributor/deploy/distributor.yaml
Expand Up @@ -40,7 +40,7 @@ spec:
cpu: "100m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.get-action.triggered'
- name: PUBSUB_RECIPIENT
Expand Down
2 changes: 1 addition & 1 deletion distributor/pkg/config/envconfig.go
Expand Up @@ -22,7 +22,7 @@ type EnvConfig struct {
HTTPPollingInterval string `envconfig:"HTTP_POLLING_INTERVAL" default:"10"`
EventForwardingPath string `envconfig:"EVENT_FORWARDING_PATH" default:"/event"`
VerifySSL bool `envconfig:"HTTP_SSL_VERIFY" default:"true"`
PubSubURL string `envconfig:"PUBSUB_URL" default:"nats://keptn-nats-cluster"`
PubSubURL string `envconfig:"PUBSUB_URL" default:"nats://keptn-nats"`
PubSubTopic string `envconfig:"PUBSUB_TOPIC" default:""`
PubSubRecipient string `envconfig:"PUBSUB_RECIPIENT" default:"http://127.0.0.1"`
PubSubRecipientPort string `envconfig:"PUBSUB_RECIPIENT_PORT" default:"8080"`
Expand Down
14 changes: 3 additions & 11 deletions distributor/pkg/lib/events/nats_connection_handler.go
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"github.com/nats-io/nats.go"
logger "github.com/sirupsen/logrus"
"reflect"
"sort"
"sync"
)
Expand Down Expand Up @@ -97,16 +98,7 @@ func (nch *NatsConnectionHandler) QueueSubscribeToTopics(topics []string, queueG
}

func IsEqual(a1 []string, a2 []string) bool {
sort.Strings(a1)
sort.Strings(a2)
if len(a1) == len(a2) {
for i, v := range a1 {
if v != a2[i] {
return false
}
}
} else {
return false
}
return true
sort.Strings(a1)
return reflect.DeepEqual(a1, a2)
}
36 changes: 36 additions & 0 deletions distributor/pkg/lib/events/nats_connection_handler_test.go
Expand Up @@ -229,3 +229,39 @@ func Test_MultipleSubscribersInAGroup_OnlyOneReceivesMessage(t *testing.T) {
// assert that only one of the two subscriber has processed/received a message
assert.Equal(t, 1, totalNumberOfDeliveries)
}

func TestIsEqual(t *testing.T) {
type args struct {
a1 []string
a2 []string
}
tests := []struct {
name string
args args
want bool
}{
{
name: "same order",
args: args{
a1: []string{"a", "b"},
a2: []string{"a", "b"},
},
want: true,
},
{
name: "different order",
args: args{
a1: []string{"a", "b"},
a2: []string{"b", "a"},
},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := IsEqual(tt.args.a1, tt.args.a2); got != tt.want {
t.Errorf("IsEqual() = %v, want %v", got, tt.want)
}
})
}
}
2 changes: 1 addition & 1 deletion installer/manifests/keptn/charts/control-plane/Chart.yaml
Expand Up @@ -29,5 +29,5 @@ dependencies:
condition: mongo.enabled
alias: mongo
- name: nats
version: 0.7.5
version: 0.13.0
repository: https://nats-io.github.io/k8s/helm/charts/
Expand Up @@ -85,6 +85,8 @@ lifecycle:


{{- define "control-plane.dist.common.env.vars" -}}
- name: PUBSUB_URL
value: 'nats://keptn-nats'
- name: VERSION
valueFrom:
fieldRef:
Expand Down
Expand Up @@ -97,8 +97,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
{{- include "control-plane.dist.common.env.vars" . | nindent 12 }}
securityContext:
runAsNonRoot: true
Expand Down
Expand Up @@ -82,8 +82,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.approval.>'
- name: PUBSUB_RECIPIENT
Expand Down
Expand Up @@ -86,8 +86,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 8 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.get-action.triggered'
- name: PUBSUB_RECIPIENT
Expand Down
Expand Up @@ -104,8 +104,6 @@ spec:
env:
- name: PUBSUB_IMPL
value: nats
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
Expand Down
Expand Up @@ -91,8 +91,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.evaluation.triggered,sh.keptn.event.get-sli.finished,sh.keptn.event.monitoring.configure'
- name: PUBSUB_RECIPIENT
Expand Down
Expand Up @@ -113,16 +113,7 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
value: '127.0.0.1'
- name: PUBSUB_RECIPIENT_PATH
value: '/v1/event'
- name: DISABLE_REGISTRATION
value: "true"
{{- include "control-plane.dist.common.env.vars" . | nindent 12 }}
securityContext:
runAsNonRoot: true
runAsUser: 65532
Expand Down
Expand Up @@ -103,8 +103,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
Expand Down
Expand Up @@ -87,8 +87,6 @@ spec:
- containerPort: 8080
{{- include "keptn.distributor.resources" . | nindent 10 }}
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
- name: PUBSUB_TOPIC
value: ''
- name: PUBSUB_RECIPIENT
Expand Down
23 changes: 21 additions & 2 deletions installer/manifests/keptn/charts/control-plane/values.yaml
Expand Up @@ -21,8 +21,27 @@ prefixPath: ""
keptnSpecVersion: latest

nats:
nameOverride: keptn-nats-cluster
nats.cluster.replicas: 3
nameOverride: keptn-nats
fullnameOverride: keptn-nats
cluster:
replicas: 3
name: nats
nats:
healthcheck:
startup:
enabled: false
jetstream:
enabled: true

memStorage:
enabled: true
size: 2Gi

fileStorage:
enabled: true
size: 5Gi
storageDirectory: /data/
storageClassName: ""

natsbox:
enabled: false
Expand Down
2 changes: 1 addition & 1 deletion lighthouse-service/deploy/service.yaml
Expand Up @@ -77,7 +77,7 @@ spec:
cpu: "100m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.event.evaluation.triggered,sh.keptn.event.get-sli.finished,sh.keptn.event.monitoring.configure'
- name: PUBSUB_RECIPIENT
Expand Down
2 changes: 1 addition & 1 deletion mongodb-datastore/deploy/mongodb-datastore.yaml
Expand Up @@ -75,7 +75,7 @@ spec:
- name: PUBSUB_IMPL
value: nats
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
Expand Down
2 changes: 1 addition & 1 deletion remediation-service/deploy/service.yaml
Expand Up @@ -60,7 +60,7 @@ spec:
cpu: "100m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
Expand Down
2 changes: 1 addition & 1 deletion shipyard-controller/deploy/service.yaml
Expand Up @@ -103,7 +103,7 @@ spec:
cpu: "100m"
env:
- name: PUBSUB_URL
value: 'nats://keptn-nats-cluster'
value: 'nats://keptn-nats'
- name: PUBSUB_TOPIC
value: 'sh.keptn.>'
- name: PUBSUB_RECIPIENT
Expand Down
3 changes: 2 additions & 1 deletion shipyard-controller/go.mod
Expand Up @@ -12,14 +12,15 @@ require (
github.com/jeremywohl/flatten v1.0.1
github.com/keptn/go-utils v0.13.1-0.20220221112829-908349438082
github.com/mitchellh/copystructure v1.2.0
github.com/nats-io/nats-server/v2 v2.7.2 // indirect
github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d
github.com/sirupsen/logrus v1.8.1
github.com/stretchr/testify v1.7.0
github.com/swaggo/swag v1.7.9
github.com/tryvium-travels/memongo v0.4.0
go.mongodb.org/mongo-driver v1.8.3
go.uber.org/zap v1.13.0 // indirect
golang.org/x/net v0.0.0-20220111093109-d55c255bac03 // indirect
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
k8s.io/api v0.22.6
k8s.io/apimachinery v0.22.6
Expand Down
27 changes: 24 additions & 3 deletions shipyard-controller/go.sum
Expand Up @@ -175,8 +175,9 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
Expand Down Expand Up @@ -238,6 +239,7 @@ github.com/keptn/go-utils v0.13.1-0.20220221112829-908349438082/go.mod h1:yJM7pn
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
Expand All @@ -259,6 +261,8 @@ github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsI
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
Expand All @@ -274,6 +278,16 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 h1:vU9tpM3apjYlLLeY23zRWJ9Zktr5jp+mloR942LEOpY=
github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k=
github.com/nats-io/nats-server/v2 v2.7.2 h1:+LEN8m0+jdCkiGc884WnDuxR+qj80/5arj+szKuRpRI=
github.com/nats-io/nats-server/v2 v2.7.2/go.mod h1:tckmrt0M6bVaDT3kmh9UrIq/CBOBBse+TpXQi5ldaa8=
github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d h1:GRSmEJutHkdoxKsRypP575IIdoXe7Bm6yHQF6GcDBnA=
github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
Expand Down Expand Up @@ -411,8 +425,10 @@ golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce h1:Roh6XWxHFKrPgC/EQhVubSAGQ6Ozk6IdxHSzt1mR0EI=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -469,8 +485,10 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220111093109-d55c255bac03 h1:0FB83qp0AzVJm+0wcIlauAjJ+tNdh7jLuacRYCIVv7s=
golang.org/x/net v0.0.0-20220111093109-d55c255bac03/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
Expand All @@ -493,6 +511,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
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=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down Expand Up @@ -526,9 +545,11 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY=
golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
Expand Down

0 comments on commit 753547b

Please sign in to comment.