Files
df/tree/.local/nu/tailscale.nu

41 lines
997 B
Plaintext

# Get networking info about tailscale peers
def "tailscale peer" [
hostname?: string
get_field?: cell-path
]: nothing -> any {
let get_field = ($get_field | default ([] | into cell-path))
let status = (^tailscale status --json | from json)
let peers = ($status | get Peer | transpose key fields | flatten fields)
let peers = ($peers | each { |peer|
let ipv4 = $peer.TailscaleIPs | where { |ip| "." in $ip } | first
let ipv6 = $peer.TailscaleIPs | where { |ip| ":" in $ip } | first
{
host: $peer.HostName,
ipv4: $ipv4,
ipv6: $ipv6,
online: $peer.Online,
active: $peer.Active,
rx: ($peer.RxBytes | into filesize),
tx: ($peer.TxBytes | into filesize),
}
})
if $hostname == null {
$peers
} else {
$peers | where host == $hostname | first | get $get_field
}
}
# SSH to a tailscale peer
def "tailscale ssh" [
hostname?: string
...ssh_flags: string
]: nothing -> any {
ssh -o $"HostName (tailscale peer $hostname | get ipv6)" $hostname ...$ssh_flags
}