mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 18:01:01 -06:00
b0215fcd0f
This loader uses the HCL2 parser and decoder to process a config file, and then transforms the result into the same shape as would be produced by the HCL config loader. To avoid making changes to the existing config structures (which are depended on across much of the codebase) we first decode into a set of HCL2-tailored structs and then process them into the public-facing structs that a loader is expected to return. This is a compromise to keep the config package API broadly unchanged for now. Once we're ready to remove the old HCL loader (which implies that we're ready to support HCL2 natively elsewhere in the codebase) we will be able to simplify this quite considerably. Due to some mismatches of abstraction between HCL/HIL and HCL2, some shimming is required to get the required result.
126 lines
1.7 KiB
HCL
126 lines
1.7 KiB
HCL
#terraform:hcl2
|
|
|
|
terraform {
|
|
required_version = "foo"
|
|
|
|
backend "baz" {
|
|
something = "nothing"
|
|
}
|
|
}
|
|
|
|
variable "foo" {
|
|
default = "bar"
|
|
description = "barbar"
|
|
}
|
|
|
|
variable "bar" {
|
|
type = "string"
|
|
}
|
|
|
|
variable "baz" {
|
|
type = "map"
|
|
|
|
default = {
|
|
key = "value"
|
|
}
|
|
}
|
|
|
|
provider "aws" {
|
|
access_key = "foo"
|
|
secret_key = "bar"
|
|
version = "1.0.0"
|
|
}
|
|
|
|
provider "do" {
|
|
api_key = var.foo
|
|
alias = "fum"
|
|
}
|
|
|
|
data "do" "simple" {
|
|
foo = "baz"
|
|
provider = "do.foo"
|
|
}
|
|
|
|
data "do" "depends" {
|
|
depends_on = ["data.do.simple"]
|
|
}
|
|
|
|
resource "aws_security_group" "firewall" {
|
|
count = 5
|
|
provider = "another"
|
|
}
|
|
|
|
resource "aws_instance" "web" {
|
|
ami = "${var.foo}"
|
|
security_groups = [
|
|
"foo",
|
|
aws_security_group.firewall.foo,
|
|
]
|
|
|
|
network_interface {
|
|
device_index = 0
|
|
description = "Main network interface"
|
|
}
|
|
|
|
connection {
|
|
default = true
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "foo"
|
|
destination = "bar"
|
|
}
|
|
}
|
|
|
|
locals {
|
|
security_group_ids = aws_security_group.firewall.*.id
|
|
web_ip = aws_instance.web.private_ip
|
|
}
|
|
|
|
locals {
|
|
literal = 2
|
|
literal_list = ["foo"]
|
|
literal_map = {"foo" = "bar"}
|
|
}
|
|
|
|
resource "aws_instance" "db" {
|
|
security_groups = aws_security_group.firewall.*.id
|
|
VPC = "foo"
|
|
|
|
tags = {
|
|
Name = "${var.bar}-database"
|
|
}
|
|
|
|
depends_on = ["aws_instance.web"]
|
|
|
|
provisioner "file" {
|
|
source = "here"
|
|
destination = "there"
|
|
|
|
connection {
|
|
default = false
|
|
}
|
|
}
|
|
}
|
|
|
|
output "web_ip" {
|
|
value = aws_instance.web.private_ip
|
|
sensitive = true
|
|
}
|
|
|
|
output "web_id" {
|
|
description = "The ID"
|
|
value = aws_instance.web.id
|
|
depends_on = ["aws_instance.db"]
|
|
}
|
|
|
|
atlas {
|
|
name = "example/foo"
|
|
}
|
|
|
|
module "child" {
|
|
source = "./baz"
|
|
|
|
toasty = true
|
|
}
|