1(* 2Module: cgconfig 3 Parses /etc/cgconfig.conf 4 5Author: 6 Ivana Hutarova Varekova <varekova@redhat.com> 7 Raphael Pinson <raphink@gmail.com> 8 9About: Licence 10 This file is licensed under the LGPL v2+, like the rest of Augeas. 11 12About: Lens Usage 13 Sample usage of this lens in augtool 14 * print all mounted cgroups 15 print /files/etc/cgconfig.conf/mount 16 17About: Configuration files 18 This lens applies to /etc/cgconfig.conf. See <filter>. 19 *) 20 21module 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") 121