class Bosh::Cli::PublicStemcells

Constants

PUBLIC_STEMCELLS_BASE_URL

Public Instance Methods

all() click to toggle source
# File lib/cli/public_stemcells.rb, line 19
def all
  response = HTTPClient.new.get(PUBLIC_STEMCELLS_BASE_URL, {'prefix' => 'bosh-stemcell'})
  doc = REXML::Document.new(response.body)
  stemcells_tags = parse_document(doc)
  stemcells = parse_stemcells(stemcells_tags)

  while is_truncated(doc)
    response = HTTPClient.new.get(PUBLIC_STEMCELLS_BASE_URL, {
      'prefix' => 'bosh-stemcell',
      'marker' => stemcells_tags.last.get_text('Key').value
    })

    doc = REXML::Document.new(response.body)
    stemcells_tags = parse_document(doc)
    stemcells += parse_stemcells(stemcells_tags)
  end

  stemcells
end
find(stemcell_filename) click to toggle source
# File lib/cli/public_stemcells.rb, line 15
def find(stemcell_filename)
  all.detect { |stemcell| stemcell.name == stemcell_filename }
end
has_stemcell?(stemcell_filename) click to toggle source
# File lib/cli/public_stemcells.rb, line 11
def has_stemcell?(stemcell_filename)
  all.any? { |stemcell| stemcell.name == stemcell_filename }
end
recent() click to toggle source
# File lib/cli/public_stemcells.rb, line 39
def recent
  stemcell_varietes = all.reject(&:legacy?).group_by(&:variety).values
  stemcell_varietes.map { |stemcells| stemcells.sort_by(&:version).last }
end

Private Instance Methods

is_truncated(doc) click to toggle source
# File lib/cli/public_stemcells.rb, line 59
def is_truncated(doc)
  REXML::XPath.match(doc, "/ListBucketResult/IsTruncated").first.get_text == 'true'
end
parse_document(doc) click to toggle source
# File lib/cli/public_stemcells.rb, line 46
def parse_document(doc)
  REXML::XPath.match(doc, "/ListBucketResult/Contents[Key[text()[not(contains(.,'latest'))]]]")
end
parse_stemcells(stemcell_tags) click to toggle source
# File lib/cli/public_stemcells.rb, line 50
def parse_stemcells(stemcell_tags)
  stemcell_tags.map do |stemcell_tag|
    stemcell_key = stemcell_tag.get_text('Key').value
    stemcell_size = Integer(stemcell_tag.get_text('Size').value)

    PublicStemcell.new(stemcell_key, stemcell_size)
  end
end