terraspace 0.6.3 → 0.6.8
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/CHANGELOG.md +17 -0
- data/lib/terraspace/all/runner.rb +1 -1
- data/lib/terraspace/app.rb +2 -0
- data/lib/terraspace/cli.rb +18 -1
- data/lib/terraspace/cli/concerns/source_dirs.rb +13 -0
- data/lib/terraspace/cli/fmt.rb +40 -0
- data/lib/terraspace/cli/fmt/runner.rb +64 -0
- data/lib/terraspace/cli/help/fmt.md +22 -0
- data/lib/terraspace/cli/help/force_unlock.md +7 -0
- data/lib/terraspace/cli/list.rb +3 -2
- data/lib/terraspace/compiler/strategy/mod.rb +4 -3
- data/lib/terraspace/compiler/writer.rb +7 -1
- data/lib/terraspace/core.rb +7 -0
- data/lib/terraspace/hooks/runner.rb +25 -2
- data/lib/terraspace/shell.rb +53 -41
- data/lib/terraspace/terraform/args/default.rb +8 -4
- data/lib/terraspace/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac0b4566fae8a6be4cfb7907e60d1d0ec3cdf4f7426989a68e5a7c22c55b4cc5
|
4
|
+
data.tar.gz: 66bd6807da803a3891ba2d78b5e21e5dcf0af2e8a1ed303ceb8c9e70c6916ea7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d14b3c79add9cf2075c27682ad466f4afeb474a21943868d3dc1260afd129d127387e0089fa44e08e695bb5c28080b6dcbfdcd6774c3fff244782a50dd8a4f7c
|
7
|
+
data.tar.gz: c54ed8c38625bccd2ce424a18b70b4ca9198a4921bf10a57e452e0c6d7b1f2ae500f9565ba123cbaa071d7fec9767fa1d263e8a315dc1427ea5d983c8309c790
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,23 @@
|
|
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.8] - 2021-05-07
|
7
|
+
- [#110](https://github.com/boltops-tools/terraspace/pull/110) fix popen deadlock with large amounts of output [#97](https://github.com/boltops-tools/terraspace/pull/97) Terraspace hangs when TF_LOG=TRACE environment variable exists #97
|
8
|
+
|
9
|
+
## [0.6.7] - 2021-05-05
|
10
|
+
- [#108](https://github.com/boltops-tools/terraspace/pull/108) provide runner context to terraspace hook
|
11
|
+
|
12
|
+
## [0.6.6] - 2021-04-15
|
13
|
+
- [#101](https://github.com/boltops-tools/terraspace/pull/101) terraspace force-unlock command
|
14
|
+
- [#102](https://github.com/boltops-tools/terraspace/pull/102) fix terraspace all summarized logging
|
15
|
+
- [#103](https://github.com/boltops-tools/terraspace/pull/103) config.build.pass_files with default files use pass strategy
|
16
|
+
|
17
|
+
## [0.6.5] - 2021-03-24
|
18
|
+
- [#96](https://github.com/boltops-tools/terraspace/pull/96) terraspace fmt: ability to specific module or stack
|
19
|
+
|
20
|
+
## [0.6.4] - 2021-03-22
|
21
|
+
- [#94](https://github.com/boltops-tools/terraspace/pull/94) terraspace fmt command
|
22
|
+
|
6
23
|
## [0.6.3] - 2021-03-12
|
7
24
|
- [#91](https://github.com/boltops-tools/terraspace/pull/91) Camelcase
|
8
25
|
- [#92](https://github.com/boltops-tools/terraspace/pull/92) disable terraform.plugin_cache by default
|
@@ -104,7 +104,7 @@ module Terraspace::All
|
|
104
104
|
def run_terraspace(mod_name)
|
105
105
|
set_log_path!(mod_name)
|
106
106
|
name = command_map(@command)
|
107
|
-
o = @options.merge(mod: mod_name, yes: true, build: false, input: false)
|
107
|
+
o = @options.merge(mod: mod_name, yes: true, build: false, input: false, log_to_stderr: true)
|
108
108
|
o.merge!(quiet: false) if @command == "init" # noisy so can filter and summarize output
|
109
109
|
case @command
|
110
110
|
when "up"
|
data/lib/terraspace/app.rb
CHANGED
@@ -27,6 +27,8 @@ module Terraspace
|
|
27
27
|
config.build.cache_dir = ":CACHE_ROOT/:REGION/:ENV/:BUILD_DIR"
|
28
28
|
config.build.cache_root = nil # defaults to /full/path/to/.terraspace-cache
|
29
29
|
config.build.clean_cache = nil # defaults to /full/path/to/.terraspace-cache
|
30
|
+
config.build.default_pass_files = ["/files/"]
|
31
|
+
config.build.pass_files = []
|
30
32
|
config.bundle = ActiveSupport::OrderedOptions.new
|
31
33
|
config.bundle.logger = ts_logger
|
32
34
|
config.init = ActiveSupport::OrderedOptions.new
|
data/lib/terraspace/cli.rb
CHANGED
@@ -27,6 +27,9 @@ module Terraspace
|
|
27
27
|
reconfigure_option = Proc.new {
|
28
28
|
option :reconfigure, type: :boolean, desc: "Add terraform -reconfigure option"
|
29
29
|
}
|
30
|
+
type_option = Proc.new {
|
31
|
+
option :type, default: "stack", aliases: %w[t], desc: "Type: stack, module, or all"
|
32
|
+
}
|
30
33
|
|
31
34
|
desc "all SUBCOMMAND", "all subcommands"
|
32
35
|
long_desc Help.text(:all)
|
@@ -82,6 +85,20 @@ module Terraspace
|
|
82
85
|
Down.new(options.merge(mod: mod)).run
|
83
86
|
end
|
84
87
|
|
88
|
+
desc "force_unlock", "Calls terrform force-unlock"
|
89
|
+
long_desc Help.text(:force_unlock)
|
90
|
+
instance_option.call
|
91
|
+
def force_unlock(mod, lock_id)
|
92
|
+
Commander.new("force-unlock", options.merge(mod: mod, lock_id: lock_id)).run
|
93
|
+
end
|
94
|
+
|
95
|
+
desc "fmt", "Run terraform fmt"
|
96
|
+
long_desc Help.text(:fmt)
|
97
|
+
type_option.call
|
98
|
+
def fmt(mod=nil)
|
99
|
+
Fmt.new(options.merge(mod: mod)).run
|
100
|
+
end
|
101
|
+
|
85
102
|
desc "info STACK", "Get info about stack."
|
86
103
|
long_desc Help.text(:info)
|
87
104
|
instance_option.call
|
@@ -100,7 +117,7 @@ module Terraspace
|
|
100
117
|
|
101
118
|
desc "list", "List stacks and modules."
|
102
119
|
long_desc Help.text(:list)
|
103
|
-
|
120
|
+
type_option.call
|
104
121
|
def list
|
105
122
|
List.new(options).run
|
106
123
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Terraspace::CLI::Concerns
|
2
|
+
module SourceDirs
|
3
|
+
# used by list
|
4
|
+
def source_dirs
|
5
|
+
Dir.glob("{app,vendor}/{modules,stacks}/*").select { |p| File.directory?(p) }.sort
|
6
|
+
end
|
7
|
+
|
8
|
+
# dont include vendor: used by fmt
|
9
|
+
def app_source_dirs
|
10
|
+
Dir.glob("{app}/{modules,stacks}/*").select { |p| File.directory?(p) }.sort
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Terraspace::CLI
|
2
|
+
class Fmt
|
3
|
+
include Concerns::SourceDirs
|
4
|
+
include Terraspace::Util::Logging
|
5
|
+
|
6
|
+
def initialize(options={})
|
7
|
+
@options = options
|
8
|
+
@mod_name = options[:mod]
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
logger.info "Formating terraform files"
|
13
|
+
dirs.each do |dir|
|
14
|
+
format(dir)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def format(dir)
|
19
|
+
Runner.new(dir).format!
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def dirs
|
24
|
+
if @mod_name
|
25
|
+
type_dirs.select { |p| p.include?(@mod_name) }
|
26
|
+
else
|
27
|
+
type_dirs
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_dirs
|
32
|
+
type = @options[:type]
|
33
|
+
if type
|
34
|
+
app_source_dirs.select { |p| p.include?("/#{type.pluralize}/") }
|
35
|
+
else
|
36
|
+
app_source_dirs
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Terraspace::CLI::Fmt
|
2
|
+
class Runner
|
3
|
+
include Terraspace::CLI::Concerns::SourceDirs
|
4
|
+
include Terraspace::Util::Logging
|
5
|
+
SKIP_PATTERN = /\.skip$/
|
6
|
+
|
7
|
+
def initialize(dir)
|
8
|
+
@dir = dir
|
9
|
+
end
|
10
|
+
|
11
|
+
def format!
|
12
|
+
logger.info @dir.color(:green)
|
13
|
+
Dir.chdir(@dir) do
|
14
|
+
skip_rename
|
15
|
+
begin
|
16
|
+
terraform_fmt
|
17
|
+
ensure
|
18
|
+
restore_rename
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def skip_rename
|
24
|
+
tf_files.each do |path|
|
25
|
+
if !skip?(path) && erb?(path)
|
26
|
+
FileUtils.mv(path, "#{path}.skip")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def terraform_fmt
|
32
|
+
sh "terraform fmt"
|
33
|
+
end
|
34
|
+
|
35
|
+
def sh(command)
|
36
|
+
logger.debug("=> #{command}")
|
37
|
+
success = system(command)
|
38
|
+
return if success
|
39
|
+
logger.info "WARN: There were some errors running terraform fmt for files in #{@dir}:".color(:yellow)
|
40
|
+
logger.info "The errors are shown above"
|
41
|
+
end
|
42
|
+
|
43
|
+
def restore_rename
|
44
|
+
tf_files.each do |path|
|
45
|
+
if skip?(path) && erb?(path)
|
46
|
+
FileUtils.mv(path, path.sub(SKIP_PATTERN, '')) # original name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def skip?(path)
|
53
|
+
!!(path =~ SKIP_PATTERN)
|
54
|
+
end
|
55
|
+
|
56
|
+
def erb?(path)
|
57
|
+
IO.readlines(path).detect { |l| l.include?('<%') }
|
58
|
+
end
|
59
|
+
|
60
|
+
def tf_files
|
61
|
+
Dir.glob("#{Terraspace.root}/#{@dir}/**/*.{tf,skip}").select { |p| File.file?(p) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
## Example
|
2
|
+
|
3
|
+
Format all source files.
|
4
|
+
|
5
|
+
$ terraspace fmt
|
6
|
+
Formating terraform files
|
7
|
+
app/modules/example
|
8
|
+
main.tf
|
9
|
+
outputs.tf
|
10
|
+
variables.tf
|
11
|
+
app/stacks/demo
|
12
|
+
main.tf
|
13
|
+
|
14
|
+
Format specific module or stack.
|
15
|
+
|
16
|
+
$ terraspace fmt stack1
|
17
|
+
$ terraspace fmt module1
|
18
|
+
|
19
|
+
Format scoping to module or stack types. In case there's a module and stack with the same name.
|
20
|
+
|
21
|
+
$ terraspace fmt example -t module
|
22
|
+
$ terraspace fmt demo -t stacke
|
data/lib/terraspace/cli/list.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
class Terraspace::CLI
|
2
2
|
class List
|
3
|
+
include Concerns::SourceDirs
|
4
|
+
|
3
5
|
def initialize(options={})
|
4
6
|
@options = options
|
5
7
|
@type_dir = normalized_type
|
6
8
|
end
|
7
9
|
|
8
10
|
def run
|
9
|
-
|
10
|
-
dirs.sort.each do |path|
|
11
|
+
source_dirs.each do |path|
|
11
12
|
if @type_dir
|
12
13
|
puts path if path.include?("/#{@type_dir}/")
|
13
14
|
else
|
@@ -1,14 +1,15 @@
|
|
1
1
|
module Terraspace::Compiler::Strategy
|
2
2
|
class Mod < AbstractBase
|
3
3
|
def run
|
4
|
-
|
5
|
-
klass = strategy_class(ext)
|
4
|
+
klass = strategy_class(@src_path)
|
6
5
|
strategy = klass.new(@mod, @src_path) # IE: Terraspace::Compiler::Strategy::Mod::Rb.new
|
7
6
|
strategy.run
|
8
7
|
end
|
9
8
|
|
10
|
-
def strategy_class(
|
9
|
+
def strategy_class(path)
|
10
|
+
ext = File.extname(path).sub('.','')
|
11
11
|
return Mod::Pass if ext.empty? # infinite loop without this
|
12
|
+
return Mod::Pass if Terraspace.pass_file?(path)
|
12
13
|
"Terraspace::Compiler::Strategy::Mod::#{ext.camelize}".constantize rescue Mod::Pass
|
13
14
|
end
|
14
15
|
end
|
@@ -10,11 +10,17 @@ module Terraspace::Compiler
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def dest_path
|
13
|
-
name =
|
13
|
+
name = get_name
|
14
14
|
name = basename(name)
|
15
15
|
"#{dest_dir}/#{name}"
|
16
16
|
end
|
17
17
|
|
18
|
+
def get_name
|
19
|
+
return @dest_name if @dest_name
|
20
|
+
return @src_path if Terraspace.pass_file?(@src_path)
|
21
|
+
@src_path.sub('.rb','.tf.json')
|
22
|
+
end
|
23
|
+
|
18
24
|
def dest_dir
|
19
25
|
if @mod.is_a?(Terraspace::Mod::Remote)
|
20
26
|
File.dirname(@src_path) # for Mod::Remote src is dest
|
data/lib/terraspace/core.rb
CHANGED
@@ -51,5 +51,12 @@ module Terraspace
|
|
51
51
|
def logger=(v)
|
52
52
|
@@logger = v
|
53
53
|
end
|
54
|
+
|
55
|
+
def pass_file?(path)
|
56
|
+
pass_files = config.build.pass_files + config.build.default_pass_files
|
57
|
+
pass_files.uniq.detect do |i|
|
58
|
+
i.is_a?(Regexp) ? path =~ i : path.include?(i)
|
59
|
+
end
|
60
|
+
end
|
54
61
|
end
|
55
62
|
end
|
@@ -2,6 +2,17 @@ module Terraspace::Hooks
|
|
2
2
|
class Runner
|
3
3
|
include Terraspace::Util
|
4
4
|
|
5
|
+
# exposing mod and hook so terraspace hooks have access to them via runner context. IE:
|
6
|
+
#
|
7
|
+
# class EnvExporter
|
8
|
+
# def call(runner)
|
9
|
+
# puts "runner.hook #{runner.hook}"
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# Docs: http://terraspace.cloud/docs/config/hooks/ruby/#method-argument
|
14
|
+
#
|
15
|
+
attr_reader :mod, :hook
|
5
16
|
def initialize(mod, hook)
|
6
17
|
@mod, @hook = mod, hook
|
7
18
|
@execute = @hook["execute"]
|
@@ -12,12 +23,24 @@ module Terraspace::Hooks
|
|
12
23
|
when String
|
13
24
|
Terraspace::Shell.new(@mod, @execute, exit_on_fail: @hook["exit_on_fail"]).run
|
14
25
|
when -> (e) { e.respond_to?(:public_instance_methods) && e.public_instance_methods.include?(:call) }
|
15
|
-
@execute.new
|
26
|
+
executor = @execute.new
|
16
27
|
when -> (e) { e.respond_to?(:call) }
|
17
|
-
@execute
|
28
|
+
executor = @execute
|
18
29
|
else
|
19
30
|
logger.warn "WARN: execute option not set for hook: #{@hook.inspect}"
|
20
31
|
end
|
32
|
+
|
33
|
+
return unless executor
|
34
|
+
|
35
|
+
meth = executor.method(:call)
|
36
|
+
case meth.arity
|
37
|
+
when 0
|
38
|
+
executor.call # backwards compatibility
|
39
|
+
when 1
|
40
|
+
executor.call(self)
|
41
|
+
else
|
42
|
+
raise "The #{executor} call method definition has been more than 1 arguments and is not supported"
|
43
|
+
end
|
21
44
|
end
|
22
45
|
end
|
23
46
|
end
|
data/lib/terraspace/shell.rb
CHANGED
@@ -29,70 +29,82 @@ module Terraspace
|
|
29
29
|
|
30
30
|
def popen3(env)
|
31
31
|
Open3.popen3(env, @command, chdir: @mod.cache_dir) do |stdin, stdout, stderr, wait_thread|
|
32
|
-
|
33
|
-
while out = stdout.gets
|
34
|
-
terraform_to_stdout(out)
|
35
|
-
end
|
36
|
-
|
37
|
-
while err = stderr.gets
|
38
|
-
@error ||= Error.new
|
39
|
-
@error.lines << err # aggregate all error lines
|
40
|
-
unless @error.known?
|
41
|
-
# Sometimes may print a "\e[31m\n" which like during dependencies fetcher init
|
42
|
-
# suppress it so dont get a bunch of annoying "newlines"
|
43
|
-
next if err == "\e[31m\n" && @options[:suppress_error_color]
|
44
|
-
logger.error(err)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
32
|
+
handle_streams(stdin, stdout, stderr)
|
48
33
|
status = wait_thread.value.exitstatus
|
49
34
|
exit_status(status)
|
50
35
|
end
|
51
36
|
end
|
52
37
|
|
53
|
-
|
54
|
-
|
38
|
+
BLOCK_SIZE = Integer(ENV['TS_BUFFER_BLOCK_SIZE'] || 102400)
|
39
|
+
BUFFER_TIMEOUT = Integer(ENV['TS_BUFFER_TIMEOUT'] || 3600) # 3600s = 1h
|
40
|
+
def handle_streams(stdin, stdout, stderr)
|
41
|
+
files = [stdout, stderr]
|
42
|
+
# note: t=0 and t=nil means no timeout. See: https://bit.ly/2PURlCX
|
43
|
+
t = BUFFER_TIMEOUT.to_i unless BUFFER_TIMEOUT.nil?
|
44
|
+
Timeout::timeout(t) do
|
45
|
+
until all_eof?(files) do
|
46
|
+
ready = IO.select(files, nil, nil, 0.1)
|
47
|
+
next unless ready
|
55
48
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
49
|
+
readable = ready[0]
|
50
|
+
readable.each do |f|
|
51
|
+
buffer = f.read_nonblock(BLOCK_SIZE, exception: false)
|
52
|
+
next unless buffer
|
53
|
+
|
54
|
+
lines = buffer.split("\n")
|
55
|
+
lines.each do |line|
|
56
|
+
terraform_to_stdout(line)
|
57
|
+
handle_input(stdin, line)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
62
61
|
end
|
63
62
|
end
|
64
63
|
|
64
|
+
def all_eof?(files)
|
65
|
+
files.find { |f| !f.eof }.nil?
|
66
|
+
end
|
67
|
+
|
65
68
|
# Terraform doesnt seem to stream the line that prompts with "Enter a value:" when using Open3.popen3
|
66
69
|
# Hack around it by mimicking the "Enter a value:" prompt
|
67
70
|
#
|
68
71
|
# Note: system does stream the prompt but using Open3.popen3 so we can capture output to save to logs.
|
69
|
-
def
|
70
|
-
|
72
|
+
def handle_input(stdin, line)
|
73
|
+
# stdout doesnt seem to flush and show "Enter a value: " look for earlier output
|
71
74
|
patterns = [
|
72
75
|
"Only 'yes' will be accepted", # prompt for apply. can happen on apply
|
73
76
|
"\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
|
74
77
|
]
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
+
if patterns.any? { |pattern| line.include?(pattern) }
|
79
|
+
print "\n Enter a value: ".bright
|
80
|
+
stdin.write_nonblock($stdin.gets)
|
81
|
+
end
|
82
|
+
end
|
78
83
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
def exit_status(status)
|
85
|
+
return if status == 0
|
86
|
+
|
87
|
+
exit_on_fail = @options[:exit_on_fail].nil? ? true : @options[:exit_on_fail]
|
88
|
+
if @error && @error.known?
|
89
|
+
raise @error.instance
|
90
|
+
elsif exit_on_fail
|
91
|
+
logger.error "Error running command: #{@command}".color(:red)
|
92
|
+
exit status
|
85
93
|
end
|
86
94
|
end
|
87
95
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
96
|
+
def terraform_to_stdout(line)
|
97
|
+
prompted = line.include?('Enter a value')
|
98
|
+
@prompt_shown ||= prompted
|
99
|
+
return if @prompt_shown && prompted
|
100
|
+
|
101
|
+
# Terraspace logger has special stdout method so original terraform output
|
102
|
+
# can be piped to jq. IE:
|
103
|
+
# terraspace show demo --json | jq
|
92
104
|
if logger.respond_to?(:stdout) && !@options[:log_to_stderr]
|
93
|
-
logger.stdout(
|
105
|
+
logger.stdout(line)
|
94
106
|
else
|
95
|
-
logger.info(
|
107
|
+
logger.info(line)
|
96
108
|
end
|
97
109
|
end
|
98
110
|
end
|
@@ -3,7 +3,7 @@ require "tempfile"
|
|
3
3
|
module Terraspace::Terraform::Args
|
4
4
|
class Default
|
5
5
|
def initialize(mod, name, options={})
|
6
|
-
@mod, @name, @options = mod, name, options
|
6
|
+
@mod, @name, @options = mod, name.underscore, options
|
7
7
|
@quiet = @options[:quiet].nil? ? true : @options[:quiet]
|
8
8
|
end
|
9
9
|
|
@@ -11,14 +11,18 @@ module Terraspace::Terraform::Args
|
|
11
11
|
# https://terraspace.cloud/docs/ci-automation/
|
12
12
|
ENV['TF_IN_AUTOMATION'] = '1' if @options[:auto]
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
send(
|
14
|
+
args_meth = "#{@name}_args"
|
15
|
+
if respond_to?(args_meth)
|
16
|
+
send(args_meth)
|
17
17
|
else
|
18
18
|
[]
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def force_unlock_args
|
23
|
+
[" -force #{@options[:lock_id]}"]
|
24
|
+
end
|
25
|
+
|
22
26
|
def apply_args
|
23
27
|
args = auto_approve_arg
|
24
28
|
var_files = @options[:var_files]
|
data/lib/terraspace/version.rb
CHANGED
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.
|
4
|
+
version: 0.6.8
|
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-
|
11
|
+
date: 2021-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -482,7 +482,10 @@ files:
|
|
482
482
|
- lib/terraspace/cli/completer.rb
|
483
483
|
- lib/terraspace/cli/completer/script.rb
|
484
484
|
- lib/terraspace/cli/completer/script.sh
|
485
|
+
- lib/terraspace/cli/concerns/source_dirs.rb
|
485
486
|
- lib/terraspace/cli/down.rb
|
487
|
+
- lib/terraspace/cli/fmt.rb
|
488
|
+
- lib/terraspace/cli/fmt/runner.rb
|
486
489
|
- lib/terraspace/cli/help.rb
|
487
490
|
- lib/terraspace/cli/help/all/down.md
|
488
491
|
- lib/terraspace/cli/help/all/graph.md
|
@@ -504,6 +507,8 @@ files:
|
|
504
507
|
- lib/terraspace/cli/help/completion_script.md
|
505
508
|
- lib/terraspace/cli/help/console.md
|
506
509
|
- lib/terraspace/cli/help/down.md
|
510
|
+
- lib/terraspace/cli/help/fmt.md
|
511
|
+
- lib/terraspace/cli/help/force_unlock.md
|
507
512
|
- lib/terraspace/cli/help/info.md
|
508
513
|
- lib/terraspace/cli/help/init.md
|
509
514
|
- lib/terraspace/cli/help/list.md
|