Module: Enscalator::Plugins::Debian

Defined in:
lib/enscalator/plugins/debian.rb

Overview

Debian appliance

Constant Summary collapse

STORAGE =

Supported storage types in AWS

[:ebs, :'instance-store']
ARCH =

Supported Debian image architectures

[:x86_64, :i386]
RELEASE =

Supported Debian releases

{ jessie: '8', wheezy: '7' }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.get_mapping(release: :jessie, storage: :ebs, arch: :x86_64) ⇒ Hash

Returns mapping for Debian amis.

Parameters:

  • release (Symbol, String) (defaults to: :jessie)

    a codename or version number

  • storage (Symbol) (defaults to: :ebs)

    storage kind

  • arch (Symbol) (defaults to: :x86_64)

    architecture

Returns:

  • (Hash)

    mapping for Debian amis

Raises:

  • (ArgumentError)

    if release is nil, empty or not one of supported values

  • (ArgumentError)

    if storage is nil, empty or not one of supported values

  • (ArgumentError)

    if arch is nil, empty or not one of supported values



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/enscalator/plugins/debian.rb', line 25

def get_mapping(release: :jessie, storage: :ebs, arch: :x86_64)
  fail ArgumentError, 'release can be either codename or version' unless RELEASE.to_a.flatten.include? release
  fail ArgumentError, "storage can only be one of #{STORAGE}" unless STORAGE.include? storage
  fail ArgumentError, "arch can only be one of #{ARCH}" unless ARCH.include? arch
  version = RELEASE.keys.include?(release) ? release : RELEASE.invert[release]
  url = "https://wiki.debian.org/Cloud/AmazonEC2Image/#{version.capitalize}?action=raw"
  body = open(url) { |f| f.read }
  parse_raw_entries(body.split("\r\n").select { |b| b.starts_with?('||') })
    .select { |i| i.ami =~ /ami[-][a-z0-9]{8}/ }
    .select { |r| r.root_storage == storage.to_s && r.arch == arch.to_s }
    .group_by(&:region)
    .map { |k, v| [k, v.map { |i| [i.virtualization, i.ami] }.to_h] }
    .to_h
    .with_indifferent_access
end

Instance Method Details

#debian_init(storage: :ebs, arch: :x86_64) ⇒ Object

Create new Debian instance

Parameters:

  • storage (String) (defaults to: :ebs)

    storage kind (usually ebs or ephemeral)

  • arch (String) (defaults to: :x86_64)

    architecture (amd64 or i386)



66
67
68
# File 'lib/enscalator/plugins/debian.rb', line 66

def debian_init(storage: :ebs, arch: :x86_64)
  mapping 'AWSDebianAMI', Debian.get_mapping(storage: storage, arch: arch)
end