class Kitchen::Driver::Aws::StandardPlatform::Windows

docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html

Public Class Methods

from_image(driver, image) click to toggle source
# File lib/kitchen/driver/aws/standard_platform/windows.rb, line 72
def self.from_image(driver, image)
  return unless /Windows/i.match?(image.name)

  # 2008 R2 SP2
  if image.name =~ /(\b\d+)\W*(r\d+)?/i
    major = (Regexp.last_match || [])[1]
    revision = (Regexp.last_match || [])[2]
    service_pack = (Regexp.last_match || [])[1] if image.name =~ /(sp\d+|rtm)/i
    revision = revision.downcase if revision
    service_pack ||= "rtm"
    service_pack = service_pack.downcase
    version = "#{major}#{revision}#{service_pack}"
  end

  new(driver, "windows", version, image.architecture)
end

Public Instance Methods

sort_by_version(images) click to toggle source
# File lib/kitchen/driver/aws/standard_platform/windows.rb, line 63
def sort_by_version(images)
  # 2008r2rtm -> [ img1, img2, img3 ]
  # 2012r2sp1 -> [ img4, img5 ]
  # ...
  images.group_by { |image| self.class.from_image(driver, image).windows_version_parts }
    .sort_by { |version, _platform_images| version }
    .reverse.flat_map { |_version, platform_images| platform_images }
end
username() click to toggle source

default username for this platform’s ami @return [String]

# File lib/kitchen/driver/aws/standard_platform/windows.rb, line 28
def username
  "administrator"
end

Protected Instance Methods

windows_version_parts() click to toggle source

Turn windows version into [ major, revision, service_pack ]

nil -> [ nil, nil, nil ] 2012 -> [ 2012, 0, nil ] 2012r2 -> [ 2012, 2, nil ] 2012r2sp4 -> [ 2012, 2, 4 ] 2012sp4 -> [ 2012, 0, 4 ] 2012rtm -> [ 2012, 0, 0 ] 2016 -> [ 2016, 0, nil ] 2019 -> [ 2019, 0, nil ] 1709 -> [ 1709, 0, nil ] 1803 -> [ 1803, 0, nil ]

# File lib/kitchen/driver/aws/standard_platform/windows.rb, line 103
def windows_version_parts
  version = self.version
  if version
    # windows-server-* -> windows-*
    if version.split("-", 2)[0] == "server"
      version = version.split("-", 2)[1]
    end

    if version =~ /^(\d+)(r\d+)?(sp\d+|rtm)?$/i
      major, revision, service_pack = Regexp.last_match[1..3]
    end
  end

  if major
    # Get major as an integer (2008 -> 2008, 7 -> 7)
    major = major.to_i

    # Get revision as an integer (no revision -> 0, R1 -> 1).
    revision = revision ? revision[1..-1].to_i : 0

    # Turn service_pack into an integer. rtm = 0, spN = N.
    if service_pack
      service_pack = (service_pack.casecmp("rtm") == 0) ? 0 : service_pack[2..-1].to_i
    end
  end

  [major, revision, service_pack]
end

Private Instance Methods

windows_name_filter() click to toggle source
# File lib/kitchen/driver/aws/standard_platform/windows.rb, line 134
def windows_name_filter
  major, revision, service_pack = windows_version_parts
  if [2022, 2019, 2016].include?(major)
    "Windows_Server-#{major}-English-Full-Base-*"
  elsif [1709, 1803].include?(major)
    "Windows_Server-#{major}-English-Core-ContainersLatest-*"
  else
    revision_strings = case revision
                       when nil
                         ["", "R*_"]
                       when 0
                         [""]
                       else
                         ["R#{revision}_"]
                       end

    revision_strings = case service_pack
                       when nil
                         revision_strings.flat_map { |r| ["#{r}RTM", "#{r}SP*"] }
                       when 0
                         revision_strings.map { |r| "#{r}RTM" }
                       else
                         revision_strings.map { |r| "#{r}SP#{service_pack}" }
                       end

    name_filter = revision_strings.map do |r|
      "Windows_Server-#{major || "*"}-#{r}-English-*-Base-*"
    end
    name_filter << "Windows_Server-*-English-Full-Base-*" if major.nil?
    name_filter
  end
end