0.1.1 • Published 4 years ago

betterparse v0.1.1

Weekly downloads
1
License
MIT
Repository
-
Last release
4 years ago

BetterParse

A simple YAML parsing utility for Kubernetes manifests.

Usage

CLI

The basic usage is:

betterparse <PATH_TO_YAML> [--raw] [--out=<PATH_FOR_OUTPUT>] [--environment=<CONFIG_ENVIRONMENT>]

More detailed info can be found by running betterparse --help.

When --raw is specified without --out, the parsed YAML will be concatenated to allow for ingesting into Kubernetes as a single file:

kubectl apply -f <(betterparse ./kubernetes --raw)
Logging

To see logs, prefix the betterparse command with DEBUG=betterparse:*. These logs are sent to stderr and do not conflict with the --raw option.

Templating

config.json

The config.json file should live in the same directory as the YAML to parse.

This file should have top-level keys corresponding to the specific environment. The values inside each environment object are 100% user-defined.

{
  "staging": {
    "kubernetes": {
      "image": "",
      "imagePullPolicy": "Always",
      "replicas": 2,
      "resources": {
        "limits": {
          "cpu": ""
        },
        "requests": {
          "cpu": "",
          "memory": ""
        }
      }
    },
    "variables": {
      "loggingDisplayName": "QaWorker",
      "nodeEnv": "development",
      "rabbitmq": {
        "user": "user",
        "pass": "C4y9ACotwtrtN9Z8"
      },
      "database": {
        "user": "bv",
        "pass": "%44JvaL&EVS##ty5"
      }
    }
  }
}
YAML

Each YAML file inside the input directory will be parsed. The parser looks for the token #@ on each line

For example:

config.json (top-level environment key omitted for brevity)
{
  "path": {
    "to": {
      "replacement": "abcdefg
    }
  }
}
template.yaml
someValue: defaultValue #@ path.to.replacement

When run through the parser, template.yaml will be converted to

someValue: 'abcdefg'

Assuming the path could not be found in the config, the original value will be used:

someValue: defaultValue #@ i.dont.exist

This would produce

someValue: defaultValue