Class: TerraformLandscape::Printer
- Inherits:
-
Object
- Object
- TerraformLandscape::Printer
- Defined in:
- lib/terraform_landscape/printer.rb
Overview
Takes output from Terraform executable nad outputs it in a prettified format.
Instance Method Summary collapse
-
#initialize(output) ⇒ Printer
constructor
A new instance of Printer.
- #process_stream(io) ⇒ Object
- #process_string(plan_output) ⇒ Object
Constructor Details
#initialize(output) ⇒ Printer
Returns a new instance of Printer.
7 8 9 |
# File 'lib/terraform_landscape/printer.rb', line 7 def initialize(output) @output = output end |
Instance Method Details
#process_stream(io) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/terraform_landscape/printer.rb', line 11 def process_stream(io) buffer = StringIO.new begin block_size = 1024 done = false until done readable_fds, = IO.select([io]) next unless readable_fds readable_fds.each do |f| begin buffer << f.read_nonblock(block_size) rescue IO::WaitReadable # rubocop:disable Lint/HandleExceptions # Ignore; we'll call IO.select again rescue EOFError done = true end end end ensure io.close end process_string(buffer.string) end |
#process_string(plan_output) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/terraform_landscape/printer.rb', line 38 def process_string(plan_output) scrubbed_output = plan_output.gsub(/\e\[\d+m/, '') # Remove preface if (match = scrubbed_output.match(/^Path:[^\n]+/)) scrubbed_output = scrubbed_output[match.end(0)..-1] elsif (match = scrubbed_output.match(/^Terraform.+following\sactions:/)) scrubbed_output = scrubbed_output[match.end(0)..-1] elsif (match = scrubbed_output.match(/^\s*(~|\+|\-)/)) scrubbed_output = scrubbed_output[match.begin(0)..-1] elsif scrubbed_output =~ /^(No changes|This plan does nothing)/ @output.puts 'No changes' return else raise ParseError, 'Output does not contain proper preface' end # Remove postface if (match = scrubbed_output.match(/^Plan:[^\n]+/)) plan_summary = scrubbed_output[match.begin(0)..match.end(0)] scrubbed_output = scrubbed_output[0...match.begin(0)] end plan = TerraformPlan.from_output(scrubbed_output) plan.display(@output) @output.puts plan_summary end |