Merge "Ceph RBD integration for openstack-block-storage"
This commit is contained in:
commit
2c1e480a81
|
@ -163,8 +163,11 @@ default['openstack']['block-storage']['volume']['iscsi_port'] = '3260'
|
||||||
|
|
||||||
# Ceph/RADOS options
|
# Ceph/RADOS options
|
||||||
default['openstack']['block-storage']['rbd_pool'] = 'rbd'
|
default['openstack']['block-storage']['rbd_pool'] = 'rbd'
|
||||||
default['openstack']['block-storage']['rbd_user'] = nil
|
default['openstack']['block-storage']['rbd_user'] = 'cinder'
|
||||||
default['openstack']['block-storage']['rbd_secret_uuid'] = nil
|
default['openstack']['block-storage']['rbd_secret_uuid'] = nil
|
||||||
|
# make this a valid uuid for when node['openstack']['developer_mode'] = true
|
||||||
|
default['openstack']['block-storage']['rbd_secret_name'] = '00000000-0000-0000-0000-000000000000'
|
||||||
|
default['openstack']['block-storage']['rbd_key_name'] = 'openstack_image_cephx_key'
|
||||||
|
|
||||||
# Cinder Policy defaults
|
# Cinder Policy defaults
|
||||||
default['openstack']['block-storage']['policy']['context_is_admin'] = '["role:admin"]'
|
default['openstack']['block-storage']['policy']['context_is_admin'] = '["role:admin"]'
|
||||||
|
@ -192,6 +195,7 @@ when 'fedora', 'redhat', 'centos' # :pragma-foodcritic: ~FC024 - won't fix this
|
||||||
'cinder_scheduler_service' => 'openstack-cinder-scheduler',
|
'cinder_scheduler_service' => 'openstack-cinder-scheduler',
|
||||||
'cinder_iscsitarget_packages' => ['scsi-target-utils'],
|
'cinder_iscsitarget_packages' => ['scsi-target-utils'],
|
||||||
'cinder_iscsitarget_service' => 'tgtd',
|
'cinder_iscsitarget_service' => 'tgtd',
|
||||||
|
'cinder_ceph_packages' => ['python-ceph'],
|
||||||
'cinder_nfs_packages' => ['nfs-utils', 'nfs-utils-lib'],
|
'cinder_nfs_packages' => ['nfs-utils', 'nfs-utils-lib'],
|
||||||
'package_overrides' => ''
|
'package_overrides' => ''
|
||||||
}
|
}
|
||||||
|
@ -210,6 +214,7 @@ when 'suse'
|
||||||
'cinder_scheduler_service' => 'openstack-cinder-scheduler',
|
'cinder_scheduler_service' => 'openstack-cinder-scheduler',
|
||||||
'cinder_volume_packages' => ['openstack-cinder-volume'],
|
'cinder_volume_packages' => ['openstack-cinder-volume'],
|
||||||
'cinder_volume_service' => 'openstack-cinder-volume',
|
'cinder_volume_service' => 'openstack-cinder-volume',
|
||||||
|
'cinder_ceph_packages' => ['python-ceph'],
|
||||||
'cinder_iscsitarget_packages' => ['tgt'],
|
'cinder_iscsitarget_packages' => ['tgt'],
|
||||||
'cinder_iscsitarget_service' => 'tgtd',
|
'cinder_iscsitarget_service' => 'tgtd',
|
||||||
'cinder_nfs_packages' => ['nfs-utils']
|
'cinder_nfs_packages' => ['nfs-utils']
|
||||||
|
@ -229,6 +234,7 @@ when 'ubuntu'
|
||||||
'cinder_volume_service' => 'cinder-volume',
|
'cinder_volume_service' => 'cinder-volume',
|
||||||
'cinder_scheduler_packages' => ['cinder-scheduler'],
|
'cinder_scheduler_packages' => ['cinder-scheduler'],
|
||||||
'cinder_scheduler_service' => 'cinder-scheduler',
|
'cinder_scheduler_service' => 'cinder-scheduler',
|
||||||
|
'cinder_ceph_packages' => ['python-ceph'],
|
||||||
'cinder_iscsitarget_packages' => ['tgt'],
|
'cinder_iscsitarget_packages' => ['tgt'],
|
||||||
'cinder_iscsitarget_service' => 'tgt',
|
'cinder_iscsitarget_service' => 'tgt',
|
||||||
'cinder_nfs_packages' => ['nfs-common'],
|
'cinder_nfs_packages' => ['nfs-common'],
|
||||||
|
|
|
@ -56,7 +56,32 @@ when 'cinder.volume.drivers.netapp.iscsi.NetAppISCSIDriver'
|
||||||
node.override['openstack']['block-storage']['netapp']['dfm_password'] = get_password 'service', 'netapp'
|
node.override['openstack']['block-storage']['netapp']['dfm_password'] = get_password 'service', 'netapp'
|
||||||
|
|
||||||
when 'cinder.volume.drivers.rbd.RBDDriver'
|
when 'cinder.volume.drivers.rbd.RBDDriver'
|
||||||
node.override['openstack']['block-storage']['rbd_secret_uuid'] = get_password 'service', 'rbd'
|
# this is used in the cinder.conf template
|
||||||
|
node.override['openstack']['block-storage']['rbd_secret_uuid'] = secret 'secrets', node['openstack']['block-storage']['rbd_secret_name']
|
||||||
|
|
||||||
|
rbd_user = node['openstack']['block-storage']['rbd_user']
|
||||||
|
rbd_key = get_password 'service', node['openstack']['block-storage']['rbd_key_name']
|
||||||
|
|
||||||
|
include_recipe 'openstack-common::ceph_client'
|
||||||
|
|
||||||
|
platform_options['cinder_ceph_packages'].each do |pkg|
|
||||||
|
package pkg do
|
||||||
|
options platform_options['package_overrides']
|
||||||
|
action :install
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
template "/etc/ceph/ceph.client.#{rbd_user}.keyring" do
|
||||||
|
source 'ceph.client.keyring.erb'
|
||||||
|
cookbook 'openstack-common'
|
||||||
|
owner node['openstack']['block-storage']['user']
|
||||||
|
group node['openstack']['block-storage']['group']
|
||||||
|
mode '0600'
|
||||||
|
variables(
|
||||||
|
name: rbd_user,
|
||||||
|
key: rbd_key
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
when 'cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver'
|
when 'cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver'
|
||||||
node.override['openstack']['block-storage']['netapp']['netapp_server_password'] = get_password 'service', 'netapp-filer'
|
node.override['openstack']['block-storage']['netapp']['netapp_server_password'] = get_password 'service', 'netapp-filer'
|
||||||
|
|
|
@ -36,6 +36,9 @@ def block_storage_stubs # rubocop:disable MethodLength
|
||||||
::Chef::Recipe.any_instance.stub(:secret)
|
::Chef::Recipe.any_instance.stub(:secret)
|
||||||
.with('secrets', 'openstack_identity_bootstrap_token')
|
.with('secrets', 'openstack_identity_bootstrap_token')
|
||||||
.and_return('bootstrap-token')
|
.and_return('bootstrap-token')
|
||||||
|
::Chef::Recipe.any_instance.stub(:secret)
|
||||||
|
.with('secrets', 'rbd_secret_uuid')
|
||||||
|
.and_return('b0ff3bba-e07b-49b1-beed-09a45552b1ad')
|
||||||
::Chef::Recipe.any_instance.stub(:get_password)
|
::Chef::Recipe.any_instance.stub(:get_password)
|
||||||
.with('user', 'guest')
|
.with('user', 'guest')
|
||||||
.and_return('rabbit-pass')
|
.and_return('rabbit-pass')
|
||||||
|
@ -45,6 +48,9 @@ def block_storage_stubs # rubocop:disable MethodLength
|
||||||
::Chef::Recipe.any_instance.stub(:get_password)
|
::Chef::Recipe.any_instance.stub(:get_password)
|
||||||
.with('service', 'openstack-block-storage')
|
.with('service', 'openstack-block-storage')
|
||||||
.and_return('cinder-pass')
|
.and_return('cinder-pass')
|
||||||
|
::Chef::Recipe.any_instance.stub(:get_password)
|
||||||
|
.with('service', 'openstack_image_cephx_key')
|
||||||
|
.and_return('cephx-key')
|
||||||
::Chef::Application.stub(:fatal!)
|
::Chef::Application.stub(:fatal!)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -75,16 +75,68 @@ describe 'openstack-block-storage::volume' do
|
||||||
expect(n).to eq 'netapp-pass'
|
expect(n).to eq 'netapp-pass'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'configures rbd password' do
|
describe 'RBD Ceph as block-storage backend' do
|
||||||
::Chef::Recipe.any_instance.stub(:get_password).with('service', 'rbd')
|
before do
|
||||||
.and_return 'rbd-pass'
|
@chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n|
|
||||||
chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n|
|
|
||||||
n.set['openstack']['block-storage']['volume']['driver'] = 'cinder.volume.drivers.rbd.RBDDriver'
|
n.set['openstack']['block-storage']['volume']['driver'] = 'cinder.volume.drivers.rbd.RBDDriver'
|
||||||
|
n.set['openstack']['block-storage']['rbd_secret_name'] = 'rbd_secret_uuid'
|
||||||
|
# TODO: Remove work around once https://github.com/customink/fauxhai/pull/77 merges
|
||||||
|
n.set['cpu']['total'] = 1
|
||||||
|
end
|
||||||
|
@chef_run.converge 'openstack-block-storage::volume'
|
||||||
end
|
end
|
||||||
chef_run.converge 'openstack-block-storage::volume'
|
|
||||||
n = chef_run.node['openstack']['block-storage']['rbd_secret_uuid']
|
|
||||||
|
|
||||||
expect(n).to eq 'rbd-pass'
|
it 'fetches the rbd_uuid_secret' do
|
||||||
|
n = @chef_run.node['openstack']['block-storage']['rbd_secret_uuid']
|
||||||
|
expect(n).to eq 'b0ff3bba-e07b-49b1-beed-09a45552b1ad'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'includes the ceph_client recipe' do
|
||||||
|
expect(@chef_run).to include_recipe('openstack-common::ceph_client')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'installs the python-ceph package by default' do
|
||||||
|
expect(@chef_run).to install_package('python-ceph')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'honors package option platform overrides for python-ceph' do
|
||||||
|
@chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n|
|
||||||
|
n.set['openstack']['block-storage']['volume']['driver'] = 'cinder.volume.drivers.rbd.RBDDriver'
|
||||||
|
n.set['openstack']['block-storage']['rbd_secret_name'] = 'rbd_secret_uuid'
|
||||||
|
n.set['openstack']['block-storage']['platform']['package_overrides'] = '-o Dpkg::Options::=\'--force-confold\' -o Dpkg::Options::=\'--force-confdef\' --force-yes'
|
||||||
|
end
|
||||||
|
@chef_run.converge 'openstack-block-storage::volume'
|
||||||
|
|
||||||
|
expect(@chef_run).to install_package('python-ceph').with(options: '-o Dpkg::Options::=\'--force-confold\' -o Dpkg::Options::=\'--force-confdef\' --force-yes')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'honors package name platform overrides for python-ceph' do
|
||||||
|
@chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS do |n|
|
||||||
|
n.set['openstack']['block-storage']['volume']['driver'] = 'cinder.volume.drivers.rbd.RBDDriver'
|
||||||
|
n.set['openstack']['block-storage']['rbd_secret_name'] = 'rbd_secret_uuid'
|
||||||
|
n.set['openstack']['block-storage']['platform']['cinder_ceph_packages'] = ['my-ceph', 'my-other-ceph']
|
||||||
|
end
|
||||||
|
@chef_run.converge 'openstack-block-storage::volume'
|
||||||
|
|
||||||
|
%w{my-ceph my-other-ceph}.each do |pkg|
|
||||||
|
expect(@chef_run).to install_package(pkg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates a cephx client keyring' do
|
||||||
|
pending 'https://review.openstack.org/#/c/69368/'
|
||||||
|
@file = '/etc/ceph/ceph.client.cinder.keyring'
|
||||||
|
[/^\[client\.cinder\]$/,
|
||||||
|
/key = cephx-key$/].each do |content|
|
||||||
|
expect(@chef_run).to render_file(@file).with_content(content)
|
||||||
|
expect(@chef_run).to create_template(@file).with(
|
||||||
|
cookbook: 'openstack-common',
|
||||||
|
owner: 'cinder',
|
||||||
|
group: 'cinder',
|
||||||
|
mode: 0600
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'configures storewize private key' do
|
it 'configures storewize private key' do
|
||||||
|
|
Loading…
Reference in New Issue