class BoxGrinder::AWSHelper

Public Instance Methods

endpoints(service_name, aki_pattern) click to toggle source

Currently there is no API call for discovering S3 endpoint addresses but the base is presently the same as the EC2 endpoints, so this somewhat better than manually maintaining the data. S3 = /hd0-.*i386/, EBS = /hd00-.*i386/

# File lib/boxgrinder-build/helpers/aws-helper.rb, line 62
def endpoints(service_name, aki_pattern)
  endpoints = {}
  AWS.memoize do
    @ec2.regions.each do |region|
      endpoints.merge!({
          region.name => {
            :endpoint => "#{service_name}.#{region.name}.amazonaws.com",
            :location => region.name, #or alias?
            :kernel => {
              :i386 => select_aki(region, aki_pattern),
              :x86_64 => select_aki(region, aki_pattern)
            }
          }
      })
    end
  end
end
parse_opts(opts_in, opts_defaults) click to toggle source

Setting value of a key to nil in opts_defaults forces non-nil value of key in opts_in

# File lib/boxgrinder-build/helpers/aws-helper.rb, line 24
def parse_opts(opts_in, opts_defaults)
  diff_id = opts_in.keys - opts_defaults.keys
  raise ArgumentError, "Unrecognised argument(s): #{diff_id.join(", ")}" if diff_id.any?

  (opts_in.keys & opts_defaults.keys).each do |k|
    raise ArgumentError, "Argument #{k.to_s} must not be nil" if opts_defaults[k] == nil and opts_in[k] == nil
  end

  (opts_defaults.keys - opts_in.keys).each do |k|
    raise ArgumentError, "Argument #{k.to_s} must not be nil" if opts_defaults[k] == nil
    opts_in.merge!(k => opts_defaults[k])
  end
  opts_in
end
select_aki(region, pattern) click to toggle source
# File lib/boxgrinder-build/helpers/aws-helper.rb, line 47
def select_aki(region, pattern)
  candidates = region.images.with_owner('amazon').
      filter('manifest-location','*pv-grub*').
      sort().
      reverse

  candidates.each do |image|
    return image.id if image.location =~ pattern
  end
end
wait_with_timeout(cycle_seconds, timeout_seconds) click to toggle source
# File lib/boxgrinder-build/helpers/aws-helper.rb, line 39
def wait_with_timeout(cycle_seconds, timeout_seconds)
  Timeout::timeout(timeout_seconds) do
    while not yield
      sleep cycle_seconds
    end
  end
end