class YleTf::Action::VerifyTerraformVersion

Public Class Methods

new(app) click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 12
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 16
def call(env)
  Logger.debug('Verifying Terraform version')

  version = env[:terraform_version] = terraform_version
  raise(Error, 'Terraform not found') if !version

  Logger.debug("Terraform version: #{version}")

  verify_version(version, requirement_by_yletf, required_by: 'YleTf')
  verify_version(version, requirement_by_config(env), required_by: 'config')

  @app.call(env)
end
requirement_by_config(env) click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 36
def requirement_by_config(env)
  requirement = env[:config].fetch('terraform', 'version_requirement') { nil }
  VersionRequirement.new(requirement)
end
requirement_by_yletf() click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 41
def requirement_by_yletf
  VersionRequirement.new(YleTf::TERRAFORM_VERSION_REQUIREMENT)
end
terraform_version() click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 30
def terraform_version
  v = YleTf::System.read_cmd('terraform', 'version', error_handler: proc {})
  m = /^Terraform v(?<version>[^\s]+)/.match(v)
  m && m[:version]
end
verify_version(version, requirement, **opts) click to toggle source
# File lib/yle_tf/action/verify_terraform_version.rb, line 45
def verify_version(version, requirement, **opts)
  if !requirement.satisfied_by?(version)
    raise Error, "Terraform version '#{requirement}' required by #{opts[:required_by]}, " \
                 "'#{version}' found"
  end
end