ruby-terraform 0.65.0.pre.7 → 0.65.0.pre.12

Sign up to get free protection for your applications and to get access to all the features.
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: 9addf5887a0f81258238fceea9f31f92f8653b4593c0684e3511723e5d7ee969
4
- data.tar.gz: 660b6fb332e8b93e4ca3f7bb8dc1b48052a2116130273968d148d983b9ee0f4f
3
+ metadata.gz: 1aa09973516552eca1e86476c1a12da268f105a8a78d87ac4366c59e8051e5d4
4
+ data.tar.gz: ccfc2afc555c53f30fb61f429e33d9451102aba3d3a39b68e69ebb546406bc10
5
5
  SHA512:
6
- metadata.gz: 444f51e2e53816404a78770d21873b060b2b117fe36a34516c1c1748db60d87ed10a1fa07bd75e0d7ff010617b1ce7ed3618ede7bc80263539be6454a703b962
7
- data.tar.gz: cbb17a6a9b74be5a809b3d68058f383634482fdc3aa06151fc70b165195f230dd692da4b8494a20ffbe09bb7075acd15d9238b07a8a5dc53c3d4590990369000
6
+ metadata.gz: ed32ad7e4f4b6f98a78cea339ddfc2464d11a892a9ad8d4402a9af7a7d2224bae3cd75384c1a85c210a12efecd40b22bd85b575031ecef390c6da637150756e9
7
+ data.tar.gz: 98304e9c66825275ee0891b244bbe5ee47c3073f0b2c845afbb8cd30bd1297e791ab8367e151ebaf9b2452c0490ad3b55e013416b92f49b6af0dcc305b6ff190
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.7)
5
- lino (>= 2.3)
4
+ ruby-terraform (0.65.0.pre.12)
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