Class: BoxGrinder::OpenStackPlugin
- Inherits:
-
BasePlugin
show all
- Defined in:
- lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb
Instance Attribute Summary
Attributes inherited from BasePlugin
#deliverables, #plugin_info
Instance Method Summary
collapse
Methods inherited from BasePlugin
#current_platform, #deliverables_exists?, #init, #initialize, #is_supported_os?, #is_supported_platform?, #merge_plugin_config, #read_plugin_config, #register_deliverable, #register_supported_os, #register_supported_platform, #run, #set_default_config_value, #subtype, #supported_oses, #validate_plugin_config
Methods included from Plugins
#plugin
Instance Method Details
#after_init ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 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
|
#delete_image(id) ⇒ Object
Removes image from the server for specified id.
113
114
115
116
117
|
# 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
|
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# 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
|
#execute ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# 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
|
#get_images(params = {}) ⇒ Object
Retrieves a list of public images with specified filter. If no filter is specified - all images are returned.
121
122
123
124
125
126
|
# 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
|
#post_image(options = {}) ⇒ Object
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb', line 84
def post_image(options = {})
options = {
:disk_format => :raw,
:container_format => :bare,
: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
|
#url ⇒ Object
128
129
130
|
# File 'lib/boxgrinder-build/plugins/delivery/openstack/openstack-plugin.rb', line 128
def url
"#{@plugin_config['schema']}://#{@plugin_config['host']}:#{@plugin_config['port']}"
end
|