ruby-terraform 0.65.0.pre.11 → 1.0.0.pre.1

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 +25 -17
  3. data/README.md +148 -414
  4. data/Rakefile +25 -0
  5. data/lib/ruby_terraform.rb +1371 -42
  6. data/lib/ruby_terraform/commands.rb +0 -2
  7. data/lib/ruby_terraform/commands/apply.rb +78 -4
  8. data/lib/ruby_terraform/commands/base.rb +21 -15
  9. data/lib/ruby_terraform/commands/destroy.rb +71 -4
  10. data/lib/ruby_terraform/commands/force_unlock.rb +33 -3
  11. data/lib/ruby_terraform/commands/format.rb +45 -2
  12. data/lib/ruby_terraform/commands/get.rb +35 -2
  13. data/lib/ruby_terraform/commands/graph.rb +48 -2
  14. data/lib/ruby_terraform/commands/import.rb +98 -3
  15. data/lib/ruby_terraform/commands/init.rb +84 -3
  16. data/lib/ruby_terraform/commands/login.rb +26 -2
  17. data/lib/ruby_terraform/commands/logout.rb +23 -2
  18. data/lib/ruby_terraform/commands/output.rb +36 -6
  19. data/lib/ruby_terraform/commands/plan.rb +72 -3
  20. data/lib/ruby_terraform/commands/providers.rb +30 -2
  21. data/lib/ruby_terraform/commands/providers_lock.rb +72 -3
  22. data/lib/ruby_terraform/commands/providers_mirror.rb +44 -2
  23. data/lib/ruby_terraform/commands/providers_schema.rb +21 -2
  24. data/lib/ruby_terraform/commands/refresh.rb +70 -3
  25. data/lib/ruby_terraform/commands/show.rb +26 -3
  26. data/lib/ruby_terraform/commands/state_list.rb +54 -3
  27. data/lib/ruby_terraform/commands/state_move.rb +64 -6
  28. data/lib/ruby_terraform/commands/state_pull.rb +24 -2
  29. data/lib/ruby_terraform/commands/state_push.rb +49 -3
  30. data/lib/ruby_terraform/commands/state_remove.rb +55 -7
  31. data/lib/ruby_terraform/commands/state_replace_provider.rb +39 -6
  32. data/lib/ruby_terraform/commands/state_show.rb +26 -2
  33. data/lib/ruby_terraform/commands/taint.rb +63 -2
  34. data/lib/ruby_terraform/commands/untaint.rb +55 -2
  35. data/lib/ruby_terraform/commands/validate.rb +51 -6
  36. data/lib/ruby_terraform/commands/workspace_delete.rb +29 -7
  37. data/lib/ruby_terraform/commands/workspace_list.rb +21 -6
  38. data/lib/ruby_terraform/commands/workspace_new.rb +28 -7
  39. data/lib/ruby_terraform/commands/workspace_select.rb +23 -7
  40. data/lib/ruby_terraform/commands/workspace_show.rb +17 -2
  41. data/lib/ruby_terraform/options.rb +26 -4
  42. data/lib/ruby_terraform/options/definition.rb +174 -0
  43. data/lib/ruby_terraform/options/definitions.rb +112 -0
  44. data/lib/ruby_terraform/options/factory.rb +10 -102
  45. data/lib/ruby_terraform/options/{common.rb → global.rb} +2 -1
  46. data/lib/ruby_terraform/options/name.rb +11 -19
  47. data/lib/ruby_terraform/options/types.rb +26 -0
  48. data/lib/ruby_terraform/options/types/flag.rb +8 -6
  49. data/lib/ruby_terraform/options/types/standard.rb +17 -29
  50. data/lib/ruby_terraform/options/values.rb +38 -0
  51. data/lib/ruby_terraform/options/values/base.rb +15 -0
  52. data/lib/ruby_terraform/options/values/boolean.rb +13 -11
  53. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  54. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  55. data/lib/ruby_terraform/options/values/string.rb +17 -0
  56. data/lib/ruby_terraform/version.rb +1 -1
  57. data/ruby_terraform.gemspec +3 -1
  58. metadata +43 -11
  59. data/lib/ruby_terraform/commands/clean.rb +0 -26
  60. data/lib/ruby_terraform/commands/remote_config.rb +0 -25
  61. data/lib/ruby_terraform/options/types/base.rb +0 -26
  62. data/lib/ruby_terraform/options/types/boolean.rb +0 -18
@@ -2,7 +2,8 @@
2
2
 
3
3
  module RubyTerraform
4
4
  module Options
5
- module Common
5
+ module Global
6
+ # @!visibility private
6
7
  def options
7
8
  %w[-chdir]
8
9
  end
@@ -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,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/standard'
4
+ require_relative 'types/flag'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ module Types
9
+ def self.standard(name, value, **opts)
10
+ Standard.new(name, value, **opts)
11
+ end
12
+
13
+ def self.flag(name, value)
14
+ Flag.new(name, value)
15
+ end
16
+
17
+ def self.resolve(type)
18
+ case type
19
+ when :standard then Types::Standard
20
+ when :flag then Types::Flag
21
+ else type
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
4
- require_relative '../values/boolean'
5
-
6
3
  module RubyTerraform
7
4
  module Options
8
5
  module Types
9
- class Flag < Base
10
- include Values::Boolean
6
+ class Flag < ImmutableStruct.new(
7
+ :name,
8
+ :value
9
+ )
10
+ def initialize(name, value, **_opts)
11
+ super(name: name, value: value)
12
+ end
11
13
 
12
14
  def apply(builder)
13
- value ? builder.with_flag(name) : builder
15
+ value.resolve ? builder.with_flag(name) : builder
14
16
  end
15
17
  end
16
18
  end
@@ -1,42 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
-
5
- require_relative 'base'
6
-
7
3
  module RubyTerraform
8
4
  module Options
9
5
  module Types
10
- class Standard < Base
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
6
+ class Standard < ImmutableStruct.new(
7
+ :name,
8
+ :value,
9
+ :separator,
10
+ :placement
11
+ )
12
+ def initialize(name, value, **opts)
13
+ super(
14
+ name: name, value: value,
15
+ separator: opts[:separator],
16
+ placement: opts[:placement]
17
+ )
19
18
  end
20
19
 
21
- private
22
-
23
- def apply_hash(builder)
24
- builder.with_repeated_option(
20
+ def apply(builder)
21
+ builder.with_option(
25
22
  name,
26
- value.map do |hash_key, hash_value|
27
- "'#{hash_key}=#{as_string(hash_value)}'"
28
- end,
29
- separator: ' '
23
+ value.render,
24
+ separator: separator,
25
+ placement: placement
30
26
  )
31
27
  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)
39
- end
40
28
  end
41
29
  end
42
30
  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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTerraform
4
- VERSION = '0.65.0.pre.11'
4
+ VERSION = '1.0.0.pre.1'
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.7'
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.11
4
+ version: 1.0.0.pre.1
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-05-08 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.7'
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.7'
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:
@@ -255,7 +283,6 @@ files:
255
283
  - lib/ruby_terraform/commands.rb
256
284
  - lib/ruby_terraform/commands/apply.rb
257
285
  - lib/ruby_terraform/commands/base.rb
258
- - lib/ruby_terraform/commands/clean.rb
259
286
  - lib/ruby_terraform/commands/destroy.rb
260
287
  - lib/ruby_terraform/commands/force_unlock.rb
261
288
  - lib/ruby_terraform/commands/format.rb
@@ -272,7 +299,6 @@ files:
272
299
  - lib/ruby_terraform/commands/providers_mirror.rb
273
300
  - lib/ruby_terraform/commands/providers_schema.rb
274
301
  - lib/ruby_terraform/commands/refresh.rb
275
- - lib/ruby_terraform/commands/remote_config.rb
276
302
  - lib/ruby_terraform/commands/show.rb
277
303
  - lib/ruby_terraform/commands/state_list.rb
278
304
  - lib/ruby_terraform/commands/state_move.rb
@@ -292,14 +318,20 @@ files:
292
318
  - lib/ruby_terraform/errors.rb
293
319
  - lib/ruby_terraform/errors/execution_error.rb
294
320
  - lib/ruby_terraform/options.rb
295
- - lib/ruby_terraform/options/common.rb
321
+ - lib/ruby_terraform/options/definition.rb
322
+ - lib/ruby_terraform/options/definitions.rb
296
323
  - lib/ruby_terraform/options/factory.rb
324
+ - lib/ruby_terraform/options/global.rb
297
325
  - lib/ruby_terraform/options/name.rb
298
- - lib/ruby_terraform/options/types/base.rb
299
- - lib/ruby_terraform/options/types/boolean.rb
326
+ - lib/ruby_terraform/options/types.rb
300
327
  - lib/ruby_terraform/options/types/flag.rb
301
328
  - lib/ruby_terraform/options/types/standard.rb
329
+ - lib/ruby_terraform/options/values.rb
330
+ - lib/ruby_terraform/options/values/base.rb
302
331
  - lib/ruby_terraform/options/values/boolean.rb
332
+ - lib/ruby_terraform/options/values/complex.rb
333
+ - lib/ruby_terraform/options/values/key_value.rb
334
+ - lib/ruby_terraform/options/values/string.rb
303
335
  - lib/ruby_terraform/output.rb
304
336
  - lib/ruby_terraform/version.rb
305
337
  - ruby_terraform.gemspec