Skip to content

Commit

Permalink
Merge pull request #12 from lidizheng/generic-csds
Browse files Browse the repository at this point in the history
Adopt the new CSDS standard
  • Loading branch information
lidizheng authored Oct 25, 2021
2 parents 27e93d1 + 9c0ae85 commit 6b9f780
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 94 deletions.
178 changes: 110 additions & 68 deletions cmd/xds.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,25 @@ func xdsConfigCommandRunWithError(cmd *cobra.Command, args []string) error {
}
}
// Filter the CSDS output
for _, xdsConfig := range clientStatus.Config[0].XdsConfig {
for _, genericXdsConfig := range clientStatus.Config[0].GenericXdsConfigs {
var printSubject proto.Message
switch xdsConfig.PerXdsConfig.(type) {
case *csdspb.PerXdsConfig_ListenerConfig:
tokens := strings.Split(genericXdsConfig.TypeUrl, ".")
switch tokens[len(tokens)-1] {
case "Listener":
if wantLDS {
printSubject = xdsConfig.GetListenerConfig()
printSubject = genericXdsConfig.GetXdsConfig()
}
case *csdspb.PerXdsConfig_RouteConfig:
case "RouteConfiguration":
if wantRDS {
printSubject = xdsConfig.GetRouteConfig()
printSubject = genericXdsConfig.GetXdsConfig()
}
case *csdspb.PerXdsConfig_ClusterConfig:
case "Cluster":
if wantCDS {
printSubject = xdsConfig.GetClusterConfig()
printSubject = genericXdsConfig.GetXdsConfig()
}
case *csdspb.PerXdsConfig_EndpointConfig:
case "ClusterLoadAssignment":
if wantEDS {
printSubject = xdsConfig.GetEndpointConfig()
printSubject = genericXdsConfig.GetXdsConfig()
}
}
if printSubject != nil {
Expand All @@ -110,6 +111,35 @@ func xdsConfigCommandRunWithError(cmd *cobra.Command, args []string) error {
}
}
}
if len(clientStatus.Config[0].GenericXdsConfigs) == 0 {
for _, xdsConfig := range clientStatus.Config[0].XdsConfig {
var printSubject proto.Message
switch xdsConfig.PerXdsConfig.(type) {
case *csdspb.PerXdsConfig_ListenerConfig:
if wantLDS {
printSubject = xdsConfig.GetListenerConfig()
}
case *csdspb.PerXdsConfig_RouteConfig:
if wantRDS {
printSubject = xdsConfig.GetRouteConfig()
}
case *csdspb.PerXdsConfig_ClusterConfig:
if wantCDS {
printSubject = xdsConfig.GetClusterConfig()
}
case *csdspb.PerXdsConfig_EndpointConfig:
if wantEDS {
printSubject = xdsConfig.GetEndpointConfig()
}
}
if printSubject != nil {
err := printProtoBufMessageAsJSON(printSubject)
if err != nil {
return fmt.Errorf("Failed to print xDS config: %v", err)
}
}
}
}
return nil
}

Expand Down Expand Up @@ -147,71 +177,83 @@ func xdsStatusCommandRunWithError(cmd *cobra.Command, args []string) error {

fmt.Fprintln(w, "Name\tStatus\tVersion\tType\tLastUpdated")
config := clientStatus.Config[0]
for _, xdsConfig := range config.XdsConfig {
switch xdsConfig.PerXdsConfig.(type) {
case *csdspb.PerXdsConfig_ListenerConfig:
for _, dynamicListener := range xdsConfig.GetListenerConfig().DynamicListeners {
entry := xdsResourceStatusEntry{
Name: dynamicListener.Name,
Status: dynamicListener.ClientStatus,
}
if state := dynamicListener.GetActiveState(); state != nil {
entry.Version = state.VersionInfo
entry.Type = state.Listener.TypeUrl
entry.LastUpdated = state.LastUpdated
}
printStatusEntry(&entry)
}
case *csdspb.PerXdsConfig_RouteConfig:
for _, dynamicRouteConfig := range xdsConfig.GetRouteConfig().DynamicRouteConfigs {
entry := xdsResourceStatusEntry{
Status: dynamicRouteConfig.ClientStatus,
Version: dynamicRouteConfig.VersionInfo,
Type: dynamicRouteConfig.RouteConfig.TypeUrl,
LastUpdated: dynamicRouteConfig.LastUpdated,
}
if packed := dynamicRouteConfig.GetRouteConfig(); packed != nil {
var routeConfig routepb.RouteConfiguration
if err := ptypes.UnmarshalAny(packed, &routeConfig); err != nil {
return err
for _, genericXdsConfig := range config.GenericXdsConfigs {
entry := xdsResourceStatusEntry{
Name: genericXdsConfig.Name,
Status: genericXdsConfig.ClientStatus,
Version: genericXdsConfig.VersionInfo,
Type: genericXdsConfig.TypeUrl,
LastUpdated: genericXdsConfig.LastUpdated,
}
printStatusEntry(&entry)
}
if len(config.GenericXdsConfigs) == 0 {
for _, xdsConfig := range config.XdsConfig {
switch xdsConfig.PerXdsConfig.(type) {
case *csdspb.PerXdsConfig_ListenerConfig:
for _, dynamicListener := range xdsConfig.GetListenerConfig().DynamicListeners {
entry := xdsResourceStatusEntry{
Name: dynamicListener.Name,
Status: dynamicListener.ClientStatus,
}
entry.Name = routeConfig.Name
}
printStatusEntry(&entry)
}
case *csdspb.PerXdsConfig_ClusterConfig:
for _, dynamicCluster := range xdsConfig.GetClusterConfig().DynamicActiveClusters {
entry := xdsResourceStatusEntry{
Status: dynamicCluster.ClientStatus,
Version: dynamicCluster.VersionInfo,
Type: dynamicCluster.Cluster.TypeUrl,
LastUpdated: dynamicCluster.LastUpdated,
if state := dynamicListener.GetActiveState(); state != nil {
entry.Version = state.VersionInfo
entry.Type = state.Listener.TypeUrl
entry.LastUpdated = state.LastUpdated
}
printStatusEntry(&entry)
}
if packed := dynamicCluster.GetCluster(); packed != nil {
var cluster clusterpb.Cluster
if err := ptypes.UnmarshalAny(packed, &cluster); err != nil {
return err
case *csdspb.PerXdsConfig_RouteConfig:
for _, dynamicRouteConfig := range xdsConfig.GetRouteConfig().DynamicRouteConfigs {
entry := xdsResourceStatusEntry{
Status: dynamicRouteConfig.ClientStatus,
Version: dynamicRouteConfig.VersionInfo,
Type: dynamicRouteConfig.RouteConfig.TypeUrl,
LastUpdated: dynamicRouteConfig.LastUpdated,
}
entry.Name = cluster.Name
if packed := dynamicRouteConfig.GetRouteConfig(); packed != nil {
var routeConfig routepb.RouteConfiguration
if err := ptypes.UnmarshalAny(packed, &routeConfig); err != nil {
return err
}
entry.Name = routeConfig.Name
}
printStatusEntry(&entry)
}
printStatusEntry(&entry)
}
case *csdspb.PerXdsConfig_EndpointConfig:
for _, dynamicEndpoint := range xdsConfig.GetEndpointConfig().GetDynamicEndpointConfigs() {
entry := xdsResourceStatusEntry{
Status: dynamicEndpoint.ClientStatus,
Version: dynamicEndpoint.VersionInfo,
Type: dynamicEndpoint.EndpointConfig.TypeUrl,
LastUpdated: dynamicEndpoint.LastUpdated,
case *csdspb.PerXdsConfig_ClusterConfig:
for _, dynamicCluster := range xdsConfig.GetClusterConfig().DynamicActiveClusters {
entry := xdsResourceStatusEntry{
Status: dynamicCluster.ClientStatus,
Version: dynamicCluster.VersionInfo,
Type: dynamicCluster.Cluster.TypeUrl,
LastUpdated: dynamicCluster.LastUpdated,
}
if packed := dynamicCluster.GetCluster(); packed != nil {
var cluster clusterpb.Cluster
if err := ptypes.UnmarshalAny(packed, &cluster); err != nil {
return err
}
entry.Name = cluster.Name
}
printStatusEntry(&entry)
}
if packed := dynamicEndpoint.GetEndpointConfig(); packed != nil {
var endpoint endpointpb.ClusterLoadAssignment
if err := ptypes.UnmarshalAny(packed, &endpoint); err != nil {
return err
case *csdspb.PerXdsConfig_EndpointConfig:
for _, dynamicEndpoint := range xdsConfig.GetEndpointConfig().GetDynamicEndpointConfigs() {
entry := xdsResourceStatusEntry{
Status: dynamicEndpoint.ClientStatus,
Version: dynamicEndpoint.VersionInfo,
Type: dynamicEndpoint.EndpointConfig.TypeUrl,
LastUpdated: dynamicEndpoint.LastUpdated,
}
if packed := dynamicEndpoint.GetEndpointConfig(); packed != nil {
var endpoint endpointpb.ClusterLoadAssignment
if err := ptypes.UnmarshalAny(packed, &endpoint); err != nil {
return err
}
entry.Name = endpoint.ClusterName
}
entry.Name = endpoint.ClusterName
printStatusEntry(&entry)
}
printStatusEntry(&entry)
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ go 1.15

require (
github.com/dustin/go-humanize v1.0.0
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0
github.com/envoyproxy/go-control-plane v0.9.10-0.20211021050850-71270e033f33
github.com/golang/protobuf v1.5.2
github.com/spf13/cobra v1.1.1
google.golang.org/grpc v1.40.0
google.golang.org/grpc v1.41.0
google.golang.org/grpc/examples v0.0.0-20210921183251-616977cc7974
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.4.0
Expand Down
27 changes: 18 additions & 9 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,13 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm
github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe h1:QJDJubh0OEcpeGjC7/8uF9tt4e39U/Ya1uyK+itnNPQ=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
Expand All @@ -48,8 +50,9 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0 h1:dulLQAYQFYtG5MTplgNGHWuV2D+OBD+Z8lmDBmbLg+s=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.9.10-0.20211021050850-71270e033f33 h1:tGCuuPBTFBR5Nw01p21JUalgb82OLoJh76heZeRuy0E=
github.com/envoyproxy/go-control-plane v0.9.10-0.20211021050850-71270e033f33/go.mod h1:utjuSZ1DPHuYf0cTZ8WEsaQf5bwmT1TZiWaQjpJtBF0=
github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
Expand Down Expand Up @@ -200,6 +203,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
Expand Down Expand Up @@ -248,8 +252,9 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -272,12 +277,15 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Expand Down Expand Up @@ -332,8 +340,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E=
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
google.golang.org/grpc/examples v0.0.0-20210921183251-616977cc7974 h1:sEqnwMb62HDRbqNwDmoyAloFz8FL+LBcNXYl2S5wecU=
google.golang.org/grpc/examples v0.0.0-20210921183251-616977cc7974/go.mod h1:gID3PKrg7pWKntu9Ss6zTLJ0ttC0X9IHgREOCZwbCVU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
Expand Down Expand Up @@ -365,6 +373,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
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=
Expand Down
Loading

0 comments on commit 6b9f780

Please sign in to comment.