terraspace 2.2.14 → 2.2.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/terraspace/check.rb +4 -5
- data/lib/terraspace/cli/fmt/runner.rb +18 -9
- data/lib/terraspace/cli/fmt.rb +2 -2
- data/lib/terraspace/cli/help/fmt.md +10 -0
- data/lib/terraspace/cli/help/seed.md +1 -1
- data/lib/terraspace/cli/help/taint.md +13 -0
- data/lib/terraspace/cli/help/untaint.md +13 -0
- data/lib/terraspace/cli/taint.rb +12 -0
- data/lib/terraspace/cli/untaint.rb +12 -0
- data/lib/terraspace/cli.rb +15 -5
- data/lib/terraspace/compiler/strategy/tfvar/layer.rb +13 -20
- data/lib/terraspace/seeder/where.rb +6 -17
- data/lib/terraspace/terraform/args/thor.rb +8 -0
- data/lib/terraspace/terraform/tfc/runs/pruner.rb +1 -1
- data/lib/terraspace/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 967dc53b88e3a6e310eb1cac59b9247e54f77e097ee8eb98ab5d129a44550705
|
4
|
+
data.tar.gz: 36c77aac237a37b26a96e018f51d6b885528cb69d8ca2bf6f40e8e0c638d4001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98366017d1a0e256d101d3cbc2361c93f948ec056b39893296a83256efc09e6df8daaf07109a94d539f367932d80f12a5ed1267b84592340bb12232783b9e275
|
7
|
+
data.tar.gz: 68c8327b6d66aceeec12dc3ffacc0324df964495cecccbcd37a3e517bbf3ab2c19e49314a2819ff95fc0ce3ac376ee01a5008af8792b34a4098b6ee0171162a1
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,15 @@
|
|
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
|
+
## [2.2.15] - 2023-10-18
|
7
|
+
- [#331](https://github.com/boltops-tools/terraspace/pull/331) adding tainting/untainting as a terraspace command
|
8
|
+
- [#332](https://github.com/boltops-tools/terraspace/pull/332) terraspace fmt: generalize and pass through fmt option
|
9
|
+
- [#333](https://github.com/boltops-tools/terraspace/pull/333) remove unused noop and verbose options
|
10
|
+
- [#334](https://github.com/boltops-tools/terraspace/pull/334) fix taint and untaint and support pass through args
|
11
|
+
- [#335](https://github.com/boltops-tools/terraspace/pull/335) use tofu fork when available
|
12
|
+
- [#336](https://github.com/boltops-tools/terraspace/pull/336) improve tfvars lookup location to include config/stacks/demo/tfvars
|
13
|
+
- [#337](https://github.com/boltops-tools/terraspace/pull/337) update cli help examples to config/stacks/demo/tfvars folder
|
14
|
+
|
6
15
|
## [2.2.14] - 2023-09-12
|
7
16
|
- [#329](https://github.com/boltops-tools/terraspace/pull/329) fix terraspace check
|
8
17
|
|
data/lib/terraspace/check.rb
CHANGED
@@ -77,11 +77,10 @@ module Terraspace
|
|
77
77
|
EOL
|
78
78
|
end
|
79
79
|
|
80
|
-
|
81
|
-
# Should be ready to swap out the official fork name when it is ready.
|
82
|
-
BINS = %w[opentf terraform]
|
80
|
+
BINS = %w[tofu terraform]
|
83
81
|
@@terraform_bin = nil
|
84
82
|
def terraform_bin
|
83
|
+
return ENV['TS_TERRAFORM_BIN'] if ENV['TS_TERRAFORM_BIN']
|
85
84
|
return @@terraform_bin if @@terraform_bin.present?
|
86
85
|
BINS.each do |bin|
|
87
86
|
if Gem.win_platform?
|
@@ -115,8 +114,8 @@ module Terraspace
|
|
115
114
|
#
|
116
115
|
# Another example
|
117
116
|
#
|
118
|
-
# $
|
119
|
-
#
|
117
|
+
# $ tofu --version
|
118
|
+
# OpenTofu v1.6.0
|
120
119
|
#
|
121
120
|
# Note: The -json option is only available in v0.13+
|
122
121
|
def terraform_version
|
@@ -2,10 +2,9 @@ class Terraspace::CLI::Fmt
|
|
2
2
|
class Runner
|
3
3
|
include Terraspace::CLI::Concerns::SourceDirs
|
4
4
|
include Terraspace::Util::Logging
|
5
|
-
SKIP_PATTERN = /\.skip$/
|
6
5
|
|
7
|
-
def initialize(dir)
|
8
|
-
@dir = dir
|
6
|
+
def initialize(dir, options)
|
7
|
+
@dir, @options = dir, options
|
9
8
|
end
|
10
9
|
|
11
10
|
def format!
|
@@ -13,7 +12,7 @@ class Terraspace::CLI::Fmt
|
|
13
12
|
|
14
13
|
exit_status = nil
|
15
14
|
Dir.chdir(@dir) do
|
16
|
-
|
15
|
+
rename_to_skip_fmt
|
17
16
|
begin
|
18
17
|
exit_status = terraform_fmt
|
19
18
|
ensure
|
@@ -23,7 +22,7 @@ class Terraspace::CLI::Fmt
|
|
23
22
|
exit_status
|
24
23
|
end
|
25
24
|
|
26
|
-
def
|
25
|
+
def rename_to_skip_fmt
|
27
26
|
tf_files.each do |path|
|
28
27
|
if !skip?(path) && erb?(path)
|
29
28
|
FileUtils.mv(path, "#{path}.skip")
|
@@ -32,19 +31,29 @@ class Terraspace::CLI::Fmt
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def terraform_fmt
|
35
|
-
sh "#{Terraspace.terraform_bin} fmt"
|
34
|
+
sh "#{Terraspace.terraform_bin} fmt #{args}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def args
|
38
|
+
mod = nil # not needed here
|
39
|
+
pass = Terraspace::Terraform::Args::Pass.new(mod, "fmt", @options)
|
40
|
+
pass.args.flatten.join(' ')
|
36
41
|
end
|
37
42
|
|
38
43
|
def sh(command)
|
39
44
|
logger.debug("=> #{command}")
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
system(command)
|
46
|
+
case $?.exitstatus
|
47
|
+
when 2 # errors fmt
|
48
|
+
logger.info "WARN: There were some errors running #{Terraspace.terraform_bin} fmt for files in #{@dir}:".color(:yellow)
|
43
49
|
logger.info "The errors are shown above"
|
50
|
+
when 3 # fmt ran and changes were made
|
51
|
+
logger.debug "fmt ran and changes were made unless -check or -write=false"
|
44
52
|
end
|
45
53
|
$?.exitstatus
|
46
54
|
end
|
47
55
|
|
56
|
+
SKIP_PATTERN = /\.skip$/
|
48
57
|
def restore_rename
|
49
58
|
tf_files.each do |path|
|
50
59
|
if skip?(path) && erb?(path)
|
data/lib/terraspace/cli/fmt.rb
CHANGED
@@ -10,7 +10,7 @@ class Terraspace::CLI
|
|
10
10
|
|
11
11
|
@@exit_status = 0
|
12
12
|
def run
|
13
|
-
logger.info "
|
13
|
+
logger.info "Formatting terraform files"
|
14
14
|
dirs.each do |dir|
|
15
15
|
exit_status = format(dir)
|
16
16
|
@@exit_status = exit_status if exit_status != 0
|
@@ -19,7 +19,7 @@ class Terraspace::CLI
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def format(dir)
|
22
|
-
Runner.new(dir).format!
|
22
|
+
Runner.new(dir, @options).format!
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
@@ -24,3 +24,13 @@ Format scoping to module or stack types. In case there's a module and stack with
|
|
24
24
|
Format all, so both modules and stacks:
|
25
25
|
|
26
26
|
$ terraspace fmt -t all
|
27
|
+
|
28
|
+
Check format of all source files, but don't fix. Examples:
|
29
|
+
|
30
|
+
$ terraspace fmt demo -write=false -list
|
31
|
+
$ terraspace fmt demo -check
|
32
|
+
$ terraspace fmt -write=false -list
|
33
|
+
|
34
|
+
## Some Notes
|
35
|
+
|
36
|
+
The `terraspace fmt` will only format terraform source files that do not have any ERB templating logic in it. It will format the files directly in your source code. IE: app/stacks/demo
|
@@ -0,0 +1,13 @@
|
|
1
|
+
## Examples
|
2
|
+
|
3
|
+
terraspace taint ec2 aws_instance.my_instance
|
4
|
+
|
5
|
+
Example with output:
|
6
|
+
|
7
|
+
$ terraspace taint ec2 aws_instance.my_instance
|
8
|
+
Building .terraspace-cache/us-east-1/dev/stacks/ec2
|
9
|
+
Hook: Running terraspace before build hook.
|
10
|
+
Current directory: .terraspace-cache/us-east-1/dev/stacks/ec2
|
11
|
+
=> terraform taint aws_instance.my_instance
|
12
|
+
Resource instance aws_instance.my_instance has been successfully tainted.
|
13
|
+
Releasing state lock. This may take a few moments...
|
@@ -0,0 +1,13 @@
|
|
1
|
+
## Examples
|
2
|
+
|
3
|
+
terraspace untaint ec2 aws_instance.my_instance
|
4
|
+
|
5
|
+
Example with output:
|
6
|
+
|
7
|
+
$ terraspace taint ec2 aws_instance.my_instance
|
8
|
+
Building .terraspace-cache/us-east-1/dev/stacks/ec2
|
9
|
+
Hook: Running terraspace before build hook.
|
10
|
+
Current directory: .terraspace-cache/us-east-1/dev/stacks/ec2
|
11
|
+
=> terraform untaint aws_instance.my_instance
|
12
|
+
Resource instance aws_instance.my_instance has been successfully untainted.
|
13
|
+
Releasing state lock. This may take a few moments...
|
data/lib/terraspace/cli.rb
CHANGED
@@ -2,9 +2,6 @@ module Terraspace
|
|
2
2
|
class CLI < Command
|
3
3
|
include Concern
|
4
4
|
|
5
|
-
class_option :verbose, type: :boolean
|
6
|
-
class_option :noop, type: :boolean
|
7
|
-
|
8
5
|
yes_option = Proc.new {
|
9
6
|
option :yes, aliases: :y, type: :boolean, desc: "-auto-approve the terraform apply"
|
10
7
|
}
|
@@ -111,8 +108,9 @@ module Terraspace
|
|
111
108
|
desc "fmt", "Run terraform fmt"
|
112
109
|
long_desc Help.text(:fmt)
|
113
110
|
type_option.call
|
114
|
-
def fmt(
|
115
|
-
|
111
|
+
def fmt(*args)
|
112
|
+
mod = args.shift if args.first && !args.first.include?('-')
|
113
|
+
Fmt.new(options.merge(mod: mod, args: args)).run
|
116
114
|
end
|
117
115
|
|
118
116
|
desc "import STACK ADDR ID", "Import existing infrastructure into your Terraform state"
|
@@ -214,6 +212,12 @@ module Terraspace
|
|
214
212
|
State.new(options.merge(subcommand: subcommand, mod: mod, rest: rest)).run
|
215
213
|
end
|
216
214
|
|
215
|
+
desc "taint STACK ADDR", "Mark a resource instance as not fully functional."
|
216
|
+
long_desc Help.text(:taint)
|
217
|
+
def taint(mod, addr, *args)
|
218
|
+
Taint.new(options.merge(mod: mod, addr: addr, args: args)).run
|
219
|
+
end
|
220
|
+
|
217
221
|
desc "test", "Run test."
|
218
222
|
long_desc Help.text(:test)
|
219
223
|
def test
|
@@ -228,6 +232,12 @@ module Terraspace
|
|
228
232
|
Commander.new("output", options.merge(mod: mod, args: args)).run
|
229
233
|
end
|
230
234
|
|
235
|
+
desc "untaint STACK ADDR", "Remove the 'tainted' state from a resource instance."
|
236
|
+
long_desc Help.text(:untaint)
|
237
|
+
def untaint(mod, addr, *args)
|
238
|
+
Untaint.new(options.merge(mod: mod, addr: addr, args: args)).run
|
239
|
+
end
|
240
|
+
|
231
241
|
desc "up STACK", "Deploy infrastructure stack."
|
232
242
|
long_desc Help.text(:up)
|
233
243
|
auto_option.call
|
@@ -39,9 +39,10 @@ class Terraspace::Compiler::Strategy::Tfvar
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def paths
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
config_terraform = full_paths(config_terraform_tfvars_dir) # deprecated
|
43
|
+
app_stacks = full_paths(app_stacks_tfvars_dir) # deprecated
|
44
|
+
config_stacks = full_paths(config_stacks_tfvars_dir) # recommended
|
45
|
+
paths = (config_terraform + app_stacks + config_stacks).uniq
|
45
46
|
show_layers(paths)
|
46
47
|
paths.select do |path|
|
47
48
|
File.exist?(path)
|
@@ -131,27 +132,19 @@ class Terraspace::Compiler::Strategy::Tfvar
|
|
131
132
|
layers
|
132
133
|
end
|
133
134
|
|
134
|
-
|
135
|
+
# IE: config/terraform/tfvars
|
136
|
+
def config_terraform_tfvars_dir
|
135
137
|
"#{Terraspace.root}/config/terraform/tfvars"
|
136
138
|
end
|
137
139
|
|
138
|
-
#
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
#
|
143
|
-
# This allows user to take over the tfvars embedded in the stack if they need to. Generally,
|
144
|
-
# putting tfvars in within the app/stacks/MOD/tfvars folder seems cleaner and easier to follow.
|
145
|
-
#
|
146
|
-
# Will also consider app/modules/demo/tfvars. Though modules to be reuseable and stacks is where business logic
|
147
|
-
# should go.
|
148
|
-
#
|
149
|
-
def stack_tfvars_dir
|
150
|
-
seed_dir = "#{Terraspace.root}/seed/tfvars/#{@mod.build_dir(disable_extra: true)}"
|
151
|
-
mod_dir = "#{@mod.root}/tfvars"
|
140
|
+
# IE: app/stacks/demo/tfvars
|
141
|
+
def app_stacks_tfvars_dir
|
142
|
+
"#{@mod.root}/tfvars"
|
143
|
+
end
|
152
144
|
|
153
|
-
|
154
|
-
|
145
|
+
# IE: config/stacks/demo/tfvars
|
146
|
+
def config_stacks_tfvars_dir
|
147
|
+
"#{Terraspace.root}/config/#{@mod.build_dir(disable_extra: true)}/tfvars"
|
155
148
|
end
|
156
149
|
|
157
150
|
@@shown_layers = {}
|
@@ -5,30 +5,19 @@ class Terraspace::Seeder
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def dest_path
|
8
|
-
|
9
|
-
|
10
|
-
app_path
|
11
|
-
when "seed"
|
12
|
-
seed_path
|
8
|
+
if @options[:where] == "app"
|
9
|
+
seed_path("app")
|
13
10
|
else
|
14
|
-
|
11
|
+
seed_path("config")
|
15
12
|
end
|
16
13
|
end
|
17
14
|
|
18
|
-
def
|
19
|
-
@mod.
|
20
|
-
end
|
21
|
-
|
22
|
-
def app_path
|
23
|
-
"#{Terraspace.root}/app/#{@mod.build_dir}/tfvars/#{seed_file}.tfvars"
|
24
|
-
end
|
25
|
-
|
26
|
-
def seed_path
|
27
|
-
"#{Terraspace.root}/seed/tfvars/#{@mod.build_dir}/#{seed_file}.tfvars"
|
15
|
+
def seed_path(folder)
|
16
|
+
"#{Terraspace.root}/#{folder}/#{@mod.build_dir(disable_extra: true)}/tfvars/#{seed_file}.tfvars"
|
28
17
|
end
|
29
18
|
|
30
19
|
def seed_file
|
31
|
-
|
20
|
+
[Terraspace.app, Terraspace.role, Terraspace.env, Terraspace.extra].compact.join("/")
|
32
21
|
end
|
33
22
|
end
|
34
23
|
end
|
@@ -121,6 +121,14 @@ module Terraspace::Terraform::Args
|
|
121
121
|
[@options[:addr], @options[:id]]
|
122
122
|
end
|
123
123
|
|
124
|
+
def taint_args
|
125
|
+
[@options[:addr]]
|
126
|
+
end
|
127
|
+
|
128
|
+
def untaint_args
|
129
|
+
[@options[:addr]]
|
130
|
+
end
|
131
|
+
|
124
132
|
def auto_approve_arg
|
125
133
|
@options[:yes] || @options[:auto] ? ["-auto-approve"] : []
|
126
134
|
end
|
@@ -66,7 +66,7 @@ class Terraspace::Terraform::Tfc::Runs
|
|
66
66
|
action = discardable?(item) ? "Discarded" : "Cancelled"
|
67
67
|
p = ItemPresenter.new(item)
|
68
68
|
msg = "#{action} #{p.id} #{p.message}" # note id is named run-xxx
|
69
|
-
logger.info("NOOP: #{msg}") && return if
|
69
|
+
logger.info("NOOP: #{msg}") && return if ENV['NOOP']
|
70
70
|
|
71
71
|
if discardable?(item)
|
72
72
|
api.runs.discard(id)
|
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: 2.2.
|
4
|
+
version: 2.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -599,12 +599,14 @@ files:
|
|
599
599
|
- lib/terraspace/cli/help/show.md
|
600
600
|
- lib/terraspace/cli/help/state.md
|
601
601
|
- lib/terraspace/cli/help/summary.md
|
602
|
+
- lib/terraspace/cli/help/taint.md
|
602
603
|
- lib/terraspace/cli/help/test.md
|
603
604
|
- lib/terraspace/cli/help/tfc/destroy.md
|
604
605
|
- lib/terraspace/cli/help/tfc/list.md
|
605
606
|
- lib/terraspace/cli/help/tfc/runs/list.md
|
606
607
|
- lib/terraspace/cli/help/tfc/runs/prune.md
|
607
608
|
- lib/terraspace/cli/help/tfc/sync.md
|
609
|
+
- lib/terraspace/cli/help/untaint.md
|
608
610
|
- lib/terraspace/cli/help/up.md
|
609
611
|
- lib/terraspace/cli/help/validate.md
|
610
612
|
- lib/terraspace/cli/import.rb
|
@@ -640,10 +642,12 @@ files:
|
|
640
642
|
- lib/terraspace/cli/setup.rb
|
641
643
|
- lib/terraspace/cli/state.rb
|
642
644
|
- lib/terraspace/cli/summary.rb
|
645
|
+
- lib/terraspace/cli/taint.rb
|
643
646
|
- lib/terraspace/cli/test.rb
|
644
647
|
- lib/terraspace/cli/tfc.rb
|
645
648
|
- lib/terraspace/cli/tfc/runs.rb
|
646
649
|
- lib/terraspace/cli/tfc_concern.rb
|
650
|
+
- lib/terraspace/cli/untaint.rb
|
647
651
|
- lib/terraspace/cli/up.rb
|
648
652
|
- lib/terraspace/cloud/api.rb
|
649
653
|
- lib/terraspace/cloud/api/cani.rb
|
@@ -966,7 +970,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
966
970
|
- !ruby/object:Gem::Version
|
967
971
|
version: '0'
|
968
972
|
requirements: []
|
969
|
-
rubygems_version: 3.4.
|
973
|
+
rubygems_version: 3.4.20
|
970
974
|
signing_key:
|
971
975
|
specification_version: 4
|
972
976
|
summary: 'Terraspace: The Terraspace Framework'
|