Added option to upload images with specified ID

- updated rubocop_todo
- added upload_image_id attribute
- updated specs

Change-Id: I29fd680ca4b16160a015fbf809cdd81860df9eeb
This commit is contained in:
Christoph Albers 2017-01-09 12:45:09 +01:00
parent 9dd38224a9
commit d6735b4b5f
7 changed files with 29 additions and 20 deletions

View File

@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2016-02-04 13:18:09 +0100 using RuboCop version 0.34.2.
# on 2017-01-09 12:44:21 +0100 using RuboCop version 0.39.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
@ -9,25 +9,30 @@
# Offense count: 1
# Configuration parameters: CountComments.
Metrics/MethodLength:
Max: 28
Max: 29
# Offense count: 6
# Offense count: 2
# Configuration parameters: CountKeywordArgs.
Metrics/ParameterLists:
Max: 6
# Offense count: 5
# Configuration parameters: EnforcedStyle, SupportedStyles.
# SupportedStyles: nested, compact
Style/ClassAndModuleChildren:
Exclude:
- 'recipes/api.rb'
- 'recipes/client.rb'
- 'recipes/identity_registration.rb'
- 'recipes/image_upload.rb'
- 'recipes/registry.rb'
- 'recipes/swift_store.rb'
# Offense count: 6
# Configuration parameters: Exclude.
# Offense count: 5
Style/Documentation:
Exclude:
- 'spec/**/*'
- 'test/**/*'
- 'recipes/api.rb'
- 'recipes/client.rb'
- 'recipes/identity_registration.rb'
- 'recipes/image_upload.rb'
- 'recipes/registry.rb'

View File

@ -80,7 +80,7 @@ default['openstack']['image']['upload_image']['centos'] = 'http://cloud.centos.o
# The following disk format types are supported: qcow vhd vmdk vdi iso raw
# Bare container format will be used.
default['openstack']['image']['upload_image_type']['cirros'] = 'qcow'
default['openstack']['image']['upload_image_id']['cirros'] = 'e1847f1a-01d2-4957-a067-b56085bf3781'
# logging attribute
default['openstack']['image']['syslog']['use'] = false
default['openstack']['image']['syslog']['facility'] = 'LOG_LOCAL2'

View File

@ -30,17 +30,17 @@ action :upload do
@ks_uri = new_resource.identity_uri
@domain = new_resource.identity_user_domain_name
@project_domain_name = new_resource.identity_project_domain_name
name = new_resource.image_name
url = new_resource.image_url
public = new_resource.image_public
id = new_resource.image_id
ep = public_endpoint 'image_api'
api = ep.to_s.gsub(ep.path, '') # remove trailing /v2
type = new_resource.image_type
type = _determine_type(url) if type == 'unknown'
_upload_image(type, name, api, url, public ? 'public' : 'private')
_upload_image(type, name, api, url, public ? 'public' : 'private', id)
new_resource.updated_by_last_action(true)
end
@ -58,18 +58,18 @@ def _determine_type(url)
end
end
def _upload_image(type, name, api, url, public)
def _upload_image(type, name, api, url, public, id)
case type
when 'ami'
_upload_ami(name, api, url, public)
_upload_ami(name, api, url, public, id)
when 'qcow'
_upload_image_bare(name, api, url, public, 'qcow2')
_upload_image_bare(name, api, url, public, 'qcow2', id)
else
_upload_image_bare(name, api, url, public, type)
_upload_image_bare(name, api, url, public, type, id)
end
end
def _upload_image_bare(name, api, url, public, type)
def _upload_image_bare(name, api, url, public, type, id)
glance_cmd = "glance --insecure --os-username #{@user} --os-password #{@pass} --os-project-name #{@tenant} --os-image-url #{api} --os-auth-url #{@ks_uri} --os-user-domain-name #{@domain} --os-project-domain-name #{@project_domain_name}"
c_fmt = '--container-format bare'
d_fmt = "--disk-format #{type}"
@ -77,13 +77,13 @@ def _upload_image_bare(name, api, url, public, type)
execute "Uploading #{type} image #{name}" do # :pragma-foodcritic: ~FC041
cwd '/tmp'
command "curl -L #{url} | #{glance_cmd} image-create --name #{name} --visibility #{public} #{c_fmt} #{d_fmt}"
command "curl -L #{url} | #{glance_cmd} image-create --name #{name} #{"--id #{id}" unless id == ''} --visibility #{public} #{c_fmt} #{d_fmt}"
not_if "#{glance_cmd} image-list | grep #{name}"
end
end
# TODO(chrislaco) This refactor is in the works via Craig Tracey
def _upload_ami(name, api, url, public)
def _upload_ami(name, api, url, public, id)
glance_cmd = "glance --insecure --os-username #{@user} --os-password #{@pass} --os-project-name #{@tenant} --os-image-url #{api} --os-auth-url #{@ks_uri} --os-user-domain-name #{@domain} --os-project-domain-name #{@project_domain_name}"
aki_fmt = '--container-format aki --disk-format aki'
ari_fmt = '--container-format ari --disk-format ari'
@ -116,7 +116,7 @@ def _upload_ami(name, api, url, public)
kid=$(#{glance_cmd} image-create --name "${image_name}-kernel" --visibility #{public} #{aki_fmt} < ${kernel_file} | grep -m 1 '^|[ ]*id[ ]*|' | cut -d'|' -f3 | sed 's/ //')
rid=$(#{glance_cmd} image-create --name "${image_name}-initrd" --visibility #{public} #{ari_fmt} < ${ramdisk} | grep -m 1 '^|[ ]*id[ ]*|' | cut -d'|' -f3 | sed 's/ //')
#{glance_cmd} image-create --name "#{name}" --visibility #{public} #{ami_fmt} --property "kernel_id=$kid" --property "ramdisk_id=$rid" < ${kernel}
#{glance_cmd} image-create --name "#{name}" #{"--id #{id}" unless id == ''} --visibility #{public} #{ami_fmt} --property "kernel_id=$kid" --property "ramdisk_id=$rid" < ${kernel}
EOH
not_if "#{glance_cmd} image-list | grep #{name}"
end

View File

@ -44,12 +44,14 @@ admin_domain = node['openstack']['image_api']['conf']['keystone_authtoken']['use
node['openstack']['image']['upload_images'].each do |img|
type = 'unknown'
type = node['openstack']['image']['upload_image_type'][img.to_sym] if node['openstack']['image']['upload_image_type'][img.to_sym]
id = ''
id = node['openstack']['image']['upload_image_id'][img.to_sym] if node['openstack']['image']['upload_image_id'][img.to_sym]
openstack_image_image "Image setup for #{img}" do
image_url node['openstack']['image']['upload_image'][img.to_sym]
image_name img
image_type type
image_public true
image_id id
identity_user admin_user
identity_pass admin_pass
identity_tenant admin_project_name

View File

@ -33,6 +33,7 @@ attribute :image_url, kind_of: String
attribute :image_type, kind_of: String, default: 'unknown', equal_to: %w(unknown ami qcow vhd vmdk vdi iso raw)
attribute :image_name, kind_of: String, default: 'default'
attribute :image_public, kind_of: BOOLEAN, default: true
attribute :image_id, kind_of: String, default: ''
attribute :identity_user, kind_of: String
attribute :identity_pass, kind_of: String
attribute :identity_tenant, kind_of: String

View File

@ -23,6 +23,7 @@ describe 'openstack-image::image_upload' do
image_name: 'cirros',
image_type: 'qcow',
image_public: true,
image_id: 'e1847f1a-01d2-4957-a067-b56085bf3781',
identity_user: 'admin',
identity_pass: 'admin-pass',
identity_tenant: 'admin',

View File

@ -64,7 +64,7 @@ shared_context 'image-stubs' do
.with('image')
.and_return('rabbit://guest:mypass@127.0.0.1:5672')
allow(Chef::Application).to receive(:fatal!)
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep cirros').and_return('')
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list --id e1847f1a-01d2-4957-a067-b56085bf3781 | grep cirros').and_return('')
end
end