ruby-terraform 0.65.0.pre.8 → 0.65.0.pre.13

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +11 -6
  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 +61 -4
  8. data/lib/ruby_terraform/commands.rb +31 -8
  9. data/lib/ruby_terraform/commands/apply.rb +19 -12
  10. data/lib/ruby_terraform/commands/base.rb +32 -39
  11. data/lib/ruby_terraform/commands/clean.rb +4 -2
  12. data/lib/ruby_terraform/commands/destroy.rb +24 -13
  13. data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
  14. data/lib/ruby_terraform/commands/format.rb +16 -12
  15. data/lib/ruby_terraform/commands/get.rb +13 -8
  16. data/lib/ruby_terraform/commands/graph.rb +24 -0
  17. data/lib/ruby_terraform/commands/import.rb +22 -11
  18. data/lib/ruby_terraform/commands/init.rb +21 -9
  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 +17 -15
  22. data/lib/ruby_terraform/commands/plan.rb +20 -9
  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 +23 -8
  28. data/lib/ruby_terraform/commands/remote_config.rb +8 -6
  29. data/lib/ruby_terraform/commands/show.rb +13 -9
  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 +14 -13
  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 +28 -3
  48. data/lib/ruby_terraform/options/common.rb +11 -0
  49. data/lib/ruby_terraform/options/definition.rb +170 -0
  50. data/lib/ruby_terraform/options/definitions.rb +103 -0
  51. data/lib/ruby_terraform/options/factory.rb +12 -101
  52. data/lib/ruby_terraform/options/name.rb +13 -19
  53. data/lib/ruby_terraform/options/types.rb +27 -0
  54. data/lib/ruby_terraform/options/types/base.rb +8 -13
  55. data/lib/ruby_terraform/options/types/flag.rb +3 -3
  56. data/lib/ruby_terraform/options/types/standard.rb +3 -27
  57. data/lib/ruby_terraform/options/values.rb +38 -0
  58. data/lib/ruby_terraform/options/values/base.rb +15 -0
  59. data/lib/ruby_terraform/options/values/boolean.rb +15 -11
  60. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  61. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  62. data/lib/ruby_terraform/options/values/string.rb +17 -0
  63. data/lib/ruby_terraform/output.rb +9 -7
  64. data/lib/ruby_terraform/version.rb +3 -1
  65. data/ruby_terraform.gemspec +59 -0
  66. metadata +64 -6
  67. data/lib/ruby_terraform/commands/workspace.rb +0 -24
  68. data/lib/ruby_terraform/options/types/boolean.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bf0ddc673685c898ae6d2eada53730debf6f88b641fa14a6c9607ba7fecdb30
4
- data.tar.gz: f8514023bc5442bfa6d9c5148030dcba0bf6d926c3af2031b439bb179df1b15c
3
+ metadata.gz: 67cc10d1c813e81407ee1fde4952f587dfaeb97a9da6eacd921e0948ff274b37
4
+ data.tar.gz: 34cc711d0e383c6e4b745434d50a66fb11629d8533b9226229b1a0ab051909a3
5
5
  SHA512:
6
- metadata.gz: f7db215e6820ddfde9c5362a27063413469a8d62ca57be6d2f68c0f6e47b9b02c8a32ce5f8e9471de41d8baca7dbf07c46d62e284d750e1da76584786f56ce65
7
- data.tar.gz: b5d3bbe7617c24bdf233c81a298d3a78df93e30f7d9a61145e05afe009e3fad49b840e4fcdbf082dbc9afd92be11147401cc691fab5a376c93a009fd9f34bf67
6
+ metadata.gz: ef66d6f1e646abbe98fb68ccf46d67b672ba3b0be23ed8e94f14f6c235d78099db4973493d4743a5fc0c03dc077322cb78675c34865c915f2707748e981f392a
7
+ data.tar.gz: 7136d3958da6a0f4a375c41eb1a306aa4f06cddeb865ff2e1e953e1b1b26df5b464890413e7b539dbfd1931c970fcf04fcc050d9996337da17d131a3b3c0dee4
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,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-terraform (0.65.0.pre.8)
5
- lino (>= 2.3)
4
+ ruby-terraform (0.65.0.pre.13)
5
+ immutable-struct (>= 2.4)
6
+ lino (>= 2.5)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -50,7 +51,8 @@ GEM
50
51
  concurrent-ruby (~> 1.0)
51
52
  i18n (1.8.10)
52
53
  concurrent-ruby (~> 1.0)
53
- lino (2.3.0)
54
+ immutable-struct (2.4.1)
55
+ lino (2.5.0)
54
56
  hamster (~> 3.0)
55
57
  open4 (~> 1.3)
56
58
  listen (3.5.1)
@@ -69,9 +71,9 @@ GEM
69
71
  sawyer (~> 0.8.0, >= 0.5.3)
70
72
  open4 (1.3.4)
71
73
  parallel (1.20.1)
72
- parser (3.0.0.0)
74
+ parser (3.0.1.0)
73
75
  ast (~> 2.4.1)
74
- pry (0.14.0)
76
+ pry (0.14.1)
75
77
  coderay (~> 1.1)
76
78
  method_source (~> 1.0)
77
79
  public_suffix (4.0.6)
@@ -126,6 +128,8 @@ GEM
126
128
  unicode-display_width (>= 1.4.0, < 3.0)
127
129
  rubocop-ast (1.4.1)
128
130
  parser (>= 2.7.1.5)
131
+ rubocop-rake (0.5.1)
132
+ rubocop
129
133
  rubocop-rspec (2.2.0)
130
134
  rubocop (~> 1.0)
131
135
  rubocop-ast (>= 1.1.0)
@@ -166,9 +170,10 @@ DEPENDENCIES
166
170
  rake_ssh (~> 0.4)
167
171
  rspec (~> 3.9)
168
172
  rubocop (~> 1.12)
173
+ rubocop-rake (~> 0.5)
169
174
  rubocop-rspec (~> 2.2)
170
175
  ruby-terraform!
171
176
  simplecov (~> 0.21)
172
177
 
173
178
  BUNDLED WITH
174
- 2.2.15
179
+ 2.2.16
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ruby_terraform/version'
2
4
  require 'ruby_terraform/errors'
3
5
  require 'ruby_terraform/options'
@@ -27,21 +29,67 @@ module RubyTerraform
27
29
  clean: RubyTerraform::Commands::Clean,
28
30
  destroy: RubyTerraform::Commands::Destroy,
29
31
  format: RubyTerraform::Commands::Format,
32
+ force_unlock: RubyTerraform::Commands::ForceUnlock,
30
33
  get: RubyTerraform::Commands::Get,
34
+ graph: RubyTerraform::Commands::Graph,
31
35
  import: RubyTerraform::Commands::Import,
32
36
  init: RubyTerraform::Commands::Init,
37
+ login: RubyTerraform::Commands::Login,
38
+ logout: RubyTerraform::Commands::Logout,
33
39
  output: RubyTerraform::Commands::Output,
34
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,
35
45
  refresh: RubyTerraform::Commands::Refresh,
36
46
  remote_config: RubyTerraform::Commands::RemoteConfig,
37
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,
38
57
  validate: RubyTerraform::Commands::Validate,
39
- 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
40
63
  }.each do |method, command_class|
41
- define_method(method) do |opts = {}|
42
- command_class.new.execute(opts)
64
+ define_method(method) do |parameters = {}|
65
+ exec(command_class, 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(
83
+ "Invalid operation '#{parameters[:operation]}' supplied to workspace"
84
+ )
43
85
  end
44
86
  end
87
+
88
+ private
89
+
90
+ def exec(command_class, parameters)
91
+ command_class.new.execute(parameters)
92
+ end
45
93
  end
46
94
  extend ClassMethods
47
95
 
@@ -50,7 +98,7 @@ module RubyTerraform
50
98
  end
51
99
 
52
100
  class Configuration
53
- attr_accessor :binary, :logger, :stdin, :stdout, :stderr
101
+ attr_accessor :binary, :logger, :options, :stdin, :stdout, :stderr
54
102
 
55
103
  def default_logger
56
104
  logger = Logger.new($stdout)
@@ -58,9 +106,14 @@ module RubyTerraform
58
106
  logger
59
107
  end
60
108
 
109
+ def default_options
110
+ Options::Factory.new(Options::DEFINITIONS)
111
+ end
112
+
61
113
  def initialize
62
114
  @binary = 'terraform'
63
115
  @logger = default_logger
116
+ @options = default_options
64
117
  @stdin = ''
65
118
  @stdout = $stdout
66
119
  @stderr = $stderr
@@ -79,5 +132,9 @@ module RubyTerraform
79
132
  def close
80
133
  @targets.each(&:close)
81
134
  end
135
+
136
+ def reopen(*args)
137
+ @targets.each { |t| t.reopen(*args) }
138
+ end
82
139
  end
83
140
  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,39 +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 subcommands(_values)
9
+ include RubyTerraform::Options::Common
10
+
11
+ def subcommands
7
12
  %w[apply]
8
13
  end
9
14
 
10
- # rubocop:disable Metrics/MethodLength
11
- def switches
15
+ def options # rubocop:disable Metrics/MethodLength
12
16
  %w[
13
- -auto-approve
14
17
  -backup
15
- -input
18
+ -compact-warnings
16
19
  -lock
17
20
  -lock-timeout
21
+ -input
22
+ -auto-approve
18
23
  -no-color
24
+ -parallelism
25
+ -refresh
19
26
  -state
27
+ -state-out
20
28
  -target
21
29
  -var
22
30
  -var-file
23
- ]
31
+ ] + super
24
32
  end
25
- # rubocop:enable Metrics/MethodLength
26
33
 
27
- def arguments(values)
28
- [values[:plan] || values[:directory]]
34
+ def arguments(parameters)
35
+ [parameters[:plan] || parameters[:directory]]
29
36
  end
30
37
 
31
- def option_default_values(_opts)
38
+ def parameter_defaults(_parameters)
32
39
  { vars: {}, var_files: [], targets: [] }
33
40
  end
34
41
 
35
- def option_override_values(opts)
36
- { backup: opts[:no_backup] ? '-' : opts[:backup] }
42
+ def parameter_overrides(parameters)
43
+ { backup: parameters[:no_backup] ? '-' : parameters[:backup] }
37
44
  end
38
45
  end
39
46
  end
@@ -1,26 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'lino'
2
4
 
3
5
  require_relative '../errors'
4
- require_relative '../options/factory'
5
6
 
6
7
  module RubyTerraform
7
8
  module Commands
8
9
  class Base
9
- def initialize(
10
- binary: nil, logger: nil, stdin: nil, stdout: nil, stderr: nil
11
- )
12
- @binary = binary || RubyTerraform.configuration.binary
13
- @logger = logger || RubyTerraform.configuration.logger
14
- @stdin = stdin || RubyTerraform.configuration.stdin
15
- @stdout = stdout || RubyTerraform.configuration.stdout
16
- @stderr = stderr || RubyTerraform.configuration.stderr
17
- initialize_command
10
+ def initialize(**opts) # rubocop:disable Metrics/AbcSize
11
+ @binary = opts[:binary] || RubyTerraform.configuration.binary
12
+ @logger = opts[:logger] || RubyTerraform.configuration.logger
13
+ @options = opts[:options] || RubyTerraform.configuration.options
14
+ @stdin = opts[:stdin] || RubyTerraform.configuration.stdin
15
+ @stdout = opts[:stdout] || RubyTerraform.configuration.stdout
16
+ @stderr = opts[:stderr] || RubyTerraform.configuration.stderr
18
17
  end
19
18
 
20
- def execute(opts = {})
21
- do_before(opts)
22
- build_and_execute_command(opts)
23
- do_after(opts)
19
+ def execute(parameters = {})
20
+ do_before(parameters)
21
+ build_and_execute_command(parameters)
22
+ do_after(parameters)
24
23
  rescue Open4::SpawnError
25
24
  message = "Failed while running '#{command_name}'."
26
25
  logger.error(message)
@@ -31,8 +30,9 @@ module RubyTerraform
31
30
 
32
31
  attr_reader :binary, :logger, :stdin, :stdout, :stderr
33
32
 
34
- def build_and_execute_command(opts)
35
- command = build_command(opts)
33
+ def build_and_execute_command(parameters)
34
+ command = build_command(parameters)
35
+
36
36
  logger.debug("Running '#{command}'.")
37
37
  command.execute(
38
38
  stdin: stdin,
@@ -45,54 +45,47 @@ module RubyTerraform
45
45
  self.class.to_s.split('::')[-1].downcase
46
46
  end
47
47
 
48
- def do_before(_opts); end
48
+ def do_before(_parameters); end
49
49
 
50
- def do_after(_opts); end
50
+ def do_after(_parameters); end
51
51
 
52
52
  private
53
53
 
54
- def initialize_command; end
55
-
56
- def build_command(opts)
57
- values = apply_option_defaults_and_overrides(opts)
54
+ def build_command(parameters)
55
+ parameters = resolve_parameters(parameters)
58
56
 
59
57
  Lino::CommandLineBuilder
60
58
  .for_command(@binary)
61
59
  .with_options_after_subcommands
62
60
  .with_option_separator('=')
63
- .with_appliables(options(values))
64
- .with_subcommands(subcommands(values))
65
- .with_arguments(arguments(values))
66
- .build
61
+ .with_appliables(@options.resolve(options, parameters))
62
+ .with_subcommands(subcommands)
63
+ .with_arguments(arguments(parameters)).build
67
64
  end
68
65
 
69
- def apply_option_defaults_and_overrides(opts)
70
- option_default_values(opts)
71
- .merge(opts)
72
- .merge(option_override_values(opts))
66
+ def resolve_parameters(parameters)
67
+ parameter_defaults(parameters)
68
+ .merge(parameters)
69
+ .merge(parameter_overrides(parameters))
73
70
  end
74
71
 
75
- def option_default_values(_values)
72
+ def parameter_defaults(_parameters)
76
73
  {}
77
74
  end
78
75
 
79
- def option_override_values(_values)
76
+ def parameter_overrides(_parameters)
80
77
  {}
81
78
  end
82
79
 
83
- def subcommands(_values)
80
+ def subcommands
84
81
  []
85
82
  end
86
83
 
87
- def options(values)
88
- RubyTerraform::Options::Factory.from(values, switches)
89
- end
90
-
91
- def switches
84
+ def options
92
85
  []
93
86
  end
94
87
 
95
- def arguments(_values)
88
+ def arguments(_parameters)
96
89
  []
97
90
  end
98
91
  end