Puppet: System Administration Automated

Support

Purpose

Configure NFS exports on a node

Tested on CentOS 5

Example

node e5home1 {
  nfs_share { "/share": 
    shares => [ "foo", "bar" ],
    volgroup => "/dev/VolGroup00",
 }
}

Code

class nfs_server {

        package { "nfs-utils":
                ensure => installed,
        }

        service { [ "nfs", "nfslock" ]:
                ensure => running,
                enable => true,
                require => Package["nfs-utils"],
        }

}

define share_dirs($share_root) {

        file { "${share_root}/$name":
                ensure => directory,
                owner => "root",
                group => "root",
                mode => 755,
        }

}

define share_mounts($share_root, $volgroup) {

        mount { "${share_root}/$name":
                ensure => mounted,
                device => "${volgroup}/$name",
                atboot => true,
                fstype => "ext3",
                options => "defaults,nosuid",
                require => File["${share_root}/$name"],

        }

}

define nfs_share ($shares, $volgroup, $share_access = "*.$domain", $share_options = "rw,sync") {

        include nfs_server

        share_dirs { $shares: share_root => $name }                             # $shares is an array
        share_mounts { $shares: share_root => $name, volgroup => $volgroup }    # $shares is an array

        file { "/etc/exports":
                owner => "root",
                group => "root",
                mode => 644,
                content => template("services/nfs/etc-exports.tpl"),
                notify => Service["nfs"],
        }
}

Template

# templates/services/nfs/etc-exports.tpl
<% shares.each do |share| %><%= name %>/<%= share %>    <%= share_access %>(<%= share_options %>)
<% end %>