Class | BoxGrinder::OpenStackPlugin |
In: |
lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb
lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb |
Parent: | BasePlugin |
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 28 28: def after_init 29: set_default_config_value('host', 'localhost') 30: set_default_config_value('port', '9292') 31: set_default_config_value('schema', 'http') 32: set_default_config_value('overwrite', false) 33: set_default_config_value('public', false) 34: 35: register_supported_platform(:ec2) 36: register_supported_platform(:vmware) 37: register_supported_platform(:virtualbox) 38: 39: @disk_format, @container_format = disk_and_container_format 40: @appliance_name = "#{@appliance_config.name}-#{@appliance_config.version}.#{@appliance_config.release}-#{@disk_format}" 41: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 28 28: def after_init 29: set_default_config_value('host', 'localhost') 30: set_default_config_value('port', '9292') 31: set_default_config_value('schema', 'http') 32: set_default_config_value('overwrite', false) 33: set_default_config_value('public', false) 34: 35: register_supported_platform(:ec2) 36: register_supported_platform(:vmware) 37: register_supported_platform(:virtualbox) 38: 39: @disk_format, @container_format = disk_and_container_format 40: @appliance_name = "#{@appliance_config.name}-#{@appliance_config.version}.#{@appliance_config.release}-#{@disk_format}" 41: end
Removes image from the server for specified id.
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 113 113: def delete_image(id) 114: @log.trace "Removing image with id = #{id}..." 115: RestClient.delete("#{url}/v1/images/#{id}") 116: @log.trace "Image removed." 117: end
Removes image from the server for specified id.
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 113 113: def delete_image(id) 114: @log.trace "Removing image with id = #{id}..." 115: RestClient.delete("#{url}/v1/images/#{id}") 116: @log.trace "Image removed." 117: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 65 65: def disk_and_container_format 66: disk_format = :raw 67: container_format = :bare 68: 69: if @previous_plugin_info[:type] == :platform 70: case @previous_plugin_info[:name] 71: when :ec2: 72: disk_format = :ami 73: container_format = :ami 74: when :vmware: 75: disk_format = :vmdk 76: when :virtualbox: 77: disk_format = :vmdk 78: end 79: end 80: 81: [disk_format, container_format] 82: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 65 65: def disk_and_container_format 66: disk_format = :raw 67: container_format = :bare 68: 69: if @previous_plugin_info[:type] == :platform 70: case @previous_plugin_info[:name] 71: when :ec2: 72: disk_format = :ami 73: container_format = :ami 74: when :vmware: 75: disk_format = :vmdk 76: when :virtualbox: 77: disk_format = :vmdk 78: end 79: end 80: 81: [disk_format, container_format] 82: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 43 43: def execute 44: @log.debug "Checking if '#{@appliance_name}' appliance is already registered..." 45: images = get_images(:name => @appliance_name) 46: 47: unless images.empty? 48: @log.debug "We found one or more appliances with the name '#{@appliance_name}'." 49: 50: unless @plugin_config['overwrite'] 51: @log.error "One or more appliances are already registered with the name '#{@appliance_name}'. You can specify 'overwrite' parameter to remove them." 52: return 53: end 54: 55: @log.info "Removing all images with name '#{@appliance_name}' because 'overwrite' parameter is set to true..." 56: images.each {|i| delete_image(i['id']) } 57: @log.info "Images removed." 58: end 59: 60: disk_format, container_format = disk_and_container_format 61: 62: post_image(:disk_format => disk_format, :container_format => container_format, :public => @plugin_config['public']) 63: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 43 43: def execute 44: @log.debug "Checking if '#{@appliance_name}' appliance is already registered..." 45: images = get_images(:name => @appliance_name) 46: 47: unless images.empty? 48: @log.debug "We found one or more appliances with the name '#{@appliance_name}'." 49: 50: unless @plugin_config['overwrite'] 51: @log.error "One or more appliances are already registered with the name '#{@appliance_name}'. You can specify 'overwrite' parameter to remove them." 52: return 53: end 54: 55: @log.info "Removing all images with name '#{@appliance_name}' because 'overwrite' parameter is set to true..." 56: images.each {|i| delete_image(i['id']) } 57: @log.info "Images removed." 58: end 59: 60: disk_format, container_format = disk_and_container_format 61: 62: post_image(:disk_format => disk_format, :container_format => container_format, :public => @plugin_config['public']) 63: end
Retrieves a list of public images with specified filter. If no filter is specified - all images are returned.
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 121 121: def get_images(params = {}) 122: @log.trace "Listing images with params = #{params.to_json}..." 123: data = JSON.parse(RestClient.get("#{url}/v1/images", :params => params))['images'] 124: @log.trace "Listing done." 125: data 126: end
Retrieves a list of public images with specified filter. If no filter is specified - all images are returned.
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 121 121: def get_images(params = {}) 122: @log.trace "Listing images with params = #{params.to_json}..." 123: data = JSON.parse(RestClient.get("#{url}/v1/images", :params => params))['images'] 124: @log.trace "Listing done." 125: data 126: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 84 84: def post_image(options = {}) 85: options = { 86: :disk_format => :raw, # raw, vhd, vmdk, vdi, qcow2, aki, ari, ami 87: :container_format => :bare, # ovf, bare, aki, ari, ami 88: :public => true 89: }.merge(options) 90: 91: @log.info "Uploading and registering '#{@appliance_name}' appliance in OpenStack..." 92: 93: file_size = File.size(@previous_deliverables.disk) 94: 95: @log.trace "Disk format: #{options[:disk_format]}, container format: #{options[:container_format]}, public: #{options[:public]}, size: #{file_size}." 96: 97: image = JSON.parse(RestClient.post("#{url}/v1/images", 98: File.new(@previous_deliverables.disk, 'rb'), 99: :content_type => 'application/octet-stream', 100: 'x-image-meta-size' => file_size, 101: 'x-image-meta-name' => @appliance_name, 102: 'x-image-meta-disk-format' => options[:disk_format], 103: 'x-image-meta-container-format' => options[:container_format], 104: 'x-image-meta-is-public' => options[:public] ? "true" : false, 105: 'x-image-meta-property-distro' => "#{@appliance_config.os.name.capitalize} #{@appliance_config.os.version}" 106: ))['image'] 107: 108: @log.info "Appliance registered under id = #{image['id']}." 109: end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 84 84: def post_image(options = {}) 85: options = { 86: :disk_format => :raw, # raw, vhd, vmdk, vdi, qcow2, aki, ari, ami 87: :container_format => :bare, # ovf, bare, aki, ari, ami 88: :public => true 89: }.merge(options) 90: 91: @log.info "Uploading and registering '#{@appliance_name}' appliance in OpenStack..." 92: 93: file_size = File.size(@previous_deliverables.disk) 94: 95: @log.trace "Disk format: #{options[:disk_format]}, container format: #{options[:container_format]}, public: #{options[:public]}, size: #{file_size}." 96: 97: image = JSON.parse(RestClient.post("#{url}/v1/images", 98: File.new(@previous_deliverables.disk, 'rb'), 99: :content_type => 'application/octet-stream', 100: 'x-image-meta-size' => file_size, 101: 'x-image-meta-name' => @appliance_name, 102: 'x-image-meta-disk-format' => options[:disk_format], 103: 'x-image-meta-container-format' => options[:container_format], 104: 'x-image-meta-is-public' => options[:public] ? "true" : false, 105: 'x-image-meta-property-distro' => "#{@appliance_config.os.name.capitalize} #{@appliance_config.os.version}" 106: ))['image'] 107: 108: @log.info "Appliance registered under id = #{image['id']}." 109: end