Documentation ¶
Overview ¶
Package rig provides an easy way to add multi-protocol connectivity and multi-os operation support to your application's Host objects
Index ¶
- Variables
- func DefaultPasswordCallback() (string, error)
- func GroupParams(params ...any) ([]exec.Option, []any)
- func ParseSSHPrivateKey(key []byte, callback PasswordCallback) ([]ssh.AuthMethod, error)
- func SetLogger(logger log.Logger)
- type Command
- type Connection
- func (c *Connection) Address() string
- func (c *Connection) Connect() error
- func (c *Connection) Disconnect()
- func (c Connection) Exec(cmd string, opts ...exec.Option) error
- func (c Connection) ExecInteractive(cmd string) error
- func (c Connection) ExecOutput(cmd string, opts ...exec.Option) (string, error)
- func (c Connection) ExecOutputf(s string, params ...any) (string, error)
- func (c Connection) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (rigfs.Waiter, error)
- func (c Connection) Execf(s string, params ...any) error
- func (c *Connection) Fsys() rigfs.Fsys
- func (c *Connection) IsConnected() bool
- func (c *Connection) IsWindows() bool
- func (c *Connection) Protocol() string
- func (c *Connection) SetDefaults()
- func (c Connection) String() string
- func (c Connection) Sudo(cmd string) (string, error)
- func (c *Connection) SudoFsys() rigfs.Fsys
- func (c *Connection) Upload(src, dst string, _ ...exec.Option) error
- type Localhost
- func (c *Localhost) Connect() error
- func (c *Localhost) Disconnect()
- func (c *Localhost) Exec(cmd string, opts ...exec.Option) error
- func (c *Localhost) ExecInteractive(cmd string) error
- func (c *Localhost) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
- func (c *Localhost) IPAddress() string
- func (c *Localhost) IsConnected() bool
- func (c *Localhost) IsWindows() bool
- func (c *Localhost) Protocol() string
- func (c *Localhost) String() string
- type OSVersion
- type PasswordCallback
- type SSH
- func (c *SSH) Connect() error
- func (c *SSH) Disconnect()
- func (c *SSH) Exec(cmd string, opts ...exec.Option) error
- func (c *SSH) ExecInteractive(cmd string) error
- func (c *SSH) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
- func (c *SSH) IPAddress() string
- func (c *SSH) IsConnected() bool
- func (c *SSH) IsWindows() bool
- func (c *SSH) Protocol() string
- func (c *SSH) SetDefaults()
- func (c *SSH) String() string
- type WinRM
- func (c *WinRM) Connect() error
- func (c *WinRM) Disconnect()
- func (c *WinRM) Exec(cmd string, opts ...exec.Option) error
- func (c *WinRM) ExecInteractive(cmd string) error
- func (c *WinRM) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
- func (c *WinRM) IPAddress() string
- func (c *WinRM) IsConnected() bool
- func (c *WinRM) IsWindows() bool
- func (c *WinRM) Protocol() string
- func (c *WinRM) SetDefaults()
- func (c *WinRM) String() string
Constants ¶
This section is empty.
Variables ¶
var ( ErrOS = errors.New("local os") // ErrOS is returned when an action fails on local OS ErrInvalidPath = errors.New("invalid path") // ErrInvalidPath is returned when a path is invalid ErrValidationFailed = errors.New("validation failed") // ErrValidationFailed is returned when a validation fails ErrSudoRequired = errors.New("sudo required") // ErrSudoRequired is returned when sudo is required ErrNotFound = errors.New("not found") // ErrNotFound is returned when a resource is not found ErrNotImplemented = errors.New("not implemented") // ErrNotImplemented is returned when a feature is not implemented ErrNotSupported = errors.New("not supported") // ErrNotSupported is returned when a feature is not supported ErrAuthFailed = errors.New("authentication failed") // ErrAuthFailed is returned when authentication fails ErrUploadFailed = errors.New("upload failed") // ErrUploadFailed is returned when an upload fails ErrNotConnected = errors.New("not connected") // ErrNotConnected is returned when a connection is not established ErrCantConnect = errors.New("can't connect") // ErrCantConnect is returned when a connection is not established and retrying will fail ErrCommandFailed = errors.New("command failed") // ErrCommandFailed is returned when a command fails )
var ( // ErrChecksumMismatch is returned when the checksum of an uploaded file does not match expectation ErrChecksumMismatch = errors.New("checksum mismatch") )
var ( // Resolvers exposes an array of resolve functions where you can add your own if you need to detect some OS rig doesn't already know about // (consider making a PR) Resolvers = []resolveFunc{resolveLinux, resolveDarwin, resolveWindows} )
var SSHConfigGetAll = ssh_config.GetAll
SSHConfigGetAll by default points to ssh_config package's GetAll() function you can override it with your own implementation for testing purposes
Functions ¶
func DefaultPasswordCallback ¶ added in v0.14.0
DefaultPasswordCallback is a default implementation for PasswordCallback
func GroupParams ¶ added in v0.4.3
GroupParams separates exec.Options from other sprintf templating args
func ParseSSHPrivateKey ¶ added in v0.14.0
func ParseSSHPrivateKey(key []byte, callback PasswordCallback) ([]ssh.AuthMethod, error)
ParseSSHPrivateKey is a convenience utility to parses a private key and return []ssh.AuthMethod to be used in SSH{} AuthMethods field. This way you can avoid importing golang.org/x/crypto/ssh in your code and handle the passphrase prompt in a callback function.
Types ¶
type Command ¶ added in v0.11.0
type Command struct {
// contains filtered or unexported fields
}
Command implements the Waiter interface
type Connection ¶
type Connection struct { WinRM *WinRM `yaml:"winRM,omitempty"` SSH *SSH `yaml:"ssh,omitempty"` Localhost *Localhost `yaml:"localhost,omitempty"` OSVersion *OSVersion `yaml:"-"` // contains filtered or unexported fields }
Connection is a Struct you can embed into your application's "Host" types to give them multi-protocol connectivity.
All of the important fields have YAML tags.
If you have a host like this:
type Host struct { rig.Connection `yaml:"connection"` }
and a YAML like this:
hosts: - connection: ssh: address: 10.0.0.1 port: 8022
you can then simply do this:
var hosts []*Host if err := yaml.Unmarshal(data, &hosts); err != nil { panic(err) } for _, h := range hosts { err := h.Connect() if err != nil { panic(err) } output, err := h.ExecOutput("echo hello") }
func (*Connection) Address ¶ added in v0.3.3
func (c *Connection) Address() string
Address returns the connection address
func (*Connection) Connect ¶
func (c *Connection) Connect() error
Connect to the host and identify the operating system and sudo capability
func (Connection) Exec ¶
func (c Connection) Exec(cmd string, opts ...exec.Option) error
Exec runs a command on the host
func (Connection) ExecInteractive ¶
func (c Connection) ExecInteractive(cmd string) error
ExecInteractive executes a command on the host and passes control of local input to the remote command
func (Connection) ExecOutput ¶
ExecOutput runs a command on the host and returns the output as a String
func (Connection) ExecOutputf ¶
func (c Connection) ExecOutputf(s string, params ...any) (string, error)
ExecOutputf is like ExecOutput but you can use Sprintf templating for the command
func (Connection) ExecStreams ¶ added in v0.11.0
func (c Connection) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (rigfs.Waiter, error)
ExecStreams executes a command on the remote host and uses the passed in streams for stdin, stdout and stderr. It returns a Waiter with a .Wait() function that blocks until the command finishes and returns an error if the exit code is not zero.
func (Connection) Execf ¶
func (c Connection) Execf(s string, params ...any) error
Execf is just like `Exec` but you can use Sprintf templating for the command
func (*Connection) Fsys ¶ added in v0.11.0
func (c *Connection) Fsys() rigfs.Fsys
Fsys returns a fs.FS compatible filesystem interface for accessing files on remote hosts
func (*Connection) IsConnected ¶
func (c *Connection) IsConnected() bool
IsConnected returns true if the client is assumed to be connected. "Assumed" - as in `Connect()` has been called and no error was returned. The underlying client may actually have disconnected and has become inoperable, but rig won't know that until you try to execute commands on the connection.
func (*Connection) IsWindows ¶
func (c *Connection) IsWindows() bool
IsWindows returns true on windows hosts
func (*Connection) Protocol ¶ added in v0.3.3
func (c *Connection) Protocol() string
Protocol returns the connection protocol name
func (Connection) String ¶
func (c Connection) String() string
String returns a printable representation of the connection, which will look like: `[ssh] address:port`
func (Connection) Sudo ¶ added in v0.4.0
func (c Connection) Sudo(cmd string) (string, error)
Sudo formats a command string to be run with elevated privileges
func (*Connection) SudoFsys ¶ added in v0.11.0
func (c *Connection) SudoFsys() rigfs.Fsys
SudoFsys returns a fs.FS compatible filesystem interface for accessing files on remote hosts with sudo permissions
type Localhost ¶
type Localhost struct {
Enabled bool `yaml:"enabled" validate:"required,eq=true" default:"true"`
}
Localhost is a direct localhost connection
func (*Localhost) Disconnect ¶
func (c *Localhost) Disconnect()
Disconnect on local connection does nothing
func (*Localhost) ExecInteractive ¶
ExecInteractive executes a command on the host and copies stdin/stdout/stderr from local host
func (*Localhost) ExecStreams ¶ added in v0.11.0
func (c *Localhost) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
ExecStreams executes a command on the remote host and uses the passed in streams for stdin, stdout and stderr. It returns a Waiter with a .Wait() function that blocks until the command finishes and returns an error if the exit code is not zero.
func (*Localhost) IsConnected ¶
IsConnected for local connections is always true
type OSVersion ¶
OSVersion host operating system version information
func GetOSVersion ¶
func GetOSVersion(conn *Connection) (OSVersion, error)
GetOSVersion runs through the Resolvers and tries to figure out the OS version information
type PasswordCallback ¶ added in v0.7.0
PasswordCallback is a function that is called when a passphrase is needed to decrypt a private key
type SSH ¶
type SSH struct { Address string `yaml:"address" validate:"required,hostname_rfc1123|ip"` User string `yaml:"user" validate:"required" default:"root"` Port int `yaml:"port" default:"22" validate:"gt=0,lte=65535"` KeyPath *string `yaml:"keyPath" validate:"omitempty"` HostKey string `yaml:"hostKey,omitempty"` Bastion *SSH `yaml:"bastion,omitempty"` PasswordCallback PasswordCallback `yaml:"-"` // AuthMethods can be used to pass in a list of ssh.AuthMethod objects // for example to use a private key from memory: // ssh.PublicKeys(privateKey) // For convenience, you can use ParseSSHPrivateKey() to parse a private key: // authMethods, err := rig.ParseSSHPrivateKey(key, rig.DefaultPassphraseCallback) AuthMethods []ssh.AuthMethod `yaml:"-"` // contains filtered or unexported fields }
SSH describes an SSH connection
func (*SSH) ExecInteractive ¶
ExecInteractive executes a command on the host and copies stdin/stdout/stderr from local host
func (*SSH) ExecStreams ¶ added in v0.11.0
func (c *SSH) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
ExecStreams executes a command on the remote host and uses the passed in streams for stdin, stdout and stderr. It returns a Waiter with a .Wait() function that blocks until the command finishes and returns an error if the exit code is not zero.
func (*SSH) IsConnected ¶
IsConnected returns true if the client is connected
type WinRM ¶
type WinRM struct { Address string `yaml:"address" validate:"required,hostname_rfc1123|ip"` User string `yaml:"user" validate:"omitempty,gt=2" default:"Administrator"` Port int `yaml:"port" default:"5985" validate:"gt=0,lte=65535"` Password string `yaml:"password,omitempty"` UseHTTPS bool `yaml:"useHTTPS" default:"false"` Insecure bool `yaml:"insecure" default:"false"` UseNTLM bool `yaml:"useNTLM" default:"false"` CACertPath string `yaml:"caCertPath,omitempty" validate:"omitempty,file"` CertPath string `yaml:"certPath,omitempty" validate:"omitempty,file"` KeyPath string `yaml:"keyPath,omitempty" validate:"omitempty,file"` TLSServerName string `yaml:"tlsServerName,omitempty" validate:"omitempty,hostname_rfc1123|ip"` Bastion *SSH `yaml:"bastion,omitempty"` // contains filtered or unexported fields }
WinRM describes a WinRM connection with its configuration options
func (*WinRM) ExecInteractive ¶
ExecInteractive executes a command on the host and copies stdin/stdout/stderr from local host
func (*WinRM) ExecStreams ¶ added in v0.11.0
func (c *WinRM) ExecStreams(cmd string, stdin io.ReadCloser, stdout, stderr io.Writer, opts ...exec.Option) (waiter, error)
ExecStreams executes a command on the remote host and uses the passed in streams for stdin, stdout and stderr. It returns a Waiter with a .Wait() function that blocks until the command finishes and returns an error if the exit code is not zero.
func (*WinRM) IsConnected ¶
IsConnected returns true if the client is connected
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
examples
|
|
Package exec provides helpers for setting execution options for commands
|
Package exec provides helpers for setting execution options for commands |
Package log provides a simple pluggable logging interface
|
Package log provides a simple pluggable logging interface |
Package os provides a platform-independent interface to operating system functionality.
|
Package os provides a platform-independent interface to operating system functionality. |
initsystem
Package initsystem provides an abstraction over several supported init systems.
|
Package initsystem provides an abstraction over several supported init systems. |
linux
Package linux contains configurers for various linux based distributions
|
Package linux contains configurers for various linux based distributions |
linux/enterpriselinux
Package enterpriselinux provides OS modules for Enterprise Linux based distributions
|
Package enterpriselinux provides OS modules for Enterprise Linux based distributions |
mac
Package darwin provides a configurer for macOS
|
Package darwin provides a configurer for macOS |
registry
Package registry is a registry of OS support modules
|
Package registry is a registry of OS support modules |
support
Package support can be imported to load all the stock os support packages.
|
Package support can be imported to load all the stock os support packages. |
windows
Package windows provides OS support for Windows.
|
Package windows provides OS support for Windows. |
pkg
|
|
powershell
Package powershell provides helpers for powershell command generation
|
Package powershell provides helpers for powershell command generation |
rigfs
Package rigfs provides fs.FS implementations for remote filesystems.
|
Package rigfs provides fs.FS implementations for remote filesystems. |
ssh/agent
Package agent provides an implementation of the SSH agent protocol.
|
Package agent provides an implementation of the SSH agent protocol. |
ssh/hostkey
Package hostkey implements a callback for the ssh.ClientConfig.HostKeyCallback
|
Package hostkey implements a callback for the ssh.ClientConfig.HostKeyCallback |