From 0e9ea0d43ab39f350d1efc3a1ac5b2c9ff10cf4a Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Mon, 6 Oct 2014 11:59:29 +0200 Subject: [PATCH] Allow using NFS shares for both Glance and Nova Closes-bug #653 --- manifests/compute/hypervisor.pp | 19 +++++++++++++------ manifests/image/api.pp | 18 ++++++++++++------ spec/classes/cloud_compute_hypervisor_spec.rb | 10 ++++++---- spec/classes/cloud_image_api_spec.rb | 10 ++++++---- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/manifests/compute/hypervisor.pp b/manifests/compute/hypervisor.pp index 9604d7f5..be8a5b71 100644 --- a/manifests/compute/hypervisor.pp +++ b/manifests/compute/hypervisor.pp @@ -43,6 +43,11 @@ # Required when nfs_enabled is at true. # Defaults to false # +# [*nfs_options*] +# (optional) NFS mount options +# Example: 'nfsvers=3,noacl' +# Defaults to 'defaults' +# # [*filesystem_store_datadir*] # (optional) Full path of data directory to store the instances. # Don't modify this parameter if you don't know what you do. @@ -74,6 +79,7 @@ class cloud::compute::hypervisor( # when using NFS storage backend $nfs_enabled = false, $nfs_device = false, + $nfs_options = 'defaults', $filesystem_store_datadir = '/var/lib/nova/instances', # set to false to keep backward compatibility $ks_spice_public_proto = false, @@ -121,14 +127,15 @@ class cloud::compute::hypervisor( nova_config { 'DEFAULT/instances_path': value => $filesystem_store_datadir; } $nfs_mount = { "${filesystem_store_datadir}" => { - 'ensure' => 'present', - 'fstype' => 'nfs', - 'device' => $nfs_device + 'ensure' => 'present', + 'fstype' => 'nfs', + 'device' => $nfs_device, + 'options' => $nfs_options } } - ensure_resource('class', 'nfs', { - mounts => $nfs_mount - }) + ensure_resource('class', 'nfs', {}) + create_resources('types::mount', $nfs_mount) + # Not using /var/lib/nova/instances may cause side effects. if $filesystem_store_datadir != '/var/lib/nova/instances' { warning('filesystem_store_datadir is not /var/lib/nova/instances so you may have side effects (SElinux, etc)') diff --git a/manifests/image/api.pp b/manifests/image/api.pp index abe54ddf..1989c59d 100644 --- a/manifests/image/api.pp +++ b/manifests/image/api.pp @@ -78,6 +78,11 @@ # Required when running 'nfs' backend. # Defaults to false # +# [*nfs_options*] +# (optional) NFS mount options +# Example: 'nfsvers=3,noacl' +# Defaults to 'defaults' +# class cloud::image::api( $glance_db_host = '127.0.0.1', $glance_db_user = 'glance', @@ -102,6 +107,7 @@ class cloud::image::api( $backend = 'rbd', $filesystem_store_datadir = undef, $nfs_device = false, + $nfs_options = 'defaults', ) { # Disable twice logging if syslog is enabled @@ -187,14 +193,14 @@ class cloud::image::api( } $nfs_mount = { "${filesystem_store_datadir}" => { - 'ensure' => 'present', - 'fstype' => 'nfs', - 'device' => $nfs_device + 'ensure' => 'present', + 'fstype' => 'nfs', + 'device' => $nfs_device, + 'options' => $nfs_options } } - ensure_resource('class', 'nfs', { - mounts => $nfs_mount - }) + ensure_resource('class', 'nfs', {}) + create_resources('types::mount', $nfs_mount) } else { fail('When running NFS backend, you need to provide nfs_device parameter.') } diff --git a/spec/classes/cloud_compute_hypervisor_spec.rb b/spec/classes/cloud_compute_hypervisor_spec.rb index 003be0a4..3429c364 100644 --- a/spec/classes/cloud_compute_hypervisor_spec.rb +++ b/spec/classes/cloud_compute_hypervisor_spec.rb @@ -494,14 +494,16 @@ describe 'cloud::compute::hypervisor' do before :each do params.merge!( :nfs_enabled => true, - :nfs_device => 'nfs.example.com:/vol1' ) + :nfs_device => 'nfs.example.com:/vol1', + :nfs_options => 'noacl,fsid=123' ) end it 'configure nova instances path and NFS mount' do is_expected.to contain_nova_config('DEFAULT/instances_path').with('value' => '/var/lib/nova/instances') is_expected.to contain_mount('/var/lib/nova/instances').with({ - 'ensure' => 'present', - 'fstype' => 'nfs', - 'device' => 'nfs.example.com:/vol1', + 'ensure' => 'present', + 'fstype' => 'nfs', + 'device' => 'nfs.example.com:/vol1', + 'options' => 'noacl,fsid=123' }) end end diff --git a/spec/classes/cloud_image_api_spec.rb b/spec/classes/cloud_image_api_spec.rb index 56a6636b..afba74a2 100644 --- a/spec/classes/cloud_image_api_spec.rb +++ b/spec/classes/cloud_image_api_spec.rb @@ -110,7 +110,8 @@ describe 'cloud::image::api' do before :each do params.merge!(:backend => 'nfs', :filesystem_store_datadir => '/srv/images/', - :nfs_device => 'nfs.example.com:/vol1' ) + :nfs_device => 'nfs.example.com:/vol1', + :nfs_options => 'noacl,fsid=123' ) end it 'configure Glance with NFS backend' do @@ -119,9 +120,10 @@ describe 'cloud::image::api' do is_expected.to contain_glance_api_config('DEFAULT/filesystem_store_datadir').with('value' => '/srv/images/') is_expected.to contain_glance_api_config('DEFAULT/default_store').with('value' => 'file') is_expected.to contain_mount('/srv/images/').with({ - 'ensure' => 'present', - 'fstype' => 'nfs', - 'device' => 'nfs.example.com:/vol1', + 'ensure' => 'present', + 'fstype' => 'nfs', + 'device' => 'nfs.example.com:/vol1', + 'options' => 'noacl,fsid=123', }) end end