Skip to content

Commit

Permalink
Merge branch 'main' into feature/configure-randomize-port
Browse files Browse the repository at this point in the history
  • Loading branch information
kradalby authored Jun 11, 2022
2 parents 9ff09b7 + f93cf4b commit 02cc6bc
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 6 deletions.
26 changes: 20 additions & 6 deletions app.go
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,9 @@ func (h *Headscale) Serve() error {
}
log.Info().
Str("path", aclPath).
Msg("ACL policy successfully reloaded")
Msg("ACL policy successfully reloaded, notifying nodes of change")

h.setLastStateChangeToNow()
}

default:
Expand Down Expand Up @@ -756,13 +758,25 @@ func (h *Headscale) getTLSSettings() (*tls.Config, error) {
}
}

func (h *Headscale) setLastStateChangeToNow(namespace string) {
func (h *Headscale) setLastStateChangeToNow(namespaces ...string) {
var err error

now := time.Now().UTC()
lastStateUpdate.WithLabelValues("", "headscale").Set(float64(now.Unix()))
if h.lastStateChange == nil {
h.lastStateChange = xsync.NewMapOf[time.Time]()

if len(namespaces) == 0 {
namespaces, err = h.ListNamespacesStr()
if err != nil {
log.Error().Caller().Err(err).Msg("failed to fetch all namespaces, failing to update last changed state.")
}
}

for _, namespace := range namespaces {
lastStateUpdate.WithLabelValues(namespace, "headscale").Set(float64(now.Unix()))
if h.lastStateChange == nil {
h.lastStateChange = xsync.NewMapOf[time.Time]()
}
h.lastStateChange.Store(namespace, now)
}
h.lastStateChange.Store(namespace, now)
}

func (h *Headscale) getLastStateChange(namespaces ...string) time.Time {
Expand Down
15 changes: 15 additions & 0 deletions namespaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,21 @@ func (h *Headscale) ListNamespaces() ([]Namespace, error) {
return namespaces, nil
}

func (h *Headscale) ListNamespacesStr() ([]string, error) {
namespaces, err := h.ListNamespaces()
if err != nil {
return []string{}, err
}

namespaceStrs := make([]string, len(namespaces))

for index, namespace := range namespaces {
namespaceStrs[index] = namespace.Name
}

return namespaceStrs, nil
}

// ListMachinesInNamespace gets all the nodes in a given namespace.
func (h *Headscale) ListMachinesInNamespace(name string) ([]Machine, error) {
err := CheckForFQDNRules(name)
Expand Down

0 comments on commit 02cc6bc

Please sign in to comment.