mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 11:56:39 +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))
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, errtype))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
go logic.UnlinkNetworkAndTagsFromEnrollmentKeys(network, true)
|
||||||
go logic.DeleteNetworkRoles(network)
|
go logic.DeleteNetworkRoles(network)
|
||||||
go logic.DeleteDefaultNetworkPolicies(models.NetworkID(network))
|
go logic.DeleteDefaultNetworkPolicies(models.NetworkID(network))
|
||||||
//delete network from allocated ip map
|
//delete network from allocated ip map
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -120,7 +121,6 @@ func UpdateEnrollmentKey(keyId string, relayId uuid.UUID, groups []models.TagID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllEnrollmentKeys - fetches all enrollment keys from DB
|
// GetAllEnrollmentKeys - fetches all enrollment keys from DB
|
||||||
// TODO drop double pointer
|
|
||||||
func GetAllEnrollmentKeys() ([]models.EnrollmentKey, error) {
|
func GetAllEnrollmentKeys() ([]models.EnrollmentKey, error) {
|
||||||
currentKeys, err := getEnrollmentKeysMap()
|
currentKeys, err := getEnrollmentKeysMap()
|
||||||
if err != nil {
|
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