Bump to 1.14.1
[platform/upstream/augeas.git] / lenses / cgconfig.aug
1 (*
2 Module: cgconfig
3     Parses /etc/cgconfig.conf
4
5 Author:
6     Ivana Hutarova Varekova <varekova@redhat.com>
7     Raphael Pinson          <raphink@gmail.com>
8
9 About: Licence
10     This file is licensed under the LGPL v2+, like the rest of Augeas.
11
12 About: Lens Usage
13     Sample usage of this lens in augtool
14         * print all mounted cgroups
15            print /files/etc/cgconfig.conf/mount
16
17 About: Configuration files
18     This lens applies to /etc/cgconfig.conf. See <filter>.
19  *)
20
21 module Cgconfig =
22    autoload xfm
23
24    let indent  = Util.indent
25    let eol     = Util.eol
26    let comment = Util.comment
27    let empty   = Util.empty
28
29    let id        = /[a-zA-Z0-9_\/.-]+/
30    let name      = /[^#= \n\t{}\/]+/
31    let cont_name = /(cpuacct|cpu|devices|ns|cpuset|memory|freezer|net_cls|blkio|hugetlb|perf_event)/
32    let role_name = /(admin|task)/
33    let id_name   = /(uid|gid|fperm|dperm)/
34    let address   = /[^#; \n\t{}]+/
35    let qaddress  = address|/"[^#;"\n\t{}]+"/
36
37    let lbracket = del /[ \t\n]*\{/ " {"
38    let rbracket = del /[ \t]*\}/ "}"
39    let eq       = indent . Util.del_str "=" . indent
40
41 (******************************************
42  * Function to deal with abc=def; entries
43  ******************************************)
44
45    let key_value (key_rx:regexp) (val_rx:regexp) =
46      [ indent . key key_rx . eq . store val_rx
47          . indent . Util.del_str ";" ]
48
49    (* Function to deal with bracketted entries *)
50    let brack_entry_base (lnsa:lens) (lnsb:lens) =
51      [ indent . lnsa . lbracket . lnsb . rbracket ]
52
53    let brack_entry_key (kw:regexp) (lns:lens) =
54      let lnsa = key kw in
55      brack_entry_base lnsa lns
56
57    let brack_entry (kw:regexp) (lns:lens) =
58      let full_lns = (lns | comment | empty)* in
59      brack_entry_key kw full_lns
60
61 (******************************************
62  * control groups
63  ******************************************)
64
65    let permission_setting = key_value id_name address
66
67 (* task setting *)
68    let t_info =  brack_entry "task" permission_setting
69
70 (* admin setting *)
71    let a_info =  brack_entry "admin" permission_setting
72
73 (* permissions setting *)
74    let perm_info =
75      let ce = (comment|empty)* in
76      let perm_info_lns = ce .
77        ((t_info . ce . (a_info . ce)?)
78        |(a_info . ce . (t_info . ce)?))? in
79      brack_entry_key "perm" perm_info_lns
80
81    let variable_setting = key_value name qaddress
82
83 (* controllers setting *)
84    let controller_info =
85      let lnsa = label "controller" . store cont_name in
86      let lnsb = ( variable_setting | comment | empty ) * in
87      brack_entry_base lnsa lnsb
88
89 (* group { ... } *)
90    let group_data  =
91      let lnsa = key "group" . Util.del_ws_spc . store id in
92      let lnsb = ( perm_info | controller_info | comment | empty )* in
93      brack_entry_base lnsa lnsb
94
95
96 (*************************************************
97  * mount point
98  *************************************************)
99
100 (* controller = mount_point; *)
101    let mount_point = key_value name address
102
103 (* mount { .... } *)
104    let mount_data = brack_entry "mount" mount_point
105
106
107 (****************************************************
108  * namespace
109  ****************************************************)
110
111 (* controller = cgroup; *)
112    let namespace_instance = key_value name address
113
114
115 (* namespace { .... } *)
116    let namespace = brack_entry "namespace" namespace_instance
117
118    let lns =  ( comment | empty | mount_data | group_data | namespace )*
119
120    let xfm = transform lns (incl "/etc/cgconfig.conf")