Plugins can register custom variables sources, for example ${foo:some-variable}
.
Custom sources can be registered via configurationVariablesSources
as an object with a resolve
function:
'use strict';
class MyPlugin {
constructor() {
this.configurationVariablesSources = {
foo: {
async resolve({ address }) {
// `address` contains the name of the variable to resolve:
// In `${foo:some-variable}`, address will contain `some-variable`.
// Resolver is expected to return an object with the value in the `value` property:
return {
//
value: `Resolving variable ${address}`,
};
},
},
};
}
}
module.exports = MyPlugin;
The variable source defined above (registered via a plugin) can be used as follows:
service: test
# ...
custom:
value1: ${foo:bar}
plugins:
- ./my-plugin
The configuration will be resolved into the following:
service: test
# ...
custom:
value1: Resolving variable bar
plugins:
- ./my-plugin
Variable sources can support advanced use cases via parameters:
service: test
# ...
custom:
value1: ${foo(one, two):bar}
Parameters can be retrieved in the params
argument:
class MyPlugin {
constructor() {
this.configurationVariablesSources = {
foo: {
async resolve({ address, params }) {
return {
// In the example below, ${foo(one, two):bar} will
// resolve to "one,two"
value: (params || []).join(','),
};
},
},
};
}
}
It is possible to retrieve other variables, configuration values and CLI options in the variable resolver:
class MyPlugin {
constructor() {
this.configurationVariablesSources = {
foo: {
async resolve({ resolveVariable, options }) {
// `options` is CLI options
// `resolveVariable` resolves other variables (for example here: `${sls:stage}`)
const stage = await resolveVariable('sls:stage');
// To retrieve a configuration value from serverless.yml, use the `self:xxx` variable source, for example:
// await resolveVariable('self:provider.region')
return {
value: `The stage is ${stage}`,
};
},
},
};
}
}