Class BoxGrinder::OpenStackPlugin
In: lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb
lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb
Parent: BasePlugin

Methods

Public Instance methods

[Source]

    # 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

[Source]

    # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 128
128:     def url
129:       "#{@plugin_config['schema']}://#{@plugin_config['host']}:#{@plugin_config['port']}"
130:     end

[Source]

     # File lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb, line 128
128:     def url
129:       "#{@plugin_config['schema']}://#{@plugin_config['host']}:#{@plugin_config['port']}"
130:     end

[Validate]