config

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: 23 Imported by: 1

Documentation

Index

Constants

View Source
const (
	// Name is the file name of the porter configuration file.
	Name = "porter.yaml"

	// EnvHOME is the name of the environment variable containing the porter home directory path.
	EnvHOME = "PORTER_HOME"

	// EnvBundleName is the name of the environment variable containing the name of the bundle.
	EnvBundleName = "CNAB_BUNDLE_NAME"

	// EnvInstallationName is the name of the environment variable containing the name of the installation.
	EnvInstallationName = "CNAB_INSTALLATION_NAME"

	// EnvACTION is the requested action to be executed
	EnvACTION = "CNAB_ACTION"

	// EnvDEBUG is a custom porter parameter that signals that --debug flag has been passed through from the client to the runtime.
	EnvDEBUG = "PORTER_DEBUG"

	// CustomPorterKey is the key in the bundle.json custom section that contains the Porter stamp
	// It holds all the metadata that Porter includes that is specific to Porter about the bundle.
	CustomPorterKey = "sh.porter"

	// BundleOutputsDir is the directory where outputs are expected to be placed
	// during the execution of a bundle action.
	BundleOutputsDir = "/cnab/app/outputs"

	// ClaimFilepath is the filepath to the claim.json inside of an invocation image
	ClaimFilepath = "/cnab/claim.json"

	// EnvPorterInstallationNamespace is the name of the environment variable which is injected into the
	// invocation image, containing the namespace of the installation.
	EnvPorterInstallationNamespace = "PORTER_INSTALLATION_NAMESPACE"

	// EnvPorterInstallationName is the name of the environment variable which is injected into the
	// invocation image, containing the name of the installation.
	EnvPorterInstallationName = "PORTER_INSTALLATION_NAME"

	// DefaultVerbosity is the default value for the --verbosity flag.
	DefaultVerbosity = "info"
)
View Source
const (
	// BuildDriverDocker is no longer supported.
	BuildDriverDocker = "docker"

	// BuildDriverBuildkit is the configuration value for specifying BuildKit as
	// the build driver.
	BuildDriverBuildkit = "buildkit"

	// RuntimeDriverDocker specifies that the invocation image should be executed on docker.
	RuntimeDriverDocker = "docker"

	// RuntimeDriverKubernetes specifies that the invocation image should be executed on kubernetes.
	RuntimeDriverKubernetes = "kubernetes"
)

Variables

This section is empty.

Functions

func BindViperToEnvironmentVariables added in v1.0.14

func BindViperToEnvironmentVariables(v *viper.Viper)

func NoopDataLoader

func NoopDataLoader(_ context.Context, _ *Config, _ map[string]interface{}) error

NoopDataLoader skips loading the datastore.

Types

type Config

type Config struct {
	*portercontext.Context
	Data       Data
	DataLoader DataStoreLoaderFunc

	// ConfigFilePath is the path to the loaded configuration file
	ConfigFilePath string
	// contains filtered or unexported fields
}

func New

func New() *Config

New Config initializes a default porter configuration.

func NewFor added in v1.0.1

func NewFor(pCtx *portercontext.Context) *Config

NewFor initializes a porter configuration, using an existing porter context.

func (*Config) ExportRemoteConfigAsEnvironmentVariables added in v1.0.1

func (c *Config) ExportRemoteConfigAsEnvironmentVariables() []string

ExportRemoteConfigAsEnvironmentVariables represents the current configuration as environment variables suitable for a remote Porter actor, such as a mixin or plugin. Only a subset of values are exported, such as tracing and logging, and not plugin configuration (since it's not relevant when running a plugin and may contain sensitive data). For example, if Config.Data.Logs is set to warn, it would return PORTER_LOGS_LEVEL=warn in the resulting set of environment variables. This is used to pass config from porter to a mixin or plugin.

func (*Config) GetBuildDriver added in v1.0.1

func (c *Config) GetBuildDriver() string

GetBuildDriver determines the correct build driver to use, taking into account experimental flags. Use this instead of Config.Data.BuildDriver directly.

func (*Config) GetBundleArchiveLogs

func (c *Config) GetBundleArchiveLogs() (string, error)

GetBundleArchiveLogs locates the output for Bundle Archive Operations.

func (*Config) GetBundlesCache

func (c *Config) GetBundlesCache() (string, error)

GetBundlesCache locates the bundle cache from the porter home directory.

func (*Config) GetFeatureFlags added in v1.0.1

func (c *Config) GetFeatureFlags() experimental.FeatureFlags

GetFeatureFlags indicates which experimental feature flags are enabled

func (*Config) GetHomeDir

func (c *Config) GetHomeDir() (string, error)

GetHomeDir determines the absolute path to the porter home directory. Hierarchy of checks: - PORTER_HOME - HOME/.porter or USERPROFILE/.porter

func (*Config) GetPluginPath

func (c *Config) GetPluginPath(plugin string) (string, error)

func (*Config) GetPluginsDir

func (c *Config) GetPluginsDir() (string, error)

func (*Config) GetPorterPath

func (c *Config) GetPorterPath(ctx context.Context) (string, error)

func (*Config) GetSchemaCheckStrategy added in v1.0.1

func (c *Config) GetSchemaCheckStrategy(ctx context.Context) schema.CheckStrategy

func (*Config) GetSecretsPlugin added in v1.0.1

func (c *Config) GetSecretsPlugin(name string) (SecretsPlugin, error)

func (*Config) GetSigningPlugin added in v1.1.0

func (c *Config) GetSigningPlugin(name string) (SigningPlugin, error)

func (*Config) GetStorage added in v1.0.1

func (c *Config) GetStorage(name string) (StoragePlugin, error)

func (*Config) GetVerbosity added in v1.0.1

func (c *Config) GetVerbosity() LogLevel

GetVerbosity converts the user-specified verbosity flag into a LogLevel enum.

func (*Config) IsFeatureEnabled added in v1.0.1

func (c *Config) IsFeatureEnabled(flag experimental.FeatureFlags) bool

IsFeatureEnabled returns true if the specified experimental flag is enabled.

func (*Config) Load added in v1.0.1

func (c *Config) Load(ctx context.Context, resolveSecret func(ctx context.Context, secretKey string) (string, error)) (context.Context, error)

Load loads the configuration file, rendering any templating used in the config file such as ${secret.NAME} or ${env.NAME}. Pass nil for resolveSecret to skip resolving secrets.

func (*Config) NewLogConfiguration added in v1.0.1

func (c *Config) NewLogConfiguration() portercontext.LogConfiguration

func (*Config) SetExperimentalFlags added in v1.0.1

func (c *Config) SetExperimentalFlags(flags experimental.FeatureFlags)

SetExperimentalFlags programmatically, overriding Config.Data.ExperimentalFlags. Example: Config.SetExperimentalFlags(experimental.FlagStructuredLogs | ...)

func (*Config) SetHomeDir

func (c *Config) SetHomeDir(home string)

SetHomeDir is a test function that allows tests to use an alternate Porter home directory.

func (*Config) SetPorterPath added in v0.30.1

func (c *Config) SetPorterPath(path string)

SetPorterPath is a test function that allows tests to use an alternate Porter binary location.

type Data

type Data struct {

	// BuildDriver is the driver to use when building bundles.
	// Available values are: buildkit.
	// Do not use directly, use Config.GetBuildDriver.
	BuildDriver string `mapstructure:"build-driver"`

	// RuntimeDriver is the driver to use when executing bundles.
	// Available values are: docker, kubernetes.
	// It is both a global variable and a command flag because some of our commands, like porter installation apply,
	// do not expose all the bundle execution flags. This allows us to later manually use the global config value
	// to ensure that the global config value works even for those commands.
	RuntimeDriver string `mapstructure:"runtime-driver"`

	// ForceOverwrite specifies OCI artifacts can be overwritten when pushed.
	// By default, Porter requires the --force flag to be specified to overwrite a bundle or image.
	ForceOverwrite bool `mapstructure:"force-overwrite"`

	// AllowDockerHostAccess grants bundles access to the underlying docker host
	// upon which it is running so that it can do things like build and run containers.
	// It's a security risk.
	// It is both a global variable and a command flag because some of our commands, like porter installation apply,
	// do not expose all the bundle execution flags. This allows us to later manually use the global config value
	// to ensure that the global config value works even for those commands.
	AllowDockerHostAccess bool `mapstructure:"allow-docker-host-access"`

	// DefaultStoragePlugin is the storage plugin to use when no named storage is specified.
	DefaultStoragePlugin string `mapstructure:"default-storage-plugin"`

	// DefaultStorage to use when a named storage is not specified by a flag.
	DefaultStorage string `mapstructure:"default-storage"`

	// ExperimentalFlags is a list of enabled experimental.FeatureFlags.
	// Use Config.IsFeatureEnabled instead of parsing directly.
	ExperimentalFlags []string `mapstructure:"experimental"`

	// StoragePlugins defined in the configuration file.
	StoragePlugins []StoragePlugin `mapstructure:"storage"`

	// DefaultSecretsPlugin is the plugin to use when no plugin is specified.
	DefaultSecretsPlugin string `mapstructure:"default-secrets-plugin"`

	// DefaultSecrets to use when one is not specified by a flag.
	DefaultSecrets string `mapstructure:"default-secrets"`

	// DefaultSigningPlugin is the plugin to use when no plugin is specified.
	DefaultSigningPlugin string `mapstructure:"default-signing-plugin"`

	// DefaultSigning to use when one is not specified by a flag.
	DefaultSigning string `mapstructure:"default-signer"`

	// Namespace is the default namespace for commands that do not override it with a flag.
	Namespace string `mapstructure:"namespace"`

	// SecretsPlugin defined in the configuration file.
	SecretsPlugin []SecretsPlugin `mapstructure:"secrets"`

	// SigningPlugin defined in the configuration file.
	SigningPlugin []SigningPlugin `mapstructure:"signers"`

	// Logs are settings related to Porter's log files.
	Logs LogConfig `mapstructure:"logs"`

	// Telemetry are settings related to Porter's tracing with open telemetry.
	Telemetry TelemetryConfig `mapstructure:"telemetry"`

	// SchemaCheck specifies how strict Porter should be when comparing the
	// schemaVersion field on a resource with the supported schemaVersion.
	// Supported values are: exact, minor, major, none.
	SchemaCheck string `mapstructure:"schema-check"`

	// Verbosity controls the level of messages output to the console.
	// Use Logs.LogLevel if you want to change what is output to the logfile.
	// Traces sent to an OpenTelemetry collector always include all levels of messages.
	Verbosity string `mapstructure:"verbosity"`
}

Data is the data stored in PORTER_HOME/porter.toml|yaml|json. Use the accessor functions to ensure default values are handled properly.

func DefaultDataStore added in v1.0.1

func DefaultDataStore() Data

DefaultDataStore used when no config file is found.

type DataStoreLoaderFunc

type DataStoreLoaderFunc func(context.Context, *Config, map[string]interface{}) error

DataStoreLoaderFunc defines the Config.DataLoader function signature used to load data into Config.DataStore.

func LoadFromEnvironment added in v1.0.1

func LoadFromEnvironment() DataStoreLoaderFunc

LoadFromEnvironment loads data with the following precedence: * Environment variables where --flag is assumed to be PORTER_FLAG * Config file * Flag default (lowest)

func LoadFromFilesystem added in v1.0.1

func LoadFromFilesystem() DataStoreLoaderFunc

LoadFromFilesystem loads data with the following precedence: * Config file * Flag default (lowest) This is used for testing only.

func LoadFromViper added in v1.0.1

func LoadFromViper(viperCfg func(v *viper.Viper), cobraCfg func(v *viper.Viper)) DataStoreLoaderFunc

LoadFromViper loads data from a configurable viper instance.

type LogConfig added in v1.0.1

type LogConfig struct {
	// Structured indicates if the logs sent to the console should include timestamp and log levels
	Structured bool     `mapstructure:"structured"`
	LogToFile  bool     `mapstructure:"log-to-file"`
	Level      LogLevel `mapstructure:"level"`
}

LogConfig are settings related to Porter's log files.

type LogLevel added in v1.0.1

type LogLevel string
const (
	LogLevelDebug LogLevel = "debug"
	LogLevelInfo  LogLevel = "info"
	LogLevelWarn  LogLevel = "warn"
	LogLevelError LogLevel = "error"
)

func ParseLogLevel added in v1.0.1

func ParseLogLevel(value string) LogLevel

ParseLogLevel reads the string representation of a LogLevel and converts it to a LogLevel. Unrecognized values default to info.

func (LogLevel) Level added in v1.0.1

func (l LogLevel) Level() zapcore.Level

type PluginConfig

type PluginConfig struct {
	Name         string                 `mapstructure:"name"`
	PluginSubKey string                 `mapstructure:"plugin"`
	Config       map[string]interface{} `mapstructure:"config"`
}

PluginConfig is a standardized config stanza that defines which plugin to use and its custom configuration.

func (PluginConfig) GetConfig

func (p PluginConfig) GetConfig() interface{}

func (PluginConfig) GetName

func (p PluginConfig) GetName() string

func (PluginConfig) GetPluginSubKey

func (p PluginConfig) GetPluginSubKey() string

type SecretsPlugin added in v1.0.1

type SecretsPlugin struct {
	PluginConfig `mapstructure:",squash"`
}

SecretsPlugin is the plugin stanza for secrets.

type SigningPlugin added in v1.1.0

type SigningPlugin struct {
	PluginConfig `mapstructure:",squash"`
}

SigningPlugin is the plugin stanza for signing.

type StoragePlugin added in v1.0.1

type StoragePlugin struct {
	PluginConfig `mapstructure:",squash"`
}

StoragePlugin is the plugin stanza for storage.

type TelemetryConfig added in v1.0.1

type TelemetryConfig struct {
	Enabled     bool              `mapstructure:"enabled"`
	Endpoint    string            `mapstructure:"endpoint"`
	Protocol    string            `mapstructure:"protocol"`
	Insecure    bool              `mapstructure:"insecure"`
	Certificate string            `mapstructure:"certificate"`
	Headers     map[string]string `mapstructure:"headers"`
	Timeout     string            `mapstructure:"timeout"`
	Compression string            `mapstructure:"compression"`

	// RedirectToFile instructs Porter to write telemetry data to a file in
	// PORTER_HOME/traces instead of exporting it to a collector
	RedirectToFile bool `mapstructure:"redirect-to-file"`

	// StartTimeout sets the amount of time to wait while establishing a connection
	// to the OpenTelemetry collector.
	StartTimeout string `mapstructure:"start-timeout"`
}

TelemetryConfig specifies how to connect to an open telemetry collector. See https://github.com/open-telemetry/opentelemetry-go/tree/main/exporters/otlp/otlptrace

func (TelemetryConfig) GetStartTimeout added in v1.0.1

func (c TelemetryConfig) GetStartTimeout() time.Duration

GetStartTimeout returns the amount of time to wait for the collector to start if a value was not configured, return the default timeout.

type TestConfig

type TestConfig struct {
	*Config
	TestContext *portercontext.TestContext
	TestSpan    tracing.RootTraceLogger
}

func NewTestConfig

func NewTestConfig(t *testing.T) *TestConfig

NewTestConfig initializes a configuration suitable for testing: * buffered output, * in-memory file system, * does not automatically load config from ambient environment.

func (*TestConfig) Close added in v1.0.1

func (c *TestConfig) Close()

func (*TestConfig) SetupIntegrationTest

func (c *TestConfig) SetupIntegrationTest() (ctx context.Context, testDir string, homeDir string)

SetupIntegrationTest initializes the filesystem with the supporting files in a temp PORTER_HOME directory.

func (*TestConfig) SetupUnitTest added in v0.31.0

func (c *TestConfig) SetupUnitTest()

SetupUnitTest initializes the unit test filesystem with the supporting files in the PORTER_HOME directory.

Jump to

Keyboard shortcuts

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