Skip to content

Commit 8773811

Browse files
author
Aalyria Technologies, Inc
committed
Import changes.
- 4943214a56eee3aaf4e8744a6f9129f37754bc04 GitOrigin-RevId: 4943214a56eee3aaf4e8744a6f9129f37754bc04
1 parent 378861d commit 8773811

File tree

1 file changed

+249
-1
lines changed

1 file changed

+249
-1
lines changed

tools/nbictl/provisioning.go

Lines changed: 249 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ type ProvisioningResources struct {
4040
downtimes map[string]*provapipb.Downtime
4141
protectionAssociationGroups map[string]*provapipb.ProtectionAssociationGroup
4242
disjointAssociationGroups map[string]*provapipb.DisjointAssociationGroup
43+
links map[string]*provapipb.Link
44+
geographicRegions map[string]*provapipb.GeographicRegion
45+
emissionsLimits map[string]*provapipb.EmissionsLimit
46+
emissionsTargets map[string]*provapipb.EmissionsTarget
4347
}
4448

4549
func (pr *ProvisioningResources) String() string {
@@ -49,6 +53,10 @@ func (pr *ProvisioningResources) String() string {
4953
lo.Keys(pr.downtimes),
5054
lo.Keys(pr.protectionAssociationGroups),
5155
lo.Keys(pr.disjointAssociationGroups),
56+
lo.Keys(pr.links),
57+
lo.Keys(pr.geographicRegions),
58+
lo.Keys(pr.emissionsLimits),
59+
lo.Keys(pr.emissionsTargets),
5260
)
5361

5462
if len(keys) == 0 {
@@ -73,6 +81,10 @@ func (pr *ProvisioningResources) MarshalledString(marshaller protoFormat) string
7381
lo.Entries(marshalMap(pr.downtimes, marshaller)),
7482
lo.Entries(marshalMap(pr.protectionAssociationGroups, marshaller)),
7583
lo.Entries(marshalMap(pr.disjointAssociationGroups, marshaller)),
84+
lo.Entries(marshalMap(pr.links, marshaller)),
85+
lo.Entries(marshalMap(pr.geographicRegions, marshaller)),
86+
lo.Entries(marshalMap(pr.emissionsLimits, marshaller)),
87+
lo.Entries(marshalMap(pr.emissionsTargets, marshaller)),
7688
)
7789
slices.SortFunc(entries, func(e1, e2 lo.Entry[string, string]) int { return strings.Compare(e1.Key, e2.Key) })
7890

@@ -89,6 +101,10 @@ func NewProvisioningResources() *ProvisioningResources {
89101
downtimes: map[string]*provapipb.Downtime{},
90102
protectionAssociationGroups: map[string]*provapipb.ProtectionAssociationGroup{},
91103
disjointAssociationGroups: map[string]*provapipb.DisjointAssociationGroup{},
104+
links: map[string]*provapipb.Link{},
105+
geographicRegions: map[string]*provapipb.GeographicRegion{},
106+
emissionsLimits: map[string]*provapipb.EmissionsLimit{},
107+
emissionsTargets: map[string]*provapipb.EmissionsTarget{},
92108
}
93109
}
94110

@@ -97,7 +113,11 @@ func (pr *ProvisioningResources) ResourceCount() int {
97113
len(pr.p2pSrTePolicyCandidatePaths) +
98114
len(pr.downtimes) +
99115
len(pr.protectionAssociationGroups) +
100-
len(pr.disjointAssociationGroups)
116+
len(pr.disjointAssociationGroups) +
117+
len(pr.links) +
118+
len(pr.geographicRegions) +
119+
len(pr.emissionsLimits) +
120+
len(pr.emissionsTargets)
101121
}
102122

103123
func (pr *ProvisioningResources) InsertProvisioningResources(resources *provnbipb.ProvisioningResources) {
@@ -106,6 +126,10 @@ func (pr *ProvisioningResources) InsertProvisioningResources(resources *provnbip
106126
pr.insertDowntimes(resources.GetDowntimes())
107127
pr.insertProtectionAssociationGroups(resources.GetProtectionAssociationGroups())
108128
pr.insertDisjointAssociationGroups(resources.GetDisjointAssociationGroups())
129+
pr.insertLinks(resources.GetLinks())
130+
pr.insertGeographicRegions(resources.GetGeographicRegions())
131+
pr.insertEmissionsLimits(resources.GetEmissionsLimits())
132+
pr.insertEmissionsTargets(resources.GetEmissionsTargets())
109133
}
110134

111135
func ProvisioningResourcesFromRemote(ctx context.Context, client provapipb.ProvisioningClient) (*ProvisioningResources, error) {
@@ -143,6 +167,46 @@ func ProvisioningResourcesFromRemote(ctx context.Context, client provapipb.Provi
143167
return nil
144168
})
145169

170+
var links []*provapipb.Link
171+
p.Go(func() error {
172+
result, err := client.ListLinks(ctx, &provapipb.ListLinksRequest{})
173+
if err != nil {
174+
return err
175+
}
176+
links = result.GetLinks()
177+
return nil
178+
})
179+
180+
var geographicRegions []*provapipb.GeographicRegion
181+
p.Go(func() error {
182+
result, err := client.ListGeographicRegions(ctx, &provapipb.ListGeographicRegionsRequest{})
183+
if err != nil {
184+
return err
185+
}
186+
geographicRegions = result.GetGeographicRegions()
187+
return nil
188+
})
189+
190+
var emissionsLimits []*provapipb.EmissionsLimit
191+
p.Go(func() error {
192+
result, err := client.ListEmissionsLimits(ctx, &provapipb.ListEmissionsLimitsRequest{})
193+
if err != nil {
194+
return err
195+
}
196+
emissionsLimits = result.GetEmissionsLimits()
197+
return nil
198+
})
199+
200+
var emissionsTargets []*provapipb.EmissionsTarget
201+
p.Go(func() error {
202+
result, err := client.ListEmissionsTargets(ctx, &provapipb.ListEmissionsTargetsRequest{})
203+
if err != nil {
204+
return err
205+
}
206+
emissionsTargets = result.GetEmissionsTargets()
207+
return nil
208+
})
209+
146210
result, err := client.ListP2PSrTePolicies(ctx, &provapipb.ListP2PSrTePoliciesRequest{})
147211
if err != nil {
148212
return nil, err
@@ -176,6 +240,10 @@ func ProvisioningResourcesFromRemote(ctx context.Context, client provapipb.Provi
176240
pr.insertDowntimes(downtimes)
177241
pr.insertProtectionAssociationGroups(protectionAssociationGroups)
178242
pr.insertDisjointAssociationGroups(disjointAssociationGroups)
243+
pr.insertLinks(links)
244+
pr.insertGeographicRegions(geographicRegions)
245+
pr.insertEmissionsLimits(emissionsLimits)
246+
pr.insertEmissionsTargets(emissionsTargets)
179247

180248
return pr, nil
181249
}
@@ -210,6 +278,30 @@ func (pr *ProvisioningResources) insertDisjointAssociationGroups(entries []*prov
210278
}
211279
}
212280

281+
func (pr *ProvisioningResources) insertLinks(entries []*provapipb.Link) {
282+
for _, entry := range entries {
283+
pr.links[entry.GetName()] = entry
284+
}
285+
}
286+
287+
func (pr *ProvisioningResources) insertGeographicRegions(entries []*provapipb.GeographicRegion) {
288+
for _, entry := range entries {
289+
pr.geographicRegions[entry.GetName()] = entry
290+
}
291+
}
292+
293+
func (pr *ProvisioningResources) insertEmissionsLimits(entries []*provapipb.EmissionsLimit) {
294+
for _, entry := range entries {
295+
pr.emissionsLimits[entry.GetName()] = entry
296+
}
297+
}
298+
299+
func (pr *ProvisioningResources) insertEmissionsTargets(entries []*provapipb.EmissionsTarget) {
300+
for _, entry := range entries {
301+
pr.emissionsTargets[entry.GetName()] = entry
302+
}
303+
}
304+
213305
func provisioningResourcesAreEquivalent[T proto.Message](a, b T) bool {
214306
// TODO: find a more robust equivalency check.
215307
return proto.Equal(a, b)
@@ -290,6 +382,10 @@ func ProvisioningSync(appCtx *cli.Context) error {
290382
"downtimes": lo.Without(lo.Keys(localResources.downtimes), lo.Keys(remoteResources.downtimes)...),
291383
"protectionAssociationGroups": lo.Without(lo.Keys(localResources.protectionAssociationGroups), lo.Keys(remoteResources.protectionAssociationGroups)...),
292384
"disjointAssociationGroups": lo.Without(lo.Keys(localResources.disjointAssociationGroups), lo.Keys(remoteResources.disjointAssociationGroups)...),
385+
"links": lo.Without(lo.Keys(localResources.links), lo.Keys(remoteResources.links)...),
386+
"geographicRegions": lo.Without(lo.Keys(localResources.geographicRegions), lo.Keys(remoteResources.geographicRegions)...),
387+
"emissionsLimits": lo.Without(lo.Keys(localResources.emissionsLimits), lo.Keys(remoteResources.emissionsLimits)...),
388+
"emissionsTargets": lo.Without(lo.Keys(localResources.emissionsTargets), lo.Keys(remoteResources.emissionsTargets)...),
293389
}
294390

295391
resourcesInCommon := map[string][]string{
@@ -298,6 +394,10 @@ func ProvisioningSync(appCtx *cli.Context) error {
298394
"downtimes": lo.Intersect(lo.Keys(localResources.downtimes), lo.Keys(remoteResources.downtimes)),
299395
"protectionAssociationGroups": lo.Intersect(lo.Keys(localResources.protectionAssociationGroups), lo.Keys(remoteResources.protectionAssociationGroups)),
300396
"disjointAssociationGroups": lo.Intersect(lo.Keys(localResources.disjointAssociationGroups), lo.Keys(remoteResources.disjointAssociationGroups)),
397+
"links": lo.Intersect(lo.Keys(localResources.links), lo.Keys(remoteResources.links)),
398+
"geographicRegions": lo.Intersect(lo.Keys(localResources.geographicRegions), lo.Keys(remoteResources.geographicRegions)),
399+
"emissionsLimits": lo.Intersect(lo.Keys(localResources.emissionsLimits), lo.Keys(remoteResources.emissionsLimits)),
400+
"emissionsTargets": lo.Intersect(lo.Keys(localResources.emissionsTargets), lo.Keys(remoteResources.emissionsTargets)),
301401
}
302402

303403
fmt.Println("\ncomparing local and remote resources:")
@@ -315,6 +415,10 @@ func ProvisioningSync(appCtx *cli.Context) error {
315415
downtimes: lo.Without(lo.Keys(remoteResources.downtimes), lo.Keys(localResources.downtimes)...),
316416
protectionAssociationGroups: lo.Without(lo.Keys(remoteResources.protectionAssociationGroups), lo.Keys(localResources.protectionAssociationGroups)...),
317417
disjointAssociationGroups: lo.Without(lo.Keys(remoteResources.disjointAssociationGroups), lo.Keys(localResources.disjointAssociationGroups)...),
418+
links: lo.Without(lo.Keys(remoteResources.links), lo.Keys(localResources.links)...),
419+
geographicRegions: lo.Without(lo.Keys(remoteResources.geographicRegions), lo.Keys(localResources.geographicRegions)...),
420+
emissionsLimits: lo.Without(lo.Keys(remoteResources.emissionsLimits), lo.Keys(localResources.emissionsLimits)...),
421+
emissionsTargets: lo.Without(lo.Keys(remoteResources.emissionsTargets), lo.Keys(localResources.emissionsTargets)...),
318422

319423
printMode: printMode,
320424
dryRunMode: dryRunMode,
@@ -327,6 +431,10 @@ func ProvisioningSync(appCtx *cli.Context) error {
327431
deleteParams.downtimes,
328432
deleteParams.protectionAssociationGroups,
329433
deleteParams.disjointAssociationGroups,
434+
deleteParams.links,
435+
deleteParams.geographicRegions,
436+
deleteParams.emissionsLimits,
437+
deleteParams.emissionsTargets,
330438
)))
331439

332440
err := deleteProvisioning(ctx, deleteParams)
@@ -387,6 +495,46 @@ func ProvisioningSync(appCtx *cli.Context) error {
387495
return err
388496
})...)
389497
})
498+
p.Go(func() error {
499+
return errors.Join(updateRemoteResources[*provapipb.Link](
500+
resourcesInCommon["links"], localResources.links, remoteResources.links, printMode, dryRunMode, func(link *provapipb.Link) error {
501+
_, err := provisioningClient.UpdateLink(ctx, &provapipb.UpdateLinkRequest{
502+
Link: link,
503+
AllowMissing: false,
504+
})
505+
return err
506+
})...)
507+
})
508+
p.Go(func() error {
509+
return errors.Join(updateRemoteResources[*provapipb.GeographicRegion](
510+
resourcesInCommon["geographicRegions"], localResources.geographicRegions, remoteResources.geographicRegions, printMode, dryRunMode, func(geographicRegion *provapipb.GeographicRegion) error {
511+
_, err := provisioningClient.UpdateGeographicRegion(ctx, &provapipb.UpdateGeographicRegionRequest{
512+
GeographicRegion: geographicRegion,
513+
AllowMissing: false,
514+
})
515+
return err
516+
})...)
517+
})
518+
p.Go(func() error {
519+
return errors.Join(updateRemoteResources[*provapipb.EmissionsLimit](
520+
resourcesInCommon["emissionsLimits"], localResources.emissionsLimits, remoteResources.emissionsLimits, printMode, dryRunMode, func(emissionsLimit *provapipb.EmissionsLimit) error {
521+
_, err := provisioningClient.UpdateEmissionsLimit(ctx, &provapipb.UpdateEmissionsLimitRequest{
522+
EmissionsLimit: emissionsLimit,
523+
AllowMissing: false,
524+
})
525+
return err
526+
})...)
527+
})
528+
p.Go(func() error {
529+
return errors.Join(updateRemoteResources[*provapipb.EmissionsTarget](
530+
resourcesInCommon["emissionsTargets"], localResources.emissionsTargets, remoteResources.emissionsTargets, printMode, dryRunMode, func(emissionsTarget *provapipb.EmissionsTarget) error {
531+
_, err := provisioningClient.UpdateEmissionsTarget(ctx, &provapipb.UpdateEmissionsTargetRequest{
532+
EmissionsTarget: emissionsTarget,
533+
AllowMissing: false,
534+
})
535+
return err
536+
})...)
537+
})
390538

391539
///
392540
// Add resources.
@@ -443,6 +591,46 @@ func ProvisioningSync(appCtx *cli.Context) error {
443591
return err
444592
})...)
445593
})
594+
p.Go(func() error {
595+
return errors.Join(createRemoteResources[*provapipb.Link](
596+
resourcesToBeAdded["links"], localResources.links, printMode, dryRunMode, func(link *provapipb.Link) error {
597+
_, err := provisioningClient.UpdateLink(ctx, &provapipb.UpdateLinkRequest{
598+
Link: link,
599+
AllowMissing: true,
600+
})
601+
return err
602+
})...)
603+
})
604+
p.Go(func() error {
605+
return errors.Join(createRemoteResources[*provapipb.GeographicRegion](
606+
resourcesToBeAdded["geographicRegions"], localResources.geographicRegions, printMode, dryRunMode, func(geographicRegion *provapipb.GeographicRegion) error {
607+
_, err := provisioningClient.UpdateGeographicRegion(ctx, &provapipb.UpdateGeographicRegionRequest{
608+
GeographicRegion: geographicRegion,
609+
AllowMissing: true,
610+
})
611+
return err
612+
})...)
613+
})
614+
p.Go(func() error {
615+
return errors.Join(createRemoteResources[*provapipb.EmissionsLimit](
616+
resourcesToBeAdded["emissionsLimits"], localResources.emissionsLimits, printMode, dryRunMode, func(emissionsLimit *provapipb.EmissionsLimit) error {
617+
_, err := provisioningClient.UpdateEmissionsLimit(ctx, &provapipb.UpdateEmissionsLimitRequest{
618+
EmissionsLimit: emissionsLimit,
619+
AllowMissing: true,
620+
})
621+
return err
622+
})...)
623+
})
624+
p.Go(func() error {
625+
return errors.Join(createRemoteResources[*provapipb.EmissionsTarget](
626+
resourcesToBeAdded["emissionsTargets"], localResources.emissionsTargets, printMode, dryRunMode, func(emissionsTarget *provapipb.EmissionsTarget) error {
627+
_, err := provisioningClient.UpdateEmissionsTarget(ctx, &provapipb.UpdateEmissionsTargetRequest{
628+
EmissionsTarget: emissionsTarget,
629+
AllowMissing: true,
630+
})
631+
return err
632+
})...)
633+
})
446634

447635
errs = append(errs, p.Wait())
448636
return errors.Join(errs...)
@@ -477,6 +665,10 @@ type deleteProvisioningParams struct {
477665
downtimes []string
478666
protectionAssociationGroups []string
479667
disjointAssociationGroups []string
668+
links []string
669+
geographicRegions []string
670+
emissionsLimits []string
671+
emissionsTargets []string
480672

481673
printMode bool
482674
dryRunMode bool
@@ -551,6 +743,50 @@ func deleteProvisioning(ctx context.Context, params deleteProvisioningParams) er
551743
})...)
552744
})
553745
}
746+
if len(params.links) > 0 {
747+
p.Go(func() error {
748+
return errors.Join(deleteRemoteResources(
749+
params.links, printMode, dryRunMode, func(link string) error {
750+
_, err := client.DeleteLink(ctx, &provapipb.DeleteLinkRequest{
751+
Name: link,
752+
})
753+
return err
754+
})...)
755+
})
756+
}
757+
if len(params.geographicRegions) > 0 {
758+
p.Go(func() error {
759+
return errors.Join(deleteRemoteResources(
760+
params.geographicRegions, printMode, dryRunMode, func(geographicRegion string) error {
761+
_, err := client.DeleteGeographicRegion(ctx, &provapipb.DeleteGeographicRegionRequest{
762+
Name: geographicRegion,
763+
})
764+
return err
765+
})...)
766+
})
767+
}
768+
if len(params.emissionsLimits) > 0 {
769+
p.Go(func() error {
770+
return errors.Join(deleteRemoteResources(
771+
params.emissionsLimits, printMode, dryRunMode, func(emissionsLimit string) error {
772+
_, err := client.DeleteEmissionsLimit(ctx, &provapipb.DeleteEmissionsLimitRequest{
773+
Name: emissionsLimit,
774+
})
775+
return err
776+
})...)
777+
})
778+
}
779+
if len(params.emissionsTargets) > 0 {
780+
p.Go(func() error {
781+
return errors.Join(deleteRemoteResources(
782+
params.emissionsTargets, printMode, dryRunMode, func(emissionsTarget string) error {
783+
_, err := client.DeleteEmissionsTarget(ctx, &provapipb.DeleteEmissionsTargetRequest{
784+
Name: emissionsTarget,
785+
})
786+
return err
787+
})...)
788+
})
789+
}
554790

555791
return p.Wait()
556792
}
@@ -583,6 +819,10 @@ func ProvisioningDeleteAll(appCtx *cli.Context) error {
583819
downtimes: lo.Keys(remoteResources.downtimes),
584820
protectionAssociationGroups: lo.Keys(remoteResources.protectionAssociationGroups),
585821
disjointAssociationGroups: lo.Keys(remoteResources.disjointAssociationGroups),
822+
links: lo.Keys(remoteResources.links),
823+
geographicRegions: lo.Keys(remoteResources.geographicRegions),
824+
emissionsLimits: lo.Keys(remoteResources.emissionsLimits),
825+
emissionsTargets: lo.Keys(remoteResources.emissionsTargets),
586826
}
587827

588828
return deleteProvisioning(appCtx.Context, params)
@@ -621,13 +861,21 @@ func ProvisioningDelete(appCtx *cli.Context) error {
621861
params.downtimes = lo.Intersect(resourceNames, lo.Keys(remoteResources.downtimes))
622862
params.protectionAssociationGroups = lo.Intersect(resourceNames, lo.Keys(remoteResources.protectionAssociationGroups))
623863
params.disjointAssociationGroups = lo.Intersect(resourceNames, lo.Keys(remoteResources.disjointAssociationGroups))
864+
params.links = lo.Intersect(resourceNames, lo.Keys(remoteResources.links))
865+
params.geographicRegions = lo.Intersect(resourceNames, lo.Keys(remoteResources.geographicRegions))
866+
params.emissionsLimits = lo.Intersect(resourceNames, lo.Keys(remoteResources.emissionsLimits))
867+
params.emissionsTargets = lo.Intersect(resourceNames, lo.Keys(remoteResources.emissionsTargets))
624868

625869
deleteResourceNameSet := slices.Concat(
626870
params.p2pSrTePolicies,
627871
params.p2pSrTePolicyCandidatePaths,
628872
params.downtimes,
629873
params.protectionAssociationGroups,
630874
params.disjointAssociationGroups,
875+
params.links,
876+
params.geographicRegions,
877+
params.emissionsLimits,
878+
params.emissionsTargets,
631879
)
632880

633881
notFoundNames := lo.Without(resourceNames, deleteResourceNameSet...)

0 commit comments

Comments
 (0)