Skip to content

povio/resolve-config

Repository files navigation

ResolveConfig

Resolve config files using templates.

Install locally:

yarn add @povio/resolve-config

Use in CLI

yarn dlx @povio/[email protected] apply

CLI

Generate 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 bootstrap

Get 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'

SDK

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");

Configuration

.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

Templates

# static values
section1:
  myparameter: mylvalue
  deepsection:
    myparameter2: mylvalue

# functions
section2:
  stage: ${func:stage}
  timeatrender: ${func:timestamp}

# environment
section3:
  fromenv: ${env:APP_ENV}

Plugins

AWS

Install dependencies

yarn add @aws-sdk/client-ssm  @aws-sdk/client-sts  @aws-sdk/credential-providers

Use in CLI

yarn dlx -p @aws-sdk/client-ssm -p @aws-sdk/client-sts -p @aws-sdk/credential-providers @povio/[email protected] apply

Use 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}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published