Skip to content

Commit 5491b97

Browse files
authored
Adds list of DNNs supported by the Network Slice to the response of the policy-control endpoint (#400)
Signed-off-by: Bartlomiej Gmerek <bartlomiej.gmerek@canonical.com>
1 parent 0e8a8a2 commit 5491b97

7 files changed

Lines changed: 79 additions & 32 deletions

File tree

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.8.9-dev
1+
1.8.9

backend/nfconfig/config.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,11 @@ func extractGnbNames(slice configmodels.Slice) []string {
334334
return names
335335
}
336336

337-
func (c *inMemoryConfig) syncPolicyControl(slices []configmodels.Slice) {
337+
func (c *inMemoryConfig) syncPolicyControl(slices []configmodels.Slice, deviceGroupMap map[string]configmodels.DeviceGroups) {
338338
policyControlConfigs := []nfConfigApi.PolicyControl{}
339339

340340
for _, slice := range slices {
341-
policyControl, ok := buildPolicyControlConfig(slice)
341+
policyControl, ok := buildPolicyControlConfig(slice, deviceGroupMap)
342342
if ok {
343343
policyControlConfigs = append(policyControlConfigs, *policyControl)
344344
}
@@ -348,7 +348,7 @@ func (c *inMemoryConfig) syncPolicyControl(slices []configmodels.Slice) {
348348
logger.NfConfigLog.Debugf("Updated Policy Control in-memory configuration. New configuration: %+v", c.policyControl)
349349
}
350350

351-
func buildPolicyControlConfig(slice configmodels.Slice) (*nfConfigApi.PolicyControl, bool) {
351+
func buildPolicyControlConfig(slice configmodels.Slice, deviceGroups map[string]configmodels.DeviceGroups) (*nfConfigApi.PolicyControl, bool) {
352352
plmn := nfConfigApi.NewPlmnId(slice.SiteInfo.Plmn.Mcc, slice.SiteInfo.Plmn.Mnc)
353353

354354
snssai, err := parseSnssaiFromSlice(slice.SliceId)
@@ -357,7 +357,8 @@ func buildPolicyControlConfig(slice configmodels.Slice) (*nfConfigApi.PolicyCont
357357
return nil, false
358358
}
359359
pccRules := buildSlicePccRules(slice)
360-
policyControl := nfConfigApi.NewPolicyControl(*plmn, snssai, pccRules)
360+
dnns := getSupportedDnns(slice, deviceGroups)
361+
policyControl := nfConfigApi.NewPolicyControl(*plmn, snssai, dnns, pccRules)
361362

362363
return policyControl, true
363364
}
@@ -435,6 +436,21 @@ func buildDescription(protocol, endpoint string, startPort, endPort int32) strin
435436
}
436437
}
437438

439+
func getSupportedDnns(slice configmodels.Slice, deviceGroups map[string]configmodels.DeviceGroups) []string {
440+
dnns := []string{}
441+
442+
for _, dgName := range slice.SiteDeviceGroup {
443+
deviceGroup, exists := deviceGroups[dgName]
444+
if !exists {
445+
logger.NfConfigLog.Warnf("DeviceGroup %s not found", dgName)
446+
continue
447+
}
448+
dnn := deviceGroup.IpDomainExpanded.Dnn
449+
dnns = append(dnns, dnn)
450+
}
451+
return dnns
452+
}
453+
438454
func buildPccQos(ruleConfig configmodels.SliceApplicationFilteringRules) nfConfigApi.PccQos {
439455
pccQos := nfConfigApi.NewPccQos(
440456
ruleConfig.TrafficClass.Qci,

backend/nfconfig/config_policy_control_test.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func makePolicyControlNetworkSlice(mcc, mnc, sst, sd string, filteringRules []co
1717
Mcc: mcc,
1818
Mnc: mnc,
1919
}
20+
deviceGroups := []string{"testDG"}
2021
siteInfo := configmodels.SliceSiteInfo{
2122
SiteName: "test",
2223
Plmn: plmnId,
@@ -28,6 +29,7 @@ func makePolicyControlNetworkSlice(mcc, mnc, sst, sd string, filteringRules []co
2829
}
2930
networkSlice := configmodels.Slice{
3031
SliceName: "slice1",
32+
SiteDeviceGroup: deviceGroups,
3133
SiteInfo: siteInfo,
3234
SliceId: sliceId,
3335
ApplicationFilteringRules: filteringRules,
@@ -36,13 +38,23 @@ func makePolicyControlNetworkSlice(mcc, mnc, sst, sd string, filteringRules []co
3638
}
3739

3840
var (
39-
testSst int32 = 1
40-
testSd = "12345"
41-
testRuleName = "TestRule"
42-
testRulePriority int32 = 12
43-
testRuleQci int32 = 12
44-
testRuleArp int32 = 100
45-
validSliceApplicationFilteringRule = configmodels.SliceApplicationFilteringRules{
41+
testSst int32 = 1
42+
testSd = "12345"
43+
testRuleName = "TestRule"
44+
testRulePriority int32 = 12
45+
testRuleQci int32 = 12
46+
testRuleArp int32 = 100
47+
testDeviceGroupName = "testDG"
48+
testDnnName = "testDnn"
49+
testDG = configmodels.DeviceGroups{
50+
DeviceGroupName: testDeviceGroupName,
51+
Imsis: []string{"001010123456789"},
52+
IpDomainExpanded: configmodels.DeviceGroupsIpDomainExpanded{
53+
Dnn: testDnnName,
54+
},
55+
}
56+
testDeviceGroups = map[string]configmodels.DeviceGroups{testDeviceGroupName: testDG}
57+
validSliceApplicationFilteringRule = configmodels.SliceApplicationFilteringRules{
4658
RuleName: testRuleName,
4759
Priority: testRulePriority,
4860
Action: "allow",
@@ -64,17 +76,20 @@ func TestSyncPolicyControl(t *testing.T) {
6476
tests := []struct {
6577
name string
6678
networkSlices []configmodels.Slice
79+
deviceGroups map[string]configmodels.DeviceGroups
6780
expectedResponse []nfConfigApi.PolicyControl
6881
}{
6982
{
7083
name: "Network Slice with valid SliceApplicationFilteringRules produces valid Policy Control config",
7184
networkSlices: []configmodels.Slice{
7285
makePolicyControlNetworkSlice("001", "01", fmt.Sprintf("%d", testSst), testSd, []configmodels.SliceApplicationFilteringRules{validSliceApplicationFilteringRule}),
7386
},
87+
deviceGroups: testDeviceGroups,
7488
expectedResponse: []nfConfigApi.PolicyControl{
7589
{
7690
PlmnId: *nfConfigApi.NewPlmnId("001", "01"),
7791
Snssai: makeSnssaiWithSd(testSst, testSd),
92+
Dnns: []string{testDnnName},
7893
PccRules: []nfConfigApi.PccRule{
7994
{
8095
RuleId: testRuleName,
@@ -106,10 +121,12 @@ func TestSyncPolicyControl(t *testing.T) {
106121
networkSlices: []configmodels.Slice{
107122
makePolicyControlNetworkSlice("001", "01", fmt.Sprintf("%d", testSst), testSd, []configmodels.SliceApplicationFilteringRules{}),
108123
},
124+
deviceGroups: testDeviceGroups,
109125
expectedResponse: []nfConfigApi.PolicyControl{
110126
{
111127
PlmnId: *nfConfigApi.NewPlmnId("001", "01"),
112128
Snssai: makeSnssaiWithSd(testSst, testSd),
129+
Dnns: []string{testDnnName},
113130
PccRules: []nfConfigApi.PccRule{*defaultPccRule},
114131
},
115132
},
@@ -119,10 +136,12 @@ func TestSyncPolicyControl(t *testing.T) {
119136
networkSlices: []configmodels.Slice{
120137
makePolicyControlNetworkSlice("001", "01", fmt.Sprintf("%d", testSst), testSd, []configmodels.SliceApplicationFilteringRules{}),
121138
},
139+
deviceGroups: testDeviceGroups,
122140
expectedResponse: []nfConfigApi.PolicyControl{
123141
{
124142
PlmnId: *nfConfigApi.NewPlmnId("001", "01"),
125143
Snssai: makeSnssaiWithSd(testSst, testSd),
144+
Dnns: []string{testDnnName},
126145
PccRules: []nfConfigApi.PccRule{*defaultPccRule},
127146
},
128147
},
@@ -132,14 +151,30 @@ func TestSyncPolicyControl(t *testing.T) {
132151
networkSlices: []configmodels.Slice{
133152
makePolicyControlNetworkSlice("999", "99", "a", testSd, []configmodels.SliceApplicationFilteringRules{}),
134153
},
154+
deviceGroups: testDeviceGroups,
135155
expectedResponse: []nfConfigApi.PolicyControl{},
136156
},
157+
{
158+
name: "Network Slice with non-existent Device Group returns empty DNNs in Policy Control",
159+
networkSlices: []configmodels.Slice{
160+
makePolicyControlNetworkSlice("001", "01", fmt.Sprintf("%d", testSst), testSd, []configmodels.SliceApplicationFilteringRules{}),
161+
},
162+
deviceGroups: map[string]configmodels.DeviceGroups{},
163+
expectedResponse: []nfConfigApi.PolicyControl{
164+
{
165+
PlmnId: *nfConfigApi.NewPlmnId("001", "01"),
166+
Snssai: makeSnssaiWithSd(testSst, testSd),
167+
Dnns: []string{},
168+
PccRules: []nfConfigApi.PccRule{*defaultPccRule},
169+
},
170+
},
171+
},
137172
}
138173

139174
for _, tt := range tests {
140175
t.Run(tt.name, func(t *testing.T) {
141176
cfg := inMemoryConfig{}
142-
cfg.syncPolicyControl(tt.networkSlices)
177+
cfg.syncPolicyControl(tt.networkSlices, tt.deviceGroups)
143178

144179
if !reflect.DeepEqual(cfg.policyControl, tt.expectedResponse) {
145180
t.Errorf("expected %+v, got %+v", tt.expectedResponse, cfg.policyControl)

backend/nfconfig/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func (n *NFConfigServer) syncInMemoryConfig() error {
195195
n.inMemoryConfig.syncPlmnSnssai(slices)
196196
n.inMemoryConfig.syncAccessAndMobility(slices)
197197
n.inMemoryConfig.syncSessionManagement(slices, deviceGroups)
198-
n.inMemoryConfig.syncPolicyControl(slices)
198+
n.inMemoryConfig.syncPolicyControl(slices, deviceGroups)
199199
n.inMemoryConfig.syncImsiQos(deviceGroups)
200200
logger.NfConfigLog.Infoln("Updated NF in-memory configuration")
201201
return nil

backend/nfconfig/service_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,11 +547,13 @@ func TestSyncInMemoryConfig_UpdateAllConfigs(t *testing.T) {
547547
{
548548
PlmnId: *nfConfigApi.NewPlmnId("123", "23"),
549549
Snssai: makeSnssaiWithSd(2, "abcd"),
550+
Dnns: []string{},
550551
PccRules: []nfConfigApi.PccRule{*defaultPccRule},
551552
},
552553
{
553554
PlmnId: *nfConfigApi.NewPlmnId("123", "23"),
554555
Snssai: makeSnssaiWithSd(1, "01234"),
556+
Dnns: []string{},
555557
PccRules: []nfConfigApi.PccRule{*defaultPccRule},
556558
},
557559
},

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/google/uuid v1.6.0
1010
github.com/mitchellh/mapstructure v1.5.0
1111
github.com/omec-project/config5g v1.6.2
12-
github.com/omec-project/openapi v1.6.2
12+
github.com/omec-project/openapi v1.6.3
1313
github.com/omec-project/util v1.4.0
1414
github.com/prometheus/client_golang v1.23.0
1515
github.com/swaggo/files v1.0.1
@@ -28,10 +28,10 @@ require (
2828
github.com/KyleBanks/depth v1.2.1 // indirect
2929
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
3030
github.com/beorn7/perks v1.0.1 // indirect
31-
github.com/bytedance/sonic v1.13.3 // indirect
31+
github.com/bytedance/sonic v1.14.0 // indirect
3232
github.com/bytedance/sonic/loader v0.3.0 // indirect
3333
github.com/cespare/xxhash/v2 v2.3.0 // indirect
34-
github.com/cloudwego/base64x v0.1.5 // indirect
34+
github.com/cloudwego/base64x v0.1.6 // indirect
3535
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
3636
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
3737
github.com/gin-contrib/sse v1.1.0 // indirect
@@ -74,6 +74,6 @@ require (
7474
golang.org/x/sys v0.34.0 // indirect
7575
golang.org/x/text v0.27.0 // indirect
7676
golang.org/x/tools v0.35.0 // indirect
77-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 // indirect
77+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect
7878
gopkg.in/yaml.v3 v3.0.1 // indirect
7979
)

go.sum

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d
44
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
55
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
66
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
7-
github.com/bytedance/sonic v1.13.3 h1:MS8gmaH16Gtirygw7jV91pDCN33NyMrPbN7qiYhEsF0=
8-
github.com/bytedance/sonic v1.13.3/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
9-
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
7+
github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ=
8+
github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA=
109
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
1110
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
1211
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
1312
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
14-
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
15-
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
16-
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
13+
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
14+
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
1715
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1816
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1917
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -68,10 +66,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
6866
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
6967
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
7068
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
71-
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
7269
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
7370
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
74-
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
7571
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
7672
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
7773
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -97,8 +93,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
9793
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
9894
github.com/omec-project/config5g v1.6.2 h1:bfLxwVSt6LAWCQtBmjUuks5CO3qambvcy3VjSVAMHdk=
9995
github.com/omec-project/config5g v1.6.2/go.mod h1:LuaRiJTCJXCkQF7nKB5fOcz6oVMF/8oid+EKCYFAy0E=
100-
github.com/omec-project/openapi v1.6.2 h1:eDbGqPnnsRJqw1/0+Kf0kbrAD8YI89gVsUg9di71Rjo=
101-
github.com/omec-project/openapi v1.6.2/go.mod h1:KqSGQWCGukLUFDzAfub1xZU1ENiQ0TCA9AYSthc0szs=
96+
github.com/omec-project/openapi v1.6.3 h1:L3pMN8hnkHkbLOg9SsHpRlivyBSZHiW8Lt8oX/q3yvU=
97+
github.com/omec-project/openapi v1.6.3/go.mod h1:hUzU8E/QxzsDS7a6RakqQlvl6fjI/a67KndPP1PKMGY=
10298
github.com/omec-project/util v1.4.0 h1:LJ29TMOvkdCWBRQWqTsQNW3Wn+Wio6i3oyBIMa+1cPY=
10399
github.com/omec-project/util v1.4.0/go.mod h1:+To3rTo1Mt8h1Yl5p+7dG9Bo8SbJItyJ7316gr1gkqg=
104100
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
@@ -121,7 +117,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
121117
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
122118
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
123119
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
124-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
125120
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
126121
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
127122
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
@@ -212,8 +207,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
212207
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
213208
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
214209
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
215-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10=
216-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
210+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8=
211+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
217212
google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
218213
google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
219214
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
@@ -226,4 +221,3 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
226221
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
227222
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
228223
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
229-
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=

0 commit comments

Comments
 (0)