ruby-terraform 0.65.0.pre.5 → 0.65.0.pre.10

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 (65) 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 +50 -3
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +29 -10
  10. data/lib/ruby_terraform/commands/base.rb +33 -30
  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 +28 -8
  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 +35 -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 +119 -0
  50. data/lib/ruby_terraform/options/name.rb +45 -0
  51. data/lib/ruby_terraform/{command_line/option → options/types}/base.rb +8 -6
  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/{command_line/option → options/types}/standard.rb +14 -11
  55. data/lib/ruby_terraform/{command_line/option/boolean_value.rb → options/values/boolean.rb} +7 -5
  56. data/lib/ruby_terraform/output.rb +10 -7
  57. data/lib/ruby_terraform/version.rb +3 -1
  58. data/ruby_terraform.gemspec +58 -0
  59. metadata +50 -13
  60. data/lib/ruby_terraform/command_line/builder.rb +0 -55
  61. data/lib/ruby_terraform/command_line/option/boolean.rb +0 -16
  62. data/lib/ruby_terraform/command_line/option/flag.rb +0 -16
  63. data/lib/ruby_terraform/command_line/option/switch.rb +0 -43
  64. data/lib/ruby_terraform/command_line/options_factory.rb +0 -79
  65. data/lib/ruby_terraform/commands/workspace.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc71a524e8870cabf47b5d3d88f474119bb38ed849afc036af51f95475335c37
4
- data.tar.gz: 11bf8ae65abe06ff4e0cec9f347a82f613976cbd7378c62fc22fb97d336e05f4
3
+ metadata.gz: 94caa2aca97f42de2c9ebf6b4924b89af8d39482d49ee2e3d1603cac201e910e
4
+ data.tar.gz: 6b6f5cfdfa183a6189f9cc796e7acdc49461ce34250a414d3e0d654159cb3840
5
5
  SHA512:
6
- metadata.gz: a6cd2f1ac3bc0b91d270925ddea294c6c30fe3385061437467fc78c1964bea141ac410212f0358a091e483898bf2d06a4b27931783c444e5176bb184b5ede8c9
7
- data.tar.gz: 8a863584cdf4d4bc90ebe62cb289b893fd6082f704f828ab00ba21b67228841ceb774b7d16a03332feebcdd4174364a340124b2796ca6e5acc2b2383050a2b83
6
+ metadata.gz: 5256f952dc7b3d11762ce57563588e39b94ff0f33c20bfbb1f3587bc43b05b493a9a236d824e4b4a8929fe596e20a4b6f7448d6cc97c4636529ea7282ce39c1d
7
+ data.tar.gz: 714db0266dcb2b1c6a52598b4913151a17abd4d9a8f31649680879f362d7778f48525d177c826086b69eaf56595346574b432c8f422cab5b826269f75e456412
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.5)
5
- lino (>= 1.5)
4
+ ruby-terraform (0.65.0.pre.10)
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
 
@@ -26,21 +29,65 @@ 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)
66
+ end
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 "Invalid operation '#{parameters[:operation]}' supplied to workspace"
42
83
  end
43
84
  end
85
+
86
+ private
87
+
88
+ def exec(command_class, parameters)
89
+ command_class.new.execute(parameters)
90
+ end
44
91
  end
45
92
  extend ClassMethods
46
93
 
@@ -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)
7
- 'apply'
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
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,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lino'
4
+
1
5
  require_relative '../errors'
2
- require_relative '../command_line/builder'
3
- require_relative '../command_line/options_factory'
6
+ require_relative '../options/factory'
4
7
 
5
8
  module RubyTerraform
6
9
  module Commands
@@ -16,10 +19,10 @@ module RubyTerraform
16
19
  initialize_command
17
20
  end
18
21
 
19
- def execute(opts = {})
20
- do_before(opts)
21
- build_and_execute_command(opts)
22
- do_after(opts)
22
+ def execute(parameters = {})
23
+ do_before(parameters)
24
+ build_and_execute_command(parameters)
25
+ do_after(parameters)
23
26
  rescue Open4::SpawnError
24
27
  message = "Failed while running '#{command_name}'."
25
28
  logger.error(message)
@@ -30,8 +33,8 @@ module RubyTerraform
30
33
 
31
34
  attr_reader :binary, :logger, :stdin, :stdout, :stderr
32
35
 
33
- def build_and_execute_command(opts)
34
- command = build_command(opts)
36
+ def build_and_execute_command(parameters)
37
+ command = build_command(parameters)
35
38
  logger.debug("Running '#{command}'.")
36
39
  command.execute(
37
40
  stdin: stdin,
@@ -44,50 +47,50 @@ module RubyTerraform
44
47
  self.class.to_s.split('::')[-1].downcase
45
48
  end
46
49
 
47
- def do_before(_opts); end
50
+ def do_before(_parameters); end
48
51
 
49
- def do_after(_opts); end
52
+ def do_after(_parameters); end
50
53
 
51
54
  private
52
55
 
53
56
  def initialize_command; end
54
57
 
55
- def build_command(opts)
56
- values = apply_option_defaults_and_overrides(opts)
57
- RubyTerraform::CommandLine::Builder.new(
58
- binary: @binary,
59
- sub_commands: sub_commands(values),
60
- options: options(values),
61
- arguments: arguments(values)
62
- ).build
58
+ def build_command(parameters)
59
+ parameters = resolve_parameters(parameters)
60
+
61
+ Lino::CommandLineBuilder
62
+ .for_command(@binary)
63
+ .with_options_after_subcommands
64
+ .with_option_separator('=')
65
+ .with_appliables(Options::Factory.from(options, parameters))
66
+ .with_subcommands(subcommands)
67
+ .with_arguments(arguments(parameters))
68
+ .build
63
69
  end
64
70
 
65
- def apply_option_defaults_and_overrides(opts)
66
- option_default_values(opts).merge(opts)
67
- .merge(option_override_values(opts))
71
+ def resolve_parameters(parameters)
72
+ parameter_defaults(parameters)
73
+ .merge(parameters)
74
+ .merge(parameter_overrides(parameters))
68
75
  end
69
76
 
70
- def option_default_values(_values)
77
+ def parameter_defaults(_parameters)
71
78
  {}
72
79
  end
73
80
 
74
- def option_override_values(_values)
81
+ def parameter_overrides(_parameters)
75
82
  {}
76
83
  end
77
84
 
78
- def sub_commands(_values)
85
+ def subcommands
79
86
  []
80
87
  end
81
88
 
82
- def options(values)
83
- RubyTerraform::CommandLine::OptionsFactory.from(values, switches)
84
- end
85
-
86
- def switches
89
+ def options
87
90
  []
88
91
  end
89
92
 
90
- def arguments(_values)
93
+ def arguments(_parameters)
91
94
  []
92
95
  end
93
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]
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
12
+ %w[destroy]
8
13
  end
9
14
 
10
- def sub_commands(_values)
11
- 'destroy'
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
12
32
  end
13
33
 
14
- def arguments(values)
15
- values[:directory]
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