Blame lenses/exports.aug

Packit Service a2ae7a
(* Lens for Linux syntax of NFS exports(5) *)
Packit Service a2ae7a
Packit Service a2ae7a
(*
Packit Service a2ae7a
Module: Exports
Packit Service a2ae7a
    Parses /etc/exports
Packit Service a2ae7a
Packit Service a2ae7a
Author: David Lutterkort <lutter@redhat.com>
Packit Service a2ae7a
Packit Service a2ae7a
About: Description
Packit Service a2ae7a
    /etc/exports contains lines associating a directory with one or
Packit Service a2ae7a
    more hosts, and NFS options for each host.
Packit Service a2ae7a
Packit Service a2ae7a
About: Usage Example
Packit Service a2ae7a
Packit Service a2ae7a
(start code)
Packit Service a2ae7a
Packit Service a2ae7a
    $ augtool
Packit Service a2ae7a
    augtool> ls /files/etc/exports/
Packit Service a2ae7a
    comment[1] = /etc/exports: the access control list for filesystems which may be exported
Packit Service a2ae7a
    comment[2] = to NFS clients.  See exports(5).
Packit Service a2ae7a
    comment[3] = sample /etc/exports file
Packit Service a2ae7a
    dir[1]/ = /
Packit Service a2ae7a
    dir[2]/ = /projects
Packit Service a2ae7a
    dir[3]/ = /usr
Packit Service a2ae7a
    dir[4]/ = /home/joe
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
    augtool> ls /files/etc/exports/dir[1]
Packit Service a2ae7a
    client[1]/ = master
Packit Service a2ae7a
    client[2]/ = trusty
Packit Service a2ae7a
(end code)
Packit Service a2ae7a
Packit Service a2ae7a
The corresponding line in the file is:
Packit Service a2ae7a
Packit Service a2ae7a
(start code)
Packit Service a2ae7a
	/               master(rw) trusty(rw,no_root_squash)
Packit Service a2ae7a
(end code)
Packit Service a2ae7a
Packit Service a2ae7a
    Digging further:
Packit Service a2ae7a
Packit Service a2ae7a
(start code)
Packit Service a2ae7a
    augtool> ls /files/etc/exports/dir[1]/client[1]
Packit Service a2ae7a
    option = rw
Packit Service a2ae7a
Packit Service a2ae7a
    To add a new entry, you'd do something like this:
Packit Service a2ae7a
(end code)
Packit Service a2ae7a
Packit Service a2ae7a
(start code)
Packit Service a2ae7a
    augtool> set /files/etc/exports/dir[10000] /foo
Packit Service a2ae7a
    augtool> set /files/etc/exports/dir[last()]/client[1] weeble
Packit Service a2ae7a
    augtool> set /files/etc/exports/dir[last()]/client[1]/option[1] ro
Packit Service a2ae7a
    augtool> set /files/etc/exports/dir[last()]/client[1]/option[2] all_squash
Packit Service a2ae7a
    augtool> save
Packit Service a2ae7a
    Saved 1 file(s)
Packit Service a2ae7a
(end code)
Packit Service a2ae7a
Packit Service a2ae7a
    Which creates the line:
Packit Service a2ae7a
Packit Service a2ae7a
(start code)
Packit Service a2ae7a
    /foo weeble(ro,all_squash)
Packit Service a2ae7a
(end code)
Packit Service a2ae7a
Packit Service a2ae7a
About: Limitations
Packit Service a2ae7a
    This lens cannot handle options without a host, as with the last
Packit Service a2ae7a
    example line in "man 5 exports":
Packit Service a2ae7a
Packit Service a2ae7a
	/pub            (ro,insecure,all_squash)
Packit Service a2ae7a
Packit Service a2ae7a
    In this case, though, you can just do:
Packit Service a2ae7a
Packit Service a2ae7a
	/pub            *(ro,insecure,all_squash)
Packit Service a2ae7a
Packit Service a2ae7a
    It also can't handle whitespace before the directory name.
Packit Service a2ae7a
*)
Packit Service a2ae7a
Packit Service a2ae7a
module Exports =
Packit Service a2ae7a
  autoload xfm
Packit Service a2ae7a
Packit Service a2ae7a
  let client_re = /[][a-zA-Z0-9.@*?\/:-]+/
Packit Service a2ae7a
Packit Service a2ae7a
  let eol = Util.eol
Packit Service a2ae7a
  let lbracket  = Util.del_str "("
Packit Service a2ae7a
  let rbracket  = Util.del_str ")"
Packit Service a2ae7a
  let sep_com   = Sep.comma
Packit Service a2ae7a
  let sep_spc   = Sep.space
Packit Service a2ae7a
Packit Service a2ae7a
  let option = [ label "option" . store /[^,)]*/ ]
Packit Service a2ae7a
Packit Service a2ae7a
  let client    = [ label "client" . store client_re .
Packit Service a2ae7a
                    ( Build.brackets lbracket rbracket
Packit Service a2ae7a
                         ( Build.opt_list option sep_com ) )? ]
Packit Service a2ae7a
Packit Service a2ae7a
  let entry = [ label "dir" . store /[^ \t\n#]*/
Packit Service a2ae7a
                . sep_spc . Build.opt_list client sep_spc . eol ]
Packit Service a2ae7a
Packit Service a2ae7a
  let lns = (Util.empty | Util.comment | entry)*
Packit Service a2ae7a
Packit Service a2ae7a
  let xfm = transform lns (incl "/etc/exports")