yle_tf 0.4.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tf +2 -1
  3. data/lib/yle_tf.rb +4 -0
  4. data/lib/yle_tf/action.rb +4 -0
  5. data/lib/yle_tf/action/builder.rb +2 -0
  6. data/lib/yle_tf/action/command.rb +4 -2
  7. data/lib/yle_tf/action/copy_root_module.rb +2 -0
  8. data/lib/yle_tf/action/generate_vars_file.rb +2 -0
  9. data/lib/yle_tf/action/load_config.rb +9 -1
  10. data/lib/yle_tf/action/terraform_init.rb +31 -33
  11. data/lib/yle_tf/action/tf_hooks.rb +9 -5
  12. data/lib/yle_tf/action/tmpdir.rb +3 -1
  13. data/lib/yle_tf/action/verify_terraform_version.rb +19 -6
  14. data/lib/yle_tf/action/verify_tf_env.rb +2 -0
  15. data/lib/yle_tf/action/verify_yle_tf_version.rb +36 -0
  16. data/lib/yle_tf/action/write_terraformrc_defaults.rb +4 -2
  17. data/lib/yle_tf/backend.rb +42 -0
  18. data/lib/yle_tf/cli.rb +3 -1
  19. data/lib/yle_tf/config.rb +25 -9
  20. data/lib/yle_tf/config/defaults.rb +22 -11
  21. data/lib/yle_tf/config/erb.rb +2 -0
  22. data/lib/yle_tf/config/file.rb +2 -0
  23. data/lib/yle_tf/config/loader.rb +89 -59
  24. data/lib/yle_tf/config/migration.rb +117 -0
  25. data/lib/yle_tf/error.rb +2 -0
  26. data/lib/yle_tf/helpers/hash.rb +22 -0
  27. data/lib/yle_tf/logger.rb +2 -10
  28. data/lib/yle_tf/logger/colorize.rb +2 -0
  29. data/lib/yle_tf/plugin.rb +6 -2
  30. data/lib/yle_tf/plugin/action_hook.rb +2 -0
  31. data/lib/yle_tf/plugin/loader.rb +9 -2
  32. data/lib/yle_tf/plugin/manager.rb +3 -0
  33. data/lib/yle_tf/system.rb +5 -2
  34. data/lib/yle_tf/system/io_handlers.rb +5 -1
  35. data/lib/yle_tf/system/output_logger.rb +2 -0
  36. data/lib/yle_tf/system/tf_hook_output_logger.rb +2 -0
  37. data/lib/yle_tf/tf_hook.rb +11 -9
  38. data/lib/yle_tf/tf_hook/runner.rb +2 -0
  39. data/lib/yle_tf/vars_file.rb +16 -3
  40. data/lib/yle_tf/version.rb +3 -1
  41. data/lib/yle_tf/version_requirement.rb +2 -5
  42. data/lib/yle_tf_plugins/backends/{s3 → __default}/plugin.rb +6 -4
  43. data/lib/yle_tf_plugins/backends/file/{command.rb → backend.rb} +12 -13
  44. data/lib/yle_tf_plugins/backends/file/plugin.rb +4 -2
  45. data/lib/yle_tf_plugins/commands/__default/command.rb +2 -0
  46. data/lib/yle_tf_plugins/commands/__default/plugin.rb +2 -0
  47. data/lib/yle_tf_plugins/commands/_config/command.rb +2 -0
  48. data/lib/yle_tf_plugins/commands/_config/plugin.rb +2 -0
  49. data/lib/yle_tf_plugins/commands/_shell/command.rb +2 -0
  50. data/lib/yle_tf_plugins/commands/_shell/plugin.rb +2 -0
  51. data/lib/yle_tf_plugins/commands/help/command.rb +2 -0
  52. data/lib/yle_tf_plugins/commands/help/plugin.rb +2 -0
  53. data/lib/yle_tf_plugins/commands/version/command.rb +2 -0
  54. data/lib/yle_tf_plugins/commands/version/plugin.rb +2 -0
  55. metadata +61 -20
  56. data/lib/yle_tf/backend_config.rb +0 -41
  57. data/lib/yle_tf_plugins/backends/file/config.rb +0 -17
  58. data/lib/yle_tf_plugins/backends/s3/command.rb +0 -19
  59. data/vendor/logger_level_patch.rb +0 -29
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class YleTf
2
4
  class Plugin
3
5
  class ActionHook
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
 
3
5
  class YleTf
@@ -13,7 +15,7 @@ class YleTf
13
15
 
14
16
  def self.load_core_plugins
15
17
  core_plugins.each do |plugin_file|
16
- Logger.debug("Loading core plugin: #{File.basename(plugin_file, '.rb')}")
18
+ Logger.debug { "Loading core plugin: #{core_plugin_name(plugin_file)}" }
17
19
  load(plugin_file)
18
20
  end
19
21
  end
@@ -33,7 +35,12 @@ class YleTf
33
35
  end
34
36
 
35
37
  def self.core_plugins
36
- Dir.glob(File.expand_path('../../../yle_tf_plugins/**/plugin.rb', __FILE__))
38
+ Dir.glob(File.expand_path('../../yle_tf_plugins/**/plugin.rb', __dir__))
39
+ end
40
+
41
+ def self.core_plugin_name(path)
42
+ m = %r{.*/yle_tf_plugins/(?<name>.+?)/plugin\.rb$}.match(path)
43
+ m ? m[:name] : path
37
44
  end
38
45
 
39
46
  def self.bundler_plugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
 
3
5
  class YleTf
@@ -42,6 +44,7 @@ class YleTf
42
44
  registered.each do |plugin|
43
45
  backends.merge!(plugin.backends)
44
46
  end
47
+ backends.default = backends.delete(DEFAULT_BACKEND)
45
48
  end
46
49
  end
47
50
  end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'English'
2
4
  require 'open3'
3
5
  require 'shellwords'
6
+ require 'stringio'
4
7
  require 'thwait'
5
8
  require 'yle_tf/error'
6
9
  require 'yle_tf/logger'
@@ -14,7 +17,7 @@ class YleTf
14
17
  DEFAULT_ERROR_HANDLER = ->(_exit_code, error) { raise error }.freeze
15
18
 
16
19
  DEFAULT_IO_HANDLERS = {
17
- stdin: :dev_null,
20
+ stdin: :dev_null,
18
21
  stdout: :info,
19
22
  stderr: :error
20
23
  }.freeze
@@ -44,7 +47,7 @@ class YleTf
44
47
 
45
48
  def self.read_cmd(*args, **opts)
46
49
  buffer = StringIO.new
47
- cmd(*args, opts.merge(stdout: buffer))
50
+ cmd(*args, **opts.merge(stdout: buffer))
48
51
  buffer.string
49
52
  end
50
53
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/error'
2
4
  require 'yle_tf/logger'
3
5
  require 'yle_tf/system/output_logger'
@@ -22,6 +24,7 @@ class YleTf
22
24
  if !handler.respond_to?(:call)
23
25
  raise YleTf::Error, "Unknown input handler #{handler.inspect}"
24
26
  end
27
+
25
28
  handler
26
29
  end
27
30
  end
@@ -42,6 +45,7 @@ class YleTf
42
45
  if !handler.respond_to?(:call)
43
46
  raise YleTf::Error, "Unknown output handler #{handler.inspect}"
44
47
  end
48
+
45
49
  handler
46
50
  end
47
51
  end
@@ -104,7 +108,7 @@ class YleTf
104
108
  while (data = source.readpartial(BLOCK_SIZE))
105
109
  target.write(data)
106
110
  end
107
- rescue EOFError # rubocop:disable Lint/HandleExceptions
111
+ rescue EOFError # rubocop:disable Lint/SuppressedException
108
112
  # All read
109
113
  rescue IOError => e
110
114
  YleTf::Logger.debug e.full_message
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
 
3
5
  class YleTf
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
  require 'yle_tf/system/output_logger'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
  require 'tmpdir'
3
5
 
@@ -14,8 +16,8 @@ class YleTf
14
16
  def self.from_config(config, tf_env)
15
17
  TfHook.new(
16
18
  description: config['description'],
17
- source: config['source'],
18
- vars: merge_vars(config['vars'], tf_env)
19
+ source: config['source'],
20
+ vars: merge_vars(config['vars'], tf_env)
19
21
  )
20
22
  end
21
23
 
@@ -23,7 +25,7 @@ class YleTf
23
25
  def self.from_file(path)
24
26
  TfHook.new(
25
27
  description: File.basename(path),
26
- path: path
28
+ path: path
27
29
  )
28
30
  end
29
31
 
@@ -43,10 +45,10 @@ class YleTf
43
45
  Logger.info("Running hook '#{description}'")
44
46
  YleTf::System.cmd(
45
47
  path,
46
- env: vars.merge(tf_vars),
48
+ env: vars.merge(tf_vars),
47
49
  progname: File.basename(path),
48
- stdout: System::TfHookOutputLogger.new(:info),
49
- stderr: System::TfHookOutputLogger.new(:error)
50
+ stdout: System::TfHookOutputLogger.new(:info),
51
+ stderr: System::TfHookOutputLogger.new(:error)
50
52
  )
51
53
  ensure
52
54
  delete_tmpdir
@@ -57,9 +59,9 @@ class YleTf
57
59
  raise Error, "Invalid or missing `source` for hook '#{description}'" if !m
58
60
 
59
61
  {
60
- uri: m[:uri],
62
+ uri: m[:uri],
61
63
  path: m[:path],
62
- ref: m[:ref] || 'master'
64
+ ref: m[:ref] || 'master'
63
65
  }
64
66
  end
65
67
 
@@ -83,7 +85,7 @@ class YleTf
83
85
  end
84
86
 
85
87
  def delete_tmpdir
86
- FileUtils.rm_r(@tmpdir) if @tmpdir && Dir.exist?(@tmpdir)
88
+ FileUtils.rm_rf(@tmpdir, secure: true) if @tmpdir && Dir.exist?(@tmpdir)
87
89
  @tmpdir = nil
88
90
  end
89
91
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
  require 'yle_tf/tf_hook'
3
5
 
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class YleTf
2
4
  class VarsFile
3
- ENV_DIR = 'envs'.freeze
5
+ ENV_DIR = 'envs'
4
6
 
5
7
  # Returns the env specific tfvars file path if it exists
6
8
  def self.find_env_vars_file(config)
@@ -10,7 +12,7 @@ class YleTf
10
12
 
11
13
  # Returns all envs that have tfvars files
12
14
  def self.list_all_envs(config)
13
- Dir.glob("#{config.module_dir}/#{ENV_DIR}/*.tfvars").map do |path|
15
+ Dir.glob("#{config.module_dir}/#{ENV_DIR}/*.tfvars").sort.map do |path|
14
16
  File.basename(path, '.tfvars')
15
17
  end
16
18
  end
@@ -36,9 +38,20 @@ class YleTf
36
38
  File.open(path, 'a') do |file|
37
39
  file.puts # ensure we don't append to an existing line
38
40
  vars.each do |key, value|
39
- file.puts %(#{key} = "#{value}")
41
+ file.puts "#{key} = #{eval_value(value)}"
40
42
  end
41
43
  end
42
44
  end
45
+
46
+ def eval_value(value)
47
+ case value
48
+ when Hash
49
+ %({ #{value.map { |k, v| "#{k} = #{eval_value(v)}" }.join(', ')} })
50
+ when Array
51
+ %([ #{value.map { |item| eval_value(item) }.join(', ')} ])
52
+ else
53
+ %("#{value}")
54
+ end
55
+ end
43
56
  end
44
57
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class YleTf
2
- VERSION = '0.4.0'.freeze
4
+ VERSION = '1.3.0'
3
5
  end
@@ -1,13 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
 
3
5
  class YleTf
4
6
  # Helper class for comparing versions
5
7
  class VersionRequirement
6
- # Checks if the specified Terrform version is older than 0.9
7
- def self.pre_0_9?(terraform_version)
8
- new('< 0.9.0-beta').satisfied_by?(terraform_version)
9
- end
10
-
11
8
  attr_reader :requirement
12
9
 
13
10
  def initialize(requirement)
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
4
+ require 'yle_tf/backend'
2
5
 
3
6
  module YleTfPlugins
4
7
  module Backends
5
- module S3
8
+ module Default
6
9
  class Plugin < YleTf::Plugin
7
10
  register
8
11
 
9
- backend('s3') do
10
- require_relative 'command'
11
- Command
12
+ backend(DEFAULT_BACKEND) do
13
+ YleTf::Backend
12
14
  end
13
15
  end
14
16
  end
@@ -1,25 +1,24 @@
1
- require_relative 'config'
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+ require 'yle_tf/backend'
5
+ require 'yle_tf/logger'
2
6
 
3
7
  module YleTfPlugins
4
8
  module Backends
5
9
  module File
6
- class Command
7
- def backend_config(config)
8
- local_path = Pathname.pwd.join('terraform.tfstate')
9
- tfstate_path = tfstate_path(config)
10
-
10
+ class Backend < YleTf::Backend
11
+ # Symlinks local "terraform.tfstate" to the specified path
12
+ def configure
11
13
  YleTf::Logger.info("Symlinking state to '#{tfstate_path}'")
14
+ local_path = Pathname.pwd.join('terraform.tfstate')
12
15
  local_path.make_symlink(tfstate_path)
13
- tfstate_path.write(tfstate_template, perm: 0o644) if !tfstate_path.exist?
14
16
 
15
- Config.new(
16
- 'file',
17
- 'file' => tfstate_path.to_s
18
- )
17
+ tfstate_path.write(tfstate_template, perm: 0o644) if !tfstate_path.exist?
19
18
  end
20
19
 
21
- def tfstate_path(config)
22
- config.module_dir.join(config.fetch('backend', 'file'))
20
+ def tfstate_path
21
+ @tfstate_path ||= config.module_dir.join(config.fetch('backend', 'file', 'path'))
23
22
  end
24
23
 
25
24
  def tfstate_template
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
@@ -7,8 +9,8 @@ module YleTfPlugins
7
9
  register
8
10
 
9
11
  backend('file') do
10
- require_relative 'command'
11
- Command
12
+ require_relative 'backend'
13
+ Backend
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
  require 'yle_tf/system'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/logger'
2
4
 
3
5
  module YleTfPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module YleTfPlugins
2
4
  module CommandShell
3
5
  class Command
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'optparse'
2
4
 
3
5
  require 'yle_tf/system'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf/system'
2
4
  require 'yle_tf/version'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yle_tf'
2
4
 
3
5
  module YleTfPlugins
metadata CHANGED
@@ -1,59 +1,101 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yle_tf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yleisradio
8
8
  - Teemu Matilainen
9
9
  - Antti Forsell
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-03-12 00:00:00.000000000 Z
13
+ date: 2020-10-12 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thwait
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: 0.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: 0.2.0
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: bundler
17
31
  requirement: !ruby/object:Gem::Requirement
18
32
  requirements:
19
33
  - - "~>"
20
34
  - !ruby/object:Gem::Version
21
- version: '1.13'
35
+ version: '2.0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: guard-rspec
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.7'
22
50
  type: :development
23
51
  prerelease: false
24
52
  version_requirements: !ruby/object:Gem::Requirement
25
53
  requirements:
26
54
  - - "~>"
27
55
  - !ruby/object:Gem::Version
28
- version: '1.13'
56
+ version: '4.7'
29
57
  - !ruby/object:Gem::Dependency
30
58
  name: rake
31
59
  requirement: !ruby/object:Gem::Requirement
32
60
  requirements:
33
61
  - - "~>"
34
62
  - !ruby/object:Gem::Version
35
- version: '12.0'
63
+ version: '13.0'
36
64
  type: :development
37
65
  prerelease: false
38
66
  version_requirements: !ruby/object:Gem::Requirement
39
67
  requirements:
40
68
  - - "~>"
41
69
  - !ruby/object:Gem::Version
42
- version: '12.0'
70
+ version: '13.0'
43
71
  - !ruby/object:Gem::Dependency
44
72
  name: rspec
45
73
  requirement: !ruby/object:Gem::Requirement
46
74
  requirements:
47
75
  - - "~>"
48
76
  - !ruby/object:Gem::Version
49
- version: '3.5'
77
+ version: '3.8'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '3.8'
85
+ - !ruby/object:Gem::Dependency
86
+ name: serverspec
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '2.41'
50
92
  type: :development
51
93
  prerelease: false
52
94
  version_requirements: !ruby/object:Gem::Requirement
53
95
  requirements:
54
96
  - - "~>"
55
97
  - !ruby/object:Gem::Version
56
- version: '3.5'
98
+ version: '2.41'
57
99
  description: Tooling for Terraform to support environments, hooks, etc.
58
100
  email:
59
101
  - devops@yle.fi
@@ -77,15 +119,18 @@ files:
77
119
  - lib/yle_tf/action/tmpdir.rb
78
120
  - lib/yle_tf/action/verify_terraform_version.rb
79
121
  - lib/yle_tf/action/verify_tf_env.rb
122
+ - lib/yle_tf/action/verify_yle_tf_version.rb
80
123
  - lib/yle_tf/action/write_terraformrc_defaults.rb
81
- - lib/yle_tf/backend_config.rb
124
+ - lib/yle_tf/backend.rb
82
125
  - lib/yle_tf/cli.rb
83
126
  - lib/yle_tf/config.rb
84
127
  - lib/yle_tf/config/defaults.rb
85
128
  - lib/yle_tf/config/erb.rb
86
129
  - lib/yle_tf/config/file.rb
87
130
  - lib/yle_tf/config/loader.rb
131
+ - lib/yle_tf/config/migration.rb
88
132
  - lib/yle_tf/error.rb
133
+ - lib/yle_tf/helpers/hash.rb
89
134
  - lib/yle_tf/logger.rb
90
135
  - lib/yle_tf/logger/colorize.rb
91
136
  - lib/yle_tf/plugin.rb
@@ -101,11 +146,9 @@ files:
101
146
  - lib/yle_tf/vars_file.rb
102
147
  - lib/yle_tf/version.rb
103
148
  - lib/yle_tf/version_requirement.rb
104
- - lib/yle_tf_plugins/backends/file/command.rb
105
- - lib/yle_tf_plugins/backends/file/config.rb
149
+ - lib/yle_tf_plugins/backends/__default/plugin.rb
150
+ - lib/yle_tf_plugins/backends/file/backend.rb
106
151
  - lib/yle_tf_plugins/backends/file/plugin.rb
107
- - lib/yle_tf_plugins/backends/s3/command.rb
108
- - lib/yle_tf_plugins/backends/s3/plugin.rb
109
152
  - lib/yle_tf_plugins/commands/__default/command.rb
110
153
  - lib/yle_tf_plugins/commands/__default/plugin.rb
111
154
  - lib/yle_tf_plugins/commands/_config/command.rb
@@ -117,7 +160,6 @@ files:
117
160
  - lib/yle_tf_plugins/commands/version/command.rb
118
161
  - lib/yle_tf_plugins/commands/version/plugin.rb
119
162
  - vendor/hash_deep_merge.rb
120
- - vendor/logger_level_patch.rb
121
163
  - vendor/middleware/LICENSE
122
164
  - vendor/middleware/builder.rb
123
165
  - vendor/middleware/runner.rb
@@ -125,7 +167,7 @@ homepage: https://github.com/Yleisradio/yle_tf
125
167
  licenses:
126
168
  - MIT
127
169
  metadata: {}
128
- post_install_message:
170
+ post_install_message:
129
171
  rdoc_options: []
130
172
  require_paths:
131
173
  - lib
@@ -133,16 +175,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
175
  requirements:
134
176
  - - ">="
135
177
  - !ruby/object:Gem::Version
136
- version: '2.2'
178
+ version: '2.3'
137
179
  required_rubygems_version: !ruby/object:Gem::Requirement
138
180
  requirements:
139
181
  - - ">="
140
182
  - !ruby/object:Gem::Version
141
183
  version: '0'
142
184
  requirements: []
143
- rubyforge_project:
144
- rubygems_version: 2.7.3
145
- signing_key:
185
+ rubygems_version: 3.1.2
186
+ signing_key:
146
187
  specification_version: 4
147
188
  summary: Tooling for Terraform
148
189
  test_files: []