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

Sign up to get free protection for your applications and to get access to all the features.
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