json2hcl

command module
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2016 License: MIT Imports: 8 Imported by: 0

README

json2hcl (and hcl2json)

Convert JSON to HCL and HCL to JSON via STDIN / STDOUT.

Install

Check the releases for the latest version. Then it's just a matter of downloading the right one for you platform, extracting, making the binary executable.

Linux

Here's how it could look for 64 bits Linux, if you wanted json2hcl available globally inside /usr/local/bin:

pushd /tmp && \
  curl -SsLo json2hcl.tar.gz https://github.com/kvz/json2hcl/releases/download/v0.0.5/json2hcl_linux_amd64.tar.gz && \
  tar zxvf json2hcl.tar.gz && \
  sudo mv json2hcl_linux_amd64/json2hcl /usr/local/bin/json2hcl && \
  sudo chmod 755 /usr/local/bin/json2hcl && \
popd
OSX

Here's how it could look for 64 bits Darwin, if you wanted json2hcl available globally inside /usr/local/bin:

pushd /tmp && \
  curl -SsLo json2hcl.tar.gz https://github.com/kvz/json2hcl/releases/download/v0.0.5/json2hcl_darwin_amd64.zip && \
  tar zxvf json2hcl.tar.gz && \
  sudo mv json2hcl_darwin_amd64/json2hcl /usr/local/bin/json2hcl && \
  sudo chmod 755 /usr/local/bin/json2hcl && \
popd

Use

Here's an example fixtures/infra.tf.json being converted to HCL:

$ json2hcl < fixtures/infra.tf.json
"output" "arn" {
  "value" = "${aws_dynamodb_table.basic-dynamodb-table.arn}"
}
... rest of HCL truncated

Typical use would be

$ json2hcl < fixtures/infra.tf.json > fixtures/infra.tf

hcl2json

As a bonus, the conversation the other way around is also supported via the -reverse flag:

$ json2hcl -reverse < fixtures/infra.tf
{
  "output": [
    {
      "arn": [
        {
          "value": "${aws_dynamodb_table.basic-dynamodb-table.arn}"
        }
      ]
    }, 
  ... rest of JSON truncated
  ]
}

Development

mkdir -p ~/go/src/github.com/kvz
cd ~/go/src/github.com/kvz
git clone git@github.com:kvz/json2hcl.git
cd json2hcl
go get

Why?

If you don't know HCL, read Why HCL.

As for why json2hcl and hcl2json, we're building a tool called Frey that marries multiple underlying tools. We'd like configuration previously written in YAML or TOML to now be in HCL now as well. It's easy enough to convert the mentioned formats to JSON, and strictly speaking HCL is already able to read JSON natively, so why the extra step?

We're doing this for readability and maintainability, we wanted to save our infra recipes as HCL directly in our repos, instead of only having machine readable intermediate JSON that we'd need to hack on. This saves time spotting problems, and makes the experience somewhat enjoyable even.

In the off-chance you too have machine-readable JSON and are interested in converting that to the more human-being friendly HCL format, we thought we'd share this.

It's no rocket science, we're using already available HashiCorp libraries to support the conversion, HashiCorp could have easily released their own tools around this, and perhaps they will, but so far, they haven't.

Changelog

Ideabox (Unplanned)
  • Give the README.md some love
v0.0.7 (Unreleased)
  • Tests
v0.0.6 (2016-09-06)
  • Deprecate goxc in favor of native builds
v0.0.5 (2016-09-06)
  • Add hcl2json via the -reverse flag
v0.0.4 (2016-09-05)
  • Error handling
  • Cross-compiling and shipping releases

Contributors

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL