mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
987f6abc83
Download CirrOS 0.3.0 image from launchpad (~6.5MB) to /tmp and upload it to Glance (the OpenStack Image Service).
77 lines
2.7 KiB
Ruby
77 lines
2.7 KiB
Ruby
require 'securerandom'
|
|
require 'rubygems/package'
|
|
require 'zlib'
|
|
require 'fog'
|
|
|
|
#
|
|
# Download CirrOS 0.3.0 image from launchpad (~6.5MB) to /tmp
|
|
# and upload it to Glance (the OpenStack Image Service).
|
|
#
|
|
# You will need to source OpenStack credentials since the script
|
|
# reads the following envionment variables:
|
|
#
|
|
# OS_PASSWORD
|
|
# OS_USERNAME
|
|
# OS_AUTH_URL
|
|
# OS_TENANT_NAME
|
|
#
|
|
# Should work with Fog >= 1.9, ruby 1.8.7 and 2.0
|
|
#
|
|
image_url = "https://launchpadlibrarian.net/83305869/cirros-0.3.0-x86_64-uec.tar.gz"
|
|
image_out = File.open("/tmp/cirros-image-#{SecureRandom.hex}", 'wb')
|
|
extract_path = "/tmp/cirros-#{SecureRandom.hex}-dir"
|
|
ami = "#{extract_path}/cirros-0.3.0-x86_64-blank.img"
|
|
aki = "#{extract_path}/cirros-0.3.0-x86_64-vmlinuz"
|
|
ari = "#{extract_path}/cirros-0.3.0-x86_64-initrd"
|
|
|
|
FileUtils.mkdir_p extract_path
|
|
|
|
# Efficient image write
|
|
puts "Downloading Cirros image..."
|
|
streamer = lambda do |chunk, remaining_bytes, total_bytes|
|
|
image_out.write chunk
|
|
end
|
|
Excon.get image_url, :response_block => streamer
|
|
image_out.close
|
|
puts "Image downloaded to #{image_out.path}"
|
|
|
|
puts "Extracting image contents to #{extract_path}..."
|
|
Gem::Package::TarReader.new(Zlib::GzipReader.open(image_out.path)).each do |entry|
|
|
FileUtils.mkdir_p "#{extract_path}/#{File.dirname(entry.full_name)}"
|
|
File.open "#{extract_path}/#{entry.full_name}", 'w' do |f|
|
|
f.write entry.read
|
|
end
|
|
end
|
|
|
|
image_service = Fog::Image.new({
|
|
:provider => 'OpenStack',
|
|
:openstack_api_key => ENV['OS_PASSWORD'],
|
|
:openstack_username => ENV["OS_USERNAME"],
|
|
:openstack_auth_url => ENV["OS_AUTH_URL"] + "/tokens",
|
|
:openstack_tenant => ENV["OS_TENANT_NAME"]
|
|
})
|
|
|
|
puts "Uploading AKI..."
|
|
aki = image_service.images.create :name => 'cirros-0.3.0-amd64-aki',
|
|
:size => File.size(aki),
|
|
:disk_format => 'aki',
|
|
:container_format => 'aki',
|
|
:location => aki
|
|
|
|
puts "Uploading ARI..."
|
|
ari = image_service.images.create :name => 'cirros-0.3.0-amd64-ari',
|
|
:size => File.size(ari),
|
|
:disk_format => 'ari',
|
|
:container_format => 'ari',
|
|
:location => ari
|
|
|
|
puts "Uploading AMI..."
|
|
image_service.images.create :name => 'cirros-0.3.0-amd64',
|
|
:size => File.size(ami),
|
|
:disk_format => 'ami',
|
|
:container_format => 'ami',
|
|
:location => ami,
|
|
:properties => {
|
|
'kernel_id' => aki.id,
|
|
'ramdisk_id' => ari.id
|
|
}
|