yle_tf 0.4.0 → 1.3.0

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 (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: []