Mounting an NFS filesystem is straightforward using CFEngine’s storage promises. The following bundle specifies the name of a remote file system server, the path of the remote file system and the mount point directory on the local machine:

```cf3 body common control { bundlesequence => { “mounts” }; }

bundle agent mounts { storage:

“/mnt” mount => nfs(“fileserver”,”/home”); # “/mnt” is the local moint point # “fileserver” is the remote fileserver # “/home” is the path to the remote file system }

body mount nfs(server,source) { mount_type => “nfs”; # Protocol type of remote file system mount_source => “$(source)”; # Path of remote file system mount_server => “$(server)”; # Name or IP of remote file system server mount_options => { “rw” }; # List of option strings to add to the file system table (“fstab”) edit_fstab => “true”; # True/false add or remove entries to the file system table (“fstab”) } ```

This policy can be found in /var/cfengine/share/doc/examples/example_mount_nfs.cf

Here is an example run. At start, the filesystem is not in /etc/fstab and is not mounted:

# grep mnt /etc/fstab # filesystem is not in /etc/fstab # df |grep mnt # filesystem is not mounted

Now we run CFEngine to mount the filesystem and add it to /etc/fstab:

# cf-agent -f example_mount_nfs.cf 2013-06-08T17:48:42-0700 error: Attempting abort because mount went into a retry loop. # grep mnt /etc/fstab fileserver:/home /mnt nfs rw # df |grep mnt fileserver:/home 149912064 94414848 47882240 67% /mnt #

Note: CFEngine errors out after it mounts the filesystem and updates /etc/fstab. There is a ticket https://cfengine.com/dev/issues/2937 open on this issue.