tfenv 0.1.0 → 0.2.1
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 +25 -6
- data/exe/tfenv +2 -78
- data/lib/tfenv/cli.rb +102 -0
- data/lib/tfenv/version.rb +1 -1
- data/tfenv.gemspec +1 -1
- metadata +12 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c9b29870cbdc8130df2b1a39c5cbafd05974a7d
|
4
|
+
data.tar.gz: 8d311b0051a9fd0008c87fce3456f0f8d93d26a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d7721059f661014f4815ef6aa579341a331d482f3cddcbdad16b9aa89fb72114ff8c72698c2aa51c0329fbf675c98eb97b3b777ccff194b5e0f79a5053fd97f
|
7
|
+
data.tar.gz: fbb5ba20bd63d9311dbbdde6ff362a7987dffa7368c6e9f7e697d7e1588792c61f77d1e59ca27cfa86068e540259e16ac297ad8a5c0ce7ad3a4e665fdcacfc03
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# tfenv
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Simple gem to manage loading external Terraform module outputs from state files or consul.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -22,7 +20,28 @@ Or install it yourself as:
|
|
22
20
|
|
23
21
|
## Usage
|
24
22
|
|
25
|
-
|
23
|
+
Configuration options:
|
24
|
+
|
25
|
+
````
|
26
|
+
$ tfenv -h
|
27
|
+
Usage: tfenv [options] [command]
|
28
|
+
-s, --state-file FILE Include external state output from state file
|
29
|
+
-c, --consul URL/KEY Include external state output from consul
|
30
|
+
-t, --tfvar FILE Write variables to tfvar file
|
31
|
+
-v, --[no-]verbose Run verbosely
|
32
|
+
````
|
33
|
+
|
34
|
+
Examine outputs for given configuration:
|
35
|
+
|
36
|
+
````
|
37
|
+
$ tfenv -s ~/main-module/terraform.tfstate
|
38
|
+
````
|
39
|
+
|
40
|
+
Run terraform (or any other command) using configured outputs:
|
41
|
+
|
42
|
+
````
|
43
|
+
$ tfenv -s ~/main-module/terraform.tfstate terraform plan
|
44
|
+
````
|
26
45
|
|
27
46
|
## Development
|
28
47
|
|
@@ -32,7 +51,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
51
|
|
33
52
|
## Contributing
|
34
53
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
54
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/jbussdieker/tfenv.
|
36
55
|
|
37
56
|
|
38
57
|
## License
|
data/exe/tfenv
CHANGED
@@ -1,80 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require '
|
3
|
-
require 'json'
|
4
|
-
require 'yaml'
|
2
|
+
require 'tfenv/cli'
|
5
3
|
|
6
|
-
|
7
|
-
hash.each do |key, value|
|
8
|
-
ENV["TF_VAR_#{key}"] = value
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def read_consul_uri(uri)
|
13
|
-
raise "Not implemented"
|
14
|
-
end
|
15
|
-
|
16
|
-
def read_outputs(state_file)
|
17
|
-
{}.tap do |outputs|
|
18
|
-
read_state(state_file).tap do |state|
|
19
|
-
state["modules"].each do |module_state|
|
20
|
-
outputs.merge!(module_state["outputs"])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def read_state(state_file)
|
27
|
-
raw_state = File.read(state_file)
|
28
|
-
JSON.parse(raw_state)
|
29
|
-
end
|
30
|
-
|
31
|
-
def parse_options
|
32
|
-
options = {
|
33
|
-
:includes => [],
|
34
|
-
:consuls => []
|
35
|
-
}
|
36
|
-
|
37
|
-
OptionParser.new do |opts|
|
38
|
-
opts.banner = "Usage: tfenv [options] [command]"
|
39
|
-
|
40
|
-
opts.on("-s", "--state-file FILE", "Include external state output from state file") do |v|
|
41
|
-
options[:includes] << v
|
42
|
-
end
|
43
|
-
|
44
|
-
opts.on("-c", "--consul URL/KEY", "Include external state output from consul") do |v|
|
45
|
-
options[:consuls] << v
|
46
|
-
end
|
47
|
-
|
48
|
-
opts.on("-t", "--tfvar FILE", "Write variables to tfvar file") do |v|
|
49
|
-
options[:tfvar] = v
|
50
|
-
end
|
51
|
-
|
52
|
-
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
53
|
-
options[:verbose] = v
|
54
|
-
end
|
55
|
-
end.parse!
|
56
|
-
|
57
|
-
options
|
58
|
-
end
|
59
|
-
|
60
|
-
def collate_outputs(options)
|
61
|
-
{}.tap do |outputs|
|
62
|
-
options[:includes].each do |state_file|
|
63
|
-
outputs.merge!(read_outputs(state_file))
|
64
|
-
end
|
65
|
-
|
66
|
-
options[:consuls].each do |consul_uri|
|
67
|
-
outputs.merge!(read_consul_uri(consul_uri))
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
options = parse_options
|
73
|
-
outputs = collate_outputs(options)
|
74
|
-
|
75
|
-
if ARGV.length > 0
|
76
|
-
export_hash(outputs)
|
77
|
-
exec(*ARGV)
|
78
|
-
else
|
79
|
-
puts outputs.to_yaml
|
80
|
-
end
|
4
|
+
TFEnv::CLI.new(ARGV).start
|
data/lib/tfenv/cli.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require 'json'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
module TFEnv
|
7
|
+
class CLI
|
8
|
+
def initialize(*args)
|
9
|
+
@args = args
|
10
|
+
end
|
11
|
+
|
12
|
+
def export_hash(hash)
|
13
|
+
hash.each do |key, value|
|
14
|
+
ENV["TF_VAR_#{key}"] = value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def read_consul_uri(uri)
|
19
|
+
raise "Not implemented"
|
20
|
+
end
|
21
|
+
|
22
|
+
def read_outputs(state_file)
|
23
|
+
{}.tap do |outputs|
|
24
|
+
read_state(state_file).tap do |state|
|
25
|
+
state["modules"].each do |module_state|
|
26
|
+
outputs.merge!(module_state["outputs"])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def read_state(state_file)
|
33
|
+
raw_state = File.read(state_file)
|
34
|
+
JSON.parse(raw_state)
|
35
|
+
end
|
36
|
+
|
37
|
+
def parse_options
|
38
|
+
options = {
|
39
|
+
:includes => [],
|
40
|
+
:consuls => []
|
41
|
+
}
|
42
|
+
|
43
|
+
OptionParser.new do |opts|
|
44
|
+
opts.banner = "Usage: tfenv [options] [command]"
|
45
|
+
|
46
|
+
opts.on("-s", "--state-file FILE", "Include external state output from state file") do |v|
|
47
|
+
options[:includes] << v
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on("-c", "--consul URL/KEY", "Include external state output from consul") do |v|
|
51
|
+
options[:consuls] << v
|
52
|
+
end
|
53
|
+
|
54
|
+
opts.on("-t", "--tfvar FILE", "Write variables to tfvar file") do |v|
|
55
|
+
options[:tfvar] = v
|
56
|
+
end
|
57
|
+
|
58
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
59
|
+
options[:verbose] = v
|
60
|
+
end
|
61
|
+
end.parse!
|
62
|
+
|
63
|
+
options
|
64
|
+
end
|
65
|
+
|
66
|
+
def collate_outputs(options)
|
67
|
+
{}.tap do |outputs|
|
68
|
+
options[:includes].each do |state_file|
|
69
|
+
outputs.merge!(read_outputs(state_file))
|
70
|
+
end
|
71
|
+
|
72
|
+
options[:consuls].each do |consul_uri|
|
73
|
+
outputs.merge!(read_consul_uri(consul_uri))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def load_outputs(options)
|
79
|
+
{}.tap do |outputs|
|
80
|
+
if options[:includes].empty? && options[:consuls].empty?
|
81
|
+
if File.exists?("terraform.tfstate")
|
82
|
+
return read_outputs("terraform.tfstate")
|
83
|
+
end
|
84
|
+
else
|
85
|
+
collate_outputs(options)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def start
|
91
|
+
options = parse_options
|
92
|
+
outputs = load_outputs(options)
|
93
|
+
|
94
|
+
if ARGV.length > 0
|
95
|
+
export_hash(outputs)
|
96
|
+
exec(*ARGV)
|
97
|
+
else
|
98
|
+
puts outputs.to_yaml
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/lib/tfenv/version.rb
CHANGED
data/tfenv.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tfenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua B. Bussdieker
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,16 +42,22 @@ dependencies:
|
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
45
48
|
- - ">="
|
46
49
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
50
|
+
version: 3.4.0
|
48
51
|
type: :development
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '3.4'
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
60
|
+
version: 3.4.0
|
55
61
|
description:
|
56
62
|
email:
|
57
63
|
- jbussdieker@gmail.com
|
@@ -71,6 +77,7 @@ files:
|
|
71
77
|
- bin/setup
|
72
78
|
- exe/tfenv
|
73
79
|
- lib/tfenv.rb
|
80
|
+
- lib/tfenv/cli.rb
|
74
81
|
- lib/tfenv/version.rb
|
75
82
|
- tfenv.gemspec
|
76
83
|
homepage: https://github.com/jbussdieker/tfenv
|
@@ -93,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
100
|
version: '0'
|
94
101
|
requirements: []
|
95
102
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.5.1
|
97
104
|
signing_key:
|
98
105
|
specification_version: 4
|
99
106
|
summary: Simple tool for loading external module outputs.
|