pulumi/sdk/go/auto/workspace.go
2021-08-02 12:54:46 -07:00

134 lines
7.4 KiB
Go

// Copyright 2016-2020, Pulumi Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package auto
import (
"context"
"github.com/pulumi/pulumi/sdk/v3/go/auto/optremove"
"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
"github.com/pulumi/pulumi/sdk/v3/go/common/workspace"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
// Workspace is the execution context containing a single Pulumi project, a program, and multiple stacks.
// Workspaces are used to manage the execution environment, providing various utilities such as plugin
// installation, environment configuration ($PULUMI_HOME), and creation, deletion, and listing of Stacks.
type Workspace interface {
// ProjectSettings returns the settings object for the current project if any.
ProjectSettings(context.Context) (*workspace.Project, error)
// SaveProjectSettings overwrites the settings object in the current project.
// There can only be a single project per workspace. Fails is new project name does not match old.
SaveProjectSettings(context.Context, *workspace.Project) error
// StackSettings returns the settings object for the stack matching the specified stack name if any.
StackSettings(context.Context, string) (*workspace.ProjectStack, error)
// SaveStackSettings overwrites the settings object for the stack matching the specified stack name.
SaveStackSettings(context.Context, string, *workspace.ProjectStack) error
// SerializeArgsForOp is hook to provide additional args to every CLI commands before they are executed.
// Provided with stack name,
// returns a list of args to append to an invoked command ["--config=...", ].
SerializeArgsForOp(context.Context, string) ([]string, error)
// PostCommandCallback is a hook executed after every command. Called with the stack name.
// An extensibility point to perform workspace cleanup (CLI operations may create/modify a Pulumi.stack.yaml).
PostCommandCallback(context.Context, string) error
// GetConfig returns the value associated with the specified stack name and key,
// scoped to the current workspace.
GetConfig(context.Context, string, string) (ConfigValue, error)
// GetAllConfig returns the config map for the specified stack name, scoped to the current workspace.
GetAllConfig(context.Context, string) (ConfigMap, error)
// SetConfig sets the specified key-value pair on the provided stack name.
SetConfig(context.Context, string, string, ConfigValue) error
// SetAllConfig sets all values in the provided config map for the specified stack name.
SetAllConfig(context.Context, string, ConfigMap) error
// RemoveConfig removes the specified key-value pair on the provided stack name.
RemoveConfig(context.Context, string, string) error
// RemoveAllConfig removes all values in the provided key list for the specified stack name.
RemoveAllConfig(context.Context, string, []string) error
// RefreshConfig gets and sets the config map used with the last Update for Stack matching stack name.
RefreshConfig(context.Context, string) (ConfigMap, error)
// GetEnvVars returns the environment values scoped to the current workspace.
GetEnvVars() map[string]string
// SetEnvVars sets the specified map of environment values scoped to the current workspace.
// These values will be passed to all Workspace and Stack level commands.
SetEnvVars(map[string]string) error
// SetEnvVar sets the specified environment value scoped to the current workspace.
// This value will be passed to all Workspace and Stack level commands.
SetEnvVar(string, string)
// UnsetEnvVar unsets the specified environment value scoped to the current workspace.
// This value will be removed from all Workspace and Stack level commands.
UnsetEnvVar(string)
// WorkDir returns the working directory to run Pulumi CLI commands.
WorkDir() string
// PulumiHome returns the directory override for CLI metadata if set.
// This customizes the location of $PULUMI_HOME where metadata is stored and plugins are installed.
PulumiHome() string
// PulumiVersion returns the version of the underlying Pulumi CLI/Engine.
PulumiVersion() string
// WhoAmI returns the currently authenticated user.
WhoAmI(context.Context) (string, error)
// Stack returns a summary of the currently selected stack, if any.
Stack(context.Context) (*StackSummary, error)
// CreateStack creates and sets a new stack with the stack name, failing if one already exists.
CreateStack(context.Context, string) error
// SelectStack selects and sets an existing stack matching the stack name, failing if none exists.
SelectStack(context.Context, string) error
// RemoveStack deletes the stack and all associated configuration and history.
RemoveStack(context.Context, string, ...optremove.Option) error
// ListStacks returns all Stacks created under the current Project.
// This queries underlying backend and may return stacks not present in the Workspace.
ListStacks(context.Context) ([]StackSummary, error)
// InstallPlugin acquires the plugin matching the specified name and version.
InstallPlugin(context.Context, string, string) error
// RemovePlugin deletes the plugin matching the specified name and version.
RemovePlugin(context.Context, string, string) error
// ListPlugins lists all installed plugins.
ListPlugins(context.Context) ([]workspace.PluginInfo, error)
// Program returns the program `pulumi.RunFunc` to be used for Preview/Update if any.
// If none is specified, the stack will refer to ProjectSettings for this information.
Program() pulumi.RunFunc
// SetProgram sets the program associated with the Workspace to the specified `pulumi.RunFunc`.
SetProgram(pulumi.RunFunc)
// ExportStack exports the deployment state of the stack matching the given name.
// This can be combined with ImportStack to edit a stack's state (such as recovery from failed deployments).
ExportStack(context.Context, string) (apitype.UntypedDeployment, error)
// ImportStack imports the specified deployment state into a pre-existing stack.
// This can be combined with ExportStack to edit a stack's state (such as recovery from failed deployments).
ImportStack(context.Context, string, apitype.UntypedDeployment) error
// Outputs get the current set of Stack outputs from the last Stack.Up().
StackOutputs(context.Context, string) (OutputMap, error)
}
// ConfigValue is a configuration value used by a Pulumi program.
// Allows differentiating between secret and plaintext values by setting the `Secret` property.
type ConfigValue struct {
Value string
Secret bool
}
// ConfigMap is a map of ConfigValue used by Pulumi programs.
// Allows differentiating between secret and plaintext values.
type ConfigMap map[string]ConfigValue
// StackSummary is a description of a stack and its current status.
type StackSummary struct {
Name string `json:"name"`
Current bool `json:"current"`
LastUpdate string `json:"lastUpdate,omitempty"`
UpdateInProgress bool `json:"updateInProgress"`
ResourceCount *int `json:"resourceCount,omitempty"`
URL string `json:"url,omitempty"`
}