communicator

package module
v0.0.0-...-9374347 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 12, 2023 License: MPL-2.0 Imports: 13 Imported by: 1

README

go-exec-communicator

Terraform has superpowers to run both remote and local commands with many different authentication methods and networking constructs through provisioners.

Unfortunately that code is hidden inside internal packages and hard to use.

This repository aims to extract those execution communication capabilities out into a simple, reusable package. Mostly for use in the Steampipe exec plugin.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Retry

func Retry(ctx context.Context, f func() error) error

Retry retries the function f until it returns a nil error, a Fatal error, or the context expires.

Types

type Communicator

type Communicator interface {
	// Connect is used to set up the connection
	Connect(*shared.Outputter) error

	// Disconnect is used to terminate the connection
	Disconnect() error

	// Timeout returns the configured connection timeout
	Timeout() time.Duration

	// ScriptPath returns the configured script path
	ScriptPath() string

	// Start executes a remote command in a new session
	Start(*remote.Cmd) error

	// Upload is used to upload a single file
	Upload(string, io.Reader) error

	// UploadScript is used to upload a file as an executable script
	UploadScript(string, io.Reader) error

	// UploadDir is used to upload a directory
	UploadDir(string, string) error
}

Communicator is an interface that must be implemented by all communicators used for any of the provisioners

func New

New returns a configured Communicator or an error if the connection type is not supported

type Fatal

type Fatal interface {
	FatalError() error
}

Fatal is an interface that error values can return to halt Retry

type MockCommunicator

type MockCommunicator struct {
	RemoteScriptPath string
	Commands         map[string]bool
	Uploads          map[string]string
	UploadScripts    map[string]string
	UploadDirs       map[string]string
	CommandFunc      func(*remote.Cmd) error
	DisconnectFunc   func() error
	ConnTimeout      time.Duration
}

MockCommunicator is an implementation of Communicator that can be used for tests.

func (*MockCommunicator) Connect

func (c *MockCommunicator) Connect(o *shared.Outputter) (err error)

Connect implementation of communicator.Communicator interface

func (*MockCommunicator) Disconnect

func (c *MockCommunicator) Disconnect() error

Disconnect implementation of communicator.Communicator interface

func (*MockCommunicator) ScriptPath

func (c *MockCommunicator) ScriptPath() string

ScriptPath implementation of communicator.Communicator interface

func (*MockCommunicator) Start

func (c *MockCommunicator) Start(r *remote.Cmd) error

Start implementation of communicator.Communicator interface

func (*MockCommunicator) Timeout

func (c *MockCommunicator) Timeout() time.Duration

Timeout implementation of communicator.Communicator interface

func (*MockCommunicator) Upload

func (c *MockCommunicator) Upload(path string, input io.Reader) error

Upload implementation of communicator.Communicator interface

func (*MockCommunicator) UploadDir

func (c *MockCommunicator) UploadDir(dst string, src string) error

UploadDir implementation of communicator.Communicator interface

func (*MockCommunicator) UploadScript

func (c *MockCommunicator) UploadScript(path string, input io.Reader) error

UploadScript implementation of communicator.Communicator interface

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL