mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-28 06:51:34 +01:00
Add a new resource, `SiderolinkStatus`, which combines the following info: - The Siderolink API endpoint without the query parameters or fragments (potentially sensitive info due to the join token) - The status of the Siderolink connection This resource is not set as sensitive, so it can be retrieved by the users with `os:operator` role (e.g., using `talosctl dashboard` through Omni). Make use of this resource in the dashboard to display the status of the Siderolink connection. Additionally, rework the status columns in the dashboard to: - Display a Linux terminal compatible "tick" or a "cross" prefix for statuses in addition to the red/green color coding. - Move and combine some statuses to save rows and make them more even. Closes siderolabs/talos#8643. Signed-off-by: Utku Ozdemir <utku.ozdemir@siderolabs.com>
39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
// Package siderolink provides controllers which manage file resources.
|
|
package siderolink
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/siderolabs/siderolink/pkg/wireguard"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
|
|
"github.com/siderolabs/talos/pkg/machinery/constants"
|
|
)
|
|
|
|
// WireguardClient allows mocking Wireguard client.
|
|
type WireguardClient interface {
|
|
Device(string) (*wgtypes.Device, error)
|
|
Close() error
|
|
}
|
|
|
|
func peerDown(wgClient WireguardClient) (bool, error) {
|
|
wgDevice, err := wgClient.Device(constants.SideroLinkName)
|
|
if err != nil {
|
|
return false, fmt.Errorf("error reading Wireguard device: %w", err)
|
|
}
|
|
|
|
if len(wgDevice.Peers) != 1 {
|
|
return false, fmt.Errorf("unexpected number of Wireguard peers: %d", len(wgDevice.Peers))
|
|
}
|
|
|
|
peer := wgDevice.Peers[0]
|
|
since := time.Since(peer.LastHandshakeTime)
|
|
|
|
return since >= wireguard.PeerDownInterval, nil
|
|
}
|