terraspace 0.6.13 → 0.6.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ac77946fdc6f6073084fd5a862f38676d9c37ed661941cc877c3445e338ff0e
4
- data.tar.gz: fb5315dc9d3c37bf6d6a10206019b5de9c53be812ff3955161ca344fe7b12ac3
3
+ metadata.gz: 56e9189f05ef673a6396db763930b35127404e8af22ad2eeaf946ed0fc0d8555
4
+ data.tar.gz: 1b147be3d3e63f5c150c9b7c2b92241d2e627964216af53da2be8cfa10776bbc
5
5
  SHA512:
6
- metadata.gz: edb6864335554ada73820a9700bb4e5b5c04ce5ebc2c4e68a54fb44d336fef33b705c78b90da8083bc48eaafae2ad5427a74f856d7b60ca558f1fe56965a6799
7
- data.tar.gz: 97656cb6d7eba975df38388468b0e69168d777a9e3de91268ecfafe9b8430121d54af96aee4df72834a28425f7919a3741b833f9dca0cb45363f451b4802069a
6
+ metadata.gz: c76b456a1750b9bbbc9dc0e8b6c7ec79030d2edefd57bee80e43799c958fa608ac953b299f51f7422caccca1bc1047c2243a518fb03982b78354900f64168f64
7
+ data.tar.gz: bc80c886871337ca4c04029a0881453bdf0630acfda8996ca47fc18d12981224ff33ef816c9a79a189a5990682a2c93ae983f4ed42849099ea43c7b81453dbc1
data/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.6.18] - 2021-10-28
7
+ - [#147](https://github.com/boltops-tools/terraspace/pull/147) improve error message output
8
+ - [#148](https://github.com/boltops-tools/terraspace/pull/148) Improve shim wrapper generator
9
+
10
+ ## [0.6.17] - 2021-10-02
11
+ - [#142](https://github.com/boltops-tools/terraspace/pull/142) improve builder skip check: check if its a dir
12
+
13
+ ## [0.6.16] - 2021-10-01
14
+ - [#141](https://github.com/boltops-tools/terraspace/pull/141) terraspace output: remove extra newline at the end
15
+
16
+ ## [0.6.15] - 2021-10-01
17
+ - [#140](https://github.com/boltops-tools/terraspace/pull/140) fix terraspace output and Enter a value handling
18
+
19
+ ## [0.6.14] - 2021-09-30
20
+ - [#134](https://github.com/boltops-tools/terraspace/pull/134) Use file not plan for the var-files argument
21
+ - [#139](https://github.com/boltops-tools/terraspace/pull/139) Fix terraspace output to not add extra newlines
22
+ - terraspace list: change default to show both stacks and modules
23
+
6
24
  ## [0.6.13] - 2021-08-10
7
25
  - use terraspace-bundler 0.4.0
8
26
 
data/SECURITY.md ADDED
@@ -0,0 +1,3 @@
1
+ # Security Policy
2
+
3
+ Refer to: https://terraspace.cloud/docs/policies/security/
@@ -18,7 +18,6 @@ class Terraspace::CLI::New
18
18
  end
19
19
 
20
20
  def create
21
- return unless File.exist?(".git")
22
21
  dest = @path
23
22
  template "terraspace", dest
24
23
  chmod dest, 0755
@@ -44,6 +43,8 @@ class Terraspace::CLI::New
44
43
 
45
44
  export PATH=#{dir}:/$PATH
46
45
 
46
+ Also note, the shim wrapper contains starter code. Though it should generally work for most systems,
47
+ it might require adjustments depending on your system.
47
48
  EOL
48
49
  end
49
50
 
@@ -28,7 +28,7 @@ module Terraspace
28
28
  option :reconfigure, type: :boolean, desc: "Add terraform -reconfigure option"
29
29
  }
30
30
  type_option = Proc.new {
31
- option :type, default: "stack", aliases: %w[t], desc: "Type: stack, module, or all"
31
+ option :type, default: "all", aliases: %w[t], desc: "Type: stack, module, or all"
32
32
  }
33
33
 
34
34
  desc "all SUBCOMMAND", "all subcommands"
@@ -0,0 +1,28 @@
1
+ class Terraspace::Compiler::Builder
2
+ class Skip
3
+ def initialize(mod, src_path)
4
+ @mod, @src_path = mod, src_path
5
+ end
6
+
7
+ def check?
8
+ return true unless File.file?(@src_path)
9
+
10
+ # skip certain folders
11
+ check_dirs?(
12
+ "config/args",
13
+ "config/helpers",
14
+ "config/hooks",
15
+ "test",
16
+ "tfvars",
17
+ )
18
+ end
19
+
20
+ def check_dirs?(*names)
21
+ names.flatten.detect { |name| check_dir?(name) }
22
+ end
23
+
24
+ def check_dir?(name)
25
+ @src_path.include?("#{@mod.root}/#{name}/")
26
+ end
27
+ end
28
+ end
@@ -72,13 +72,7 @@ module Terraspace::Compiler
72
72
  end
73
73
 
74
74
  def skip?(src_path)
75
- return true unless File.file?(src_path)
76
- # certain folders will be skipped
77
- src_path.include?("#{@mod.root}/config/args") ||
78
- src_path.include?("#{@mod.root}/config/helpers") ||
79
- src_path.include?("#{@mod.root}/config/hooks") ||
80
- src_path.include?("#{@mod.root}/test") ||
81
- src_path.include?("#{@mod.root}/tfvars")
75
+ Skip.new(@mod, src_path).check?
82
76
  end
83
77
 
84
78
  def search(expr)
@@ -20,8 +20,12 @@ module Terraspace
20
20
  # Used to allow terraform output to always go to stdout
21
21
  # Terraspace output goes to stderr by default
22
22
  # See: terraspace/shell.rb
23
- def stdout(msg)
24
- puts msg
23
+ def stdout(msg, newline: true)
24
+ if newline
25
+ puts msg
26
+ else
27
+ print msg
28
+ end
25
29
  end
26
30
  end
27
31
  end
@@ -2,7 +2,7 @@ class Terraspace::Shell
2
2
  class Error
3
3
  attr_accessor :lines
4
4
  def initialize
5
- @lines = '' # holds aggregation of all error lines
5
+ @lines = [] # holds aggregation of all error lines
6
6
  end
7
7
 
8
8
  def known?
@@ -11,11 +11,11 @@ class Terraspace::Shell
11
11
 
12
12
  def instance
13
13
  if reinit_required?
14
- Terraspace::InitRequiredError.new(@lines)
14
+ Terraspace::InitRequiredError.new(message)
15
15
  elsif bucket_not_found?
16
- Terraspace::BucketNotFoundError.new(@lines)
16
+ Terraspace::BucketNotFoundError.new(message)
17
17
  elsif shared_cache_error?
18
- Terraspace::SharedCacheError.new(@lines)
18
+ Terraspace::SharedCacheError.new(message)
19
19
  end
20
20
  end
21
21
 
@@ -34,7 +34,8 @@ class Terraspace::Shell
34
34
  end
35
35
 
36
36
  def message
37
- @lines.gsub("\n", ' ').squeeze(' ') # remove double whitespaces and newlines
37
+ # For error messages, terraform lines from buffer do not contain newlines. So join with newline
38
+ @lines.join("\n")
38
39
  end
39
40
 
40
41
  def shared_cache_error?
@@ -20,13 +20,18 @@ module Terraspace
20
20
  def shell
21
21
  env = @options[:env] || {}
22
22
  env.stringify_keys!
23
- if @options[:shell] == "system" # terraspace console
23
+ if system?
24
24
  system(env, @command, chdir: @mod.cache_dir)
25
25
  else
26
26
  popen3(env)
27
27
  end
28
28
  end
29
29
 
30
+ def system?
31
+ @options[:shell] == "system" || # terraspace console
32
+ ENV['TS_RUNNER_SYSTEM'] # allow manual override
33
+ end
34
+
30
35
  def popen3(env)
31
36
  Open3.popen3(env, @command, chdir: @mod.cache_dir) do |stdin, stdout, stderr, wait_thread|
32
37
  handle_streams(stdin, stdout, stderr)
@@ -54,7 +59,7 @@ module Terraspace
54
59
  lines = buffer.split("\n")
55
60
  lines.each do |line|
56
61
  if f.fileno == stdout.fileno
57
- handle_stdout(line)
62
+ handle_stdout(line, newline: !suppress_newline(line))
58
63
  handle_input(stdin, line)
59
64
  else
60
65
  handle_stderr(line)
@@ -65,6 +70,11 @@ module Terraspace
65
70
  end
66
71
  end
67
72
 
73
+ def suppress_newline(line)
74
+ line.size == 8192 && line[-1] != "\n" || # when buffer is very large buffer.split("\n") only gives 8192 chars at a time
75
+ line.include?("Enter a value:") # prompt
76
+ end
77
+
68
78
  def handle_stderr(line)
69
79
  @error ||= Error.new
70
80
  @error.lines << line # aggregate all error lines
@@ -81,19 +91,14 @@ module Terraspace
81
91
  files.find { |f| !f.eof }.nil?
82
92
  end
83
93
 
84
- # Terraform doesnt seem to stream the line that prompts with "Enter a value:" when using Open3.popen3
85
- # Hack around it by mimicking the "Enter a value:" prompt
86
- #
87
- # Note: system does stream the prompt but using Open3.popen3 so we can capture output to save to logs.
88
94
  def handle_input(stdin, line)
89
- # stdout doesnt seem to flush and show "Enter a value: " look for earlier output
90
95
  patterns = [
91
- "Only 'yes' will be accepted", # prompt for apply. can happen on apply
96
+ "Enter a value:",
92
97
  "\e[0m\e[1mvar.", # prompts for variable input. can happen on plan or apply. looking for bold marker also in case "var." shows up somewhere else
93
98
  ]
94
99
  if patterns.any? { |pattern| line.include?(pattern) }
95
- print "\n Enter a value: ".bright
96
- stdin.write_nonblock($stdin.gets)
100
+ answer = $stdin.gets
101
+ stdin.write_nonblock(answer)
97
102
  end
98
103
  end
99
104
 
@@ -109,16 +114,12 @@ module Terraspace
109
114
  end
110
115
  end
111
116
 
112
- def handle_stdout(line)
113
- prompted = line.include?('Enter a value')
114
- @prompt_shown ||= prompted
115
- return if @prompt_shown && prompted
116
-
117
+ def handle_stdout(line, newline: true)
117
118
  # Terraspace logger has special stdout method so original terraform output
118
119
  # can be piped to jq. IE:
119
120
  # terraspace show demo --json | jq
120
121
  if logger.respond_to?(:stdout) && !@options[:log_to_stderr]
121
- logger.stdout(line)
122
+ logger.stdout(line, newline: newline)
122
123
  else
123
124
  logger.info(line)
124
125
  end
@@ -40,7 +40,7 @@ module Terraspace::Terraform::Args
40
40
  var_files = @options[:var_files]
41
41
  if var_files
42
42
  var_files.each do |file|
43
- copy_to_cache(plan)
43
+ copy_to_cache(file)
44
44
  end
45
45
  args << var_files.map { |f| "-var-file #{f}" }.join(' ')
46
46
  end
@@ -9,10 +9,11 @@ class Terraspace::Terraform::Runner
9
9
  end
10
10
 
11
11
  def retry?
12
- if @retries <= 3 && !@stop_retrying
12
+ max_retries = ENV['TS_MAX_RETRIES'] ? ENV['TS_MAX_RETRIES'].to_i : 3
13
+ if @retries <= max_retries && !@stop_retrying
13
14
  true # will retry
14
15
  else
15
- logger.info "ERROR: #{@exception.message}"
16
+ logger.info "ERROR after max retries #{max_retries}: #{@exception.message}"
16
17
  false # will not retry
17
18
  end
18
19
  end
@@ -1,3 +1,3 @@
1
1
  module Terraspace
2
- VERSION = "0.6.13"
2
+ VERSION = "0.6.18"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.13
4
+ version: 0.6.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-10 00:00:00.000000000 Z
11
+ date: 2021-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -384,6 +384,7 @@ files:
384
384
  - LICENSE.txt
385
385
  - README.md
386
386
  - Rakefile
387
+ - SECURITY.md
387
388
  - exe/terraspace
388
389
  - lib/templates/base/arg/terraform.rb.tt
389
390
  - lib/templates/base/git_hook/hook.sh
@@ -578,6 +579,7 @@ files:
578
579
  - lib/terraspace/compiler/backend/parser.rb
579
580
  - lib/terraspace/compiler/basename.rb
580
581
  - lib/terraspace/compiler/builder.rb
582
+ - lib/terraspace/compiler/builder/skip.rb
581
583
  - lib/terraspace/compiler/cleaner.rb
582
584
  - lib/terraspace/compiler/cleaner/backend_change.rb
583
585
  - lib/terraspace/compiler/commands_concern.rb
@@ -849,7 +851,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
849
851
  - !ruby/object:Gem::Version
850
852
  version: '0'
851
853
  requirements: []
852
- rubygems_version: 3.2.5
854
+ rubygems_version: 3.1.6
853
855
  signing_key:
854
856
  specification_version: 4
855
857
  summary: 'Terraspace: The Terraspace Framework'