Class: Kitchen::Driver::Aws::StandardPlatform::Centos

Inherits:
Kitchen::Driver::Aws::StandardPlatform show all
Defined in:
lib/kitchen/driver/aws/standard_platform/centos.rb

Overview

Constant Summary collapse

CENTOS_OWNER_ID =
"125523088429".freeze
PRODUCT_CODES =
{
  "6" => "6x5jmcajty9edm3f211pqjfn2",
  "7" => "aw0evgkw8e5c1q413zgy5pjce",
  # It appears that v8 is not published to the
  # AWS marketplace and hence does not have a product code
}.freeze

Constants inherited from Kitchen::Driver::Aws::StandardPlatform

SUPPORTED_ARCHITECTURES

Instance Attribute Summary

Attributes inherited from Kitchen::Driver::Aws::StandardPlatform

#architecture, #driver, #name, #version

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Kitchen::Driver::Aws::StandardPlatform

#find_image, from_platform_string, #initialize, platforms, #to_s

Constructor Details

This class inherits a constructor from Kitchen::Driver::Aws::StandardPlatform

Class Method Details

.from_image(driver, image) ⇒ Object



77
78
79
80
81
82
# File 'lib/kitchen/driver/aws/standard_platform/centos.rb', line 77

def self.from_image(driver, image)
  if /centos/i.match?(image.name)
    image.name =~ /\b(\d+(\.\d+)?)\b/i
    new(driver, "centos", (Regexp.last_match || [])[1], image.architecture)
  end
end

Instance Method Details

#image_searchObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/kitchen/driver/aws/standard_platform/centos.rb', line 44

def image_search
  # Version 8+ are published directly, not to the AWS marketplace. Use OWNER ID.
  search = {
    "owner-id" => CENTOS_OWNER_ID,
    "name" => ["CentOS #{version}*", "CentOS-#{version}*-GA-*"],
  }

  if version && version.split(".").first.to_i < 8
    # Versions <8 are published to the AWS marketplace and use a different naming convention
    search = {
      "owner-alias" => "aws-marketplace",
      "name" => ["CentOS Linux #{version}*", "CentOS-#{version}*-GA-*"],
    }
    # For versions published to aws-marketplace, additionally filter on product code to
    # avoid non-official AMIs. Can't use CentOS owner ID here, as the owner ID is that of aws marketplace.
    # https://github.com/test-kitchen/kitchen-ec2/issues/456
    PRODUCT_CODES.keys.each do |major_version|
      search["product-code"] = PRODUCT_CODES[major_version] if version.start_with?(major_version)
    end
  end
  search["architecture"] = architecture if architecture
  search
end

#sort_by_version(images) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/kitchen/driver/aws/standard_platform/centos.rb', line 68

def sort_by_version(images)
  # 7.1 -> [ img1, img2, img3 ]
  # 6 -> [ img4, img5 ]
  # ...
  images.group_by { |image| self.class.from_image(driver, image).version }
    .sort_by { |k, _v| (k && k.include?(".") ? k.to_f : "#{k}.999".to_f) }
    .reverse.flat_map { |_k, v| v }
end

#usernameString

default username for this platform’s ami

Returns:

  • (String)


36
37
38
39
40
41
42
# File 'lib/kitchen/driver/aws/standard_platform/centos.rb', line 36

def username
  # Centos 6.x images use root as the username (but the "centos 6"
  # updateable image uses "centos")
  return "root" if version && version.start_with?("6.")

  "centos"
end