# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 28 def after_init set_default_config_value('host', 'localhost') set_default_config_value('port', '9292') set_default_config_value('schema', 'http') set_default_config_value('overwrite', false) set_default_config_value('public', false) register_supported_platform(:ec2) register_supported_platform(:vmware) register_supported_platform(:virtualbox) @disk_format, @container_format = disk_and_container_format @appliance_name = "#{@appliance_config.name}-#{@appliance_config.version}.#{@appliance_config.release}-#{@disk_format}" end
Removes image from the server for specified id.
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 113 def delete_image(id) @log.trace "Removing image with id = #{id}..." RestClient.delete("#{url}/v1/images/#{id}") @log.trace "Image removed." end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 65 def disk_and_container_format disk_format = :raw container_format = :bare if @previous_plugin_info[:type] == :platform case @previous_plugin_info[:name] when :ec2 disk_format = :ami container_format = :ami when :vmware disk_format = :vmdk when :virtualbox disk_format = :vmdk end end [disk_format, container_format] end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 43 def execute @log.debug "Checking if '#{@appliance_name}' appliance is already registered..." images = get_images(:name => @appliance_name) unless images.empty? @log.debug "We found one or more appliances with the name '#{@appliance_name}'." unless @plugin_config['overwrite'] @log.error "One or more appliances are already registered with the name '#{@appliance_name}'. You can specify 'overwrite' parameter to remove them." return end @log.info "Removing all images with name '#{@appliance_name}' because 'overwrite' parameter is set to true..." images.each {|i| delete_image(i['id']) } @log.info "Images removed." end disk_format, container_format = disk_and_container_format post_image(:disk_format => disk_format, :container_format => container_format, :public => @plugin_config['public']) 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 def get_images(params = {}) @log.trace "Listing images with params = #{params.to_json}..." data = JSON.parse(RestClient.get("#{url}/v1/images", :params => params))['images'] @log.trace "Listing done." data end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 84 def post_image(options = {}) options = { :disk_format => :raw, # raw, vhd, vmdk, vdi, qcow2, aki, ari, ami :container_format => :bare, # ovf, bare, aki, ari, ami :public => true }.merge(options) @log.info "Uploading and registering '#{@appliance_name}' appliance in OpenStack..." file_size = File.size(@previous_deliverables.disk) @log.trace "Disk format: #{options[:disk_format]}, container format: #{options[:container_format]}, public: #{options[:public]}, size: #{file_size}." image = JSON.parse(RestClient.post("#{url}/v1/images", File.new(@previous_deliverables.disk, 'rb'), :content_type => 'application/octet-stream', 'x-image-meta-size' => file_size, 'x-image-meta-name' => @appliance_name, 'x-image-meta-disk-format' => options[:disk_format], 'x-image-meta-container-format' => options[:container_format], 'x-image-meta-is-public' => options[:public] ? "true" : false, 'x-image-meta-property-distro' => "#{@appliance_config.os.name.capitalize} #{@appliance_config.os.version}" ))['image'] @log.info "Appliance registered under id = #{image['id']}." end
# File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 128 def url "#{@plugin_config['schema']}://#{@plugin_config['host']}:#{@plugin_config['port']}" end