mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-27 15:36:25 +08:00
fix: unlnk deleted networks and tags from enrollment keys (#3328)
This commit is contained in:
parent
f46030e40f
commit
2fcdd865c8
2 changed files with 58 additions and 1 deletions
|
@ -464,6 +464,7 @@ func deleteNetwork(w http.ResponseWriter, r *http.Request) {
|
|||
logic.ReturnErrorResponse(w, r, logic.FormatError(err, errtype))
|
||||
return
|
||||
}
|
||||
go logic.UnlinkNetworkAndTagsFromEnrollmentKeys(network, true)
|
||||
go logic.DeleteNetworkRoles(network)
|
||||
go logic.DeleteDefaultNetworkPolicies(models.NetworkID(network))
|
||||
//delete network from allocated ip map
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
@ -120,7 +121,6 @@ func UpdateEnrollmentKey(keyId string, relayId uuid.UUID, groups []models.TagID)
|
|||
}
|
||||
|
||||
// GetAllEnrollmentKeys - fetches all enrollment keys from DB
|
||||
// TODO drop double pointer
|
||||
func GetAllEnrollmentKeys() ([]models.EnrollmentKey, error) {
|
||||
currentKeys, err := getEnrollmentKeysMap()
|
||||
if err != nil {
|
||||
|
@ -335,3 +335,59 @@ func RemoveTagFromEnrollmentKeys(deletedTagID models.TagID) {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
func UnlinkNetworkAndTagsFromEnrollmentKeys(network string, delete bool) error {
|
||||
keys, err := GetAllEnrollmentKeys()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to retrieve keys: %w", err)
|
||||
}
|
||||
|
||||
var errs []error
|
||||
for _, key := range keys {
|
||||
newNetworks := []string{}
|
||||
newTags := []models.TagID{}
|
||||
update := false
|
||||
|
||||
// Check and update networks
|
||||
for _, net := range key.Networks {
|
||||
if net == network {
|
||||
update = true
|
||||
continue
|
||||
}
|
||||
newNetworks = append(newNetworks, net)
|
||||
}
|
||||
|
||||
// Check and update tags
|
||||
for _, tag := range key.Groups {
|
||||
tagParts := strings.Split(tag.String(), ".")
|
||||
if len(tagParts) == 0 {
|
||||
continue
|
||||
}
|
||||
tagNetwork := tagParts[0]
|
||||
if tagNetwork == network {
|
||||
update = true
|
||||
continue
|
||||
}
|
||||
newTags = append(newTags, tag)
|
||||
}
|
||||
|
||||
if update && len(newNetworks) == 0 && delete {
|
||||
if err := DeleteEnrollmentKey(key.Value, true); err != nil {
|
||||
errs = append(errs, fmt.Errorf("failed to delete key %s: %w", key.Value, err))
|
||||
}
|
||||
continue
|
||||
}
|
||||
if update {
|
||||
key.Networks = newNetworks
|
||||
key.Groups = newTags
|
||||
if err := upsertEnrollmentKey(&key); err != nil {
|
||||
errs = append(errs, fmt.Errorf("failed to update key %s: %w", key.Value, err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return fmt.Errorf("errors unlinking network/tags from keys: %v", errs)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue