| 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