terraform_landscape 0.1.6 → 0.1.7
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ace34fbfa3fda6d50ce79a8742347010d6c8b61
|
4
|
+
data.tar.gz: c6bcaeeb446acbf6384e3a393f6c0fd77570fcf2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79be9e2e8d64bfe76f7b1d788f6b887f4946f3e9c08ba52ee46e0bca80c22222b9d904ae70bab9d878df6d290b20602b1ccf69cdc7b325a6b8c65a70975be59a
|
7
|
+
data.tar.gz: aa2e0b433e761b1102868d24e67c195bb79fa31e89d4688f016f65189a9d83d010278ec057ff5727155c729cfd092788dc93bb97a66c05d590451c8fb64b461e
|
@@ -13,7 +13,7 @@ module TerraformLandscape
|
|
13
13
|
@options[:command] = :pretty_print # Default command
|
14
14
|
|
15
15
|
OptionParser.new do |parser|
|
16
|
-
parser.banner =
|
16
|
+
parser.banner = 'Usage: landscape [options] [plan-output-file]'
|
17
17
|
|
18
18
|
add_info_options parser
|
19
19
|
end.parse!(args)
|
@@ -15,7 +15,7 @@ module TerraformLandscape
|
|
15
15
|
# @param args [Array<String>] command line arguments
|
16
16
|
#
|
17
17
|
# @return [Integer] exit status code
|
18
|
-
def run(
|
18
|
+
def run(_args)
|
19
19
|
program :name, 'Terraform Landscape'
|
20
20
|
program :version, VERSION
|
21
21
|
program :description, 'Pretty-print your Terraform plan output'
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'stringio'
|
2
2
|
|
3
3
|
module TerraformLandscape
|
4
|
+
# Takes output from Terraform executable nad outputs it in a prettified
|
5
|
+
# format.
|
4
6
|
class Printer
|
5
7
|
def initialize(output)
|
6
8
|
@output = output
|
@@ -30,7 +32,10 @@ module TerraformLandscape
|
|
30
32
|
io.close
|
31
33
|
end
|
32
34
|
|
33
|
-
|
35
|
+
process_string(buffer.string)
|
36
|
+
end
|
37
|
+
|
38
|
+
def process_string(plan_output)
|
34
39
|
scrubbed_output = plan_output.gsub(/\e\[\d+m/, '')
|
35
40
|
|
36
41
|
# Remove preface
|
@@ -38,7 +43,7 @@ module TerraformLandscape
|
|
38
43
|
scrubbed_output = scrubbed_output[match.end(0)..-1]
|
39
44
|
elsif (match = scrubbed_output.match(/^(~|\+|\-)/))
|
40
45
|
scrubbed_output = scrubbed_output[match.begin(0)..-1]
|
41
|
-
elsif scrubbed_output
|
46
|
+
elsif scrubbed_output =~ /^No changes/
|
42
47
|
@output.puts 'No changes'
|
43
48
|
return
|
44
49
|
else
|
@@ -49,8 +54,6 @@ module TerraformLandscape
|
|
49
54
|
if (match = scrubbed_output.match(/^Plan:[^\n]+/))
|
50
55
|
plan_summary = scrubbed_output[match.begin(0)..match.end(0)]
|
51
56
|
scrubbed_output = scrubbed_output[0...match.begin(0)]
|
52
|
-
else
|
53
|
-
raise ParseError, 'Output does not container proper postface'
|
54
57
|
end
|
55
58
|
|
56
59
|
plan = TerraformPlan.from_output(scrubbed_output)
|
@@ -9,7 +9,7 @@ require 'treetop'
|
|
9
9
|
# This allows us to easily inspect the plan and present a more readable
|
10
10
|
# explanation of the plan to the user.
|
11
11
|
########################################################################
|
12
|
-
class TerraformLandscape::TerraformPlan
|
12
|
+
class TerraformLandscape::TerraformPlan # rubocop:disable Metrics/ClassLength
|
13
13
|
GRAMMAR_FILE = File.expand_path(File.join(File.dirname(__FILE__),
|
14
14
|
'..', '..', 'grammar',
|
15
15
|
'terraform_plan.treetop'))
|
@@ -141,7 +141,7 @@ class TerraformLandscape::TerraformPlan
|
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
144
|
-
def display_modified_attribute( # rubocop:disable Metrics/
|
144
|
+
def display_modified_attribute( # rubocop:disable Metrics/MethodLength
|
145
145
|
change_color,
|
146
146
|
attribute_name,
|
147
147
|
attribute_value,
|
@@ -151,7 +151,7 @@ class TerraformLandscape::TerraformPlan
|
|
151
151
|
# Handle case where attribute has an annotation (e.g. "forces new resource")
|
152
152
|
# appended onto the end. This is hard to parse in the Treetop grammar, so we
|
153
153
|
# instead catch it here and extract
|
154
|
-
if match = attribute_value.match(/\((?<reason>[^)]+)\)$/)
|
154
|
+
if (match = attribute_value.match(/\((?<reason>[^)]+)\)$/))
|
155
155
|
reason = match['reason']
|
156
156
|
attribute_value = attribute_value[0...match.begin(0)]
|
157
157
|
end
|
@@ -159,7 +159,7 @@ class TerraformLandscape::TerraformPlan
|
|
159
159
|
# Since the attribute line is always of the form
|
160
160
|
# "old value" => "new value", we can add curly braces and parse with
|
161
161
|
# `eval` to obtain a hash with a single key/value.
|
162
|
-
old, new = eval("{#{attribute_value}}").to_a.first # rubocop:disable
|
162
|
+
old, new = eval("{#{attribute_value}}").to_a.first # rubocop:disable Security/Eval
|
163
163
|
|
164
164
|
return if old == new # Don't show unchanged attributes
|
165
165
|
|
@@ -196,9 +196,10 @@ class TerraformLandscape::TerraformPlan
|
|
196
196
|
@out.print " #{attribute_name}:".ljust(attribute_value_indent_amount, ' ')
|
197
197
|
.colorize(change_color)
|
198
198
|
|
199
|
-
evaluated_string = eval(attribute_value) # rubocop:disable
|
199
|
+
evaluated_string = eval(attribute_value) # rubocop:disable Security/Eval
|
200
200
|
if json?(evaluated_string)
|
201
|
-
@out.print to_pretty_json(evaluated_string).gsub("\n",
|
201
|
+
@out.print to_pretty_json(evaluated_string).gsub("\n",
|
202
|
+
"\n#{attribute_value_indent}")
|
202
203
|
.colorize(change_color)
|
203
204
|
else
|
204
205
|
@out.print "\"#{evaluated_string.colorize(change_color)}\""
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terraform_landscape
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Coinbase
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colorize
|
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
106
|
version: '0'
|
107
107
|
requirements: []
|
108
108
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.6.
|
109
|
+
rubygems_version: 2.6.12
|
110
110
|
signing_key:
|
111
111
|
specification_version: 4
|
112
112
|
summary: Pretty-print Terraform plan output
|