A general-purpose HCL2 (Hashicorp Configuration Language) parser written in Crystal.
MIT License
A general-purpose HCL2 parser written in Crystal. Does not make any domain assumptions. Aims to supports the standard HCL2 types and map to the HCL2 informational model.
HCL2 support is considered feature complete. However, it does not yet run against the spec test suite, so there may be situations in which some documents do not work as they should. Please report any issues here.
hcl.cr
has the following goals, in order of importance:
Add the dependency to your shard.yml
:
dependencies:
hcl:
github: maxfierke/hcl.cr
version: ~> 0.2.2
Run shards install
For most use-cases, schema-based parsing will be the easiest to work with.
hcl.cr
provides an HCL::Serializable
module, which can be used much like
JSON::Serializable
and YAML::Serializable
from the Crystal standard library.
The module allows you to define mappings for attributes, blocks, and labels on
your own classes and structs, and provides convienent self.from_hcl
and to_hcl
methods.
See documentation on HCL::Serializable
for more information.
For more advanced use cases, you can use the HCL::Parser
class and work
with the AST nodes directly. HCL::Builder
can also be used to build HCL ASTs
using a DSL, and create arbitrary HCL documents.
require "hcl"
SRC_TEXT = <<-HEREDOC
# An AMI
variable "ami" {
description = "the AMI to use"
}
/* A multi
line comment. */
resource "aws_instance" "web" {
ami = "${var.ami}"
count = 2
source_dest_check = false
another_boolean = "true"
something_i_want_default = null
connection {
user = "root"
}
}
HEREDOC
parser = HCL::Parser.new(SRC_TEXT) # Parser object.
document = parser.parse! # Returns an HCL::AST::Document
value = document.evaluate # Returns the HCL structure as Crystal data types
string = document.to_s # Returns string reconstruction of HCL configuration
for
expressionsgit checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)Licensed under The MIT License. See LICENSE for more information.