Puppet Class: nfs::config::exports

Inherits:
nfs::config
Defined in:
manifests/config/exports.pp

Summary

Setup any requested NFS exports

Overview

This class will write out the requested NFS exports

Parameters:

  • exports (Any) (defaults to: $nfs::config::exports)

    Hash of NFS exports to create

  • exports_d (Any) (defaults to: $nfs::config::exports_d)

    Full path to your /etc/exports.d/

  • exports_file (Any) (defaults to: $nfs::config::exports_file)

    Full path to your /etc/exports

  • purge_unmanaged_exports (Any) (defaults to: $nfs::config::purge_unmanaged_exports)

    Boolean, Should unmanaged files in /etc/exports.d/ be removed?



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'manifests/config/exports.pp', line 16

class nfs::config::exports (
  $exports = $nfs::config::exports,
  $exports_d = $nfs::config::exports_d,
  $exports_file = $nfs::config::exports_file,
  $purge_unmanaged_exports = $nfs::config::purge_unmanaged_exports,
) inherits nfs::config {
  assert_private()

  file { $exports_d:
    ensure  => 'directory',
    owner   => 'root',
    group   => 'root',
    mode    => '0755',
    recurse => $purge_unmanaged_exports,
    purge   => $purge_unmanaged_exports,
  }

  concat { $exports_file:
    ensure => 'present',
    owner  => 'root',
    group  => 'root',
    mode   => '0644',
  }

  concat::fragment { "puppet_managed_header - ${exports_file}":
    target  => $exports_file,
    order   => '01',
    content => "#\n# This file managed by Puppet - DO NOT EDIT\n#\n",
  }

  concat::fragment { "export_d_reminder for ${exports_file}":
    target  => $exports_file,
    order   => '05',
    content => "# Additional exports may be placed in ${exports_d}/*.exports\n#\n",
  }

  $exports.keys.sort.each | $export | {
    if ! 'clients' in $exports[$export] {
      fail("Requested NFS export, but defined no clients for ${export}")
    }

    if $exports[$export]['clients'] == {} {
      fail("Requested NFS export, but defined no clients for ${export}")
    }

    if 'export_path' in $exports[$export] {
      $export_path_real = $exports[$export]['export_path']
    } else {
      $export_path_real = $export
    }

    if 'config_file' in $exports[$export] {
      $config_file_real = $exports[$export]['config_file']
    } else {
      $config_file_real = $exports_file
    }

    if 'comment' in $exports[$export] {
      $comment_real = "#\n# Resource:${export}\n# ${exports[$export]['comment']}"
    } else {
      $comment_real = "#\n# Resource:${export}"
    }

    # make file with puppet header
    ensure_resource('concat', $config_file_real, {'ensure' => 'present', 'owner' => 'root', 'group' => 'root', 'mode' => '0644'})
    ensure_resource('concat::fragment', "puppet_managed_header - ${config_file_real}",
      { 'target' => $config_file_real, 'order' => '01',
        'content' => "#\n# This file managed by Puppet - DO NOT EDIT\n#\n"})

    # merge clients into a simple element
    $clients_real = $exports[$export]['clients'].keys.sort.reduce('') |$memo, $element| {
      $options_str = join($exports[$export]['clients'][$element], ',')
      $client_elements = "${$element}(${options_str})"
      join([$memo, $client_elements], ' ')
    }

    concat::fragment { "export for ${export}":
      target  => $config_file_real,
      order   => 50,
      content => "\n\n${comment_real}\n${export_path_real}\t${clients_real}\n",
    }
  }
}