mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[openstack|glance] Added image service example
Download CirrOS 0.3.0 image from launchpad (~6.5MB) to /tmp and upload it to Glance (the OpenStack Image Service).
This commit is contained in:
parent
6988718ab7
commit
987f6abc83
1 changed files with 77 additions and 0 deletions
77
lib/fog/openstack/examples/image/upload-test-image.rb
Normal file
77
lib/fog/openstack/examples/image/upload-test-image.rb
Normal file
|
@ -0,0 +1,77 @@
|
|||
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
|
||||
}
|
Loading…
Add table
Reference in a new issue