portercontext

package
v1.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 28, 2024 License: Apache-2.0 Imports: 43 Imported by: 14

Documentation

Overview

Package portercontext contains our common application Context structure that we should use to interact with stdin/stdout/stederr, running commands, and interacting with the file system. It is not a replacement for the Go standard library context package.

Index

Constants

View Source
const (
	// MixinOutputsDir represents the directory where mixin output files are written/read
	MixinOutputsDir = "/cnab/app/porter/outputs"

	// EnvCorrelationID is the name of the environment variable containing the
	// id to correlate logs with a workflow.
	EnvCorrelationID = "PORTER_CORRELATION_ID"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type CensoredWriter

type CensoredWriter struct {
	// contains filtered or unexported fields
}

CensoredWriter is a writer wrapping the provided io.Writer with logic to censor certain values

func NewCensoredWriter

func NewCensoredWriter(writer io.Writer) *CensoredWriter

NewCensoredWriter returns a new CensoredWriter

func (*CensoredWriter) SetSensitiveValues

func (cw *CensoredWriter) SetSensitiveValues(vals []string)

SetSensitiveValues sets values needing masking for an CensoredWriter

func (*CensoredWriter) Write

func (cw *CensoredWriter) Write(b []byte) (int, error)

Write implements io.Writer's Write method, performing necessary auditing while doing so

type CommandBuilder

type CommandBuilder func(ctx context.Context, name string, arg ...string) *exec.Cmd

type Context

type Context struct {
	FileSystem         aferox.Aferox
	In                 io.Reader
	Out                io.Writer
	Err                io.Writer
	NewCommand         CommandBuilder
	PlugInDebugContext *PluginDebugContext

	// IsInternalPlugin indicates that Porter is running as an internal plugin
	IsInternalPlugin bool

	// InternalPluginKey is the current plugin that Porter is running as, e.g. storage.porter.mongodb
	InternalPluginKey string
	// contains filtered or unexported fields
}

Context should not be used in concurrent code, it is single threaded.

func New

func New() *Context

New creates a new context in the specified directory.

func (*Context) Chdir

func (c *Context) Chdir(dir string)

Chdir changes the current working directory to the named directory.

func (*Context) Clearenv

func (c *Context) Clearenv()

Clearenv deletes all environment variables.

func (*Context) Close

func (c *Context) Close() error

func (*Context) CommandContext

func (c *Context) CommandContext(ctx context.Context, name string, arg ...string) *exec.Cmd

CommandContext creates a new exec.Cmd in the current directory. The provided context is used to kill the process (by calling os.Process.Kill) if the context becomes done before the command completes on its own.

func (*Context) ConfigureLogging

func (c *Context) ConfigureLogging(ctx context.Context, cfg LogConfiguration) context.Context

ConfigureLogging applies different configuration to our logging and tracing. Returns an updated context with the configured logger applied

func (*Context) CopyDirectory

func (c *Context) CopyDirectory(srcDir, destDir string, includeBaseDir bool) error

func (*Context) CopyFile

func (c *Context) CopyFile(src, dest string) error

func (*Context) Environ

func (c *Context) Environ() []string

Environ returns a copy of strings representing the environment, in the form "key=value".

func (*Context) EnvironMap

func (c *Context) EnvironMap() map[string]string

EnvironMap returns a map of the current environment variables.

func (*Context) ExpandEnv

func (c *Context) ExpandEnv(s string) string

ExpandEnv replaces ${var} or $var in the string according to the values of the current environment variables. References to undefined variables are replaced by the empty string.

func (*Context) Getenv

func (c *Context) Getenv(key string) string

Getenv retrieves the value of the environment variable named by the key. It returns the value, which will be empty if the variable is not present. To distinguish between an empty value and an unset value, use LookupEnv.

func (*Context) Getwd

func (c *Context) Getwd() string

Getwd returns a rooted path name corresponding to the current directory.

func (*Context) LookPath

func (c *Context) LookPath(file string) (string, bool)

This is a simplified exec.LookPath that checks if command is accessible given a PATH environment variable.

func (*Context) LookupEnv

func (c *Context) LookupEnv(key string) (string, bool)

LookupEnv retrieves the value of the environment variable named by the key. If the variable is present in the environment the value (which may be empty) is returned and the boolean is true. Otherwise the returned value will be empty and the boolean will be false.

func (*Context) SetSensitiveValues

func (c *Context) SetSensitiveValues(vals []string)

SetSensitiveValues sets the sensitive values needing masking on output/err streams WARNING: This does not work if you are writing to the TraceLogger. See https://github.com/getporter/porter/issues/2256 Only use this when you are calling fmt.Fprintln, not log.Debug, etc.

func (*Context) Setenv

func (c *Context) Setenv(key string, value string)

Setenv sets the value of the environment variable named by the key. It returns an error, if any.

func (*Context) StartRootSpan

func (c *Context) StartRootSpan(ctx context.Context, op string, attrs ...attribute.KeyValue) (context.Context, tracing.RootTraceLogger)

StartRootSpan creates the root tracing span for the porter application. This should only be done once.

func (*Context) Unsetenv

func (c *Context) Unsetenv(key string)

Unsetenv unsets a single environment variable.

func (*Context) WriteMixinOutputToFile

func (c *Context) WriteMixinOutputToFile(filename string, bytes []byte) error

WriteMixinOutputToFile writes the provided bytes (representing a mixin output) to a file named by the provided filename in Porter's mixin outputs directory

type LogConfiguration

type LogConfiguration struct {
	// Verbosity is the threshold for printing messages to the console.
	Verbosity zapcore.Level

	LogToFile    bool
	LogDirectory string

	// LogLevel is the threshold for writing messages to the log file.
	LogLevel                zapcore.Level
	StructuredLogs          bool
	TelemetryEnabled        bool
	TelemetryEndpoint       string
	TelemetryProtocol       string
	TelemetryInsecure       bool
	TelemetryCertificate    string
	TelemetryCompression    string
	TelemetryTimeout        string
	TelemetryHeaders        map[string]string
	TelemetryServiceName    string
	TelemetryDirectory      string
	TelemetryRedirectToFile bool
	TelemetryStartTimeout   time.Duration
}

type PluginDebugContext

type PluginDebugContext struct {
	RunPlugInInDebugger    string
	PlugInWorkingDirectory string
	DebuggerPort           string
}

func NewPluginDebugContext

func NewPluginDebugContext(c *Context) *PluginDebugContext

type TestContext

type TestContext struct {
	*Context

	T *testing.T
	// contains filtered or unexported fields
}

func NewTestContext

func NewTestContext(t *testing.T) *TestContext

NewTestContext initializes a configuration suitable for testing, with the output buffered, and an in-memory file system, using the specified environment variables.

func (*TestContext) AddCleanupDir

func (c *TestContext) AddCleanupDir(dir string)

func (*TestContext) AddTestDirectory

func (c *TestContext) AddTestDirectory(srcDir, destDir string, mode ...os.FileMode)

AddTestDirectory adds a test directory where the filepath is relative to the test directory. mode is optional and should only be specified once

func (*TestContext) AddTestDirectoryFromRoot

func (c *TestContext) AddTestDirectoryFromRoot(srcDir, destDir string)

Use this when the directory you are referencing is in a different directory than the test.

func (*TestContext) AddTestDriver

func (c *TestContext) AddTestDriver(src, name string) string

func (*TestContext) AddTestFile

func (c *TestContext) AddTestFile(src, dest string, mode ...os.FileMode) []byte

AddTestFile adds a test file where the filepath is relative to the test directory. mode is optional and only the first one passed is used.

func (*TestContext) AddTestFileContents

func (c *TestContext) AddTestFileContents(file []byte, dest string) error

func (*TestContext) AddTestFileFromRoot

func (c *TestContext) AddTestFileFromRoot(src, dest string) []byte

AddTestFileFromRoot should be used when the testfile you are referencing is in a different directory than the test.

func (*TestContext) ClearOutputs

func (c *TestContext) ClearOutputs()

func (*TestContext) Close

func (c *TestContext) Close()

func (*TestContext) CompareGoldenFile

func (c *TestContext) CompareGoldenFile(goldenFile string, got string)

CompareGoldenFile checks if the specified string matches the content of a golden test file. When they are different and PORTER_UPDATE_TEST_FILES is true, the file is updated to match the new test output.

func (*TestContext) DisableUmask

func (c *TestContext) DisableUmask()

func (*TestContext) EditYaml added in v1.0.8

func (c *TestContext) EditYaml(path string, transformations ...func(yq *yaml.Editor) error)

func (*TestContext) FindBinDir

func (c *TestContext) FindBinDir() string

FindBinDir returns the path to the bin directory of the repository where the test is currently running

func (*TestContext) FindRepoRoot

func (c *TestContext) FindRepoRoot() string

FindRepoRoot returns the path to the porter repository where the test is currently running

func (*TestContext) GetAllLogs added in v1.1.0

func (c *TestContext) GetAllLogs() string

GetAllLogs returns all text logged both on stdout and stderr

func (*TestContext) GetError

func (c *TestContext) GetError() string

GetError returns all text printed to stderr.

func (*TestContext) GetOutput

func (c *TestContext) GetOutput() string

GetOutput returns all text printed to stdout.

func (*TestContext) GetTestDefinitionDirectory

func (c *TestContext) GetTestDefinitionDirectory() string

func (*TestContext) NewTestCommand

func (c *TestContext) NewTestCommand(ctx context.Context, name string, args ...string) *exec.Cmd

func (*TestContext) UseFilesystem

func (c *TestContext) UseFilesystem() (testDir string, homeDir string)

UseFilesystem has porter's context use the OS filesystem instead of an in-memory filesystem Returns the test directory, and the temp porter home directory.

Jump to

Keyboard shortcuts

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