mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-23 18:15:26 +00:00
Implement ExpireMachine rpc
This commit is contained in:
parent
f1c05f8010
commit
bd1d1b1a3b
21
grpcv1.go
21
grpcv1.go
@ -201,6 +201,27 @@ func (api headscaleV1APIServer) DeleteMachine(
|
|||||||
return &v1.DeleteMachineResponse{}, nil
|
return &v1.DeleteMachineResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (api headscaleV1APIServer) ExpireMachine(
|
||||||
|
ctx context.Context,
|
||||||
|
request *v1.ExpireMachineRequest,
|
||||||
|
) (*v1.ExpireMachineResponse, error) {
|
||||||
|
machine, err := api.h.GetMachineByID(request.GetMachineId())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
api.h.ExpireMachine(
|
||||||
|
machine,
|
||||||
|
)
|
||||||
|
|
||||||
|
log.Trace().
|
||||||
|
Str("machine", machine.Name).
|
||||||
|
Time("expiry", *machine.Expiry).
|
||||||
|
Msg("machine expired")
|
||||||
|
|
||||||
|
return &v1.ExpireMachineResponse{Machine: machine.toProto()}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (api headscaleV1APIServer) ListMachines(
|
func (api headscaleV1APIServer) ListMachines(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *v1.ListMachinesRequest,
|
request *v1.ListMachinesRequest,
|
||||||
|
@ -262,6 +262,14 @@ func (h *Headscale) UpdateMachine(machine *Machine) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExpireMachine takes a Machine struct and sets the expire field to now.
|
||||||
|
func (h *Headscale) ExpireMachine(machine *Machine) {
|
||||||
|
now := time.Now()
|
||||||
|
machine.Expiry = &now
|
||||||
|
|
||||||
|
h.db.Save(machine)
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteMachine softs deletes a Machine from the database.
|
// DeleteMachine softs deletes a Machine from the database.
|
||||||
func (h *Headscale) DeleteMachine(machine *Machine) error {
|
func (h *Headscale) DeleteMachine(machine *Machine) error {
|
||||||
err := h.RemoveSharedMachineFromAllNamespaces(machine)
|
err := h.RemoveSharedMachineFromAllNamespaces(machine)
|
||||||
|
@ -3,6 +3,7 @@ package headscale
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
)
|
)
|
||||||
@ -164,3 +165,37 @@ func (s *Suite) TestGetDirectPeers(c *check.C) {
|
|||||||
c.Assert(peersOfMachine0[5].Name, check.Equals, "testmachine7")
|
c.Assert(peersOfMachine0[5].Name, check.Equals, "testmachine7")
|
||||||
c.Assert(peersOfMachine0[8].Name, check.Equals, "testmachine10")
|
c.Assert(peersOfMachine0[8].Name, check.Equals, "testmachine10")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Suite) TestExpireMachine(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",
|
||||||
|
Name: "testmachine",
|
||||||
|
NamespaceID: namespace.ID,
|
||||||
|
Registered: true,
|
||||||
|
RegisterMethod: RegisterMethodAuthKey,
|
||||||
|
AuthKeyID: uint(pak.ID),
|
||||||
|
Expiry: &time.Time{},
|
||||||
|
}
|
||||||
|
app.db.Save(machine)
|
||||||
|
|
||||||
|
machineFromDB, err := app.GetMachine("test", "testmachine")
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
|
||||||
|
c.Assert(machineFromDB.isExpired(), check.Equals, false)
|
||||||
|
|
||||||
|
app.ExpireMachine(machineFromDB)
|
||||||
|
|
||||||
|
c.Assert(machineFromDB.isExpired(), check.Equals, true)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user