Sha256: df727efbfe9c9c38bd0fd2e81691cdd3a4af2e7138da1fb1473875aef9301af2

Contents?: true

Size: 1.3 KB

Versions: 223

Compression:

Stored size: 1.3 KB

Contents

require 'yaml'
require 'rake/file_utils_ext'
require 'bosh/stemcell/aws/region'

module Bosh::Stemcell
  class Archive
    attr_reader :path

    def initialize(path = '')
      @path = path
      validate_stemcell
    end

    def manifest
      @manifest ||= Psych.load(`tar -Oxzf #{path} stemcell.MF`)
    end

    def name
      manifest.fetch('name')
    end

    def infrastructure
      cloud_properties.fetch('infrastructure')
    end

    def version
      cloud_properties.fetch('version')
    end

    def sha1
      sha1 = manifest.fetch('sha1')
      raise 'sha1 must not be nil' unless sha1
      sha1.to_s
    end

    def light?
      infrastructure == 'aws' && ami_id
    end

    def ami_id(region = Aws::Region::DEFAULT)
      cloud_properties.fetch('ami', {}).fetch(region, nil)
    end

    def extract(tar_options = {}, &block)
      Dir.mktmpdir do |tmp_dir|
        tar_cmd = "tar xzf #{path} --directory #{tmp_dir}"
        tar_cmd << " --exclude=#{tar_options[:exclude]}" if tar_options.has_key?(:exclude)

        Rake::FileUtilsExt.sh(tar_cmd)

        block.call(tmp_dir, manifest)
      end
    end

    private

    def cloud_properties
      manifest.fetch('cloud_properties')
    end

    def validate_stemcell
      raise "Cannot find file `#{path}'" unless File.exists?(path)
    end
  end
end

Version data entries

223 entries across 223 versions & 1 rubygems

Version Path
bosh-stemcell-1.2922.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2915.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2905.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2902.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2891.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2889.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2881.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2865.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2862.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2859.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2858.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2855.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2852.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2849.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2847.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2840.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2839.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2831.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2830.0 lib/bosh/stemcell/archive.rb
bosh-stemcell-1.2829.0 lib/bosh/stemcell/archive.rb