ruby-terraform 0.65.0.pre.9 → 0.65.0.pre.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +18 -10
  3. data/lib/ruby_terraform.rb +131 -4
  4. data/lib/ruby_terraform/commands.rb +29 -8
  5. data/lib/ruby_terraform/commands/apply.rb +85 -6
  6. data/lib/ruby_terraform/commands/base.rb +21 -18
  7. data/lib/ruby_terraform/commands/clean.rb +2 -2
  8. data/lib/ruby_terraform/commands/destroy.rb +17 -8
  9. data/lib/ruby_terraform/commands/force_unlock.rb +24 -0
  10. data/lib/ruby_terraform/commands/format.rb +11 -9
  11. data/lib/ruby_terraform/commands/get.rb +8 -5
  12. data/lib/ruby_terraform/commands/graph.rb +24 -0
  13. data/lib/ruby_terraform/commands/import.rb +15 -6
  14. data/lib/ruby_terraform/commands/init.rb +16 -6
  15. data/lib/ruby_terraform/commands/login.rb +20 -0
  16. data/lib/ruby_terraform/commands/logout.rb +20 -0
  17. data/lib/ruby_terraform/commands/output.rb +10 -10
  18. data/lib/ruby_terraform/commands/plan.rb +15 -6
  19. data/lib/ruby_terraform/commands/providers.rb +16 -0
  20. data/lib/ruby_terraform/commands/providers_lock.rb +28 -0
  21. data/lib/ruby_terraform/commands/providers_mirror.rb +24 -0
  22. data/lib/ruby_terraform/commands/providers_schema.rb +25 -0
  23. data/lib/ruby_terraform/commands/refresh.rb +19 -6
  24. data/lib/ruby_terraform/commands/remote_config.rb +4 -4
  25. data/lib/ruby_terraform/commands/show.rb +8 -6
  26. data/lib/ruby_terraform/commands/state_list.rb +20 -0
  27. data/lib/ruby_terraform/commands/state_move.rb +34 -0
  28. data/lib/ruby_terraform/commands/state_pull.rb +16 -0
  29. data/lib/ruby_terraform/commands/state_push.rb +24 -0
  30. data/lib/ruby_terraform/commands/state_remove.rb +32 -0
  31. data/lib/ruby_terraform/commands/state_replace_provider.rb +35 -0
  32. data/lib/ruby_terraform/commands/state_show.rb +24 -0
  33. data/lib/ruby_terraform/commands/taint.rb +36 -0
  34. data/lib/ruby_terraform/commands/untaint.rb +37 -0
  35. data/lib/ruby_terraform/commands/validate.rb +8 -9
  36. data/lib/ruby_terraform/commands/workspace_delete.rb +32 -0
  37. data/lib/ruby_terraform/commands/workspace_list.rb +24 -0
  38. data/lib/ruby_terraform/commands/workspace_new.rb +32 -0
  39. data/lib/ruby_terraform/commands/workspace_select.rb +24 -0
  40. data/lib/ruby_terraform/commands/workspace_show.rb +16 -0
  41. data/lib/ruby_terraform/options.rb +26 -3
  42. data/lib/ruby_terraform/options/common.rb +12 -0
  43. data/lib/ruby_terraform/options/definition.rb +172 -0
  44. data/lib/ruby_terraform/options/definitions.rb +103 -0
  45. data/lib/ruby_terraform/options/factory.rb +10 -101
  46. data/lib/ruby_terraform/options/name.rb +11 -19
  47. data/lib/ruby_terraform/options/types.rb +27 -0
  48. data/lib/ruby_terraform/options/types/base.rb +6 -13
  49. data/lib/ruby_terraform/options/types/flag.rb +1 -3
  50. data/lib/ruby_terraform/options/types/standard.rb +1 -27
  51. data/lib/ruby_terraform/options/values.rb +38 -0
  52. data/lib/ruby_terraform/options/values/base.rb +15 -0
  53. data/lib/ruby_terraform/options/values/boolean.rb +13 -11
  54. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  55. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  56. data/lib/ruby_terraform/options/values/string.rb +17 -0
  57. data/lib/ruby_terraform/output.rb +7 -7
  58. data/lib/ruby_terraform/version.rb +1 -1
  59. data/ruby_terraform.gemspec +3 -1
  60. metadata +63 -6
  61. data/lib/ruby_terraform/commands/workspace.rb +0 -26
  62. data/lib/ruby_terraform/options/types/boolean.rb +0 -18
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'immutable-struct'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
- class Name
7
+ class Name < ImmutableStruct.new(:name)
6
8
  def initialize(name)
7
- @name = name
8
- end
9
-
10
- def without_prefix
11
- @name[0] == '-' ? @name[1..] : @name
9
+ super(name: name.to_s)
12
10
  end
13
11
 
14
- def to_s
12
+ def name
15
13
  "-#{without_prefix}"
16
14
  end
17
15
 
18
- def as_key
16
+ alias to_s name
17
+
18
+ def as_singular_key
19
19
  snake_case.to_sym
20
20
  end
21
21
 
@@ -23,20 +23,12 @@ module RubyTerraform
23
23
  "#{snake_case}s".to_sym
24
24
  end
25
25
 
26
- def ==(other)
27
- to_s == other
28
- end
29
-
30
- def eql?(other)
31
- to_s == other
32
- end
26
+ private
33
27
 
34
- def hash
35
- to_s.hash
28
+ def without_prefix
29
+ @name.sub(/^-+/, '')
36
30
  end
37
31
 
38
- private
39
-
40
32
  def snake_case
41
33
  without_prefix.gsub('-', '_')
42
34
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/base'
4
+ require_relative 'types/standard'
5
+ require_relative 'types/flag'
6
+
7
+ module RubyTerraform
8
+ module Options
9
+ module Types
10
+ def self.standard(name, value, **opts)
11
+ Standard.new(name, value, **opts)
12
+ end
13
+
14
+ def self.flag(name, value)
15
+ Flag.new(name, value)
16
+ end
17
+
18
+ def self.resolve(type)
19
+ case type
20
+ when :standard then Types::Standard
21
+ when :flag then Types::Flag
22
+ else type
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,24 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'immutable-struct'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
7
  module Types
6
- class Base
7
- def initialize(name, value)
8
- @name = name
9
- coerce_value(value)
8
+ class Base < ImmutableStruct.new(:name, :value, :separator)
9
+ def initialize(name, value, **opts)
10
+ super(name: name, value: value, separator: opts[:separator])
10
11
  end
11
12
 
12
13
  def apply(_builder)
13
- raise 'not implemented'
14
- end
15
-
16
- private
17
-
18
- attr_reader :name, :value
19
-
20
- def coerce_value(value)
21
- @value = value
14
+ raise 'Not implemented.'
22
15
  end
23
16
  end
24
17
  end
@@ -7,10 +7,8 @@ module RubyTerraform
7
7
  module Options
8
8
  module Types
9
9
  class Flag < Base
10
- include Values::Boolean
11
-
12
10
  def apply(builder)
13
- value ? builder.with_flag(name) : builder
11
+ value.resolve ? builder.with_flag(name) : builder
14
12
  end
15
13
  end
16
14
  end
@@ -9,33 +9,7 @@ module RubyTerraform
9
9
  module Types
10
10
  class Standard < Base
11
11
  def apply(builder)
12
- if value.respond_to?(:keys)
13
- apply_hash(builder)
14
- elsif value.respond_to?(:each)
15
- apply_array(builder)
16
- else
17
- builder.with_option(name, value)
18
- end
19
- end
20
-
21
- private
22
-
23
- def apply_hash(builder)
24
- builder.with_repeated_option(
25
- name,
26
- value.map do |hash_key, hash_value|
27
- "'#{hash_key}=#{as_string(hash_value)}'"
28
- end,
29
- separator: ' '
30
- )
31
- end
32
-
33
- def apply_array(builder)
34
- builder.with_repeated_option(name, value)
35
- end
36
-
37
- def as_string(value)
38
- value.is_a?(String) ? value : JSON.generate(value)
12
+ builder.with_option(name, value.render, separator: separator)
39
13
  end
40
14
  end
41
15
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'values/boolean'
4
+ require_relative 'values/string'
5
+ require_relative 'values/complex'
6
+ require_relative 'values/key_value'
7
+
8
+ module RubyTerraform
9
+ module Options
10
+ module Values
11
+ def self.boolean(value)
12
+ Boolean.new(value)
13
+ end
14
+
15
+ def self.string(value)
16
+ String.new(value)
17
+ end
18
+
19
+ def self.complex(value)
20
+ Complex.new(value)
21
+ end
22
+
23
+ def self.key_value(key, value)
24
+ KeyValue.new(key, value)
25
+ end
26
+
27
+ def self.resolve(type)
28
+ case type
29
+ when :string then Values::String
30
+ when :boolean then Values::Boolean
31
+ when :complex then Values::Complex
32
+ when :key_value then Values::KeyValue
33
+ else type
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Base < ImmutableStruct.new(:value)
9
+ def initialize(value)
10
+ super(value: value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,23 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
7
  module Values
6
- module Boolean
7
- def coerce_value(value)
8
- @value = to_boolean(value)
9
- end
10
-
11
- private
12
-
13
- def to_boolean(value)
14
- return nil if value.nil?
15
- return value if a_boolean?(value)
16
- return true if true_as_string?(value)
8
+ class Boolean < Base
9
+ def resolve
10
+ return nil if @value.nil?
11
+ return @value if a_boolean?(@value)
12
+ return true if true_as_string?(@value)
17
13
 
18
14
  false
19
15
  end
20
16
 
17
+ def render
18
+ resolve.nil? ? nil : resolve.to_s
19
+ end
20
+
21
+ private
22
+
21
23
  def a_boolean?(value)
22
24
  value.is_a?(TrueClass) || value.is_a?(FalseClass)
23
25
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Complex < Base
9
+ def resolve
10
+ @value
11
+ end
12
+
13
+ def render
14
+ @value.is_a?(::String) ? @value : JSON.generate(value)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ module Values
6
+ class KeyValue < ImmutableStruct.new(:key, :value)
7
+ def initialize(key, value)
8
+ super(key: key, value: value)
9
+ end
10
+
11
+ def resolve
12
+ { key => value.resolve }
13
+ end
14
+
15
+ def render
16
+ "'#{key}=#{value.render}'"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class String < Base
9
+ def resolve
10
+ @value.to_s
11
+ end
12
+
13
+ alias render resolve
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,18 +3,18 @@
3
3
  module RubyTerraform
4
4
  class Output
5
5
  class << self
6
- def for(opts)
7
- Dir.chdir(create_config_directory(opts)) do
8
- RubyTerraform.init(backend_config: opts[:backend_config])
9
- RubyTerraform.output(name: opts[:name])
6
+ def for(parameters)
7
+ Dir.chdir(create_config_directory(parameters)) do
8
+ RubyTerraform.init(backend_config: parameters[:backend_config])
9
+ RubyTerraform.output(name: parameters[:name])
10
10
  end
11
11
  end
12
12
 
13
13
  private
14
14
 
15
- def create_config_directory(opts)
16
- source_directory = opts[:source_directory]
17
- work_directory = opts[:work_directory]
15
+ def create_config_directory(parameters)
16
+ source_directory = parameters[:source_directory]
17
+ work_directory = parameters[:work_directory]
18
18
 
19
19
  configuration_directory = File.join(work_directory, source_directory)
20
20
  FileUtils.mkdir_p File.dirname(configuration_directory)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTerraform
4
- VERSION = '0.65.0.pre.9'
4
+ VERSION = '0.65.0.pre.14'
5
5
  end
@@ -38,7 +38,8 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.required_ruby_version = '>= 2.6'
40
40
 
41
- spec.add_dependency 'lino', '>= 2.3'
41
+ spec.add_dependency 'immutable-struct', '>= 2.4'
42
+ spec.add_dependency 'lino', '>= 2.5'
42
43
 
43
44
  spec.add_development_dependency 'bundler', '~> 2.0'
44
45
  spec.add_development_dependency 'faker', '~> 2.17'
@@ -55,4 +56,5 @@ Gem::Specification.new do |spec|
55
56
  spec.add_development_dependency 'rubocop-rake', '~> 0.5'
56
57
  spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
57
58
  spec.add_development_dependency 'simplecov', '~> 0.21'
59
+ spec.add_development_dependency 'yard', '~> 0.9'
58
60
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.65.0.pre.9
4
+ version: 0.65.0.pre.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-06 00:00:00.000000000 Z
11
+ date: 2021-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: immutable-struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: lino
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '2.3'
33
+ version: '2.5'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '2.3'
40
+ version: '2.5'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +248,20 @@ dependencies:
234
248
  - - "~>"
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0.21'
251
+ - !ruby/object:Gem::Dependency
252
+ name: yard
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.9'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.9'
237
265
  description: Wraps the Terraform CLI so that Terraform can be invoked from a Ruby
238
266
  script or Rakefile.
239
267
  email:
@@ -257,27 +285,56 @@ files:
257
285
  - lib/ruby_terraform/commands/base.rb
258
286
  - lib/ruby_terraform/commands/clean.rb
259
287
  - lib/ruby_terraform/commands/destroy.rb
288
+ - lib/ruby_terraform/commands/force_unlock.rb
260
289
  - lib/ruby_terraform/commands/format.rb
261
290
  - lib/ruby_terraform/commands/get.rb
291
+ - lib/ruby_terraform/commands/graph.rb
262
292
  - lib/ruby_terraform/commands/import.rb
263
293
  - lib/ruby_terraform/commands/init.rb
294
+ - lib/ruby_terraform/commands/login.rb
295
+ - lib/ruby_terraform/commands/logout.rb
264
296
  - lib/ruby_terraform/commands/output.rb
265
297
  - lib/ruby_terraform/commands/plan.rb
298
+ - lib/ruby_terraform/commands/providers.rb
299
+ - lib/ruby_terraform/commands/providers_lock.rb
300
+ - lib/ruby_terraform/commands/providers_mirror.rb
301
+ - lib/ruby_terraform/commands/providers_schema.rb
266
302
  - lib/ruby_terraform/commands/refresh.rb
267
303
  - lib/ruby_terraform/commands/remote_config.rb
268
304
  - lib/ruby_terraform/commands/show.rb
305
+ - lib/ruby_terraform/commands/state_list.rb
306
+ - lib/ruby_terraform/commands/state_move.rb
307
+ - lib/ruby_terraform/commands/state_pull.rb
308
+ - lib/ruby_terraform/commands/state_push.rb
309
+ - lib/ruby_terraform/commands/state_remove.rb
310
+ - lib/ruby_terraform/commands/state_replace_provider.rb
311
+ - lib/ruby_terraform/commands/state_show.rb
312
+ - lib/ruby_terraform/commands/taint.rb
313
+ - lib/ruby_terraform/commands/untaint.rb
269
314
  - lib/ruby_terraform/commands/validate.rb
270
- - lib/ruby_terraform/commands/workspace.rb
315
+ - lib/ruby_terraform/commands/workspace_delete.rb
316
+ - lib/ruby_terraform/commands/workspace_list.rb
317
+ - lib/ruby_terraform/commands/workspace_new.rb
318
+ - lib/ruby_terraform/commands/workspace_select.rb
319
+ - lib/ruby_terraform/commands/workspace_show.rb
271
320
  - lib/ruby_terraform/errors.rb
272
321
  - lib/ruby_terraform/errors/execution_error.rb
273
322
  - lib/ruby_terraform/options.rb
323
+ - lib/ruby_terraform/options/common.rb
324
+ - lib/ruby_terraform/options/definition.rb
325
+ - lib/ruby_terraform/options/definitions.rb
274
326
  - lib/ruby_terraform/options/factory.rb
275
327
  - lib/ruby_terraform/options/name.rb
328
+ - lib/ruby_terraform/options/types.rb
276
329
  - lib/ruby_terraform/options/types/base.rb
277
- - lib/ruby_terraform/options/types/boolean.rb
278
330
  - lib/ruby_terraform/options/types/flag.rb
279
331
  - lib/ruby_terraform/options/types/standard.rb
332
+ - lib/ruby_terraform/options/values.rb
333
+ - lib/ruby_terraform/options/values/base.rb
280
334
  - lib/ruby_terraform/options/values/boolean.rb
335
+ - lib/ruby_terraform/options/values/complex.rb
336
+ - lib/ruby_terraform/options/values/key_value.rb
337
+ - lib/ruby_terraform/options/values/string.rb
281
338
  - lib/ruby_terraform/output.rb
282
339
  - lib/ruby_terraform/version.rb
283
340
  - ruby_terraform.gemspec