terraform-template-renderer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -1
- data/CHANGELOG.md +8 -0
- data/README.md +19 -0
- data/examples/Gemfile +1 -0
- data/examples/Gemfile.lock +17 -0
- data/examples/cloudwatch_dashboard/README.md +17 -0
- data/examples/cloudwatch_dashboard/cloudwatch_dashboard.erb +136 -0
- data/examples/cloudwatch_dashboard/cloudwatch_dashboard.png +0 -0
- data/examples/cloudwatch_dashboard/cloudwatch_dashboard.tf +32 -0
- data/examples/cloudwatch_dashboard/terraform_setup.tf +97 -0
- data/examples/json_encoded_hash/json_encoded_hash.erb +3 -0
- data/examples/json_encoded_hash/json_encoded_hash.tf +25 -0
- data/examples/multi_resource_lookup/README.md +14 -0
- data/examples/multi_resource_lookup/multi_resource_lookup.erb +7 -0
- data/examples/multi_resource_lookup/multi_resource_lookup.tf +18 -0
- data/examples/multi_resource_lookup/terraform_setup.tf +63 -0
- data/examples/simple_list/simple_list.erb +7 -0
- data/examples/simple_list/simple_list.tf +22 -0
- data/examples/simple_map/simple_map.erb +7 -0
- data/examples/simple_map/simple_map.tf +27 -0
- data/examples/simple_strings/simple_strings.erb +2 -0
- data/examples/simple_strings/simple_strings.tf +21 -0
- data/lib/terraform_template_renderer/renderer.rb +2 -1
- data/lib/terraform_template_renderer/version.rb +1 -1
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48bac62d1bd59cb46a67cfcc05d0a3a92a5d2300
|
4
|
+
data.tar.gz: 3ca5b7f8ce549c3a498bd688e8b9e2b83df16f35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05208a74a1873f77c36647a90edc1407fe5856b54bb41398f14839256bc8c47152a3ae49c59062ac145d29b71ccb388c1f52bec5ab370377dc61f7e878396453
|
7
|
+
data.tar.gz: 7666c567d1a7c0973ae06b9df0dbf155d6feae5f31ebb2bbb8bc53da5cb4f6cc16c7e11b08591b155aabfa2f2a4c627832735a788f25b187688bc42436ea38f5
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.2.0 (2018-01-29)
|
2
|
+
|
3
|
+
Features:
|
4
|
+
|
5
|
+
- Enabled trim mode for ERB templates using a hyphen (e.g. `<%- code -%>` will remove preceeding indentation and a
|
6
|
+
following newline).
|
7
|
+
- Example directory giving real usage examples in terraform.
|
8
|
+
|
1
9
|
## 0.1.0 (2018-01-28)
|
2
10
|
|
3
11
|
Features:
|
data/README.md
CHANGED
@@ -22,3 +22,22 @@ The purpose for this strange behaviour is to be a [terraform external
|
|
22
22
|
provider](https://www.terraform.io/docs/providers/external/data_source.html) to render arbitrarily complex templates,
|
23
23
|
terraform passes in the variables to render as a json blob to stdin as described above and expects a json blob
|
24
24
|
back.
|
25
|
+
|
26
|
+
## ERB Template notes
|
27
|
+
|
28
|
+
Trim mode is enabled and the trim character is a hyphen `-`.
|
29
|
+
|
30
|
+
## Examples
|
31
|
+
|
32
|
+
There are a number of examples in the examples folder. To run these examples you will need terraform 0.11, you can run
|
33
|
+
the example as follows:
|
34
|
+
|
35
|
+
cd examples/simple_strings
|
36
|
+
terraform init
|
37
|
+
terraform apply
|
38
|
+
|
39
|
+
In each example there is an erb template and a terraform file, applying the terraform code will produce a file called
|
40
|
+
`example_output`.
|
41
|
+
|
42
|
+
___WARNING___: Some of the examples incur AWS costs, _ALWAYS_ remember to `terraform destroy` after you have finished
|
43
|
+
running the example. You are solely responsible for any AWS costs incurred running these examples.
|
data/examples/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gem "terraform-template-renderer", path: "../"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Multi Resource Lookup example
|
2
|
+
|
3
|
+
This example requires applying the terraform in 2 stages. The easiest way to do this is to comment
|
4
|
+
out everything in `cloudwatch_dashboard.tf` run `terraform apply`, allow the aws instances to be created,
|
5
|
+
and then uncomment `cloudwatch_dashboard.tf`
|
6
|
+
|
7
|
+
This example directory includes a screenshot of the resultant dashboard which was a result of running terraform
|
8
|
+
apply as described above.
|
9
|
+
|
10
|
+
## COSTS!
|
11
|
+
|
12
|
+
Be warned, this example will cost money to perform, it requires starting up 2 t2.nano instances and an ELB.
|
13
|
+
You are solely responsible for any resources created and costs incurred.
|
14
|
+
|
15
|
+
I strongly recommend running `terraform destroy` once you have finished running the test to remove all the resources
|
16
|
+
that the test created.
|
17
|
+
|
@@ -0,0 +1,136 @@
|
|
1
|
+
<%
|
2
|
+
def instances_by_name_list_for(statistic)
|
3
|
+
rows = JSON.parse(@instances_by_name).map do |instance|
|
4
|
+
row = ["AWS/EC2", statistic, "InstanceId", instance["id"], { label: instance["name"] }]
|
5
|
+
JSON.dump(row)
|
6
|
+
end
|
7
|
+
rows.join(",")
|
8
|
+
end
|
9
|
+
|
10
|
+
def instances_by_id_list_for(statistic)
|
11
|
+
rows = JSON.parse(@instances_by_id).map do |instance|
|
12
|
+
row = ["AWS/EC2", statistic, "InstanceId", instance]
|
13
|
+
JSON.dump(row)
|
14
|
+
end
|
15
|
+
rows.join(",")
|
16
|
+
end
|
17
|
+
|
18
|
+
-%>
|
19
|
+
{
|
20
|
+
"widgets": [
|
21
|
+
{
|
22
|
+
"type": "text",
|
23
|
+
"x": 0,
|
24
|
+
"y": 0,
|
25
|
+
"width": 24,
|
26
|
+
"height": 1,
|
27
|
+
"properties": {
|
28
|
+
"markdown": "## Instances"
|
29
|
+
}
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"type": "metric",
|
33
|
+
"x": 0,
|
34
|
+
"y": 1,
|
35
|
+
"width": 12,
|
36
|
+
"height": 5,
|
37
|
+
"properties": {
|
38
|
+
"metrics": [<%=instances_by_name_list_for("NetworkIn")%>],
|
39
|
+
"period": 300,
|
40
|
+
"stat": "Maximum",
|
41
|
+
"region": "eu-west-1",
|
42
|
+
"title": "Network In"
|
43
|
+
}
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"type": "metric",
|
47
|
+
"x": 12,
|
48
|
+
"y": 1,
|
49
|
+
"width": 12,
|
50
|
+
"height": 5,
|
51
|
+
"properties": {
|
52
|
+
"metrics": [<%=instances_by_name_list_for("NetworkOut")%>],
|
53
|
+
"period": 300,
|
54
|
+
"stat": "Maximum",
|
55
|
+
"region": "eu-west-1",
|
56
|
+
"title": "Network Out"
|
57
|
+
}
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"type": "metric",
|
61
|
+
"x": 0,
|
62
|
+
"y": 6,
|
63
|
+
"width": 24,
|
64
|
+
"height": 5,
|
65
|
+
"properties": {
|
66
|
+
"metrics": [<%=instances_by_id_list_for("CPUUtilization")%>],
|
67
|
+
"period": 300,
|
68
|
+
"stat": "Maximum",
|
69
|
+
"region": "eu-west-1",
|
70
|
+
"title": "EC2 Instance CPU"
|
71
|
+
}
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"type": "text",
|
75
|
+
"x": 0,
|
76
|
+
"y": 11,
|
77
|
+
"width": 24,
|
78
|
+
"height": 1,
|
79
|
+
"properties": {
|
80
|
+
"markdown": "## ELB"
|
81
|
+
}
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"type": "metric",
|
85
|
+
"x": 0,
|
86
|
+
"y": 12,
|
87
|
+
"width": 8,
|
88
|
+
"height": 5,
|
89
|
+
"properties": {
|
90
|
+
"metrics": [
|
91
|
+
[ "AWS/ELB", "HealthyHostCount", "LoadBalancerName", "<%=@elb_name%>" ],
|
92
|
+
[ "AWS/ELB", "UnHealthyHostCount", "LoadBalancerName", "<%=@elb_name%>" ]
|
93
|
+
],
|
94
|
+
"period": 300,
|
95
|
+
"stat": "Maximum",
|
96
|
+
"region": "eu-west-1",
|
97
|
+
"title": "Host Health"
|
98
|
+
}
|
99
|
+
},
|
100
|
+
{
|
101
|
+
"type": "metric",
|
102
|
+
"x": 8,
|
103
|
+
"y": 12,
|
104
|
+
"width": 8,
|
105
|
+
"height": 5,
|
106
|
+
"properties": {
|
107
|
+
"metrics": [
|
108
|
+
[ "AWS/ELB", "RequestCount", "LoadBalancerName", "<%=@elb_name%>" ]
|
109
|
+
],
|
110
|
+
"period": 300,
|
111
|
+
"stat": "Maximum",
|
112
|
+
"region": "eu-west-1",
|
113
|
+
"title": "Request Latency"
|
114
|
+
}
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"type": "metric",
|
118
|
+
"x": 16,
|
119
|
+
"y": 12,
|
120
|
+
"width": 8,
|
121
|
+
"height": 5,
|
122
|
+
"properties": {
|
123
|
+
"metrics": [
|
124
|
+
[ "AWS/ELB", "HTTPCode_Backend_2XX", "LoadBalancerName", "<%=@elb_name%>", { "label": "2xx responses" } ],
|
125
|
+
[ "AWS/ELB", "HTTPCode_Backend_3XX", "LoadBalancerName", "<%=@elb_name%>", { "label": "3xx responses" } ],
|
126
|
+
[ "AWS/ELB", "HTTPCode_Backend_4XX", "LoadBalancerName", "<%=@elb_name%>", { "label": "4xx responses" } ],
|
127
|
+
[ "AWS/ELB", "HTTPCode_Backend_5XX", "LoadBalancerName", "<%=@elb_name%>", { "label": "5xx responses" } ]
|
128
|
+
],
|
129
|
+
"period": 300,
|
130
|
+
"stat": "Maximum",
|
131
|
+
"region": "eu-west-1",
|
132
|
+
"title": "Request Latency"
|
133
|
+
}
|
134
|
+
}
|
135
|
+
]
|
136
|
+
}
|
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
data "aws_instances" "cloudwatch_dashboard" {
|
2
|
+
instance_tags {
|
3
|
+
Stage = "Development"
|
4
|
+
}
|
5
|
+
}
|
6
|
+
|
7
|
+
locals {
|
8
|
+
aws_instances_by_name = [
|
9
|
+
{ name = "${aws_instance.cloudwatch_dashboard_1.tags.Name}", id = "${aws_instance.cloudwatch_dashboard_1.id}" },
|
10
|
+
{ name = "${aws_instance.cloudwatch_dashboard_2.tags.Name}", id = "${aws_instance.cloudwatch_dashboard_2.id}" }
|
11
|
+
]
|
12
|
+
}
|
13
|
+
|
14
|
+
data "external" "cloudwatch_dashboard" {
|
15
|
+
program = ["bundle", "exec", "render-template", "cloudwatch_dashboard.erb"]
|
16
|
+
|
17
|
+
query {
|
18
|
+
instances_by_name = "${jsonencode(local.aws_instances_by_name)}"
|
19
|
+
instances_by_id = "${jsonencode(data.aws_instances.cloudwatch_dashboard.ids)}"
|
20
|
+
elb_name = "${aws_elb.cloudwatch_dashboard.name}"
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
resource "aws_cloudwatch_dashboard" "cloudwatch_dashboard" {
|
25
|
+
dashboard_name = "TerraformTemplateRendererExample"
|
26
|
+
dashboard_body = "${data.external.cloudwatch_dashboard.result.rendered}"
|
27
|
+
}
|
28
|
+
|
29
|
+
resource "local_file" "cloudwatch_dashboard" {
|
30
|
+
content = "${data.external.cloudwatch_dashboard.result.rendered}"
|
31
|
+
filename = "sample_output"
|
32
|
+
}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
provider "aws" {
|
10
|
+
version = "~> 1.7"
|
11
|
+
region = "eu-west-1"
|
12
|
+
}
|
13
|
+
|
14
|
+
resource "aws_vpc" "cloudwatch_dashboard" {
|
15
|
+
cidr_block = "10.254.254.0/24"
|
16
|
+
|
17
|
+
tags {
|
18
|
+
Name = "terraform-template-renderer-example"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
resource "aws_internet_gateway" "cloudwatch_dashboard" {
|
23
|
+
vpc_id = "${aws_vpc.cloudwatch_dashboard.id}"
|
24
|
+
|
25
|
+
tags {
|
26
|
+
Name = "terraform-template-renderer-example"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
resource "aws_subnet" "cloudwatch_dashboard" {
|
31
|
+
vpc_id = "${aws_vpc.cloudwatch_dashboard.id}"
|
32
|
+
cidr_block = "10.254.254.0/24"
|
33
|
+
availability_zone = "eu-west-1a"
|
34
|
+
|
35
|
+
tags {
|
36
|
+
Name = "terraform-template-renderer-example"
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
data "aws_ami" "cloudwatch_dashboard" {
|
41
|
+
most_recent = true
|
42
|
+
|
43
|
+
filter {
|
44
|
+
name = "name"
|
45
|
+
values = ["amzn-ami-2017.09.*-amazon-ecs-optimized"]
|
46
|
+
}
|
47
|
+
|
48
|
+
owners = ["amazon"]
|
49
|
+
}
|
50
|
+
|
51
|
+
resource "aws_instance" "cloudwatch_dashboard_1" {
|
52
|
+
ami = "${data.aws_ami.cloudwatch_dashboard.id}"
|
53
|
+
instance_type = "t2.nano"
|
54
|
+
subnet_id = "${aws_subnet.cloudwatch_dashboard.id}"
|
55
|
+
|
56
|
+
tags {
|
57
|
+
Name = "terraform-template-renderer-example-1"
|
58
|
+
Stage = "Development"
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
resource "aws_instance" "cloudwatch_dashboard_2" {
|
63
|
+
ami = "${data.aws_ami.cloudwatch_dashboard.id}"
|
64
|
+
instance_type = "t2.nano"
|
65
|
+
subnet_id = "${aws_subnet.cloudwatch_dashboard.id}"
|
66
|
+
|
67
|
+
tags {
|
68
|
+
Name = "terraform-template-renderer-example-2"
|
69
|
+
Stage = "Development"
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
resource "aws_elb" "cloudwatch_dashboard" {
|
74
|
+
name = "terraform-template-renderer-ex"
|
75
|
+
subnets = ["${aws_subnet.cloudwatch_dashboard.id}"]
|
76
|
+
|
77
|
+
instances = [
|
78
|
+
"${aws_instance.cloudwatch_dashboard_1.id}",
|
79
|
+
"${aws_instance.cloudwatch_dashboard_2.id}"
|
80
|
+
]
|
81
|
+
|
82
|
+
listener {
|
83
|
+
instance_port = 80
|
84
|
+
instance_protocol = "HTTP"
|
85
|
+
lb_port = 80
|
86
|
+
lb_protocol = "HTTP"
|
87
|
+
}
|
88
|
+
|
89
|
+
tags {
|
90
|
+
Name = "terraform-template-renderer-example"
|
91
|
+
Stage = "Development"
|
92
|
+
}
|
93
|
+
|
94
|
+
depends_on = [
|
95
|
+
"aws_internet_gateway.cloudwatch_dashboard"
|
96
|
+
]
|
97
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
data "external" "json_encoded_hash" {
|
10
|
+
program = ["bundle", "exec", "render-template", "json_encoded_hash.erb"]
|
11
|
+
|
12
|
+
query {
|
13
|
+
hash = <<EOF
|
14
|
+
{
|
15
|
+
"key1": "value1",
|
16
|
+
"key2": "value2"
|
17
|
+
}
|
18
|
+
EOF
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
resource "local_file" "json_encoded_hash" {
|
23
|
+
content = "${data.external.json_encoded_hash.result.rendered}"
|
24
|
+
filename = "sample_output"
|
25
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Multi Resource Lookup example
|
2
|
+
|
3
|
+
This example requires applying the terraform in 2 stages. The easiest way to do this is to comment
|
4
|
+
out everything in `multi_resource_lookup.tf` run `terraform apply`, allow the aws instances to be created,
|
5
|
+
and then uncomment `multi_resource_lookup.tf`
|
6
|
+
|
7
|
+
## COSTS!
|
8
|
+
|
9
|
+
Be warned, this example will cost money to perform, it requires starting up 2 t2.nano instances. You are solely
|
10
|
+
responsible for any resources created or costs incurred.
|
11
|
+
|
12
|
+
I strongly recommend running `terraform destroy` once you have finished running the test to remove all the resources
|
13
|
+
that the test created.
|
14
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
data "aws_instances" "multi_resource_lookup" {
|
2
|
+
instance_tags {
|
3
|
+
Stage = "Development"
|
4
|
+
}
|
5
|
+
}
|
6
|
+
|
7
|
+
data "external" "multi_resource_lookup" {
|
8
|
+
program = ["bundle", "exec", "render-template", "multi_resource_lookup.erb"]
|
9
|
+
|
10
|
+
query {
|
11
|
+
instances = "${jsonencode(data.aws_instances.multi_resource_lookup.ids)}"
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
resource "local_file" "multi_resource_lookup" {
|
16
|
+
content = "${data.external.multi_resource_lookup.result.rendered}"
|
17
|
+
filename = "sample_output"
|
18
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
provider "aws" {
|
10
|
+
version = "~> 1.7"
|
11
|
+
region = "eu-west-1"
|
12
|
+
}
|
13
|
+
|
14
|
+
resource "aws_vpc" "multi_resource_lookup" {
|
15
|
+
cidr_block = "10.254.254.0/24"
|
16
|
+
|
17
|
+
tags {
|
18
|
+
Name = "terraform-template-renderer-example"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
resource "aws_subnet" "multi_resource_lookup" {
|
23
|
+
vpc_id = "${aws_vpc.multi_resource_lookup.id}"
|
24
|
+
cidr_block = "10.254.254.0/24"
|
25
|
+
availability_zone = "eu-west-1a"
|
26
|
+
|
27
|
+
tags {
|
28
|
+
Name = "terraform-template-renderer-example"
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
data "aws_ami" "multi_resource_lookup" {
|
33
|
+
most_recent = true
|
34
|
+
|
35
|
+
filter {
|
36
|
+
name = "name"
|
37
|
+
values = ["amzn-ami-2017.09.*-amazon-ecs-optimized"]
|
38
|
+
}
|
39
|
+
|
40
|
+
owners = ["amazon"]
|
41
|
+
}
|
42
|
+
|
43
|
+
resource "aws_instance" "multi_resource_lookup_1" {
|
44
|
+
ami = "${data.aws_ami.multi_resource_lookup.id}"
|
45
|
+
instance_type = "t2.nano"
|
46
|
+
subnet_id = "${aws_subnet.multi_resource_lookup.id}"
|
47
|
+
|
48
|
+
tags {
|
49
|
+
Name = "terraform-template-renderer-example"
|
50
|
+
Stage = "Development"
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
resource "aws_instance" "multi_resource_lookup_2" {
|
55
|
+
ami = "${data.aws_ami.multi_resource_lookup.id}"
|
56
|
+
instance_type = "t2.nano"
|
57
|
+
subnet_id = "${aws_subnet.multi_resource_lookup.id}"
|
58
|
+
|
59
|
+
tags {
|
60
|
+
Name = "terraform-template-renderer-example"
|
61
|
+
Stage = "Development"
|
62
|
+
}
|
63
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
variable "simple_list" { default = ["list_value_a", "list_value_2"] }
|
10
|
+
|
11
|
+
data "external" "simple_list" {
|
12
|
+
program = ["bundle", "exec", "render-template", "simple_list.erb"]
|
13
|
+
|
14
|
+
query {
|
15
|
+
list = "${jsonencode(var.simple_list)}"
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
resource "local_file" "simple_list" {
|
20
|
+
content = "${data.external.simple_list.result.rendered}"
|
21
|
+
filename = "sample_output"
|
22
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
variable "simple_map" {
|
10
|
+
default = {
|
11
|
+
key1 = "value1"
|
12
|
+
key2 = "value2"
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
data "external" "simple_map" {
|
17
|
+
program = ["bundle", "exec", "render-template", "simple_map.erb"]
|
18
|
+
|
19
|
+
query {
|
20
|
+
map = "${jsonencode(var.simple_map)}"
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
resource "local_file" "simple_map" {
|
25
|
+
content = "${data.external.simple_map.result.rendered}"
|
26
|
+
filename = "sample_output"
|
27
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
terraform {
|
2
|
+
required_version = "~> 0.11.1"
|
3
|
+
}
|
4
|
+
|
5
|
+
provider "external" {
|
6
|
+
version = "~> 1.0.0"
|
7
|
+
}
|
8
|
+
|
9
|
+
data "external" "simple_strings" {
|
10
|
+
program = ["bundle", "exec", "render-template", "simple_strings.erb"]
|
11
|
+
|
12
|
+
query {
|
13
|
+
key1 = "value1"
|
14
|
+
key2 = "value2"
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
resource "local_file" "simple_strings" {
|
19
|
+
content = "${data.external.simple_strings.result.rendered}"
|
20
|
+
filename = "sample_output"
|
21
|
+
}
|
@@ -4,7 +4,8 @@ require "json"
|
|
4
4
|
module TerraformTemplateRenderer
|
5
5
|
class Renderer
|
6
6
|
def initialize(template)
|
7
|
-
|
7
|
+
# The third argument enables trim mode using a hyphen
|
8
|
+
@erb_template = ERB.new(template, nil, "-")
|
8
9
|
end
|
9
10
|
|
10
11
|
# The passed in json_variables needs to be a JSON object (not array), all the keys will be used
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terraform-template-renderer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Harden
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -104,6 +104,25 @@ files:
|
|
104
104
|
- Rakefile
|
105
105
|
- bin/rake
|
106
106
|
- bin/rspec
|
107
|
+
- examples/Gemfile
|
108
|
+
- examples/Gemfile.lock
|
109
|
+
- examples/cloudwatch_dashboard/README.md
|
110
|
+
- examples/cloudwatch_dashboard/cloudwatch_dashboard.erb
|
111
|
+
- examples/cloudwatch_dashboard/cloudwatch_dashboard.png
|
112
|
+
- examples/cloudwatch_dashboard/cloudwatch_dashboard.tf
|
113
|
+
- examples/cloudwatch_dashboard/terraform_setup.tf
|
114
|
+
- examples/json_encoded_hash/json_encoded_hash.erb
|
115
|
+
- examples/json_encoded_hash/json_encoded_hash.tf
|
116
|
+
- examples/multi_resource_lookup/README.md
|
117
|
+
- examples/multi_resource_lookup/multi_resource_lookup.erb
|
118
|
+
- examples/multi_resource_lookup/multi_resource_lookup.tf
|
119
|
+
- examples/multi_resource_lookup/terraform_setup.tf
|
120
|
+
- examples/simple_list/simple_list.erb
|
121
|
+
- examples/simple_list/simple_list.tf
|
122
|
+
- examples/simple_map/simple_map.erb
|
123
|
+
- examples/simple_map/simple_map.tf
|
124
|
+
- examples/simple_strings/simple_strings.erb
|
125
|
+
- examples/simple_strings/simple_strings.tf
|
107
126
|
- exe/render-template
|
108
127
|
- lib/terraform_template_renderer.rb
|
109
128
|
- lib/terraform_template_renderer/binding.rb
|