Skip to main content

Build Status PyPI version Codecov Test Coverage Snap Status

Get it from the Snap Store

AWS CloudFormation Template Flip

About

AWS CloudFormation Template Flip is a tool that converts AWS CloudFormation templates between JSON and YAML formats, making use of the YAML format's short function syntax where possible.

The term "Flip" is inspired by the well-known Unix command-line tool flip which converts text files between Unix, Mac, and MS-DOS formats.

Installation

AWS CloudFormation Template Flip can be installed using pip:

pip install cfn-flip

Usage

AWS CloudFormation Template Flip is both a command line tool and a python library.

Note that the command line tool is spelled cfn-flip with a hyphen, while the python package is cfn_flip with an underscore.

Command line tool

Usage: cfn-flip [OPTIONS] [INPUT] [OUTPUT]

  AWS CloudFormation Template Flip is a tool that converts AWS
  CloudFormation templates between JSON and YAML formats, making use of the
  YAML format's short function syntax where possible."

Options:
  -i, --input [json|yaml]   Specify the input format. Overrides -j and -y
                            flags.
  -o, --output [json|yaml]  Specify the output format. Overrides -j, -y, and
                            -n flags.
  -j, --json                Convert to JSON. Assume the input is YAML.
  -y, --yaml                Convert to YAML. Assume the input is JSON.
  -c, --clean               Performs some opinionated cleanup on your
                            template.
  -l, --long                Use long-form syntax for functions when converting
                            to YAML.
  -n, --no-flip             Perform other operations but do not flip the
                            output format.
  --version                 Show the version and exit.
  --help                    Show this message and exit.

cfn-flip will detect the format of the input template and convert JSON to YAML and YAML to JSON, respectively.

Examples:

  • Reading from stdin and outputting to stdout:

    cat examples/test.json | cfn-flip
    
  • Reading from a file and outputting to stdout:

    cfn-flip examples/test.yaml
    
  • Reading from a file and outputting to another file:

    cfn-flip examples/test.json output.yaml
    
  • Reading from a file and cleaning up the output

    cfn-flip -c examples/test.json
    

Python package

To use AWS CloudFormation Template Flip from your own python projects, import one of the functions flip, to_yaml, or to_json as needed.

from cfn_flip import flip, to_yaml, to_json

"""
All functions expect a string containing serialised data
and return a string containing serialised data
or raise an exception if there is a problem parsing the input
"""

# flip takes a best guess at the serialisation format
# and returns the opposite, converting json into yaml and vice versa
some_yaml_or_json = flip(some_json_or_yaml)

# to_json expects serialised yaml as input, and returns serialised json
some_json = to_json(some_yaml)

# to_yaml expects serialised json as input, and returns serialised yaml
some_yaml = to_yaml(some_json)

# The clean_up flag performs some opinionated, CloudFormation-specific sanitation of the input
# For example, converting uses of Fn::Join to Fn::Sub
# flip, to_yaml, and to_json all support the clean_up flag
clean_yaml = to_yaml(some_json, clean_up=True)

Configuration paramters

You can configure some parameters like:

max_col_width: Maximum columns before breakline. Default value is 200 To change the configuration you can use:

Environment Variable

Linux/Unix: export CFN_MAX_COL_WIDTH=120

Windows: SET CFN_MAX_COL_WIDTH=120

Python

from cfn_tools._config import config
from cfn_flip import flip, to_yaml, to_json

"""
All functions expect a string containing serialised data
and return a string containing serialised data
or raise an exception if there is a problem parsing the input
"""

# Change the default number of columns to break line to 120
config['max_col_width'] = "120"

# flip takes a best guess at the serialisation format
# and returns the opposite, converting json into yaml and vice versa
some_yaml_or_json = flip(some_json_or_yaml)

# to_json expects serialised yaml as input, and returns serialised json
some_json = to_json(some_yaml)

# to_yaml expects serialised json as input, and returns serialised yaml
some_yaml = to_yaml(some_json)

# The clean_up flag performs some opinionated, CloudFormation-specific sanitation of the input
# For example, converting uses of Fn::Join to Fn::Sub
# flip, to_yaml, and to_json all support the clean_up flag
clean_yaml = to_yaml(some_json, clean_up=True)

Release files for cfn-flip 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cfn-flip 1.3.0
File Size Uploaded
cfn_flip-1.3.0.tar.gz 16.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cfn-flip 1.3.0
File Interpreter ABI Platform
cfn_flip-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.5 kB

Release files / cfn_flip-1.3.0.tar.gz

Download URL cfn_flip-1.3.0.tar.gz
Size 16.1 kB
Tags Source
SHA-256 checksum
How to use checksums
003e02a089c35e1230ffd0e1bcfbbc4b12cc7d2deb2fcc6c4228ac9819307362
BLAKE2b-256 checksum
How to use checksums
ca758eba0bb52a6c58e347bc4c839b249d9f42380de93ed12a14eba4355387b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

Release files / cfn_flip-1.3.0-py3-none-any.whl

Download URL cfn_flip-1.3.0-py3-none-any.whl
Size 21.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
faca8e77f0d32fb84cce1db1ef4c18b14a325d31125dae73c13bcc01947d2722
BLAKE2b-256 checksum
How to use checksums
2ba8a67297cd63ef99c3391c1d143161b187b71afa715a988655758269e3d02f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.3

1 release file

1.2.2

2 release files

1.2.1

2 release files

1.2.0

1 release file

1.1.0

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.3.0

1 release file

0.2.5

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page