mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-23 18:15:26 +00:00
fix(machine): remove duplicate in forcedTags
This commit is contained in:
parent
0212db3fad
commit
c46a34e6b8
@ -374,7 +374,13 @@ func (h *Headscale) UpdateMachineFromDatabase(machine *Machine) error {
|
|||||||
|
|
||||||
// SetTags takes a Machine struct pointer and update the forced tags.
|
// SetTags takes a Machine struct pointer and update the forced tags.
|
||||||
func (h *Headscale) SetTags(machine *Machine, tags []string) error {
|
func (h *Headscale) SetTags(machine *Machine, tags []string) error {
|
||||||
machine.ForcedTags = tags
|
newTags := []string{}
|
||||||
|
for _, tag := range tags {
|
||||||
|
if !contains(newTags, tag) {
|
||||||
|
newTags = append(newTags, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
machine.ForcedTags = newTags
|
||||||
if err := h.UpdateACLRules(); err != nil && !errors.Is(err, errEmptyPolicy) {
|
if err := h.UpdateACLRules(); err != nil && !errors.Is(err, errEmptyPolicy) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -280,6 +280,49 @@ func (s *Suite) TestSerdeAddressStrignSlice(c *check.C) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Suite) TestSetTags(c *check.C) {
|
||||||
|
namespace, err := app.CreateNamespace("test")
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
|
||||||
|
pak, err := app.CreatePreAuthKey(namespace.Name, false, false, nil)
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
|
||||||
|
_, err = app.GetMachine("test", "testmachine")
|
||||||
|
c.Assert(err, check.NotNil)
|
||||||
|
|
||||||
|
machine := &Machine{
|
||||||
|
ID: 0,
|
||||||
|
MachineKey: "foo",
|
||||||
|
NodeKey: "bar",
|
||||||
|
DiscoKey: "faa",
|
||||||
|
Hostname: "testmachine",
|
||||||
|
NamespaceID: namespace.ID,
|
||||||
|
RegisterMethod: RegisterMethodAuthKey,
|
||||||
|
AuthKeyID: uint(pak.ID),
|
||||||
|
}
|
||||||
|
app.db.Save(machine)
|
||||||
|
|
||||||
|
// assign simple tags
|
||||||
|
sTags := []string{"tag:test", "tag:foo"}
|
||||||
|
err = app.SetTags(machine, sTags)
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
machine, err = app.GetMachine("test", "testmachine")
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
c.Assert(machine.ForcedTags, check.DeepEquals, StringList(sTags))
|
||||||
|
|
||||||
|
// assign duplicat tags, expect no errors but no doubles in DB
|
||||||
|
eTags := []string{"tag:bar", "tag:test", "tag:unknown", "tag:test"}
|
||||||
|
err = app.SetTags(machine, eTags)
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
machine, err = app.GetMachine("test", "testmachine")
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
c.Assert(
|
||||||
|
machine.ForcedTags,
|
||||||
|
check.DeepEquals,
|
||||||
|
StringList([]string{"tag:bar", "tag:test", "tag:unknown"}),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_getTags(t *testing.T) {
|
func Test_getTags(t *testing.T) {
|
||||||
type args struct {
|
type args struct {
|
||||||
aclPolicy *ACLPolicy
|
aclPolicy *ACLPolicy
|
||||||
|
Loading…
Reference in New Issue
Block a user