open-nomad/command/agent/host/unix.go

70 lines
1.0 KiB
Go

//go:build !windows
// +build !windows
package host
import (
"strings"
"syscall"
"golang.org/x/sys/unix"
)
// uname returns the syscall like `uname -a`
func uname() string {
u := &unix.Utsname{}
err := unix.Uname(u)
if err != nil {
return err.Error()
}
uname := strings.Join([]string{
nullStr(u.Machine[:]),
nullStr(u.Nodename[:]),
nullStr(u.Release[:]),
nullStr(u.Sysname[:]),
nullStr(u.Version[:]),
}, " ")
return uname
}
func etcHosts() string {
return slurp("/etc/hosts")
}
func resolvConf() string {
return slurp("/etc/resolv.conf")
}
func nullStr(bs []byte) string {
// find the null byte
var i int
var b byte
for i, b = range bs {
if b == 0 {
break
}
}
return string(bs[:i])
}
type df struct {
s *syscall.Statfs_t
}
func makeDf(path string) (*df, error) {
var s syscall.Statfs_t
err := syscall.Statfs(path, &s)
return &df{s: &s}, err
}
func (d *df) total() uint64 {
return d.s.Blocks * uint64(d.s.Bsize)
}
func (d *df) available() uint64 {
return d.s.Bavail * uint64(d.s.Bsize)
}