ruby-terraform 0.65.0.pre.4 → 0.65.0.pre.9

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +8 -5
  4. data/Rakefile +7 -3
  5. data/bin/console +1 -0
  6. data/lib/ruby-terraform.rb +2 -0
  7. data/lib/ruby_terraform.rb +5 -2
  8. data/lib/ruby_terraform/commands.rb +2 -0
  9. data/lib/ruby_terraform/commands/apply.rb +32 -40
  10. data/lib/ruby_terraform/commands/base.rb +59 -18
  11. data/lib/ruby_terraform/commands/clean.rb +2 -0
  12. data/lib/ruby_terraform/commands/destroy.rb +28 -38
  13. data/lib/ruby_terraform/commands/format.rb +15 -17
  14. data/lib/ruby_terraform/commands/get.rb +15 -8
  15. data/lib/ruby_terraform/commands/import.rb +25 -34
  16. data/lib/ruby_terraform/commands/init.rb +21 -34
  17. data/lib/ruby_terraform/commands/output.rb +23 -22
  18. data/lib/ruby_terraform/commands/plan.rb +24 -37
  19. data/lib/ruby_terraform/commands/refresh.rb +22 -33
  20. data/lib/ruby_terraform/commands/remote_config.rb +14 -16
  21. data/lib/ruby_terraform/commands/show.rb +13 -13
  22. data/lib/ruby_terraform/commands/validate.rb +22 -30
  23. data/lib/ruby_terraform/commands/workspace.rb +15 -10
  24. data/lib/ruby_terraform/errors.rb +2 -0
  25. data/lib/ruby_terraform/errors/execution_error.rb +2 -0
  26. data/lib/ruby_terraform/options.rb +7 -0
  27. data/lib/ruby_terraform/options/factory.rb +118 -0
  28. data/lib/ruby_terraform/options/name.rb +45 -0
  29. data/lib/ruby_terraform/options/types/base.rb +26 -0
  30. data/lib/ruby_terraform/options/types/boolean.rb +18 -0
  31. data/lib/ruby_terraform/options/types/flag.rb +18 -0
  32. data/lib/ruby_terraform/options/types/standard.rb +43 -0
  33. data/lib/ruby_terraform/options/values/boolean.rb +31 -0
  34. data/lib/ruby_terraform/output.rb +17 -11
  35. data/lib/ruby_terraform/version.rb +3 -1
  36. data/ruby_terraform.gemspec +58 -0
  37. metadata +27 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89f188a94d3b8b59c9a65a87d151a239bc96c3b3c7612718991d84ee482eede4
4
- data.tar.gz: dfdb9d0fac5a258cd823a441c8b70fbf05715129c6d4bd32ddeb128d5447f1e8
3
+ metadata.gz: d49c234d709a37f69ac311de2f0beb7123e88a70053af2a30955d28ffa712b54
4
+ data.tar.gz: 5cc7e8f312bc8217e4fc3e0fdcb28a44911580c93893ccb82b1e11d6e999f026
5
5
  SHA512:
6
- metadata.gz: d0bd171c22777b63821ba3bab4d2a4d600e2fd3352c92c8c31e7758dd8732a7d89c060459012f4d63361373cce9e1d0ff0ab7092c6d2710fa52287790289c262
7
- data.tar.gz: bfbd26e7b628847187de85f8ef2753d2f84ebeaaad739f1c9b129a4db1f201bc09fb7c854d8b338a48df0d7288188a3ea510bb124abe5366cbb311671d538b9a
6
+ metadata.gz: 6abdb8f924a32c688c32b56e7908debfb9ebf1dd089b1ecab345239e15dca795d1cf722e3b0c66b2d8014f32e3a55acea945ff8fb6d52b2e0bb57fd5f64b0282
7
+ data.tar.gz: 543a406f62b65901a6b62479b919784774c7ced3bf1a4d1bae1c5f218367ecae8fc0bd4a16470a73addbc0e69033fd833c85fa41ae774448147aa62839adf809
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ruby_terraform.gemspec
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-terraform (0.65.0.pre.4)
5
- lino (>= 1.5)
4
+ ruby-terraform (0.65.0.pre.9)
5
+ lino (>= 2.3)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -50,7 +50,7 @@ GEM
50
50
  concurrent-ruby (~> 1.0)
51
51
  i18n (1.8.10)
52
52
  concurrent-ruby (~> 1.0)
53
- lino (1.9.0)
53
+ lino (2.3.0)
54
54
  hamster (~> 3.0)
55
55
  open4 (~> 1.3)
56
56
  listen (3.5.1)
@@ -101,7 +101,7 @@ GEM
101
101
  rb-inotify (0.10.1)
102
102
  ffi (~> 1.0)
103
103
  regexp_parser (2.1.1)
104
- rexml (3.2.4)
104
+ rexml (3.2.5)
105
105
  rspec (3.10.0)
106
106
  rspec-core (~> 3.10.0)
107
107
  rspec-expectations (~> 3.10.0)
@@ -115,7 +115,7 @@ GEM
115
115
  diff-lcs (>= 1.2.0, < 2.0)
116
116
  rspec-support (~> 3.10.0)
117
117
  rspec-support (3.10.2)
118
- rubocop (1.12.0)
118
+ rubocop (1.12.1)
119
119
  parallel (~> 1.10)
120
120
  parser (>= 3.0.0.0)
121
121
  rainbow (>= 2.2.2, < 4.0)
@@ -126,6 +126,8 @@ GEM
126
126
  unicode-display_width (>= 1.4.0, < 3.0)
127
127
  rubocop-ast (1.4.1)
128
128
  parser (>= 2.7.1.5)
129
+ rubocop-rake (0.5.1)
130
+ rubocop
129
131
  rubocop-rspec (2.2.0)
130
132
  rubocop (~> 1.0)
131
133
  rubocop-ast (>= 1.1.0)
@@ -166,6 +168,7 @@ DEPENDENCIES
166
168
  rake_ssh (~> 0.4)
167
169
  rspec (~> 3.9)
168
170
  rubocop (~> 1.12)
171
+ rubocop-rake (~> 0.5)
169
172
  rubocop-rspec (~> 2.2)
170
173
  ruby-terraform!
171
174
  simplecov (~> 0.21)
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'rake_circle_ci'
3
5
  require 'rake_github'
@@ -7,13 +9,14 @@ require 'securerandom'
7
9
  require 'rspec/core/rake_task'
8
10
  require 'rubocop/rake_task'
9
11
 
10
- task default: [
11
- #:'library:fix',
12
- :'test:unit'
12
+ task default: %i[
13
+ library:fix
14
+ test:unit
13
15
  ]
14
16
 
15
17
  namespace :encryption do
16
18
  namespace :passphrase do
19
+ desc 'Generate encryption passphrase for CI GPG key'
17
20
  task :generate do
18
21
  File.open('config/secrets/ci/encryption.passphrase', 'w') do |f|
19
22
  f.write(SecureRandom.base64(36))
@@ -94,6 +97,7 @@ RakeGithub.define_repository_tasks(
94
97
  end
95
98
 
96
99
  namespace :pipeline do
100
+ desc 'Prepare CircleCI Pipeline'
97
101
  task prepare: %i[
98
102
  circle_ci:project:follow
99
103
  circle_ci:env_vars:ensure
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'ruby_terraform'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Enable `require 'ruby-terraform'`, to match the gem name
2
4
 
3
5
  require_relative 'ruby_terraform'
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ruby_terraform/version'
2
4
  require 'ruby_terraform/errors'
5
+ require 'ruby_terraform/options'
3
6
  require 'ruby_terraform/commands'
4
7
  require 'logger'
5
8
 
@@ -37,8 +40,8 @@ module RubyTerraform
37
40
  validate: RubyTerraform::Commands::Validate,
38
41
  workspace: RubyTerraform::Commands::Workspace
39
42
  }.each do |method, command_class|
40
- define_method(method) do |opts = {}|
41
- command_class.new.execute(opts)
43
+ define_method(method) do |parameters = {}|
44
+ command_class.new.execute(parameters)
42
45
  end
43
46
  end
44
47
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'commands/clean'
2
4
  require_relative 'commands/init'
3
5
  require_relative 'commands/get'
@@ -1,49 +1,41 @@
1
- require 'json'
1
+ # frozen_string_literal: true
2
+
2
3
  require_relative 'base'
3
4
 
4
5
  module RubyTerraform
5
6
  module Commands
6
7
  class Apply < Base
7
- def configure_command(builder, opts)
8
- directory = opts[:directory]
9
- plan = opts[:plan]
10
- vars = opts[:vars] || {}
11
- var_file = opts[:var_file]
12
- var_files = opts[:var_files] || []
13
- target = opts[:target]
14
- targets = opts[:targets] || []
15
- state = opts[:state]
16
- input = opts[:input]
17
- auto_approve = opts[:auto_approve]
18
- no_backup = opts[:no_backup]
19
- backup = no_backup ? '-' : opts[:backup]
20
- no_color = opts[:no_color]
8
+ def subcommands(_values)
9
+ %w[apply]
10
+ end
11
+
12
+ # rubocop:disable Metrics/MethodLength
13
+ def options
14
+ %w[
15
+ -auto-approve
16
+ -backup
17
+ -input
18
+ -lock
19
+ -lock-timeout
20
+ -no-color
21
+ -state
22
+ -target
23
+ -var
24
+ -var-file
25
+ ]
26
+ end
27
+ # rubocop:enable Metrics/MethodLength
28
+
29
+ def arguments(values)
30
+ [values[:plan] || values[:directory]]
31
+ end
32
+
33
+ def parameter_defaults(_parameters)
34
+ { vars: {}, var_files: [], targets: [] }
35
+ end
21
36
 
22
- builder
23
- .with_subcommand('apply') do |sub|
24
- vars.each do |key, value|
25
- var_value = value.is_a?(String) ? value : JSON.generate(value)
26
- sub = sub.with_option(
27
- '-var', "'#{key}=#{var_value}'", separator: ' '
28
- )
29
- end
30
- sub = sub.with_option('-var-file', var_file) if var_file
31
- var_files.each do |file|
32
- sub = sub.with_option('-var-file', file)
33
- end
34
- sub = sub.with_option('-target', target) if target
35
- targets.each do |file|
36
- sub = sub.with_option('-target', file)
37
- end
38
- sub = sub.with_option('-state', state) if state
39
- sub = sub.with_option('-input', input) if input
40
- sub = sub.with_option('-auto-approve', auto_approve) unless
41
- auto_approve.nil?
42
- sub = sub.with_option('-backup', backup) if backup
43
- sub = sub.with_flag('-no-color') if no_color
44
- sub
45
- end
46
- .with_argument(plan || directory)
37
+ def parameter_overrides(parameters)
38
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
47
39
  end
48
40
  end
49
41
  end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'lino'
4
+
2
5
  require_relative '../errors'
6
+ require_relative '../options/factory'
3
7
 
4
8
  module RubyTerraform
5
9
  module Commands
@@ -12,21 +16,13 @@ module RubyTerraform
12
16
  @stdin = stdin || RubyTerraform.configuration.stdin
13
17
  @stdout = stdout || RubyTerraform.configuration.stdout
14
18
  @stderr = stderr || RubyTerraform.configuration.stderr
19
+ initialize_command
15
20
  end
16
21
 
17
- def execute(opts = {})
18
- builder = instantiate_builder
19
-
20
- do_before(opts)
21
- command = configure_command(builder, opts).build
22
- logger.debug("Running '#{command}'.")
23
-
24
- command.execute(
25
- stdin: stdin,
26
- stdout: stdout,
27
- stderr: stderr
28
- )
29
- do_after(opts)
22
+ def execute(parameters = {})
23
+ do_before(parameters)
24
+ build_and_execute_command(parameters)
25
+ do_after(parameters)
30
26
  rescue Open4::SpawnError
31
27
  message = "Failed while running '#{command_name}'."
32
28
  logger.error(message)
@@ -37,21 +33,66 @@ module RubyTerraform
37
33
 
38
34
  attr_reader :binary, :logger, :stdin, :stdout, :stderr
39
35
 
36
+ def build_and_execute_command(parameters)
37
+ command = build_command(parameters)
38
+ logger.debug("Running '#{command}'.")
39
+ command.execute(
40
+ stdin: stdin,
41
+ stdout: stdout,
42
+ stderr: stderr
43
+ )
44
+ end
45
+
40
46
  def command_name
41
47
  self.class.to_s.split('::')[-1].downcase
42
48
  end
43
49
 
44
- def instantiate_builder
50
+ def do_before(_parameters); end
51
+
52
+ def do_after(_parameters); end
53
+
54
+ private
55
+
56
+ def initialize_command; end
57
+
58
+ def build_command(parameters)
59
+ parameters = resolve_parameters(parameters)
60
+
45
61
  Lino::CommandLineBuilder
46
- .for_command(binary)
62
+ .for_command(@binary)
63
+ .with_options_after_subcommands
47
64
  .with_option_separator('=')
65
+ .with_appliables(Options::Factory.from(options, parameters))
66
+ .with_subcommands(subcommands(parameters))
67
+ .with_arguments(arguments(parameters))
68
+ .build
69
+ end
70
+
71
+ def resolve_parameters(parameters)
72
+ parameter_defaults(parameters)
73
+ .merge(parameters)
74
+ .merge(parameter_overrides(parameters))
75
+ end
76
+
77
+ def parameter_defaults(_parameters)
78
+ {}
79
+ end
80
+
81
+ def parameter_overrides(_parameters)
82
+ {}
48
83
  end
49
84
 
50
- def do_before(opts); end
85
+ def subcommands(_values)
86
+ []
87
+ end
51
88
 
52
- def configure_command(builder, opts); end
89
+ def options
90
+ []
91
+ end
53
92
 
54
- def do_after(opts); end
93
+ def arguments(_values)
94
+ []
95
+ end
55
96
  end
56
97
  end
57
98
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module RubyTerraform
@@ -1,47 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module RubyTerraform
4
6
  module Commands
5
7
  class Destroy < Base
6
- def configure_command(builder, opts)
7
- directory = opts[:directory]
8
- vars = opts[:vars] || {}
9
- var_file = opts[:var_file]
10
- var_files = opts[:var_files] || []
11
- target = opts[:target]
12
- targets = opts[:targets] || []
13
- state = opts[:state]
14
- force = opts[:force]
15
- no_backup = opts[:no_backup]
16
- backup = no_backup ? '-' : opts[:backup]
17
- no_color = opts[:no_color]
18
- auto_approve = opts[:auto_approve]
8
+ def options
9
+ %w[
10
+ -auto-approve
11
+ -backup
12
+ -force
13
+ -no-color
14
+ -state
15
+ -target
16
+ -var
17
+ -var-file
18
+ ]
19
+ end
20
+
21
+ def subcommands(_parameters)
22
+ %w[destroy]
23
+ end
24
+
25
+ def arguments(parameters)
26
+ [parameters[:directory]]
27
+ end
28
+
29
+ def parameter_defaults(_parameters)
30
+ { vars: {}, var_files: [], targets: [] }
31
+ end
19
32
 
20
- builder
21
- .with_subcommand('destroy') do |sub|
22
- vars.each do |key, value|
23
- var_value = value.is_a?(String) ? value : JSON.generate(value)
24
- sub = sub.with_option(
25
- '-var', "'#{key}=#{var_value}'", separator: ' '
26
- )
27
- end
28
- sub = sub.with_option('-var-file', var_file) if var_file
29
- var_files.each do |file|
30
- sub = sub.with_option('-var-file', file)
31
- end
32
- sub = sub.with_option('-target', target) if target
33
- targets.each do |target_name|
34
- sub = sub.with_option('-target', target_name)
35
- end
36
- sub = sub.with_option('-state', state) if state
37
- sub = sub.with_option('-auto-approve', auto_approve) unless
38
- auto_approve.nil?
39
- sub = sub.with_option('-backup', backup) if backup
40
- sub = sub.with_flag('-no-color') if no_color
41
- sub = sub.with_flag('-force') if force
42
- sub
43
- end
44
- .with_argument(directory)
33
+ def parameter_overrides(parameters)
34
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
45
35
  end
46
36
  end
47
37
  end
@@ -5,25 +5,23 @@ require_relative 'base'
5
5
  module RubyTerraform
6
6
  module Commands
7
7
  class Format < Base
8
- def configure_command(builder, opts)
9
- directory = opts[:directory]
10
- check = opts[:check]
11
- diff = opts[:diff]
12
- list = opts[:list]
13
- no_color = opts[:no_color]
14
- recursive = opts[:recursive]
15
- write = opts[:write]
8
+ def options
9
+ %w[
10
+ -check
11
+ -diff
12
+ -list
13
+ -no-color
14
+ -recursive
15
+ -write
16
+ ]
17
+ end
16
18
 
17
- builder.with_subcommand('fmt') do |sub|
18
- sub = sub.with_option('-list', list) if list
19
- sub = sub.with_option('-write', write) if write
19
+ def subcommands(_parameters)
20
+ %w[fmt]
21
+ end
20
22
 
21
- sub = sub.with_flag('-check') if check
22
- sub = sub.with_flag('-diff') if diff
23
- sub = sub.with_flag('-no-color') if no_color
24
- sub = sub.with_flag('-recursive') if recursive
25
- sub
26
- end.with_argument(directory)
23
+ def arguments(parameters)
24
+ [parameters[:directory]]
27
25
  end
28
26
  end
29
27
  end