-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
workspace.go
135 lines (127 loc) 路 7.58 KB
/
workspace.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// 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
// InstallPluginFromServer acquires the plugin matching the specified name and version.
InstallPluginFromServer(context.Context, string, 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
// StackOutputs gets 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"`
}