tflat 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/README.md +37 -0
- data/lib/tflat.rb +22 -12
- 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: 42600069942f24bb77fc24d41b850db4ccdbdeac276f4064ea49a4a8d322ff78
|
4
|
+
data.tar.gz: d40ec5e868f261109b9a8a260aa123732b04a233cbdda30e67c0dd8411d642b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b9fca3508a34e031087b032112ae6c02d4cd8aaac2107fdf13a8f244b4c0e734008bfac16998ef3a3af7f87514adb26df069fd511b9db341c65dabebd5bd0fe
|
7
|
+
data.tar.gz: d891a1eb93b6cd99c8543a13aeade06b3bde60f9d3f0157efd9affe3023de4629c0584d2a37785bb7a8122ad0f947a7afed456ff432d4de4dbe77ab0dc11648d
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 0.1.
|
3
|
+
## 0.1.8 - Dec 5 2018
|
4
|
+
- Set environment variable TFLAT_WORKSPACE to have the `.tflat` folder have a suffix. Useful for running same code on different states, for example.
|
5
|
+
|
6
|
+
|
7
|
+
## 0.1.7 - Nov 18 2018
|
4
8
|
- Environment variables `TF_VAR_*` are also loaded by Ruby and will overwrite a value set in the JSON file.
|
5
9
|
|
6
10
|
## 0.1.6 - Nov 17 2018
|
data/README.md
CHANGED
@@ -56,6 +56,43 @@ Then it will `cd` into `.tflat` and run `terraform` with the arguments you passe
|
|
56
56
|
|
57
57
|
**IMPORTANT:** The `.terraform` folder will live at `.tflat/.terraform`, so make sure you don't delete that folder if you are storing the terraform state locally!
|
58
58
|
|
59
|
+
### TFLAT Workspaces
|
60
|
+
Say you want to run the same terraform code against multiple environments and cloud regions.
|
61
|
+
|
62
|
+
You can do that by setting the environment variable TFLAT_WORKSPACE in your shell, plus any other `TF_VAR_`'s that are required to achieve what you want.
|
63
|
+
|
64
|
+
For example, say I have some terraform code setup with remote state using S3 + DynamoDB as backend. I want to run it against the `staging` environment on `ca-central-1`.
|
65
|
+
|
66
|
+
Here is my `state.tf`:
|
67
|
+
```
|
68
|
+
terraform {
|
69
|
+
backend "s3" {
|
70
|
+
encrypt = true
|
71
|
+
bucket = "my-s3-bucket"
|
72
|
+
region = "ca-central-1"
|
73
|
+
dynamodb_table = "my-dynamo-table"
|
74
|
+
key = "<%= ENV['TFLAT_WORKSPACE'] %>/terraform.tfstate"
|
75
|
+
}
|
76
|
+
}
|
77
|
+
```
|
78
|
+
|
79
|
+
And here is `providers.tf`:
|
80
|
+
```
|
81
|
+
variable "region" {}
|
82
|
+
provider "aws" {
|
83
|
+
version = "~> 1.50"
|
84
|
+
region = "${var.region}"
|
85
|
+
}
|
86
|
+
```
|
87
|
+
|
88
|
+
And here is how I would set my shell environment:
|
89
|
+
```
|
90
|
+
export TF_VAR_region=ca-central-1
|
91
|
+
export TFLAT_WORKSPACE=staging/ca-central-1
|
92
|
+
```
|
93
|
+
|
94
|
+
When you run `tflat init`, you will notice that the `.tflat` folder is really `.tflat.staging/ca-central-1`, and your state is in the key `staging/ca-central-1/terraform.tfstate` inside of S3!
|
95
|
+
|
59
96
|
There's only one more thing you have to pay attention to: handling file references.
|
60
97
|
|
61
98
|
### Handling file references
|
data/lib/tflat.rb
CHANGED
@@ -9,30 +9,40 @@ module Tflat
|
|
9
9
|
class Terraform
|
10
10
|
attr_accessor :destination, :all_files, :args, :directory
|
11
11
|
def initialize(args:, directory: '.')
|
12
|
+
@workspace = ENV['TFLAT_WORKSPACE']
|
12
13
|
@args = args.join(' ')
|
13
14
|
@directory = directory
|
14
|
-
@all_files = Dir.glob("#{directory}/**/*").select{|e| File.file?(e) && !e.match(/^\.tflat
|
15
|
-
@
|
15
|
+
@all_files = Dir.glob("#{directory}/**/*").select{|e| File.file?(e) && !e.match(/^\.tflat.*\/.+$/)}
|
16
|
+
if @workspace
|
17
|
+
@destination = "#{directory}/.tflat.#{@workspace}"
|
18
|
+
@tag = "[tflat | #{@workspace}]"
|
19
|
+
@tflat_folder = ".tflat.#{@workspace}"
|
20
|
+
else
|
21
|
+
@destination = "#{directory}/.tflat"
|
22
|
+
@tag = "[tflat]"
|
23
|
+
@tflat_folder = ".tflat"
|
24
|
+
end
|
25
|
+
|
16
26
|
end
|
17
27
|
def run!
|
18
28
|
if args.empty?
|
19
29
|
puts `terraform`
|
20
|
-
puts "\n\n-
|
30
|
+
puts "\n\n- #{@tag} Notice: You must run tflat with terraform arguments.\n\n"
|
21
31
|
return
|
22
32
|
end
|
23
33
|
setup
|
24
34
|
read_variables
|
25
|
-
puts "-
|
35
|
+
puts "- #{@tag} Generating files"
|
26
36
|
flatten_directories
|
27
37
|
parse_erb
|
28
38
|
puts " done!"
|
29
|
-
puts "-
|
39
|
+
puts "- #{@tag} Running: terraform #{args}"
|
30
40
|
execute
|
31
41
|
end
|
32
42
|
|
33
43
|
def setup
|
34
44
|
FileUtils.mkdir_p(destination)
|
35
|
-
Dir.glob(
|
45
|
+
Dir.glob("#{@tflat_folder}/*").each do |entry|
|
36
46
|
next unless File.file?(entry)
|
37
47
|
FileUtils.rm_f entry
|
38
48
|
end
|
@@ -53,22 +63,22 @@ module Tflat
|
|
53
63
|
next if entry =~ /#/
|
54
64
|
new_name = entry.sub(/^#{directory}\//,'').gsub('/', '#')
|
55
65
|
if new_name =~ /^#/ # Skip files/directories that start with a hash sign
|
56
|
-
puts "-
|
66
|
+
puts "- #{@tag} Skipping: #{entry}"
|
57
67
|
next
|
58
68
|
end
|
59
|
-
FileUtils.cp(entry, "
|
69
|
+
FileUtils.cp(entry, "#{@tflat_folder}/#{new_name}")
|
60
70
|
end
|
61
71
|
end
|
62
72
|
|
63
73
|
def parse_erb
|
64
|
-
Dir.glob("
|
74
|
+
Dir.glob("#{@tflat_folder}/*").each do |entry|
|
65
75
|
next unless File.file?(entry)
|
66
76
|
next if File.binary?(entry)
|
67
|
-
puts "-
|
77
|
+
puts "- #{@tag} -> #{entry}"
|
68
78
|
begin
|
69
79
|
rendered = render(entry)
|
70
80
|
rescue Exception => e
|
71
|
-
puts "-
|
81
|
+
puts "- #{@tag} ERROR: Could not parse ERB on file #{entry}"
|
72
82
|
puts e.full_message
|
73
83
|
exit 1
|
74
84
|
end
|
@@ -95,7 +105,7 @@ module Tflat
|
|
95
105
|
end
|
96
106
|
|
97
107
|
def execute
|
98
|
-
exec "cd
|
108
|
+
exec "cd #{@tflat_folder} && terraform #{args}"
|
99
109
|
end
|
100
110
|
end
|
101
111
|
end
|
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.8
|
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
|
+
date: 2018-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ptools
|