Documentation
¶
Overview ¶
Provides remote file and command functions
Index ¶
- Variables
- func CopyAll(srcHost Host, srcDir string, dstHost Host, dstDir string) (err error)
- func CopyFile(srcHost Host, srcPath string, dstHost Host, dstPath string) (err error)
- func GetFileOwner(h Host, info fs.FileInfo) (uid, gid int)
- type Host
- type Local
- func (h *Local) Abs(dir string) (abs string, err error)
- func (h *Local) Base(path string) string
- func (h *Local) Chown(name string, uid, gid int) (err error)
- func (h *Local) Chtimes(path string, atime time.Time, mtime time.Time) (err error)
- func (h *Local) Create(p string, perms fs.FileMode) (out io.WriteCloser, err error)
- func (h *Local) Dir(path string) string
- func (h *Local) Ext(path string) string
- func (h *Local) GetFs() afero.Fs
- func (h *Local) Getwd() (dir string, err error)
- func (h *Local) Glob(pattern string) (paths []string, err error)
- func (h *Local) HostPath(p string) string
- func (h *Local) Hostname() string
- func (h *Local) IsAbs(name string) bool
- func (h *Local) IsAvailable() (bool, error)
- func (h *Local) IsLocalhost() bool
- func (h *Local) Join(elem ...string) string
- func (h *Local) LastError() error
- func (h *Local) Lchown(name string, uid, gid int) (err error)
- func (h *Local) Lchtimes(path string, atime time.Time, mtime time.Time) (err error)
- func (h *Local) Link(oldname, newname string) (err error)
- func (h *Local) Lstat(name string) (f fs.FileInfo, err error)
- func (h *Local) Mkdir(p string, perm os.FileMode) (err error)
- func (h *Local) MkdirAll(p string, perm os.FileMode) (err error)
- func (h *Local) OS() string
- func (h *Local) Open(name string) (f io.ReadSeekCloser, err error)
- func (h *Local) ReadDir(name string) (dirs []os.DirEntry, err error)
- func (h *Local) ReadFile(name string) (b []byte, err error)
- func (h *Local) Readlink(file string) (link string, err error)
- func (h *Local) Remove(name string) (err error)
- func (h *Local) RemoveAll(name string) (err error)
- func (h *Local) Rename(oldpath, newpath string) (err error)
- func (h *Local) Run(cmd *exec.Cmd, options ...ProcessOption) (output []byte, err error)
- func (h *Local) ServerVersion() string
- func (h *Local) Signal(pid int, signal syscall.Signal) (err error)
- func (h *Local) Split(path string) (dir, file string)
- func (h *Local) Start(cmd *exec.Cmd, options ...ProcessOption) (pid int, err error)
- func (h *Local) Stat(name string) (f fs.FileInfo, err error)
- func (h *Local) String() string
- func (h *Local) Symlink(oldname, newname string) (err error)
- func (h *Local) TempDir() string
- func (h *Local) ToSlash(path string) string
- func (h *Local) Uname() (os, arch string, err error)
- func (h *Local) Username() string
- func (h *Local) VolumeName(path string) string
- func (h *Local) WalkDir(dir string, fn fs.WalkDirFunc) error
- func (h *Local) WriteFile(name string, data []byte, perm os.FileMode) (err error)
- type ProcessOption
- type SSHOption
- type SSHRemote
- func (h *SSHRemote) Abs(dir string) (string, error)
- func (h *SSHRemote) Base(file string) string
- func (h *SSHRemote) Chown(name string, uid, gid int) error
- func (h *SSHRemote) Chtimes(path string, atime time.Time, mtime time.Time) (err error)
- func (h *SSHRemote) Close()
- func (h *SSHRemote) CloseSFTP()
- func (h *SSHRemote) Create(p string, perms fs.FileMode) (out io.WriteCloser, err error)
- func (h *SSHRemote) DialSFTP() (f *sftp.Client, err error)
- func (h *SSHRemote) DialSSH() (sc *ssh.Client, err error)
- func (h *SSHRemote) Dir(file string) string
- func (h *SSHRemote) Ext(file string) string
- func (h *SSHRemote) GetFs() afero.Fs
- func (h *SSHRemote) Getwd() (dir string, err error)
- func (h *SSHRemote) Glob(pattern string) ([]string, error)
- func (h *SSHRemote) HostPath(p string) string
- func (s *SSHRemote) Hostname() string
- func (h *SSHRemote) IsAbs(name string) bool
- func (h *SSHRemote) IsAvailable() (ok bool, err error)
- func (h *SSHRemote) IsLocalhost() bool
- func (h *SSHRemote) Join(elem ...string) string
- func (h *SSHRemote) LastError() error
- func (h *SSHRemote) Lchown(name string, uid, gid int) error
- func (h *SSHRemote) Lchtimes(path string, atime time.Time, mtime time.Time) (err error)
- func (h *SSHRemote) Link(oldname, newname string) error
- func (h *SSHRemote) Lstat(name string) (fs.FileInfo, error)
- func (h *SSHRemote) Mkdir(p string, perm os.FileMode) error
- func (h *SSHRemote) MkdirAll(p string, perm os.FileMode) error
- func (h *SSHRemote) NewSession() (sess *ssh.Session, err error)
- func (h *SSHRemote) OS() string
- func (h *SSHRemote) Open(name string) (io.ReadSeekCloser, error)
- func (h *SSHRemote) ReadDir(name string) (dirs []os.DirEntry, err error)
- func (h *SSHRemote) ReadFile(name string) (b []byte, err error)
- func (h *SSHRemote) Readlink(file string) (string, error)
- func (h *SSHRemote) Remove(name string) error
- func (h *SSHRemote) RemoveAll(name string) (err error)
- func (h *SSHRemote) Rename(oldpath, newpath string) error
- func (h *SSHRemote) Run(cmd *exec.Cmd, options ...ProcessOption) (output []byte, err error)
- func (h *SSHRemote) ServerVersion() string
- func (h *SSHRemote) Signal(pid int, signal syscall.Signal) (err error)
- func (h *SSHRemote) Split(file string) (dir, base string)
- func (h *SSHRemote) Start(cmd *exec.Cmd, options ...ProcessOption) (pid int, err error)
- func (h *SSHRemote) Stat(name string) (fs.FileInfo, error)
- func (h *SSHRemote) String() string
- func (h *SSHRemote) Symlink(oldname, newname string) error
- func (h *SSHRemote) TempDir() string
- func (h *SSHRemote) ToSlash(path string) string
- func (h *SSHRemote) Uname() (os, arch string, err error)
- func (h *SSHRemote) Username() string
- func (h *SSHRemote) VolumeName(path string) string
- func (h *SSHRemote) WalkDir(dir string, fn fs.WalkDirFunc) error
- func (h *SSHRemote) WriteFile(name string, data []byte, perm os.FileMode) (err error)
Constants ¶
This section is empty.
Variables ¶
var ( ErrInvalidArgs = errors.New("invalid arguments") ErrNotSupported = errors.New("not supported") ErrNotAvailable = errors.New("not available") ErrExist = errors.New("already exists") ErrNotExist = errors.New("does not exist") )
var ListSeparators = map[string]string{
"windows": `;`,
"linux": ":",
"darwin": ":",
}
ListSeparators for separating lists of paths, e.g. in PATH environment variables, by OS
var Localhost = NewLocal()
var Seperators = map[string]string{
"windows": `\`,
"linux": "/",
"darwin": "/",
}
Separators for file paths and lists, by OS
Functions ¶
Types ¶
type Host ¶
type Host interface {
// informational
String() string
GetFs() afero.Fs
HostPath(p string) string // return the path as a string, prefixed with "host:" if not local
Hostname() string
ServerVersion() string // return the SSH server version if remote, or the same as OS() if local
OS() string // return whatever runtime.GOOS would return for the host
IsAvailable() (bool, error)
IsLocalhost() bool
LastError() error
Uname() (string, string, error)
Username() string
// filepath operations
Abs(name string) (string, error)
Base(string) string
// Clean()
Dir(string) string
// EvalSymlinks()
Ext(string) string
IsAbs(name string) bool
// IsLocal()
Join(...string) string
// Localize()
// Match()
// Rel()
Split(string) (dir, file string)
// SplitList()
ToSlash(string) string
VolumeName(string) string
// Walk()
WalkDir(dir string, fn fs.WalkDirFunc) error
// file operations
Getwd() (dir string, err error)
Chown(name string, uid, gid int) (err error)
Chtimes(path string, atime time.Time, mtime time.Time) (err error)
Glob(pattern string) (paths []string, err error)
Link(oldname, newname string) (err error)
Lchown(name string, uid, gid int) (err error)
Lchtimes(path string, atime time.Time, mtime time.Time) (err error)
Lstat(name string) (f fs.FileInfo, err error)
Mkdir(name string, perm os.FileMode) (err error)
MkdirAll(p string, perm os.FileMode) (err error)
ReadDir(name string) (dirs []os.DirEntry, err error)
ReadFile(name string) (b []byte, err error)
Readlink(file string) (link string, err error)
Remove(name string) (err error)
RemoveAll(name string) (err error)
Rename(oldpath, newpath string) (err error)
Stat(name string) (f fs.FileInfo, err error)
Symlink(oldname, newname string) (err error)
TempDir() string
WriteFile(name string, data []byte, perm os.FileMode) (err error)
// these two do not conform to the afero / os interface
Open(name string) (f io.ReadSeekCloser, err error)
Create(p string, perms fs.FileMode) (out io.WriteCloser, err error)
// process control
Signal(pid int, signal syscall.Signal) (err error)
Start(cmd *exec.Cmd, options ...ProcessOption) (pid int, err error)
Run(cmd *exec.Cmd, options ...ProcessOption) (stdout []byte, err error)
}
Host encapsulates all the methods required by callers to manage Geneos installs on a host.
This should have been based on (and extending) something like Afero, but this was quicker for the moment. This interface also provides process handling etc.
func NewSSHRemote ¶
NewSSHRemote returns a new SSHRemote with the given name and options. The name is used as the key for caching SSH and SFTP sessions and so should be unique for each remote host. Options are used to set the hostname, port, username and authentication method (password or private keys) for the remote host. If no options are given then the local username is used and the hostname is set to the name of the remote.
type Local ¶
type Local struct {
}
Localhost operations
func (*Local) IsAvailable ¶
IsAvailable returns true for Local
func (*Local) IsLocalhost ¶ added in v1.27.1
IsLocalhost returns true if h is local, which for Local it is
func (*Local) OS ¶ added in v1.27.1
OS returns the operating system of the host, which for Local is whatever runtime.GOOS returns
func (*Local) ReadDir ¶
ReadDir reads the named directory and returns all its directory entries sorted by name.
func (*Local) Run ¶
Run starts a program, waits for completion and returns the output and/or any error. errfile is either absolute or relative to home.
func (*Local) ServerVersion ¶
func (*Local) VolumeName ¶ added in v1.27.1
type ProcessOption ¶ added in v1.27.0
type ProcessOption func(*processOptions)
func ProcessAllowCoreDumps ¶ added in v1.27.0
func ProcessAllowCoreDumps() ProcessOption
func ProcessCPUAffinity ¶ added in v1.28.0
func ProcessCPUAffinity(cpus ...int) ProcessOption
func ProcessDetach ¶ added in v1.26.0
func ProcessDetach() ProcessOption
ProcessDetach makes the process run detached from the parent
func ProcessErrfile ¶ added in v1.26.0
func ProcessErrfile(errfile string) ProcessOption
type SSHOption ¶ added in v1.27.0
type SSHOption func(*SSHRemote)
func PrivateKeyFiles ¶ added in v1.14.2
PrivateKeyFiles add the given paths as private key files to use for SSH connections. The files must (at this time) not be passphrase protected.
type SSHRemote ¶
type SSHRemote struct {
// contains filtered or unexported fields
}
An SSHRemote a type that satisfies the Host interface for SSH attached remote hosts
func (*SSHRemote) DialSFTP ¶
DialSFTP connects to the remote host using SSH and returns an *sftp.Client is successful. The connection is cached and returned if found, without checking if it is still valid.
func (*SSHRemote) DialSSH ¶ added in v1.27.0
DialSSH connects to a remote host using ssh and returns an *ssh.Client on success. Each connection is cached and returned if found without checking if it is still valid. To remove a session call Close()
func (*SSHRemote) IsAbs ¶ added in v1.14.2
IsAbs run from unix will use path.IsAbs unless the remote is windows in which case it checks the volume name, stripping it and testing the rest of the path
func (*SSHRemote) IsAvailable ¶
IsAvailable returns true is the remote host can be contacted
func (*SSHRemote) IsLocalhost ¶ added in v1.27.1
IsLocalhost returns true if h is local, which for SSH is always false
func (*SSHRemote) NewSession ¶ added in v1.10.2
NewSession wraps ssh.NewSession but does some retries
func (*SSHRemote) ReadDir ¶
ReadDir reads the named directory and returns all its directory entries sorted by name.
func (*SSHRemote) Run ¶
Run starts a process on an SSH attached remote host h. It uses a shell and waits for the process status before returning. It returns the output and any error. errfile is an optional (remote) file for stderr output
func (*SSHRemote) ServerVersion ¶
func (*SSHRemote) Signal ¶
Signal sends a signal to the remote pid and returns nil on success or os.ProcessDone if the process is not found.
func (*SSHRemote) Start ¶
Start starts a process on an SSH attached remote host h. It uses a shell and backgrounds and redirects. May not work on all remotes and for all processes. errfile has stdout/stderr appended to it, use '/dev/null' if no errfile is wanted.
func (*SSHRemote) TempDir ¶ added in v1.6.3
TempDir returns a path on the remote to a temporary directory
BUG This is currently broken - hardwired values for now