diff --git a/README.md b/README.md
index 4b6da783..55970da3 100644
--- a/README.md
+++ b/README.md
@@ -153,10 +153,12 @@ This will mount /data on client in /share/data.
}
# ensure is passed to mount, which will make the client not mount it
# the directory automatically, just add it to fstab
+ # The directory on the NFS server is not created automatically.
nfs::server::export { '/media_library':
- ensure => 'present',
+ ensure => 'present',
nfstag => 'media',
- clients => '10.0.0.0/24(rw,insecure,async,no_root_squash) localhost(rw)',
+ clients => '10.0.0.0/24(rw,insecure,async,no_root_squash) localhost(rw)',
+ manage_dir => false,
}
}
diff --git a/REFERENCE.md b/REFERENCE.md
index 2b23f7c6..025b16a9 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -1012,6 +1012,7 @@ The following parameters are available in the `nfs::functions::create_export` de
* [`owner`](#-nfs--functions--create_export--owner)
* [`group`](#-nfs--functions--create_export--group)
* [`mode`](#-nfs--functions--create_export--mode)
+* [`manage_directory`](#-nfs--functions--create_export--manage_directory)
##### `clients`
@@ -1051,6 +1052,14 @@ Sets the permissions of the exported directory.
Default value: `undef`
+##### `manage_directory`
+
+Data type: `Boolean`
+
+Whether or not to manage the directory to be exported.
+
+Default value: `true`
+
### `nfs::functions::mkdir`
Manage directory creation.
@@ -1103,7 +1112,19 @@ Default value: `'mounted'`
### `nfs::server::export`
-Manage all exported resources on a NFS server.
+nfs::server::export { '/srv/nfs_exported/directory':
+ clients => '1.2.3.4/24(rw,insecure,no_subtree_check,async,no_root_squash) 5.6.7.8/24(ro)',
+ share => 'share_name_on_nfs_server',
+}
+
+Links
+
+* {Puppet Docs: Using Parameterized Classes}[http://j.mp/nVpyWY]
+
+ nfs::server::export { '/srv/nfs_exported/directory':
+ clients => '1.2.3.4/24(rw,insecure,no_subtree_check,async,no_root_squash) 5.6.7.8/24(ro)',
+ share => 'share_name_on_nfs_server',
+ }
#### Examples
@@ -1116,11 +1137,6 @@ class { '::nfs':
nfs_v4_export_root => '/share',
nfs_v4_export_root_clients => '1.2.3.4/24(rw,fsid=root,insecure,no_subtree_check,async,no_root_squash)',
}
-
-nfs::server::export { '/srv/nfs_exported/directory':
- clients => '1.2.3.4/24(rw,insecure,no_subtree_check,async,no_root_squash) 5.6.7.8/24(ro)',
- share => 'share_name_on_nfs_server',
-}
```
#### Parameters
@@ -1144,6 +1160,7 @@ The following parameters are available in the `nfs::server::export` defined type
* [`v3_export_name`](#-nfs--server--export--v3_export_name)
* [`v4_export_name`](#-nfs--server--export--v4_export_name)
* [`nfsv4_bindmount_enable`](#-nfs--server--export--nfsv4_bindmount_enable)
+* [`manage_directory`](#-nfs--server--export--manage_directory)
##### `clients`
@@ -1282,3 +1299,11 @@ Data type: `Boolean`
Default value: `$nfs::nfsv4_bindmount_enable`
+##### `manage_directory`
+
+Data type: `Boolean`
+
+Whether or not to manage the directory to be exported.
+
+Default value: `true`
+
diff --git a/manifests/functions/create_export.pp b/manifests/functions/create_export.pp
index 06786390..593dc5f6 100644
--- a/manifests/functions/create_export.pp
+++ b/manifests/functions/create_export.pp
@@ -15,6 +15,9 @@
# @param mode
# Sets the permissions of the exported directory.
#
+# @param manage_directory
+# Whether or not to manage the directory to be exported.
+#
# @author
# * Daniel Klockenkaemper
# * Martin Alfke
@@ -22,6 +25,7 @@
define nfs::functions::create_export (
Variant[String[1], Array[String[1]]] $clients,
String[1] $ensure = 'present',
+ Boolean $manage_directory = true,
Optional[String[1]] $owner = undef,
Optional[String[1]] $group = undef,
Optional[String[1]] $mode = undef,
@@ -34,13 +38,17 @@
content => $line,
}
+ # Create the directory path only if a File resource isn't
+ # defined previously AND the $manage_directory boolean is true.
unless defined(File[$name]) {
- file { $name:
- ensure => directory,
- owner => $owner,
- group => $group,
- mode => $mode,
- selinux_ignore_defaults => true,
+ if $manage_directory {
+ file { $name:
+ ensure => directory,
+ owner => $owner,
+ group => $group,
+ mode => $mode,
+ selinux_ignore_defaults => true,
+ }
}
}
}
diff --git a/manifests/server/export.pp b/manifests/server/export.pp
index 26303240..a045a250 100644
--- a/manifests/server/export.pp
+++ b/manifests/server/export.pp
@@ -47,6 +47,9 @@
# @param v4_export_name
# @param nfsv4_bindmount_enable
#
+# @param manage_directory
+# Whether or not to manage the directory to be exported.
+#
# @example
# class { '::nfs':
# server_enabled => true,
@@ -55,6 +58,15 @@
# nfs_v4_export_root_clients => '1.2.3.4/24(rw,fsid=root,insecure,no_subtree_check,async,no_root_squash)',
# }
#
+# nfs::server::export { '/srv/nfs_exported/directory':
+# clients => '1.2.3.4/24(rw,insecure,no_subtree_check,async,no_root_squash) 5.6.7.8/24(ro)',
+# share => 'share_name_on_nfs_server',
+# }
+#
+# Links
+#
+# * {Puppet Docs: Using Parameterized Classes}[http://j.mp/nVpyWY]
+#
# nfs::server::export { '/srv/nfs_exported/directory':
# clients => '1.2.3.4/24(rw,insecure,no_subtree_check,async,no_root_squash) 5.6.7.8/24(ro)',
# share => 'share_name_on_nfs_server',
@@ -84,6 +96,7 @@
Optional[String[1]] $mode = undef,
String[1] $server = $facts['clientcert'],
Boolean $nfsv4_bindmount_enable = $nfs::nfsv4_bindmount_enable,
+ Boolean $manage_directory = true,
) {
if $nfs::server::nfs_v4 {
if $nfsv4_bindmount_enable {
@@ -103,12 +116,13 @@
}
nfs::functions::create_export { $export_title:
- ensure => $ensure,
- clients => $clients,
- owner => $owner,
- group => $group,
- mode => $mode,
- require => $create_export_require,
+ ensure => $ensure,
+ clients => $clients,
+ manage_directory => $manage_directory,
+ owner => $owner,
+ group => $group,
+ mode => $mode,
+ require => $create_export_require,
}
if $mount != undef {
@@ -137,11 +151,12 @@
}
nfs::functions::create_export { $v3_export_name:
- ensure => $ensure,
- clients => $clients,
- owner => $owner,
- group => $group,
- mode => $mode,
+ ensure => $ensure,
+ clients => $clients,
+ manage_directory => $manage_directory,
+ owner => $owner,
+ group => $group,
+ mode => $mode,
}
if $nfs::storeconfigs_enabled {
diff --git a/spec/defines/server_export_spec.rb b/spec/defines/server_export_spec.rb
index ed022024..86cc7632 100644
--- a/spec/defines/server_export_spec.rb
+++ b/spec/defines/server_export_spec.rb
@@ -34,7 +34,15 @@
let(:params) { { clients: '1.2.3.4(rw)' } }
- it { is_expected.to contain_nfs__functions__create_export('/srv/test').with('ensure' => 'mounted', 'clients' => '1.2.3.4(rw)') }
+ it do
+ is_expected.to contain_nfs__functions__create_export('/srv/test').with(
+ 'ensure' => 'mounted',
+ 'clients' => '1.2.3.4(rw)',
+ 'manage_directory' => true
+ )
+ end
+
+ it { is_expected.to contain_file('/srv/test').with('ensure' => 'directory') }
it do
expect(exported_resources).to contain_nfs__client__mount('/srv/test')
@@ -70,10 +78,12 @@
let(:pre_condition) { 'class {"nfs": server_enabled => true, nfs_v4 => false, storeconfigs_enabled => false}' }
- let(:params) { { clients: '1.2.3.4(rw)' } }
+ let(:params) { { clients: '1.2.3.4(rw)', manage_directory: false } }
it { is_expected.to contain_nfs__functions__create_export('/srv/test').with('ensure' => 'mounted', 'clients' => '1.2.3.4(rw)') }
+ it { is_expected.not_to contain_file('/srv/test') }
+
it { expect(exported_resources).not_to contain_nfs__client__mount('/srv/test') }
end