Documentation ¶
Overview ¶
Package box implements the definitions of a box configuration file and tools to access it. This is used to configure the suite of tools that outreach provides, aka "startup in a box"
Description: This file contains development registry configuration
Description: This file contains box configuration for loft
Index ¶
- Constants
- Variables
- func ApplyEnvOverrides(s *Config)
- func InitializeBox(ctx context.Context, defaults []string) error
- func LoadBoxStorage() (*Storage, *Config, error)
- func SaveBox(_ context.Context, s *Storage) error
- type AWSConfig
- type CI
- type Config
- type DeveloperEnvironmentConfig
- type DeveloperEnvironmentRuntimeConfig
- type DevelopmentRegistries
- type DevelopmentRegistriesSlice
- type DevelopmentRegistry
- type LoadBoxOption
- type LoadBoxOptions
- type LoftCluster
- type LoftClusters
- type LoftRuntimeConfig
- type SnapshotConfig
- type SnapshotGenerateConfig
- type SnapshotLock
- type SnapshotLockChannel
- type SnapshotLockList
- type SnapshotLockListItem
- type SnapshotLockTarget
- type SnapshotTarget
- type Storage
- type VaultConfig
Constants ¶
const ( // SnapshotLockChannelStable is a stable channel SnapshotLockChannelStable SnapshotLockChannel = "stable" // SnapshotLockChannelRC is a release candidate (less stable) channel SnapshotLockChannelRC SnapshotLockChannel = "rc" // Version is the current version of the box spec. Version float32 = 3 )
Variables ¶
var ( // BoxConfigPath is the $HOME/<BoxConfigPath> location of the box config storage BoxConfigPath = ".outreach/.config/box" // BoxConfigFile is the name of the box config storage file BoxConfigFile = "box.yaml" )
Functions ¶
func ApplyEnvOverrides ¶
func ApplyEnvOverrides(s *Config)
ApplyEnvOverrides overrides a box configuration based on env vars.
func InitializeBox ¶
InitializeBox prompts the user for a box config location, downloads it and then saves it to disk. In general EnsureBox should be used over this function.
func LoadBoxStorage ¶
LoadBoxStorage reads a serialized, storage wrapped box config from disk and returns it. In general LoadBox should be used over this function.
Types ¶
type AWSConfig ¶ added in v1.35.0
type AWSConfig struct { // DefaultRole is the default role to assume when communicating // with AWS. DefaultRole string `yaml:"defaultRole"` // DefaultProfile is the default profile to use when communcating // with AWS. DefaultProfile string `yaml:"defaultProfile"` }
AWSConfig configures AWS access for tools that support it
type CI ¶ added in v1.41.0
type CI struct { // CircleCI contains the CircleCI configuration settings CircleCI struct { // Contexts are authentication contexts that can be used // to authenticate with CircleCI. Contexts struct { // AWS is the AWS authentication context // The context should contain the following values: // AWS_ACCESS_KEY_ID: <access key id> // AWS_SECRET_ACCESS_KEY: <secret access key> AWS string `yaml:"aws"` // Github is the Github authentication context // The context should contain the following values: // GHACCESSTOKEN_GHAPP_1: <github app> // GHACCESSTOKEN_PAT_1: <github personal access token> // // For more information on this, see: // https://github.com/getoutreach/ci/blob/main/cmd/ghaccesstoken/token.go Github string `yaml:"github"` // Docker is the docker authentication context // Currently all that is supported is gcp. // The context should contain the following values: // GCLOUD_SERVICE_ACCOUNT: <gcp service account json> Docker string `yaml:"docker"` // NPM is the npm authentication context // The context should contain the following values: // NPM_TOKEN: <npm token> NPM string `yaml:"npm"` // ExtraContexts is a list of extra contexts to include // for every job ExtraContexts []string `yaml:"extraContexts"` } `yaml:"contexts"` } `yaml:"circleci"` }
CI contains the ci configuration settings that can be set in box
type Config ¶
type Config struct { // RefreshInterval is the interval to use when refreshing a box configuration RefreshInterval time.Duration `yaml:"refreshInterval"` // Org is the Github org for this box, e.g. getoutreach Org string `yaml:"org"` // DeveloperEnvironmentConfig is the configuration for the developer environment for this box DeveloperEnvironmentConfig DeveloperEnvironmentConfig `yaml:"devenv"` // AWS is the configuration for communicating with AWS. AWS AWSConfig `yaml:"aws"` // CI is the configuration for the CI environment CI CI `yaml:"ci"` }
Config is the basis of a box configuration
func EnsureBox ¶
EnsureBox loads a box if it already exists, or prompts the user for the box if not found. If it exists, remote is querired periodically for a new version. Deprecated: Use EnsureBoxWithOptions instead.
func EnsureBoxWithOptions ¶ added in v1.17.0
func EnsureBoxWithOptions(ctx context.Context, optFns ...LoadBoxOption) (*Config, error)
EnsureBoxWithOptions loads a box if it already exists or returns an error. The box config is periodically refreshed based on the configured interval and based on a min version requirement, if set.
type DeveloperEnvironmentConfig ¶
type DeveloperEnvironmentConfig struct { // SnapshotConfig is the snapshot configuration for the devenv SnapshotConfig SnapshotConfig `yaml:"snapshots"` // VaultConfig denotes how to talk to Vault VaultConfig VaultConfig `yaml:"vault"` // ImagePullSecret is a path to credentials used to pull images with // currently the only supported value is a vault key path with // VaultEnabled being true ImagePullSecret string `yaml:"imagePullSecret"` // ImageRegistry is the registry to use for detecting your apps // e.g. gcr.io/outreach-docker ImageRegistry string `yaml:"imageRegistry"` // RuntimeConfig stores configuration specific to different devenv // runtimes. RuntimeConfig DeveloperEnvironmentRuntimeConfig `yaml:"runtimeConfig"` }
type DeveloperEnvironmentRuntimeConfig ¶ added in v1.15.0
type DeveloperEnvironmentRuntimeConfig struct { // EnabledRuntimes dictates which runtimes are enabled, generally defaults to all. EnabledRuntimes []string `yaml:"enabledRuntimes"` // DevelopmentRegistries are image registries that should be used for // development docker images. These are only ever used for remote devenvs. DevelopmentRegistries DevelopmentRegistries `yaml:"developmentRegistries"` // Loft is configuration for the loft runtime in the devenv Loft LoftRuntimeConfig `yaml:"loft"` }
DeveloperEnvironmentRuntimeConfig stores configuration specific to different runtimes.
type DevelopmentRegistries ¶ added in v1.23.0
type DevelopmentRegistries struct { // Path is a go-template string of the path to append to the end of the endpoint // for the docker image registry to use. This is useful for namespacing images. Path string `yaml:"path"` // Clouds is a CloudName -> DevelopmentRegistriesSlice Clouds map[region.CloudName]DevelopmentRegistriesSlice }
DevelopmentRegistries contains a slice of DevelopmentRegistrys
type DevelopmentRegistriesSlice ¶ added in v1.23.0
type DevelopmentRegistriesSlice []DevelopmentRegistry
DevelopmentRegistriesSlice is a slice of DevelopmentRegistry
func (DevelopmentRegistriesSlice) Regions ¶ added in v1.23.0
func (dr DevelopmentRegistriesSlice) Regions() []region.Name
Regions returns all of the regions of the development registries
type DevelopmentRegistry ¶ added in v1.23.0
type DevelopmentRegistry struct { // Endpoint is the endpoint of this registry, e.g. // gcr.io/outreach-docker or docker.io/getoutreach Endpoint string `yaml:"endpoint"` // Region that this registry should be used in. If not set will be randomly selected. Region region.Name `yaml:"region"` }
DevelopmentRegistry is a docker image registry used for development
type LoadBoxOption ¶ added in v1.17.0
type LoadBoxOption func(*LoadBoxOptions)
func WithDefaults ¶ added in v1.17.0
func WithDefaults(defaults []string) LoadBoxOption
WithDefaults sets the default URLs to provided to a user when a box configuration doesn't exist locally. Deprecated: Do not use. See field on LoadBoxOptions
func WithLogger ¶ added in v1.17.0
func WithLogger(log logrus.FieldLogger) LoadBoxOption
WithLogger sets the logger to use when outputting to the user.
func WithMinVersion ¶ added in v1.17.0
func WithMinVersion(version float32) LoadBoxOption
WithMinVersion sets a minimum version of a box configuration being required. If this version is not currently downloaded it will be force a box re-download. This is useful for using new fields. Version in box.go should be bumped when this is required.
type LoadBoxOptions ¶ added in v1.17.0
type LoadBoxOptions struct { // MinVersion of a box configuration that is required for this // LoadBox call. MinVersion *float32 // DefaultBoxSources is a list of URLs to present to the user // as being the default locations of box configuration. // Deprecated: Configure before running an application instead. DefaultBoxSources []string // contains filtered or unexported fields }
type LoftCluster ¶ added in v1.23.0
type LoftCluster struct { // Name is the name of the cluster in loft Name string `yaml:"name"` // Region is the region that this cluster is in Region region.Name `yaml:"region"` // Cloud is the cloud that this loft cluster is in. Not currently used anywhere. Cloud region.CloudName `yaml:"cloud"` }
LoftCluster is a loft cluster
type LoftClusters ¶ added in v1.23.0
type LoftClusters []LoftCluster
LoftClusters is a container for a slice of LoftClusters
func (LoftClusters) Regions ¶ added in v1.23.0
func (lc LoftClusters) Regions() []region.Name
Regions returns all of the regions of the regions for the loft clusters in a []LoftCluster
type LoftRuntimeConfig ¶ added in v1.15.0
type LoftRuntimeConfig struct { // Clusters is a list of clusters provided by this loft instance Clusters LoftClusters `yaml:"clusters"` // DefaultCloud is the default cloud to use. Currently the only way to specify // which cloud. DefaultCloud region.CloudName `yaml:"defaultCloud"` // DefaultRegion is the default region to use when a nearest one couldn't // be calculated DefaultRegion region.Name `yaml:"regionName"` // URL is the URL of a loft instance. URL string `yaml:"URL"` }
LoftRuntimeConfig is configuration for loft runtimes
type SnapshotConfig ¶
type SnapshotConfig struct { // Endpoint is the S3 compatible endpoint to fetch a snapshot from Endpoint string `yaml:"endpoint"` // Region is the region to use for this bucket Region string `yaml:"region"` // Bucket is the bucket that the snapshots are in Bucket string `yaml:"bucket"` // DefaultName is the default name (snapshot) to use, e.g. flagship DefaultName string `yaml:"defaultName"` // ReadAWSRole is the role to use, if set, for saml2aws for RO access ReadAWSRole string `yaml:"readAWSRole"` // WriteAWSRole is the role to use, if set, for saml2aws for RW access WriteAWSRole string `yaml:"writeAWSRole"` }
SnapshotConfig stores configuration for generated and accessing snapshots
type SnapshotGenerateConfig ¶
type SnapshotGenerateConfig struct { // Targets are all of the snapshots that can be generated. The key equates // the name of the generated snapshot Targets map[string]*SnapshotTarget `yaml:"targets"` }
SnapshotGenerateConfig stores configuration for snapshots that should be generated
type SnapshotLock ¶
type SnapshotLock struct { // Version is the version of this configuration, used for breaking changes Version int `yaml:"version"` // GeneratedAt is when this lock was generated GeneratedAt time.Time `yaml:"generatedAt"` // Deprecated: Use TargetsV2 instead // Targets is a single snapshot for each target Targets map[string]*SnapshotLockTarget `yaml:"targets"` // TargetsV2 is a target -> lock list for snapshots TargetsV2 map[string]*SnapshotLockList `yaml:"targets_v2"` }
SnapshotLock is an manifest of all the available snapshots
type SnapshotLockChannel ¶
type SnapshotLockChannel string
SnapshotLockChannel is used to determine the quality of a given snapshot
type SnapshotLockList ¶
type SnapshotLockList struct { // Snapshots is a channel separated list of snapshots for a given target Snapshots map[SnapshotLockChannel][]*SnapshotLockListItem `yaml:"snapshots"` }
SnapshotLockList contains a channel (different releases of snapshots) separated list of snapshots
type SnapshotLockListItem ¶
type SnapshotLockListItem struct { // Digest is a MD5 base64 encoded digest of the archive Digest string `yaml:"digest"` // Key is the key that this snapshot is stored at, note that the bucket is // not set or determined here and instead come from the snapshotconfig URI string `yaml:"key"` // Config is the config used to generate this snapshot Config *SnapshotTarget // VeleroBackupName is the name of this snapshot. This is used to invoke velero // commands. It should not be used for uniqueness constraints. VeleroBackupName string `yaml:"veleroBackupName"` }
SnapshotLockListItem is a replacement for SnapshotLockTarget which is used by SnapshotLockList to provide details about a snapshot
type SnapshotLockTarget ¶
type SnapshotLockTarget struct { // Digest is a MD5 base64 encoded digest of the archive Digest string `yaml:"digest"` // Key is the key that this snapshot is stored at, note that the bucket is // not set or determined here and instead come from the snapshotconfig URI string `yaml:"key"` // Config is the config used to generate this snapshot Config *SnapshotTarget // VeleroBackupName is the name of this snapshot. This is used to invoke velero // commands. It should not be used for uniqueness constraints. VeleroBackupName string `yaml:"veleroBackupName"` }
SnapshotLockTarget is a generated snapshot and metadata on it. In general SnapshotLockListItem should be used instead.
type SnapshotTarget ¶
type SnapshotTarget struct { // Command is the command to be run to generate this snapshot, // note that a devenv is already provisioned and accessible at this // stage of the generation process Command string `yaml:"command"` // PostRestore is a path to a yaml file that contains pre-rendered manifests // These manifests will be ran through a special go-template that allows // injecting information like the current user / git email. PostRestore string `yaml:"post_restore"` // DeployApps is an array of applications to deploy via deploy-app // before running the Command specified. DeployApps []string `yaml:"deploy_apps"` // PostDeployApps is an array of applications to deploy via deploy-app // after running the Command specified. PostDeployApps []string `yaml:"post_deploy_apps"` // ReadyAddress is a URL to ping before marking the devenv as ready ReadyAddress string `yaml:"readyAddress"` }
SnapshotTarget is the defn for a generated snapshot
type Storage ¶
type Storage struct { // Config is the box configuration, see Config. // This is an yaml.Node because we can't guarantee that the // underlying type is a Config as we expect it to be. Config yaml.Node `yaml:"config"` // LastUpdated is the last time this file was checked for updates LastUpdated time.Time `yaml:"lastUpdated"` // Version is the version of this box spec. Version float32 `yaml:"version"` // StorageURL is the location that this came from StorageURL string `yaml:"storageURL"` }
Storage is a wrapper type used for storing the box configuration
type VaultConfig ¶
type VaultConfig struct { // Enabled determines if we should setup vault or not Enabled bool `yaml:"enabled"` // AuthMethod is the method to talk to vault, e.g. oidc AuthMethod string `yaml:"authMethod"` // Address is the URL to talk to Vault Address string `yaml:"address"` // AddressCI is the URL to use to talk to Vault in CI // Defaults to Address AddressCI string `yaml:"addressCI"` }
VaultConfig is the configuration for accessing Vault