mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-30 13:35:23 +00:00
Fix error 500 when deleting shared node (fixes #133)
This commit is contained in:
parent
087c461762
commit
48f5a9a18c
11
machine.go
11
machine.go
@ -179,6 +179,11 @@ func (h *Headscale) UpdateMachine(m *Machine) error {
|
|||||||
|
|
||||||
// DeleteMachine softs deletes a Machine from the database
|
// DeleteMachine softs deletes a Machine from the database
|
||||||
func (h *Headscale) DeleteMachine(m *Machine) error {
|
func (h *Headscale) DeleteMachine(m *Machine) error {
|
||||||
|
err := h.RemoveSharedMachineFromAllNamespaces(m)
|
||||||
|
if err != nil && err != errorMachineNotShared {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
m.Registered = false
|
m.Registered = false
|
||||||
namespaceID := m.NamespaceID
|
namespaceID := m.NamespaceID
|
||||||
h.db.Save(&m) // we mark it as unregistered, just in case
|
h.db.Save(&m) // we mark it as unregistered, just in case
|
||||||
@ -191,10 +196,16 @@ func (h *Headscale) DeleteMachine(m *Machine) error {
|
|||||||
|
|
||||||
// HardDeleteMachine hard deletes a Machine from the database
|
// HardDeleteMachine hard deletes a Machine from the database
|
||||||
func (h *Headscale) HardDeleteMachine(m *Machine) error {
|
func (h *Headscale) HardDeleteMachine(m *Machine) error {
|
||||||
|
err := h.RemoveSharedMachineFromAllNamespaces(m)
|
||||||
|
if err != nil && err != errorMachineNotShared {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
namespaceID := m.NamespaceID
|
namespaceID := m.NamespaceID
|
||||||
if err := h.db.Unscoped().Delete(&m).Error; err != nil {
|
if err := h.db.Unscoped().Delete(&m).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return h.RequestMapUpdates(namespaceID)
|
return h.RequestMapUpdates(namespaceID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
sharing.go
11
sharing.go
@ -4,6 +4,7 @@ import "gorm.io/gorm"
|
|||||||
|
|
||||||
const errorSameNamespace = Error("Destination namespace same as origin")
|
const errorSameNamespace = Error("Destination namespace same as origin")
|
||||||
const errorMachineAlreadyShared = Error("Node already shared to this namespace")
|
const errorMachineAlreadyShared = Error("Node already shared to this namespace")
|
||||||
|
const errorMachineNotShared = Error("Machine not shared to this namespace")
|
||||||
|
|
||||||
// SharedMachine is a join table to support sharing nodes between namespaces
|
// SharedMachine is a join table to support sharing nodes between namespaces
|
||||||
type SharedMachine struct {
|
type SharedMachine struct {
|
||||||
@ -35,3 +36,13 @@ func (h *Headscale) AddSharedMachineToNamespace(m *Machine, ns *Namespace) error
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveSharedMachineFromAllNamespaces removes a machine as a shared node from all namespaces
|
||||||
|
func (h *Headscale) RemoveSharedMachineFromAllNamespaces(m *Machine) error {
|
||||||
|
sharedMachine := SharedMachine{}
|
||||||
|
if result := h.db.Where("machine_id = ?", m.ID).Unscoped().Delete(&sharedMachine); result.Error != nil {
|
||||||
|
return result.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user