Resolve config files using templates.
Install locally:
yarn add @povio/resolve-configUse in CLI
yarn dlx @povio/[email protected] applyGenerate environment files based on a config file
# default, stage=local module=config
yarn resolve-config apply
# short form, [stage].[module]
yarn resolve-config apply myapp-dev.backend
# custom stage/module, resolves into .config/myapp-dev.backend.yml
yarn resolve-config apply --stage myapp-dev --module backend
# by path and stage
yarn resolve-config apply --path .config/myapp-dev.backend.yml --stage myapp-dev
# only 1 target
yarn resolve-config apply myapp-dev.backend --target bootstrapGet values/trees from resolved targets
# short form
yarn resolve-config get myapp-dev.config.resolved
# specify property to return
yarn resolve-config get myapp-dev.config.resolved:database.password
# specify output format in json | env | yml
yarn resolve-config get myapp-dev.config.resolved --outputFormat yml
# long form
yarn resolve-config get --stage myapp-dev --module config --target resolved --property database.password --outputFormat yml
# specify list of keys and apply them as env
eval `yarn start get dev.config.resolved --outputFormat env --keys mysection.myparameter --cwd ./test --prefix 'export '`Set value in a config file
yarn start set --path .config/myapp-dev.config.override.yml --property database.password --value 'mypass'
yarn start set --stage myapp-dev --module config.override --property database.password --value 'mypass'import { loadConfig, resolveConfig, getString, getNumber, getBoolean } from "@povio/resolve-config";
// will only load sync values
const config1 = resolveConfigSync({
stage: process.env.STAGE,
module: "backend",
target: "resolved",
});
// will load all values
const config2 = await resolveConfig({
stage: process.env.STAGE,
module: "backend",
target: "bootstrap",
});
// get a value
const mypass = getString("database.password");
const mynum = getNumber("database.port");
const mybool = getBoolean("database.enabled");.config/[stage].[module].yml, eq .config/myapp-dev.config.yml
configs:
- name: bootstrap
# where to write the resulting file
destination: ./.config/myapp-dev.api.resolved.yml
values:
# render the root from a template
- name: "@"
templateModule: api.template
resolve: "only"
# override a variable from an env value
- name: database__host
valueFrom: env:DATABASE_HOST
- name: database__username
value: myapp
- name: feature_flags
# expand json into object
objectFrom: arn:aws:ssm:::parameter/myapp/feature/flags
# context that plugins can use
context:
aws:
accountId: "1234567890"
region: "us-east-1"
- name: resolved
values:
# use the template without resolved items
- name: "@"
templateModule: api.template
resolve: "none"
# override with resolved items
- name: "@"
templateModule: api.resolved
ignoreEmpty: true
# optional overrides
- name: "@"
templateModule: api.override
ignoreEmpty: true# static values
section1:
myparameter: mylvalue
deepsection:
myparameter2: mylvalue
# functions
section2:
stage: ${func:stage}
timeatrender: ${func:timestamp}
# environment
section3:
fromenv: ${env:APP_ENV}Install dependencies
yarn add @aws-sdk/client-ssm @aws-sdk/client-sts @aws-sdk/credential-providersUse in CLI
yarn dlx -p @aws-sdk/client-ssm -p @aws-sdk/client-sts -p @aws-sdk/credential-providers @povio/[email protected] applyUse in resolver:
section:
# Fetch value from SSM
secret: ${arn:aws:ssm:::parameter/myapp/feature/flags}
# Expand a JSON vaule into a object, eq
# secretblock:
# val: 1
secretblock: $object{arn:aws:ssm:::parameter/myapp/feature/block}