Module: Terradactyl::Terraform::VersionManager

Extended by:
Forwardable
Defined in:
lib/terradactyl/terraform/version_manager.rb,
lib/terradactyl/terraform/version_manager/binary.rb,
lib/terradactyl/terraform/version_manager/package.rb,
lib/terradactyl/terraform/version_manager/defaults.rb,
lib/terradactyl/terraform/version_manager/inventory.rb,
lib/terradactyl/terraform/version_manager/downloader.rb

Overview

rubocop:disable Metrics/ModuleLength

Defined Under Namespace

Modules: Package Classes: Binary, Defaults, Downloader, Inventory, InventoryError, VersionManagerError

Constant Summary collapse

ERROR_MISSING =
'Terraform not installed'
ERROR_INVALID_VERSION_STRING =
'Invalid version string'
ERROR_UNRESOLVABLE_VERSION =
'Unresolvable version string'
ERROR_UNPARSEABLE_VERSION =
'Unparsable version string'
SEMVER_EXP_RE =
/
  ^\s*((?<op>(=|<=|>=|>|<|~>))\s+)?
  (?<semver>\d+(\.\d+)?(\.\d+)?(-\w+)?)
/x.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.inventoryObject (readonly)

Returns the value of attribute inventory.



39
40
41
# File 'lib/terradactyl/terraform/version_manager.rb', line 39

def inventory
  @inventory
end

Class Method Details

.binaryObject



45
46
47
48
49
50
# File 'lib/terradactyl/terraform/version_manager.rb', line 45

def binary
  return inventory.validate(current_version) if version
  return inventory[inventory.latest] if inventory.any?

  raise VersionManagerError, ERROR_MISSING
end

.current_versionObject



68
69
70
# File 'lib/terradactyl/terraform/version_manager.rb', line 68

def current_version
  resolve(version)
end

.install(semver = nil, type: Binary) ⇒ Object



56
57
58
59
60
# File 'lib/terradactyl/terraform/version_manager.rb', line 56

def install(semver = nil, type: Binary)
  semver ||= version
  package = type.new(version: resolve(semver))
  package.install
end

.latestObject



52
53
54
# File 'lib/terradactyl/terraform/version_manager.rb', line 52

def latest
  calculate_latest
end

.optionsObject



41
42
43
# File 'lib/terradactyl/terraform/version_manager.rb', line 41

def options
  block_given? ? yield(@options) : @options
end

.remove(semver = nil, type: Binary) ⇒ Object



62
63
64
65
66
# File 'lib/terradactyl/terraform/version_manager.rb', line 62

def remove(semver = nil, type: Binary)
  semver ||= version
  package = type.new(version: resolve(semver))
  package.remove
end

.resolve(expression) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/terradactyl/terraform/version_manager.rb', line 82

def resolve(expression)
  unless (resolution = resolve_expression(expression.to_s.strip))
    raise VersionManagerError, ERROR_UNRESOLVABLE_VERSION
  end

  resolution
end

.versions(local: true) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/terradactyl/terraform/version_manager.rb', line 72

def versions(local: true)
  return inventory.versions if local

  remote_versions
rescue StandardError
  warn "Failed to retrieve releases [#{releases_url}]"
  warn "Falling back to local inventory [#{install_dir}]"
  inventory.versions
end