tflat 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +34 -3
- data/lib/tflat.rb +7 -0
- data/lib/tflat/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7f0542a87cf91985a9d85fbb008a929c8476f8ee6c5bf140e35c30a049bf521
|
4
|
+
data.tar.gz: 03b4b5f6f38256fc3d9db1ed1b0d23331f4195e1787e527d1702497f2b45f97c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3902861c7d4683a40a07ae308f65ed0b69856b649294e005e76a108b93189d6b4adf242c527cbde2e7236ae9a7454d4ce494788ef7b33ce276b4ff9b231503d8
|
7
|
+
data.tar.gz: 9d89086124665920668439b094c81ebe7bd10cb9adabd3618370ab6bfabe0d65ceefbda82123bed30f04bae3e118ecb1d77ce70e5b0756951affc22b23c6e347
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# TFlat
|
1
|
+
# TFlat = Terraform + Subdirectories + Ruby (ERB)
|
2
2
|
|
3
3
|
Aren't you tired of copy and pasting?
|
4
4
|
|
5
|
-
I love Terraform, but HCL really gets in the way sometimes.
|
5
|
+
I love [Terraform](https://www.terraform.io/), but HCL really gets in the way sometimes.
|
6
6
|
|
7
|
-
How many times you wish you could just write a simple IF or CASE statement inside a
|
7
|
+
How many times you wish you could just write a simple IF or CASE statement inside a `.tf` file? Any attempt of having minimal flow control with HCL results in a massive oneliner mess. Sometimes it feels like writing PERL one-liners. Hard to read equals hard to debug.
|
8
8
|
|
9
9
|
Also, you can't use subfolders with Terraform, so you often end up at one of the three scenarios below:
|
10
10
|
- You have a few `.tf` files with a lot of code in it. Ugly and not organized.
|
@@ -15,6 +15,11 @@ TFlat does 2 things to solve this problem:
|
|
15
15
|
* Separate your Terraform code in subdirectories.
|
16
16
|
* It allows you to write Ruby code in `.tf` files using ERB templates. Hurray!
|
17
17
|
|
18
|
+
Jump to:
|
19
|
+
* [Installation](#installation)
|
20
|
+
* [Usage](#usage)
|
21
|
+
|
22
|
+
|
18
23
|
## How does TFlat make Terraform read subdirectories?
|
19
24
|
It doesn't. This is what happens when you run it:
|
20
25
|
1. Create a folder `.tflat` inside the current folder if it doesn't exist yet. If it does exist, delete all files from this folder non-recursively.
|
@@ -92,10 +97,15 @@ template = "<%= file('files/userdata.tpl') %>"
|
|
92
97
|
# Let Terraform load the file content using the 'f' helper method (quoting nightmare!)
|
93
98
|
template = "${file("<%= f('files/userdata.tpl') %>")}"
|
94
99
|
```
|
100
|
+
|
101
|
+
**IMPORTANT:** The file path must be relative to the project's root folder!
|
102
|
+
|
95
103
|
It is up to you to choose what you like. Try both and look inside `.tflat/main.tf` to see the difference between the two ways.
|
96
104
|
|
97
105
|
## Installation
|
106
|
+
1. [Download and install Terraform](https://www.terraform.io/intro/getting-started/install.html). Make sure the `terraform` command is in your **$PATH**.
|
98
107
|
|
108
|
+
2. Install the gem:
|
99
109
|
```
|
100
110
|
$ gem install tflat
|
101
111
|
```
|
@@ -112,6 +122,27 @@ tflat plan
|
|
112
122
|
```
|
113
123
|
That's it!
|
114
124
|
|
125
|
+
## Using TFVARS inside the ERB template
|
126
|
+
If you store your variables in JSON format inside a file named `terraform.tfvars.json`, those variables will be automatically available for you as a HASH named `@variables` (with string keys). For example:
|
127
|
+
|
128
|
+
```
|
129
|
+
# terraform.tfvars.json
|
130
|
+
{
|
131
|
+
"app_domain": "example.com"
|
132
|
+
}
|
133
|
+
|
134
|
+
# files/swarm-stack.yml
|
135
|
+
version: "3.7"
|
136
|
+
services:
|
137
|
+
...
|
138
|
+
myapp:
|
139
|
+
...
|
140
|
+
environment:
|
141
|
+
- DOMAIN_NAME=<%= @variables['app_domain'] %>
|
142
|
+
...
|
143
|
+
```
|
144
|
+
|
145
|
+
That way you don't have to deal with Terraform templates!
|
115
146
|
|
116
147
|
## Contributing
|
117
148
|
|
data/lib/tflat.rb
CHANGED
@@ -2,6 +2,7 @@ require "tflat/version"
|
|
2
2
|
require 'erb'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'ptools'
|
5
|
+
require 'json'
|
5
6
|
|
6
7
|
module Tflat
|
7
8
|
class Terraform
|
@@ -19,6 +20,7 @@ module Tflat
|
|
19
20
|
return
|
20
21
|
end
|
21
22
|
setup
|
23
|
+
read_variables
|
22
24
|
print "- [tflat] Generating files..."
|
23
25
|
flatten_directories
|
24
26
|
parse_erb
|
@@ -35,6 +37,11 @@ module Tflat
|
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
40
|
+
def read_variables
|
41
|
+
return unless File.file?('terraform.tfvars.json')
|
42
|
+
@variables = JSON.parse(File.read 'terraform.tfvars.json')
|
43
|
+
end
|
44
|
+
|
38
45
|
def flatten_directories
|
39
46
|
all_files.each do |entry|
|
40
47
|
new_name = entry.sub(/^#{directory}\//,'').gsub('/', '#')
|
data/lib/tflat/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tflat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paulo Arruda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ptools
|