ruby-terraform 0.65.0.pre.6 → 0.65.0.pre.11

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +4 -1
  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 +56 -3
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +28 -9
  10. data/lib/ruby_terraform/commands/base.rb +24 -26
  11. data/lib/ruby_terraform/commands/clean.rb +4 -2
  12. data/lib/ruby_terraform/commands/destroy.rb +29 -9
  13. data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
  14. data/lib/ruby_terraform/commands/format.rb +17 -6
  15. data/lib/ruby_terraform/commands/get.rb +14 -6
  16. data/lib/ruby_terraform/commands/graph.rb +24 -0
  17. data/lib/ruby_terraform/commands/import.rb +28 -9
  18. data/lib/ruby_terraform/commands/init.rb +27 -8
  19. data/lib/ruby_terraform/commands/login.rb +20 -0
  20. data/lib/ruby_terraform/commands/logout.rb +20 -0
  21. data/lib/ruby_terraform/commands/output.rb +18 -8
  22. data/lib/ruby_terraform/commands/plan.rb +27 -7
  23. data/lib/ruby_terraform/commands/providers.rb +16 -0
  24. data/lib/ruby_terraform/commands/providers_lock.rb +28 -0
  25. data/lib/ruby_terraform/commands/providers_mirror.rb +24 -0
  26. data/lib/ruby_terraform/commands/providers_schema.rb +25 -0
  27. data/lib/ruby_terraform/commands/refresh.rb +29 -7
  28. data/lib/ruby_terraform/commands/remote_config.rb +11 -5
  29. data/lib/ruby_terraform/commands/show.rb +14 -6
  30. data/lib/ruby_terraform/commands/state_list.rb +20 -0
  31. data/lib/ruby_terraform/commands/state_move.rb +34 -0
  32. data/lib/ruby_terraform/commands/state_pull.rb +16 -0
  33. data/lib/ruby_terraform/commands/state_push.rb +24 -0
  34. data/lib/ruby_terraform/commands/state_remove.rb +32 -0
  35. data/lib/ruby_terraform/commands/state_replace_provider.rb +35 -0
  36. data/lib/ruby_terraform/commands/state_show.rb +24 -0
  37. data/lib/ruby_terraform/commands/taint.rb +36 -0
  38. data/lib/ruby_terraform/commands/untaint.rb +37 -0
  39. data/lib/ruby_terraform/commands/validate.rb +15 -7
  40. data/lib/ruby_terraform/commands/workspace_delete.rb +32 -0
  41. data/lib/ruby_terraform/commands/workspace_list.rb +24 -0
  42. data/lib/ruby_terraform/commands/workspace_new.rb +32 -0
  43. data/lib/ruby_terraform/commands/workspace_select.rb +24 -0
  44. data/lib/ruby_terraform/commands/workspace_show.rb +16 -0
  45. data/lib/ruby_terraform/errors.rb +2 -0
  46. data/lib/ruby_terraform/errors/execution_error.rb +2 -0
  47. data/lib/ruby_terraform/options.rb +8 -0
  48. data/lib/ruby_terraform/options/common.rb +11 -0
  49. data/lib/ruby_terraform/options/factory.rb +70 -67
  50. data/lib/ruby_terraform/options/{switch.rb → name.rb} +11 -7
  51. data/lib/ruby_terraform/options/types/base.rb +26 -0
  52. data/lib/ruby_terraform/options/types/boolean.rb +18 -0
  53. data/lib/ruby_terraform/options/types/flag.rb +18 -0
  54. data/lib/ruby_terraform/options/types/standard.rb +43 -0
  55. data/lib/ruby_terraform/options/values/boolean.rb +2 -0
  56. data/lib/ruby_terraform/output.rb +9 -7
  57. data/lib/ruby_terraform/version.rb +3 -1
  58. data/ruby_terraform.gemspec +58 -0
  59. metadata +46 -8
  60. data/lib/ruby_terraform/commands/workspace.rb +0 -24
  61. data/lib/ruby_terraform/options/base.rb +0 -22
  62. data/lib/ruby_terraform/options/boolean.rb +0 -14
  63. data/lib/ruby_terraform/options/flag.rb +0 -14
  64. data/lib/ruby_terraform/options/standard.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5cfd39cb3e8dbe09c0589280ac5b3879e913a9588574420bb285d89a8507217
4
- data.tar.gz: 0e87b3b820aff40c28c38073735c4da17c14f95081b6a57f861df034a326bfa1
3
+ metadata.gz: 5a58448ed0c98cd15f8213caa98af1fca20e27ab725b3fecb9dcdb873d899c74
4
+ data.tar.gz: 484fbd1f6621cfb00422b8efe9d9eebfc5d048a720f440f9e11a946b9e14696a
5
5
  SHA512:
6
- metadata.gz: 86d696b30097ac1248ae4f421c591307bad5002ce91fb0352e30334d1c5861ec8abd43c734e6fb1eb0c6efefb07d7f9b09706684bd97b616a6f556e2e6fb9064
7
- data.tar.gz: c55bd0a0a10da6bf852b097c17e11890c26ddbeb123edff321a31d5c89fa09404145299c69cda3b403979a0f88d6eca7d9ebf676b5e570933cd4e14f63b36483
6
+ metadata.gz: c634e5a5ff4d6a4063528c44d79e167015f70f21adc4957383bdea35b4f2054f53c9083d8903eb30ab7664437607e8dd3d5cd1e22472315af6a3766714bb8eba
7
+ data.tar.gz: '0059b146054f5113031f90b402049144c38cbb0918252752f4ac9320008a4183c724732ca1fb6f28b841b9d6bf1cf7658fc004bcc0e52f76626fae6cecfd2cb4'
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,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-terraform (0.65.0.pre.6)
4
+ ruby-terraform (0.65.0.pre.11)
5
5
  lino (>= 2.3)
6
6
 
7
7
  GEM
@@ -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
 
@@ -26,21 +29,67 @@ module RubyTerraform
26
29
  clean: RubyTerraform::Commands::Clean,
27
30
  destroy: RubyTerraform::Commands::Destroy,
28
31
  format: RubyTerraform::Commands::Format,
32
+ force_unlock: RubyTerraform::Commands::ForceUnlock,
29
33
  get: RubyTerraform::Commands::Get,
34
+ graph: RubyTerraform::Commands::Graph,
30
35
  import: RubyTerraform::Commands::Import,
31
36
  init: RubyTerraform::Commands::Init,
37
+ login: RubyTerraform::Commands::Login,
38
+ logout: RubyTerraform::Commands::Logout,
32
39
  output: RubyTerraform::Commands::Output,
33
40
  plan: RubyTerraform::Commands::Plan,
41
+ providers: RubyTerraform::Commands::Providers,
42
+ providers_lock: RubyTerraform::Commands::ProvidersLock,
43
+ providers_mirror: RubyTerraform::Commands::ProvidersMirror,
44
+ providers_schema: RubyTerraform::Commands::ProvidersSchema,
34
45
  refresh: RubyTerraform::Commands::Refresh,
35
46
  remote_config: RubyTerraform::Commands::RemoteConfig,
36
47
  show: RubyTerraform::Commands::Show,
48
+ state_list: RubyTerraform::Commands::StateList,
49
+ state_mv: RubyTerraform::Commands::StateMove,
50
+ state_pull: RubyTerraform::Commands::StatePull,
51
+ state_push: RubyTerraform::Commands::StatePush,
52
+ state_replace_provider: RubyTerraform::Commands::StateReplaceProvider,
53
+ state_rm: RubyTerraform::Commands::StateRemove,
54
+ state_show: RubyTerraform::Commands::StateShow,
55
+ taint: RubyTerraform::Commands::Taint,
56
+ untaint: RubyTerraform::Commands::Untaint,
37
57
  validate: RubyTerraform::Commands::Validate,
38
- workspace: RubyTerraform::Commands::Workspace
58
+ workspace_list: RubyTerraform::Commands::WorkspaceList,
59
+ workspace_select: RubyTerraform::Commands::WorkspaceSelect,
60
+ workspace_new: RubyTerraform::Commands::WorkspaceNew,
61
+ workspace_delete: RubyTerraform::Commands::WorkspaceDelete,
62
+ workspace_show: RubyTerraform::Commands::WorkspaceShow
39
63
  }.each do |method, command_class|
40
- define_method(method) do |opts = {}|
41
- command_class.new.execute(opts)
64
+ define_method(method) do |parameters = {}|
65
+ command_class.new.execute(parameters)
42
66
  end
43
67
  end
68
+
69
+ def workspace(parameters = {}) # rubocop:disable Metrics/MethodLength
70
+ case parameters[:operation]
71
+ when nil, 'list'
72
+ exec(RubyTerraform::Commands::WorkspaceList, parameters)
73
+ when 'select'
74
+ exec(RubyTerraform::Commands::WorkspaceSelect, parameters)
75
+ when 'new'
76
+ exec(RubyTerraform::Commands::WorkspaceNew, parameters)
77
+ when 'delete'
78
+ exec(RubyTerraform::Commands::WorkspaceDelete, parameters)
79
+ when 'show'
80
+ exec(RubyTerraform::Commands::WorkspaceShow, parameters)
81
+ else
82
+ raise(
83
+ "Invalid operation '#{parameters[:operation]}' supplied to workspace"
84
+ )
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ def exec(command_class, parameters)
91
+ command_class.new.execute(parameters)
92
+ end
44
93
  end
45
94
  extend ClassMethods
46
95
 
@@ -78,5 +127,9 @@ module RubyTerraform
78
127
  def close
79
128
  @targets.each(&:close)
80
129
  end
130
+
131
+ def reopen(*args)
132
+ @targets.each { |t| t.reopen(*args) }
133
+ end
81
134
  end
82
135
  end
@@ -1,17 +1,40 @@
1
- require_relative 'commands/clean'
2
- require_relative 'commands/init'
3
- require_relative 'commands/get'
4
- require_relative 'commands/validate'
5
- require_relative 'commands/plan'
1
+ # frozen_string_literal: true
2
+
6
3
  require_relative 'commands/apply'
4
+ require_relative 'commands/clean'
7
5
  require_relative 'commands/destroy'
6
+ require_relative 'commands/force_unlock'
7
+ require_relative 'commands/format'
8
+ require_relative 'commands/get'
9
+ require_relative 'commands/graph'
10
+ require_relative 'commands/import'
11
+ require_relative 'commands/init'
12
+ require_relative 'commands/login'
13
+ require_relative 'commands/logout'
8
14
  require_relative 'commands/output'
15
+ require_relative 'commands/plan'
16
+ require_relative 'commands/providers'
17
+ require_relative 'commands/providers_lock'
18
+ require_relative 'commands/providers_mirror'
19
+ require_relative 'commands/providers_schema'
9
20
  require_relative 'commands/refresh'
10
21
  require_relative 'commands/remote_config'
11
22
  require_relative 'commands/show'
12
- require_relative 'commands/workspace'
13
- require_relative 'commands/import'
14
- require_relative 'commands/format'
23
+ require_relative 'commands/state_list'
24
+ require_relative 'commands/state_move'
25
+ require_relative 'commands/state_pull'
26
+ require_relative 'commands/state_push'
27
+ require_relative 'commands/state_replace_provider'
28
+ require_relative 'commands/state_remove'
29
+ require_relative 'commands/state_show'
30
+ require_relative 'commands/taint'
31
+ require_relative 'commands/untaint'
32
+ require_relative 'commands/validate'
33
+ require_relative 'commands/workspace_delete'
34
+ require_relative 'commands/workspace_list'
35
+ require_relative 'commands/workspace_new'
36
+ require_relative 'commands/workspace_select'
37
+ require_relative 'commands/workspace_show'
15
38
 
16
39
  module RubyTerraform
17
40
  module Commands
@@ -1,27 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
4
+ require_relative '../options/common'
2
5
 
3
6
  module RubyTerraform
4
7
  module Commands
5
8
  class Apply < Base
6
- def sub_commands(_values)
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
7
12
  %w[apply]
8
13
  end
9
14
 
10
- def switches
11
- %w[-backup -lock -lock-timeout -input -auto-approve -no-color -state
12
- -target -var -var-file]
15
+ def options # rubocop:disable Metrics/MethodLength
16
+ %w[
17
+ -backup
18
+ -compact-warnings
19
+ -lock
20
+ -lock-timeout
21
+ -input
22
+ -auto-approve
23
+ -no-color
24
+ -parallelism
25
+ -refresh
26
+ -state
27
+ -state-out
28
+ -target
29
+ -var
30
+ -var-file
31
+ ] + super
13
32
  end
14
33
 
15
- def arguments(values)
16
- [values[:plan] || values[:directory]]
34
+ def arguments(parameters)
35
+ [parameters[:plan] || parameters[:directory]]
17
36
  end
18
37
 
19
- def option_default_values(_opts)
38
+ def parameter_defaults(_parameters)
20
39
  { vars: {}, var_files: [], targets: [] }
21
40
  end
22
41
 
23
- def option_override_values(opts)
24
- { backup: opts[:no_backup] ? '-' : opts[:backup] }
42
+ def parameter_overrides(parameters)
43
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
25
44
  end
26
45
  end
27
46
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'lino'
2
4
 
3
5
  require_relative '../errors'
@@ -17,10 +19,10 @@ module RubyTerraform
17
19
  initialize_command
18
20
  end
19
21
 
20
- def execute(opts = {})
21
- do_before(opts)
22
- build_and_execute_command(opts)
23
- do_after(opts)
22
+ def execute(parameters = {})
23
+ do_before(parameters)
24
+ build_and_execute_command(parameters)
25
+ do_after(parameters)
24
26
  rescue Open4::SpawnError
25
27
  message = "Failed while running '#{command_name}'."
26
28
  logger.error(message)
@@ -31,8 +33,8 @@ module RubyTerraform
31
33
 
32
34
  attr_reader :binary, :logger, :stdin, :stdout, :stderr
33
35
 
34
- def build_and_execute_command(opts)
35
- command = build_command(opts)
36
+ def build_and_execute_command(parameters)
37
+ command = build_command(parameters)
36
38
  logger.debug("Running '#{command}'.")
37
39
  command.execute(
38
40
  stdin: stdin,
@@ -45,54 +47,50 @@ module RubyTerraform
45
47
  self.class.to_s.split('::')[-1].downcase
46
48
  end
47
49
 
48
- def do_before(_opts); end
50
+ def do_before(_parameters); end
49
51
 
50
- def do_after(_opts); end
52
+ def do_after(_parameters); end
51
53
 
52
54
  private
53
55
 
54
56
  def initialize_command; end
55
57
 
56
- def build_command(opts)
57
- values = apply_option_defaults_and_overrides(opts)
58
+ def build_command(parameters)
59
+ parameters = resolve_parameters(parameters)
58
60
 
59
61
  Lino::CommandLineBuilder
60
62
  .for_command(@binary)
61
63
  .with_options_after_subcommands
62
64
  .with_option_separator('=')
63
- .with_appliables(options(values))
64
- .with_subcommands(sub_commands(values))
65
- .with_arguments(arguments(values))
65
+ .with_appliables(Options::Factory.from(options, parameters))
66
+ .with_subcommands(subcommands)
67
+ .with_arguments(arguments(parameters))
66
68
  .build
67
69
  end
68
70
 
69
- def apply_option_defaults_and_overrides(opts)
70
- option_default_values(opts)
71
- .merge(opts)
72
- .merge(option_override_values(opts))
71
+ def resolve_parameters(parameters)
72
+ parameter_defaults(parameters)
73
+ .merge(parameters)
74
+ .merge(parameter_overrides(parameters))
73
75
  end
74
76
 
75
- def option_default_values(_values)
77
+ def parameter_defaults(_parameters)
76
78
  {}
77
79
  end
78
80
 
79
- def option_override_values(_values)
81
+ def parameter_overrides(_parameters)
80
82
  {}
81
83
  end
82
84
 
83
- def sub_commands(_values)
85
+ def subcommands
84
86
  []
85
87
  end
86
88
 
87
- def options(values)
88
- RubyTerraform::Options::Factory.from(values, switches)
89
- end
90
-
91
- def switches
89
+ def options
92
90
  []
93
91
  end
94
92
 
95
- def arguments(_values)
93
+ def arguments(_parameters)
96
94
  []
97
95
  end
98
96
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module RubyTerraform
@@ -10,8 +12,8 @@ module RubyTerraform
10
12
  @logger = logger || RubyTerraform.configuration.logger
11
13
  end
12
14
 
13
- def execute(opts = {})
14
- directory = opts[:directory] || @directory
15
+ def execute(parameters = {})
16
+ directory = parameters[:directory] || @directory
15
17
  begin
16
18
  logger.info "Cleaning terraform directory '#{directory}'."
17
19
  FileUtils.rm_r(directory, secure: true)
@@ -1,26 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
4
+ require_relative '../options/common'
2
5
 
3
6
  module RubyTerraform
4
7
  module Commands
5
8
  class Destroy < Base
6
- def switches
7
- %w[-backup -auto-approve -force -no-color -state -target -var -var-file]
8
- end
9
+ include RubyTerraform::Options::Common
9
10
 
10
- def sub_commands(_values)
11
+ def subcommands
11
12
  %w[destroy]
12
13
  end
13
14
 
14
- def arguments(values)
15
- [values[:directory]]
15
+ def options # rubocop:disable Metrics/MethodLength
16
+ %w[
17
+ -backup
18
+ -compact-warnings
19
+ -lock
20
+ -lock-timeout
21
+ -input
22
+ -auto-approve
23
+ -no-color
24
+ -parallelism
25
+ -refresh
26
+ -state
27
+ -state-out
28
+ -target
29
+ -var
30
+ -var-file
31
+ ] + super
32
+ end
33
+
34
+ def arguments(parameters)
35
+ [parameters[:directory]]
16
36
  end
17
37
 
18
- def option_default_values(_opts)
38
+ def parameter_defaults(_parameters)
19
39
  { vars: {}, var_files: [], targets: [] }
20
40
  end
21
41
 
22
- def option_override_values(opts)
23
- { backup: opts[:no_backup] ? '-' : opts[:backup] }
42
+ def parameter_overrides(parameters)
43
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
24
44
  end
25
45
  end
26
46
  end