Skip to content

Commit

Permalink
shuffle_ips support, v1.2.0 go1.21
Browse files Browse the repository at this point in the history
  • Loading branch information
kinjelom committed Oct 18, 2024
1 parent 4dd4cda commit 7bd81f0
Show file tree
Hide file tree
Showing 12 changed files with 171 additions and 85 deletions.
43 changes: 23 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,23 @@ The `recursor` resolves domains using defined IP addresses or resolving other ma

## Config Syntax / Examples

The `recursor` definition:
- `zone` - DNS zone for the recursor
- `verbose` - stdout logs level:
- `0` - minimal
- `1` - middle
- `2` - talkative
- `resolvers` - other DNS servers:
- *map-key/id*: name of resolver, `default` overrides system default resolver
- `urls`: list of URL addresses, example: `udp://127.0.0.1:53` (system default is represented by `://default`)
- `timeout_ms`: resolver connection timeout in millisecods
- `aliases` - domain aliases:
- *map-key/id*: name of alias, subdomain or `*` if you want the recursor to be a DNS repeater
- `ips`: IP addresses to return as a part of answer
- `hosts`: domains to be resolved so that the IP addresses obtained in this way will be returned as a part of answer
- `resolver_name`: the defined resolver reference, default is... `default` of course :)
- `ttl`: DNS record Time To Live in seconds
The `recursor` configuration includes the following definitions:
- `zone`: The DNS zone for the recursor.
- `verbose`: The logging level for stdout:
- `0`: minimal logging
- `1`: moderate logging
- `2`: detailed logging
- `resolvers`: Other DNS servers to use:
- *map-key/id*: The name of the resolver. The `default` overrides the system's default resolver.
- `urls`: A list of URL addresses, e.g., `udp://127.0.0.1:53` (the system default is represented by `://default`).
- `timeout_ms`: The connection timeout for the resolver, in milliseconds.
- `aliases`: Domain aliases:
- *map-key/id*: The alias name, a subdomain, or `*` if you want the recursor to act as a DNS repeater.
- `ips`: A list of IP addresses to be returned as part of the response.
- `hosts`: Domains that will be resolved, with the resulting IP addresses returned in the response.
- `shuffle_ips`: Default is `false`. If set to `true`, IP addresses will be returned in random order.
- `resolver_name`: The name of the resolver to use. The default is... well, `default`, of course :)
- `ttl`: Time To Live for the DNS record, in seconds.

#### Corefile

Expand All @@ -46,6 +47,7 @@ recursor {
}
alias alias1 {
hosts www.example.org www.example.com
shuffle_ips true
resolver_name dns-c
ttl 11
}
Expand Down Expand Up @@ -86,6 +88,7 @@ recursor {
aliases:
alias1:
hosts: [ www.example.org, www.example.com ]
shuffle_ips: true
resolver_name: dns-c
ttl: 11
alias2:
Expand Down Expand Up @@ -124,6 +127,7 @@ recursor {
"aliases": {
"alias1": {
"hosts": [ "www.example.org", "www.example.com" ],
"shuffle_ips": true,
"resolver_name": "dns-c",
"ttl": 11
},
Expand Down Expand Up @@ -164,25 +168,24 @@ recursor {
### Build It

```bash
#!/usr/bin/env bash
#!/bin/bash eu

set -eux
# Extract coredns source code
tar xzvf coredns.src.tar.gz
pushd coredns
# Add external plugins
go get github.com/kinjelom/coredns-recursor@latest
echo -e "recursor:github.com/kinjelom/coredns-recursor" >> plugin.cfg
grep -q '^recursor:' plugin.cfg || echo -e "recursor:github.com/kinjelom/coredns-recursor" >> plugin.cfg
# Build
go generate
go build
./coredns -plugins
popd
```

### Deployments Ready to Use

- [BOSH Release](https://github.com/kinjelom/coredns-boshrelease)
- [Kubernetes](https://github.com/kinjelom/coredns-k8s)

## Try it

Expand Down
6 changes: 6 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func (rcu recursorCfg) String() string {
type aliasCfg struct {
Hosts []string `json:"hosts" yaml:"hosts"`
Ips []string `json:"ips" yaml:"ips"`
ShuffleIps bool `json:"shuffle_ips" yaml:"shuffle_ips"`
Ttl uint32 `json:"ttl" yaml:"ttl"`
ResolverName string `json:"resolver_name" yaml:"resolver_name"`
}
Expand Down Expand Up @@ -175,6 +176,11 @@ func readAliasCfg(c *caddy.Controller) (aliasCfg, error) {
return cfg, fmt.Errorf("empty hosts list")
}
cfg.Hosts = args
case "shuffle_ips":
if len(args) != 1 {
return cfg, fmt.Errorf("wrong 'shuffle_ips' definition")
}
cfg.ShuffleIps = args[0] == "true"
case "resolver_name":
if len(args) != 1 {
return cfg, fmt.Errorf("wrong 'resolver_name' definition")
Expand Down
9 changes: 6 additions & 3 deletions config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,16 @@ func TestConfig_controller_should_read_inline_caddy(t *testing.T) {
rcu, err := loadCaddyControllerConfig(t, "examples/config1.caddy")
checkRcu(t, err, rcu)
rcu, err = loadCaddyControllerConfig(t, "examples/config2.caddy")
_, found := rcu.Aliases["*"]
assert.Nil(t, err)
_, found := rcu.Aliases["*"]
assert.True(t, found)
rcu, err = loadCaddyControllerConfig(t, "examples/config3.caddy")
_, found = rcu.Aliases["*"]
assert.Nil(t, err)
_, found = rcu.Aliases["*"]
assert.True(t, found)
rcu, err = loadCaddyControllerConfig(t, "examples/config3.caddy")
_, found = rcu.Aliases["x"]
assert.Nil(t, err)
_, found = rcu.Aliases["x"]
assert.False(t, found)
}

Expand Down Expand Up @@ -94,6 +94,7 @@ func checkRcu(t *testing.T, err error, rcu recursorCfg) {
assert.Equal(t, 2, len(a.Hosts), "alias1 hosts len")
assert.Equal(t, "www.example.org", a.Hosts[0], "alias1 hosts[0]")
assert.Equal(t, "www.example.com", a.Hosts[1], "alias1 hosts[1]")
assert.True(t, a.ShuffleIps, "alias1 ips shuffle is on")
assert.Equal(t, uint32(5), a.Ttl, "alias1 ttl")
assert.Equal(t, "resolver_primary", a.ResolverName, "alias1 resolverName")

Expand All @@ -102,6 +103,7 @@ func checkRcu(t *testing.T, err error, rcu recursorCfg) {
assert.Equal(t, "10.1.1.1", a.Ips[0], "alias2 ips[0]")
assert.Equal(t, "10.1.1.2", a.Ips[1], "alias2 ips[1]")
assert.Equal(t, 0, len(a.Hosts), "alias2 hosts len")
assert.False(t, a.ShuffleIps, "alias2 ips shuffle default false")
assert.Equal(t, uint32(0), a.Ttl, "alias2 ttl")
assert.Equal(t, "default", a.ResolverName, "alias2 resolverName")

Expand All @@ -110,6 +112,7 @@ func checkRcu(t *testing.T, err error, rcu recursorCfg) {
assert.Equal(t, 2, len(a.Hosts), "alias3 hosts len")
assert.Equal(t, "www.example.org", a.Hosts[0], "alias3 hosts[0]")
assert.Equal(t, "www.example.com", a.Hosts[1], "alias3 hosts[1]")
assert.False(t, a.ShuffleIps, "alias3 ips shuffle default false")
assert.Equal(t, uint32(15), a.Ttl, "alias3 ttl")
assert.Equal(t, "resolver_secondary", a.ResolverName, "alias3 resolverName")

Expand Down
22 changes: 11 additions & 11 deletions docs/flow.archimate
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<archimate:model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:archimate="http://www.archimatetool.com/archimate" name="coredns-recursor" id="id-4d49dcbc3bfc483f8ffcc65c5813a398" version="4.9.0">
<archimate:model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:archimate="http://www.archimatetool.com/archimate" name="coredns-recursor" id="id-4d49dcbc3bfc483f8ffcc65c5813a398" version="5.0.0">
<folder name="Strategy" id="id-0b500e5e078b4ff6944f2909591db77d" type="strategy"/>
<folder name="Business" id="id-9634e41a16b141ca871f479d32521e16" type="business">
<element xsi:type="archimate:BusinessActor" name="Client" id="id-2e82d3742d6543a69c042b459f9a5661"/>
Expand Down Expand Up @@ -48,7 +48,7 @@
<element xsi:type="archimate:ApplicationProcess" name="dig alias5.demo.svc" id="id-50ea44a7cffc45f49fdb3ca6eb2f7a68"/>
<element xsi:type="archimate:ApplicationComponent" name="system default DNS" id="id-7403cc71add6415198e525bda0299c2d"/>
<element xsi:type="archimate:ApplicationService" name="alias *" id="id-e06d4c293e1540e6919259dca4e421bd">
<documentation> resolver_name default&#xD;
<documentation> resolver_name demo&#xD;
ttl 15</documentation>
</element>
<element xsi:type="archimate:ApplicationComponent" name="demo" id="id-4a8a0c3e9af04259829197dd4d6dfe2e"/>
Expand Down Expand Up @@ -120,7 +120,7 @@
<bendpoint startX="12" startY="68" endX="-96" endY="4"/>
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-046e003024414498bd5d54d0a2a21ecd" archimateElement="id-c474791aa0264c7bacd7d9544018a724">
<child xsi:type="archimate:DiagramObject" id="id-046e003024414498bd5d54d0a2a21ecd" archimateElement="id-c474791aa0264c7bacd7d9544018a724" type="1">
<bounds x="472" y="29" width="425" height="564"/>
<sourceConnection xsi:type="archimate:Connection" id="id-e640ae9ebe874eabb9d9e433c7a7788e" source="id-046e003024414498bd5d54d0a2a21ecd" target="id-dded1d14d8fe4195baff9c6e5cc1130f" archimateRelationship="id-424fb23c4ee645d1a03c2fb7726c3792"/>
<child xsi:type="archimate:DiagramObject" id="id-dded1d14d8fe4195baff9c6e5cc1130f" targetConnections="id-e640ae9ebe874eabb9d9e433c7a7788e" archimateElement="id-c795f89fa1d343ababc072a7644df33b">
Expand All @@ -135,7 +135,7 @@
<sourceConnection xsi:type="archimate:Connection" id="id-36ea25cf03244b3e9d2a9c5ed0fa4402" source="id-dded1d14d8fe4195baff9c6e5cc1130f" target="id-df8da58118d743899321aa33e42c2cec" archimateRelationship="id-881432667bea4f2fb12645c0d548bfcb"/>
<sourceConnection xsi:type="archimate:Connection" id="id-8bd1c05c80dd468e99d618d0daaad926" source="id-dded1d14d8fe4195baff9c6e5cc1130f" target="id-c24bcbdc7cf849bc93db1a882936ab2a" archimateRelationship="id-1ff3f80c920c425e8fbdef3509d44fcd"/>
<child xsi:type="archimate:DiagramObject" id="id-392faf6a412740f7a36195ea57200973" targetConnections="id-5fff10b5c0ca41c7ab6d788794fcc076 id-8310d2f098a1424bbb8ee9724b7f0133 id-ebee5445bf144e72a068902d0f25865e" textAlignment="1" fillColor="#ddffff" archimateElement="id-b626898f09ed49918c3fbea432f40754">
<bounds x="208" y="32" width="129" height="89"/>
<bounds x="208" y="32" width="141" height="89"/>
<feature name="labelExpression" value="${name} {&#xD;&#xA;${documentation}&#xD;&#xA;}"/>
<sourceConnection xsi:type="archimate:Connection" id="id-21fa68387db248fcb6f5cd3e14043a91" textPosition="2" source="id-392faf6a412740f7a36195ea57200973" target="id-58a1b38c651c4511a9c70713511c1b8a" archimateRelationship="id-a777c5184ce54ffd91262ff1d0675786">
<bendpoint startX="232" startY="-4" endX="-180" endY="2"/>
Expand All @@ -145,7 +145,7 @@
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-c4e5002555a4466baf816b6d85e5cdf5" targetConnections="id-a1b76808855d4e6086fd0d518d600c3c id-b3f545c843bf4fd388da441cc2f951c5 id-b49c380468b54e7f8cf4311a872e7c8b" textAlignment="1" fillColor="#ddffff" archimateElement="id-284c68566cd946278bfa2eb8470a26c8">
<bounds x="208" y="228" width="129" height="73"/>
<bounds x="208" y="228" width="141" height="73"/>
<feature name="labelExpression" value="${name} {&#xD;&#xA;${documentation}&#xD;&#xA;}"/>
<sourceConnection xsi:type="archimate:Connection" id="id-f6aac456a04e463498acc5fc1ff54247" textPosition="2" source="id-c4e5002555a4466baf816b6d85e5cdf5" target="id-5f6efba49d1f426ba3023223e9e7206b" archimateRelationship="id-4f9924a06a4e472381a930995f5232d2">
<bendpoint startX="216" startY="-24" endX="-196" endY="-20"/>
Expand Down Expand Up @@ -183,7 +183,7 @@
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-bf3f69b0dfa44a6ba8da7e6a0c49f449" targetConnections="id-d678c2ffcdd841049e838bf11abac432 id-f783122de8914434bcdb8db8dac61ed8 id-d46925b674e94054a45a125b1b5233cd" textAlignment="1" fillColor="#ddffff" archimateElement="id-cbe48c4a61a5486fac5e7a0b18164d5f">
<bounds x="208" y="328" width="129" height="57"/>
<bounds x="208" y="328" width="141" height="57"/>
<feature name="labelExpression" value="${name} {&#xD;&#xA;${documentation}&#xD;&#xA;}"/>
<sourceConnection xsi:type="archimate:Connection" id="id-89c68c45c7f0447298bd5e4e85b9b08d" textPosition="2" source="id-bf3f69b0dfa44a6ba8da7e6a0c49f449" target="id-01bedd3892d746fbb565fbda6e26ce36" archimateRelationship="id-3611195ac7fb410a99343f9786eb5766">
<bendpoint startX="168" startY="-17" endX="-148" endY="-16"/>
Expand All @@ -198,21 +198,21 @@
<sourceConnection xsi:type="archimate:Connection" id="id-3220d99f3d1741c3b724ab950f476e27" source="id-df8da58118d743899321aa33e42c2cec" target="id-c24bcbdc7cf849bc93db1a882936ab2a" archimateRelationship="id-4a323fdfa52946808ba4e28cedd578d1"/>
</child>
<child xsi:type="archimate:DiagramObject" id="id-c24bcbdc7cf849bc93db1a882936ab2a" targetConnections="id-8bd1c05c80dd468e99d618d0daaad926 id-3220d99f3d1741c3b724ab950f476e27 id-405c5148d1184057bac1e3b8fd460fb0" textAlignment="1" fillColor="#ddffff" archimateElement="id-1842d991afe54192bdda99fd82116593">
<bounds x="208" y="408" width="129" height="57"/>
<bounds x="208" y="408" width="141" height="57"/>
<feature name="labelExpression" value="${name} {&#xD;&#xA;${documentation}&#xD;&#xA;}"/>
<sourceConnection xsi:type="archimate:Connection" id="id-f2a9f3700196415b826c2566a5602509" textPosition="2" source="id-c24bcbdc7cf849bc93db1a882936ab2a" target="id-2a01dd5fe59740e189845d7b0eb5eb9d" archimateRelationship="id-539f2ec112a64b77a1537ad3afc92079">
<bendpoint startX="168" startY="-17" endX="-148" endY="-12"/>
</sourceConnection>
</child>
</child>
</child>
<child xsi:type="archimate:DiagramObject" id="id-58a1b38c651c4511a9c70713511c1b8a" targetConnections="id-21fa68387db248fcb6f5cd3e14043a91 id-6a9e36cfe1644c3d91469c76888ab4c6" archimateElement="id-2ebd938b5548494d8f15fe55575eb403">
<child xsi:type="archimate:DiagramObject" id="id-58a1b38c651c4511a9c70713511c1b8a" targetConnections="id-21fa68387db248fcb6f5cd3e14043a91 id-6a9e36cfe1644c3d91469c76888ab4c6" archimateElement="id-2ebd938b5548494d8f15fe55575eb403" type="1">
<bounds x="1024" y="101" width="120" height="63"/>
<sourceConnection xsi:type="archimate:Connection" id="id-8310d2f098a1424bbb8ee9724b7f0133" textPosition="0" source="id-58a1b38c651c4511a9c70713511c1b8a" target="id-392faf6a412740f7a36195ea57200973" archimateRelationship="id-86f594b94d0a43d1ab1fbece874384d5">
<bendpoint startX="-204" startY="26" endX="208" endY="20"/>
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-5f6efba49d1f426ba3023223e9e7206b" targetConnections="id-f6aac456a04e463498acc5fc1ff54247" archimateElement="id-948bbb7229574d70930c8201c07bd22d">
<child xsi:type="archimate:DiagramObject" id="id-5f6efba49d1f426ba3023223e9e7206b" targetConnections="id-f6aac456a04e463498acc5fc1ff54247" archimateElement="id-948bbb7229574d70930c8201c07bd22d" type="1">
<bounds x="1024" y="289" width="120" height="65"/>
<sourceConnection xsi:type="archimate:Connection" id="id-b49c380468b54e7f8cf4311a872e7c8b" textPosition="0" source="id-5f6efba49d1f426ba3023223e9e7206b" target="id-c4e5002555a4466baf816b6d85e5cdf5" archimateRelationship="id-d5f18afe9a4b418fbfff6462f62c6c1e">
<bendpoint startX="-196" startY="4" endX="216"/>
Expand Down Expand Up @@ -248,13 +248,13 @@
<bendpoint startX="200" startY="-20" endX="-208" endY="-17"/>
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-01bedd3892d746fbb565fbda6e26ce36" targetConnections="id-89c68c45c7f0447298bd5e4e85b9b08d" archimateElement="id-7403cc71add6415198e525bda0299c2d">
<child xsi:type="archimate:DiagramObject" id="id-01bedd3892d746fbb565fbda6e26ce36" targetConnections="id-89c68c45c7f0447298bd5e4e85b9b08d" archimateElement="id-7403cc71add6415198e525bda0299c2d" type="1">
<bounds x="1024" y="392" width="120" height="49"/>
<sourceConnection xsi:type="archimate:Connection" id="id-d46925b674e94054a45a125b1b5233cd" textPosition="0" source="id-01bedd3892d746fbb565fbda6e26ce36" target="id-bf3f69b0dfa44a6ba8da7e6a0c49f449" archimateRelationship="id-ebb6cf2748f048c1838d4344056c97cf">
<bendpoint startX="-156" startY="16" endX="160" endY="15"/>
</sourceConnection>
</child>
<child xsi:type="archimate:DiagramObject" id="id-2a01dd5fe59740e189845d7b0eb5eb9d" targetConnections="id-f2a9f3700196415b826c2566a5602509" archimateElement="id-4a8a0c3e9af04259829197dd4d6dfe2e">
<child xsi:type="archimate:DiagramObject" id="id-2a01dd5fe59740e189845d7b0eb5eb9d" targetConnections="id-f2a9f3700196415b826c2566a5602509" archimateElement="id-4a8a0c3e9af04259829197dd4d6dfe2e" type="1">
<bounds x="1024" y="465" width="120" height="54"/>
<sourceConnection xsi:type="archimate:Connection" id="id-405c5148d1184057bac1e3b8fd460fb0" textPosition="0" source="id-2a01dd5fe59740e189845d7b0eb5eb9d" target="id-c24bcbdc7cf849bc93db1a882936ab2a" archimateRelationship="id-aa3cbccb0eb14a4f84058b4680263401">
<bendpoint startX="-156" startY="12" endX="160" endY="7"/>
Expand Down
Binary file modified docs/flow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions examples/config1.caddy
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ recursor {
alias alias1 {
ips 10.1.1.1 10.1.1.2
hosts www.example.org www.example.com
shuffle_ips true
ttl 5
resolver_name resolver_primary
}
Expand Down
1 change: 1 addition & 0 deletions examples/config1.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"alias1": {
"ips": ["10.1.1.1","10.1.1.2"],
"hosts": ["www.example.org","www.example.com"],
"shuffle_ips": true,
"ttl": 5,
"resolver_name": "resolver_primary"
},
Expand Down
1 change: 1 addition & 0 deletions examples/config1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ aliases:
hosts:
- www.example.org
- www.example.com
shuffle_ips: true
ttl: 5
resolver_name: resolver_primary
alias2:
Expand Down
46 changes: 27 additions & 19 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,36 +1,44 @@
module github.com/kinjelom/coredns-recursor

go 1.19
go 1.21

require (
github.com/coredns/caddy v1.1.1
github.com/coredns/coredns v1.10.0
github.com/miekg/dns v1.1.50
github.com/prometheus/client_golang v1.14.0
github.com/coredns/coredns v1.11.3
github.com/miekg/dns v1.1.58
github.com/prometheus/client_golang v1.19.0
github.com/stretchr/testify v1.7.0
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/apparentlymart/go-cidr v1.1.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/onsi/ginkgo/v2 v2.13.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.12 // indirect
google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f // indirect
google.golang.org/grpc v1.49.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
github.com/prometheus/client_model v0.6.0 // indirect
github.com/prometheus/common v0.53.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/quic-go/quic-go v0.42.0 // indirect
go.uber.org/mock v0.4.0 // indirect
golang.org/x/crypto v0.22.0 // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.17.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
google.golang.org/grpc v1.63.2 // indirect
google.golang.org/protobuf v1.33.0 // indirect
)
Loading

0 comments on commit 7bd81f0

Please sign in to comment.