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

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