Hello,
With Raphael Pinson large help I write a lense for cgconfig.conf configuration
file and test file for it.
(cgconfig.conf file is a part of libcgroup tool -http://libcg.sourceforge.net/)
I'm sending them in attachment.
If there are any problems please ping me.
Thanks,
Ivana Hutarova Varekova
(*
Module: cgconfig
Parses /etc/cgconfig.conf
Author:
Ivana Hutarova Varekova <[email protected]>
Raphael Pinson <[email protected]>
About: Licence
This file is licensed under the LGPLv2+, like the rest of Augeas.
About: Lens Usage
Sample usage of this lens in augtool
* print all mounted cgroups
print /files/etc/cgconfig.conf/mount
About: Configuration files
This lens applies to /etc/cgconfig.conf. See <filter>.
*)
module Cgconfig =
autoload xfm
let indent = Util.indent
let eol = Util.eol
let comment = Util.comment
let empty = Util.empty
let name = /[^#= \n\t{}]+/
(* let cont_name2 = /([^ \n\t\{}]\{1,3\}|[^ \n\t\{}]\{5,\}|[^ \n\t\{}p][^
\n\t\{}]\{3\}|[^ \n\t\{e][^ \n\t\{+]\{2\})/ *)
let cont_name = /(cpuacct|cpu|devices|ns|cpuset|memory|freezer|net_cls)/
let role_name = /(admin|task)/
let id_name = /(uid|gid)/
let address = /[^#; \n\t{}]+/
let lbracket = del /[ \t\n]*\{/ " {"
let rbracket = del /[ \t]*\}/ "}"
(******************************************
* Function to deal with abc=def; entries
******************************************)
let key_value (sq:string) (lbla:string) (rxa:regexp) (lblb:string)
(rxb:regexp) =
[ seq sq . indent
. [ label lbla . store rxa ]
. indent . Util.del_str "=" . indent
. [ label lblb . store rxb ]
. indent . Util.del_str ";"
]
(* Function to deal with bracketted entries *)
let brack_entry_base (lnsa:lens) (lnsb:lens) =
[ indent . lnsa
. lbracket
. lnsb
. rbracket ]
let brack_entry_key (kw:regexp) (lns:lens) =
let lnsa = key kw
in brack_entry_base lnsa lns
let brack_entry (kw:regexp) (lns:lens) =
let full_lns = (lns | comment | empty)*
in brack_entry_key kw full_lns
(******************************************
* control groups
******************************************)
let permission_setting = key_value "pv" "role" id_name "value" address
(* task setting *)
let t_info = brack_entry "task" permission_setting
(* admin setting *)
let a_info = brack_entry "admin" permission_setting
(* permissions setting *)
let perm_info =
let perm_info_lns = ( comment | empty ) * . ((t_info . (comment |
empty)*
. (a_info . ( comment |
empty )* )?)
| (a_info . (comment | empty)* . (t_info . (
comment | empty )* )?) )?
in brack_entry_key "perm" perm_info_lns
let variable_setting = key_value "nv" "name" name "value" address
(* controllers setting *)
let controller_info =
let lnsa = label "controller" . store cont_name
in let lnsb = ( variable_setting | comment | empty ) *
in brack_entry_base lnsa lnsb
(* group { ... } *)
let group_data =
let lnsa = key "group" . indent . [ label "name" . store name
]
in let lnsb = ( perm_info | controller_info | comment |
empty ) *
in brack_entry_base lnsa lnsb
(*************************************************
* mount point
*************************************************)
(* controller = mount_point; *)
let mount_point = key_value "mpoint" "controller" name "mount_point" address
(* mount { .... } *)
let mount_data = brack_entry "mount" mount_point
(****************************************************
* namespace
****************************************************)
(* controller = cgroup; *)
let namespace_instance = key_value "mpoint" "controller" name "cgroup"
address
(* namespace { .... } *)
let namespace = brack_entry "namespace" namespace_instance
let lns = ( comment | empty | mount_data | group_data | namespace )*
let xfm = transform lns (incl "/etc/cgconfig.conf")
module Test_cgconfig =
let conf="#cgconfig test cofiguration file
mount { 123 = 456; 456 = 789;}
"
test Cgconfig.lns get conf =
{ "#comment" = "cgconfig test cofiguration file" }
{ "mount"
{ "1"
{ "controller" = "123" }
{ "mount_point" = "456" }
}
{ "2"
{ "controller" = "456" }
{ "mount_point" = "789" }
}
}
{}
(* white spaces before mount sign *)
let conf2="
mount { 123 = 456;}
mount { 123 = 456;}
mount { 123 = 456;}mount { 123 = 456;}
"
test Cgconfig.lns get conf2 =
{ }
{"mount"
{"1" {"controller" = "123"}
{"mount_point" = "456"}
}
}
{ }
{"mount"
{"2" {"controller" = "123"}
{"mount_point" = "456"}
}
}
{ }
{ }
{"mount"
{"3" {"controller" = "123"}
{"mount_point" = "456"}
}
}
{ "mount"
{ "4" { "controller" = "123" }
{ "mount_point" = "456" }
}
}
{ }
let conf3="#cgconfig test cofiguration file
mount { 123 = 456;
#eswkh
456 = 789;}
"
test Cgconfig.lns get conf3 =
{ "#comment" = "cgconfig test cofiguration file" }
{ "mount"
{ "1"
{ "controller" = "123" }
{ "mount_point" = "456" }
}
{}
{ "#comment" = "eswkh" }
{ "2"
{ "controller" = "456" }
{ "mount_point" = "789" }
}
}
{}
let conf4="#cgconfig test cofiguration file
mount {
123 = 456;1245=456;
}
mount { 323=324;}mount{324=5343; }# this is a comment
"
test Cgconfig.lns get conf4 =
{"#comment" = "cgconfig test cofiguration file" }
{"mount"
{ }
{ "1"
{"controller" = "123"}
{"mount_point" = "456"}
}
{ "2"
{ "controller" = "1245" }
{ "mount_point" = "456" }
}
{ }}
{ }
{ "mount"
{ "3"
{ "controller" = "323" }
{ "mount_point" = "324" }
} }
{ "mount"
{ "4"
{ "controller" = "324" }
{ "mount_point" = "5343" }
} }
{ "#comment" = "this is a comment" }
let group1="
group user {
cpuacct {
lll = jjj;
}
cpu {
}
}"
test Cgconfig.lns get group1 =
{ }
{ "group"
{ "name" = "user" }
{ }
{ "controller" = "cpuacct"
{ }
{ "1"
{ "name" = "lll" }
{ "value" = "jjj" }
}
{ }
}
{ }
{ "controller" = "cpu"
{ }
}
{ }
}
let group2="
group aa{
perm {
task { }
admin { }
}
}"
test Cgconfig.lns get group2 =
{ }
{ "group"
{ "name" = "aa" }
{ }
{ "perm"
{ }
{ "task" }
{ }
{ "admin" }
{ }
}
{ }
}
let group3 ="
group xx/www {
perm {
task {
gid = root;
uid = root;
}
admin {
gid = aaa;
# no aaa
uid = aaa;
}
}
}
"
test Cgconfig.lns get group3 =
{ }
{ "group"
{ "name" = "xx/www" }
{ }
{ "perm"
{ }
{ "task"
{ }
{ "1"
{ "role" = "gid" }
{ "value" = "root" }
}
{ }
{ "2"
{ "role" = "uid" }
{ "value" = "root" }
}
{ }
}
{ }
{ "admin"
{ }
{ "3"
{ "role" = "gid" }
{ "value" = "aaa" }
}
{ }
{ "#comment" = "no aaa" }
{ "4"
{ "role" = "uid" }
{ "value" = "aaa" }
}
{ }
}
{ }
}
{ }
}
{ }
let group4 ="
#group daemons {
# cpuacct{
# }
#}
group daemons/ftp {
cpuacct{
}
}
group daemons/www {
perm {
task {
uid = root;
gid = root;
}
admin {
uid = root;
gid = root;
}
}
# cpu {
# cpu.shares = 1000;
# }
}
#
#
mount {
devices = /mnt/cgroups/devices;cpuacct = /mnt/cgroups/cpuset;
cpuset = /mnt/cgroups/cpuset;
cpu = /mnt/cpu;
# cpuset = /mnt/cgroups/cpuset2;
}
mount {
devices = /mnt/cgroups/devices;
# cpuacct = /mnt/cgroups/cpuacct;
ns = /mnt/cgroups/ns;
#
}
"
test Cgconfig.lns get group3 =
{ }
{ "group"
{ "name" = "xx/www" }
{ }
{ "perm"
{ }
{ "task"
{ }
{ "1"
{ "role" = "gid" }
{ "value" = "root" }
}
{ }
{ "2"
{ "role" = "uid" }
{ "value" = "root" }
}
{ }
}
{ }
{ "admin"
{ }
{ "3"
{ "role" = "gid" }
{ "value" = "aaa" }
}
{ }
{ "#comment" = "no aaa" }
{ "4"
{ "role" = "uid" }
{ "value" = "aaa" }
}
{ }
}
{ }
}
{ }
}
{ }
_______________________________________________
augeas-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/augeas-devel