-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
workspace.ts
307 lines (298 loc) · 11 KB
/
workspace.ts
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
// 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.
import { ConfigMap, ConfigValue } from "./config";
import { ProjectSettings } from "./projectSettings";
import { OutputMap } from "./stack";
import { StackSettings } from "./stackSettings";
import { TagMap } from "./tag";
/**
* 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.
*
* @alpha
*/
export interface Workspace {
/**
* The working directory to run Pulumi CLI commands
*/
readonly workDir: string;
/**
* The directory override for CLI metadata if set.
* This customizes the location of $PULUMI_HOME where metadata is stored and plugins are installed.
*/
readonly pulumiHome?: string;
/**
* The secrets provider to use for encryption and decryption of stack secrets.
* See: https://www.pulumi.com/docs/intro/concepts/secrets/#available-encryption-providers
*/
readonly secretsProvider?: string;
/**
* The version of the underlying Pulumi CLI/Engine.
*/
readonly pulumiVersion: string;
/**
* The inline program `PulumiFn` to be used for Preview/Update operations if any.
* If none is specified, the stack will refer to ProjectSettings for this information.
*/
program?: PulumiFn;
/**
* Environment values scoped to the current workspace. These will be supplied to every Pulumi command.
*/
envVars: { [key: string]: string };
/**
* Returns the settings object for the current project if any.
*/
projectSettings(): Promise<ProjectSettings>;
/**
* 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.
*
* @param settings The settings object to save.
*/
saveProjectSettings(settings: ProjectSettings): Promise<void>;
/**
* Returns the settings object for the stack matching the specified stack name if any.
*
* @param stackName The name of the stack.
*/
stackSettings(stackName: string): Promise<StackSettings>;
/**
* overwrites the settings object for the stack matching the specified stack name.
*
* @param stackName The name of the stack to operate on.
* @param settings The settings object to save.
*/
saveStackSettings(stackName: string, settings: StackSettings): Promise<void>;
/**
* 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=...", ]
* LocalWorkspace does not utilize this extensibility point.
*/
serializeArgsForOp(stackName: string): Promise<string[]>;
/**
* 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)
* LocalWorkspace does not utilize this extensibility point.
*/
postCommandCallback(stackName: string): Promise<void>;
/**
* Returns the value associated with the specified stack name and key,
* scoped to the Workspace.
*
* @param stackName The stack to read config from
* @param key The key to use for the config lookup
*/
getConfig(stackName: string, key: string): Promise<ConfigValue>;
/**
* Returns the config map for the specified stack name, scoped to the current Workspace.
*
* @param stackName The stack to read config from
*/
getAllConfig(stackName: string): Promise<ConfigMap>;
/**
* Sets the specified key-value pair on the provided stack name.
*
* @param stackName The stack to operate on
* @param key The config key to set
* @param value The value to set
*/
setConfig(stackName: string, key: string, value: ConfigValue): Promise<void>;
/**
* Sets all values in the provided config map for the specified stack name.
*
* @param stackName The stack to operate on
* @param config The `ConfigMap` to upsert against the existing config.
*/
setAllConfig(stackName: string, config: ConfigMap): Promise<void>;
/**
* Removes the specified key-value pair on the provided stack name.
*
* @param stackName The stack to operate on
* @param key The config key to remove
*/
removeConfig(stackName: string, key: string): Promise<void>;
/**
*
* Removes all values in the provided key list for the specified stack name.
*
* @param stackName The stack to operate on
* @param keys The list of keys to remove from the underlying config
*/
removeAllConfig(stackName: string, keys: string[]): Promise<void>;
/**
* Gets and sets the config map used with the last update for Stack matching stack name.
*
* @param stackName The stack to refresh
*/
refreshConfig(stackName: string): Promise<ConfigMap>;
/**
* Returns the value associated with the specified stack name and key,
* scoped to the Workspace.
*
* @param stackName The stack to read tag metadata from.
* @param key The key to use for the tag lookup.
*/
getTag(stackName: string, key: string): Promise<string>;
/**
* Sets the specified key-value pair on the provided stack name.
*
* @param stackName The stack to operate on.
* @param key The tag key to set.
* @param value The tag value to set.
*/
setTag(stackName: string, key: string, value: string): Promise<void>;
/**
* Removes the specified key-value pair on the provided stack name.
*
* @param stackName The stack to operate on.
* @param key The tag key to remove.
*/
removeTag(stackName: string, key: string): Promise<void>;
/**
* Returns the tag map for the specified tag name, scoped to the current Workspace.
*
* @param stackName The stack to read tag metadata from.
*/
listTags(stackName: string): Promise<TagMap>;
/**
* Returns the currently authenticated user.
*/
whoAmI(): Promise<WhoAmIResult>;
/**
* Returns a summary of the currently selected stack, if any.
*/
stack(): Promise<StackSummary | undefined>;
/**
* Creates and sets a new stack with the stack name, failing if one already exists.
*
* @param stackName The stack to create.
*/
createStack(stackName: string): Promise<void>;
/**
* Selects and sets an existing stack matching the stack name, failing if none exists.
*
* @param stackName The stack to select.
*/
selectStack(stackName: string): Promise<void>;
/**
* Deletes the stack and all associated configuration and history.
*
* @param stackName The stack to remove
*/
removeStack(stackName: string): Promise<void>;
/**
* Returns all Stacks created under the current Project.
* This queries underlying backend and may return stacks not present in the Workspace (as Pulumi.<stack>.yaml files).
*/
listStacks(): Promise<StackSummary[]>;
/**
* Installs a plugin in the Workspace, for example to use cloud providers like AWS or GCP.
*
* @param name the name of the plugin.
* @param version the version of the plugin e.g. "v1.0.0".
* @param kind the kind of plugin e.g. "resource"
*/
installPluginFromServer(name: string, version: string, server: string): Promise<void>;
/**
* Installs a plugin in the Workspace from a remote server, for example a third party plugin.
*
* @param name the name of the plugin.
* @param version the version of the plugin e.g. "v1.0.0".
* @param server the server to install the plugin into
*/
installPlugin(name: string, version: string, kind?: string): Promise<void>;
/**
* Removes a plugin from the Workspace matching the specified name and version.
*
* @param name the optional name of the plugin.
* @param versionRange optional semver range to check when removing plugins matching the given name
* e.g. "1.0.0", ">1.0.0".
* @param kind he kind of plugin e.g. "resource"
*/
removePlugin(name?: string, versionRange?: string, kind?: string): Promise<void>;
/**
* Returns a list of all plugins installed in the Workspace.
*/
listPlugins(): Promise<PluginInfo[]>;
/**
* exportStack exports the deployment state of the stack.
* This can be combined with Workspace.importStack to edit a stack's state (such as recovery from failed deployments).
*
* @param stackName the name of the stack.
*/
exportStack(stackName: string): Promise<Deployment>;
/**
* importStack imports the specified deployment state into a pre-existing stack.
* This can be combined with Workspace.exportStack to edit a stack's state (such as recovery from failed deployments).
*
* @param stackName the name of the stack.
* @param state the stack state to import.
*/
importStack(stackName: string, state: Deployment): Promise<void>;
/**
* Gets the current set of Stack outputs from the last Stack.up().
* @param stackName the name of the stack.
*/
stackOutputs(stackName: string): Promise<OutputMap>;
}
/**
* A summary of the status of a given stack.
*/
export interface StackSummary {
name: string;
current: boolean;
lastUpdate?: string;
updateInProgress: boolean;
resourceCount?: number;
url?: string;
}
/**
* Deployment encapsulates the state of a stack deployment.
*/
export interface Deployment {
/**
* Version indicates the schema of the encoded deployment.
*/
version: number;
/**
* The pulumi deployment.
*/
// TODO: Expand type to encapsulate deployment.
deployment: any;
}
/**
* A Pulumi program as an inline function (in process).
*/
export type PulumiFn = () => Promise<Record<string, any> | void>;
/**
* The currently logged-in Pulumi identity.
*/
export interface WhoAmIResult {
user: string;
url?: string;
organizations?: string[];
}
export interface PluginInfo {
name: string;
path: string;
kind: PluginKind;
version?: string;
size: number;
installTime: Date;
lastUsedTime: Date;
serverURL: string;
}
export type PluginKind = "analyzer" | "language" | "resource";