@@ -139,3 +139,238 @@ To out-out, use one of the following methods:
139
139
" versionReporting" : false
140
140
}
141
141
142
+ Plugins
143
+ =======
144
+
145
+ The | cdk| toolkit provides extension points that enable users to augment the features provided by
146
+ the toolkit. There is currently only one extension point, allowing users to define custom AWS
147
+ credential providers, but other extension points may be added in the future as the needs arise.
148
+
149
+ Loading Plugins
150
+ ---------------
151
+
152
+ Plugins can be loaded by providing the Node module name (or path) to the CDK toolkit:
153
+
154
+ 1. Using the ` ` --plugin` ` command line option (which can be specified multiple times):
155
+
156
+ .. code-block:: console
157
+
158
+ $ cdk list --plugin=module
159
+ $ cdk deploy --plugin=module_1 --plugin=module_2
160
+
161
+ 2. Adding entries to the ` ` ~/.cdk.json` ` or ` ` cdk.json` ` file:
162
+
163
+ .. code-block:: js
164
+
165
+ {
166
+ // ...
167
+ " plugin" : [
168
+ " module_1" ,
169
+ " module_2"
170
+ ],
171
+ // ...
172
+ }
173
+
174
+ Authoring Plugins
175
+ -----------------
176
+
177
+ Plugins must be authored in TypeScript or Javascript, and are defined by implementing a Node module
178
+ that implements the following protocol, and using :js:class:` ~aws-cdk.PluginHost` methods:
179
+
180
+ .. tabs::
181
+ .. code-tab:: typescript
182
+
183
+ import cdk = require(' aws-cdk' );
184
+
185
+ export = {
186
+ version: ' 1' , // Version of the plugin infrastructure (currently always ' 1' )
187
+ init(host: cdk.PluginHost): void {
188
+ // Your plugin initialization hook.
189
+ // Use methods of ` ` host` ` to register custom code with the CDK toolkit
190
+ }
191
+ };
192
+
193
+ .. code-tab:: javascript
194
+
195
+ export = {
196
+ version: ' 1' , // Version of the plugin infrastructure (currently always ' 1' )
197
+ init(host) {
198
+ // Your plugin initialization hook.
199
+ // Use methods of ` ` host` ` to register custom code with the CDK toolkit
200
+ }
201
+ };
202
+
203
+ Credential Provider Plugins
204
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
205
+
206
+ Custom credential providers are classes implementing the
207
+ :js:class:` ~aws-cdk.CredentialProviderSource` interface, and registered to the toolkit using
208
+ the :js:func:` ~aws-cdk.PluginHost.registerCredentialProviderSource` method.
209
+
210
+ .. tabs::
211
+ .. code-tab:: typescript
212
+
213
+ import cdk = require(' aws-cdk' );
214
+ import aws = require(' aws-sdk' );
215
+
216
+ class CustomCredentialProviderSource implements cdk.CredentialProviderSource {
217
+ public async isAvailable (): Promise< boolean> {
218
+ // Return ` ` false` ` if the plugin could determine it cannot be used (for example,
219
+ // if it depends on files that are not present on this host).
220
+ return true ;
221
+ }
222
+
223
+ public async canProvideCredentials(accountId: string): Promise< boolean> {
224
+ // Return ` ` false` ` if the plugin is unable to provide credentials for the
225
+ // requested account (for example if it' s not managed by the credentials
226
+ // system that this plugin adds support for).
227
+ return true;
228
+ }
229
+
230
+ public async getProvider(accountId: string, mode: cdk.Mode): Promise<aws.Credentials> {
231
+ let credentials: aws.Credentials;
232
+ // Somehow obtain credentials in ``credentials``, and return those.
233
+ return credentials;
234
+ }
235
+ }
236
+
237
+ export = {
238
+ version = ' 1' ,
239
+ init(host: cdk.PluginHost): void {
240
+ // Register the credential provider to the PluginHost.
241
+ host.registerCredentialProviderSource(new CustomCredentialProviderSource());
242
+ }
243
+ };
244
+
245
+ .. code-tab:: javascript
246
+
247
+ class CustomCredentialProviderSource {
248
+ async isAvailable() {
249
+ // Return ``false`` if the plugin could determine it cannot be used (for example,
250
+ // if it depends on files that are not present on this host).
251
+ return true;
252
+ }
253
+
254
+ async canProvideCredentials(accountId) {
255
+ // Return ``false`` if the plugin is unable to provide credentials for the
256
+ // requested account (for example if it' s not managed by the credentials
257
+ // system that this plugin adds support for).
258
+ return true ;
259
+ }
260
+
261
+ async getProvider(accountId, mode) {
262
+ let credentials;
263
+ // Somehow obtain credentials in ` ` credentials` ` , and return those.
264
+ return credentials;
265
+ }
266
+ }
267
+
268
+ export = {
269
+ version = ' 1' ,
270
+ init(host) {
271
+ // Register the credential provider to the PluginHost.
272
+ host.registerCredentialProviderSource(new CustomCredentialProviderSource ());
273
+ }
274
+ };
275
+
276
+ Note that the credentials obtained from the providers for a given account and mode will be cached,
277
+ and as a consequence it is strongly advised that the credentials objects returned are self-refreshing,
278
+ as descibed in the ` AWS SDK for Javascript documentation < https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html> ` _.
279
+
280
+ Reference
281
+ ---------
282
+
283
+ .. js:module:: aws-cdk
284
+
285
+ CredentialProviderSource * (interface)*
286
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
287
+
288
+ .. js:class:: CredentialProviderSource
289
+
290
+ .. js:attribute:: name
291
+
292
+ A friendly name for the provider, which will be used in error messages, for example.
293
+
294
+ :type: ` ` string` `
295
+
296
+ .. js:method:: isAvailable ()
297
+
298
+ Whether the credential provider is even online. Guaranteed to be called before any of the other functions are called.
299
+
300
+ :returns: ` ` Promise< boolean> ` `
301
+
302
+ .. js:method:: canProvideCredentials(accountId)
303
+
304
+ Whether the credential provider can provide credentials for the given account.
305
+
306
+ :param string accountId: the account ID for which credentials are needed.
307
+ :returns: ` ` Promise< boolean> ` `
308
+
309
+ .. js:method:: getProvider(accountId, mode)
310
+
311
+ Construct a credential provider for the given account and the given access mode.
312
+ Guaranteed to be called only if canProvideCredentails () returned true at some point.
313
+
314
+ :param string accountId: the account ID for which credentials are needed.
315
+ :param aws-cdk.Mode mode: the kind of operations the credentials are intended to perform.
316
+ :returns: ` ` Promise< aws.Credentials> ` `
317
+
318
+ Mode * (enum)*
319
+ ^^^^^^^^^^^^^
320
+
321
+ .. js:class:: Mode
322
+
323
+ .. js:data:: ForReading
324
+
325
+ Credentials are inteded to be used for read-only scenarios.
326
+
327
+ .. js:data:: ForWriting
328
+
329
+ Credentials are intended to be used for read-write scenarios.
330
+
331
+ Plugin * (interface)*
332
+ ^^^^^^^^^^^^^^^^^^^^
333
+
334
+ .. js:class:: Plugin ()
335
+
336
+ .. js:attribute:: version
337
+
338
+ The version of the plug-in interface used by the plug-in. This will be used by
339
+ the plug-in host to handle version changes. Currently, the only valid value for
340
+ this attribute is ` ` ' 1' ` ` .
341
+
342
+ :type: ` ` string` `
343
+
344
+ .. js:method:: init(host)
345
+
346
+ When defined, this function is invoked right after the plug-in has been loaded,
347
+ so that the plug-in is able to initialize itself. It may call methods of the
348
+ :js:class:` ~aws-cdk.PluginHost` instance it receives to register new
349
+ :js:class:` ~aws-cdk.CredentialProviderSource` instances.
350
+
351
+ :param aws-cdk.PluginHost host: The | cdk| plugin host
352
+ :returns: ` ` void` `
353
+
354
+ PluginHost
355
+ ^^^^^^^^^^
356
+
357
+ .. js:class:: PluginHost ()
358
+
359
+ .. js:data:: instance
360
+
361
+ :type: :js:class:` ~aws-cdk.PluginHost`
362
+
363
+ .. js:method:: load(moduleSpec)
364
+
365
+ Loads a plug-in into this PluginHost.
366
+
367
+ :param string moduleSpec: the specification (path or name) of the plug-in module to be loaded.
368
+ :throws Error: if the provided ` ` moduleSpec` ` cannot be loaded or is not a valid :js:class:` ~aws-cdk.Plugin` .
369
+ :returns: ` ` void` `
370
+
371
+ .. js:method:: registerCredentialProviderSource(source)
372
+
373
+ Allows plug-ins to register new :js:class:` ~aws-cdk.CredentialProviderSources` .
374
+
375
+ :param aws-cdk.CredentialProviderSources source: a new CredentialProviderSource to register.
376
+ :returns: ` ` void` `
0 commit comments