test Xml.att_list_def get att_def1 = { "!ATTLIST" = "termdef" { "1" { "#name" = "id" } { "#type" = "ID" } { "#REQUIRED" } } { "2" { "#name" = "name" } { "#type" = "CDATA" } { "#IMPLIED" } } }
test Xml.attributes get attr1 = { "#attribute" { "attr1" = "value1" } { "attr2" = "value2" } }
test Authorized_Keys.lns get "tunnel=\"0\",no-agent-forwarding,command=\"sh /etc/netstart tun0\",permitopen=\"192.0.2.1:80\",permitopen=\"192.0.2.2:25\" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3RC8whKGFx+b7BMTFtnIWl6t/qyvOvnuqIrMNI9J8+1sEYv8Y/pJRh0vAe2RaSKAgB2hyzXwSJ1Fh+ooraUAJ+q7P2gg2kQF1nCFeGVjtV9m4ZrV5kZARcQMhp0Bp67tPo2TCtnthPYZS/YQG6u/6Aco1XZjPvuKujAQMGSgqNskhKBO9zfhhkAMIcKVryjKYHDfqbDUCCSNzlwFLts3nJ0Hfno6Hz+XxuBIfKOGjHfbzFyUQ7smYnzF23jFs4XhvnjmIGQJcZT4kQAsRwQubyuyDuqmQXqa+2SuQfkKTaPOlVqyuEWJdG2weIF8g3YP12czsBgNppz3jsnhEgstnQ== rpinson on rpinson\n" = { "key" = "AAAAB3NzaC1yc2EAAAABIwAAAQEA3RC8whKGFx+b7BMTFtnIWl6t/qyvOvnuqIrMNI9J8+1sEYv8Y/pJRh0vAe2RaSKAgB2hyzXwSJ1Fh+ooraUAJ+q7P2gg2kQF1nCFeGVjtV9m4ZrV5kZARcQMhp0Bp67tPo2TCtnthPYZS/YQG6u/6Aco1XZjPvuKujAQMGSgqNskhKBO9zfhhkAMIcKVryjKYHDfqbDUCCSNzlwFLts3nJ0Hfno6Hz+XxuBIfKOGjHfbzFyUQ7smYnzF23jFs4XhvnjmIGQJcZT4kQAsRwQubyuyDuqmQXqa+2SuQfkKTaPOlVqyuEWJdG2weIF8g3YP12czsBgNppz3jsnhEgstnQ==" { "options" { "tunnel" = "0" } { "no-agent-forwarding" } { "command" = "sh /etc/netstart tun0" } { "permitopen" = "192.0.2.1:80" } { "permitopen" = "192.0.2.2:25" } } { "type" = "ssh-rsa" } { "comment" = "rpinson on rpinson" } }
test Xml.cdata get cdata1 = { "#CDATA" = "testing" }
test Rabbitmq.cluster_nodes get "{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'], disc}}" = { "cluster_nodes" { "tuple" { "value" { "value" = "rabbit@rabbit1" } { "value" = "rabbit@rabbit2" } { "value" = "rabbit@rabbit3" } } { "value" = "disc" } } }
Comments get mapped into “#comment” nodes.
test Xml.comment get "<!-- declarations for <head> & <body> -->" = { "#comment" = " declarations for <head> & <body> " }
test Xml.content put "<a><b/></a>" after clear "/a/b" = "<a><b></b>\n</a>"
!ELEMENT declaration tags are mapped in “!ELEMENT” nodes.
test Xml.decl_def_item get "<!ELEMENT greeting (#PCDATA)>" = { "!ELEMENT" = "greeting" { "#decl" = "(#PCDATA)" } }
Test FAI_DiskConfig.disk_config
test FAI_DiskConfig.disk_config get "disk_config hda preserve_always:6,7 disklabel:msdos bootable:3\n" = { "disk_config" = "hda" { "preserve_always" { "1" = "6" } { "2" = "7" } } { "disklabel" = "msdos" } { "bootable" = "3" } }
test Rabbitmq.disk_free_limit get "{disk_free_limit, 1000000000}" = { "disk_free_limit" = "1000000000" }
Test input1 with Xml.doc
test Xml.doc get input1 = { "#declaration" { "#attribute" { "version" = "1.0" } { "encoding" = "UTF-8" } } } { "html" { "#text" = "\r\n " } { "head" { "#text" = "\n " } { "title" { "#text" = "Wiki" } } { "#text" = " " } } { "#text" = " " } { "body" { "#text" = " " } { "h1" { "#text" = "Augeas" } } { "#text" = " " } { "p" { "#attribute" { "class" = "main" } } { "#text" = "Augeas is now able to parse XML files!" } } { "#text" = " " } { "ul" { "#text" = "\n " } { "li" { "#text" = "Translate from XML to a tree syntax" } } { "#text" = " " } { "li" { "#text" = "Translate from the tree back to XML" } } { "#text" = " " } { "#comment" = " this is some comment " } { "#text" = " " } { "li" { "#text" = "this" } } { "#text" = " " } } { "#text" = " " } } }
!DOCTYPE tags are mapped in “!DOCTYPE” nodes.
test Xml.doctype get "<!DOCTYPE greeting:foo SYSTEM \"hello.dtd\">" = { "!DOCTYPE" = "greeting:foo" { "SYSTEM" = "hello.dtd" } }
test Xml.empty_element get empty1 = { "a" = "#empty" }
A star condition gets mapped as direct value of the “allow” node.
test Reprepro_Uploaders.entry get "allow * by anybody\n" = { "allow" = "*" { "by" = "anybody" } }
Testing the a/c/e combination with a list entry
test list_ace get list_test = { "test_ace" { "1" = "val1" } { "2" = "val2" } { "3" = "val3" } { "#comment" = "a comment" } }
Testing the a/c/e combination with a list entry without end-of-line comment
test list_nocomment_ace get list_nocomment_test = { "test_ace" { "1" = "val1" } { "2" = "val2" } { "3" = "val3" } }
test Rabbitmq.listeners get "{ssl_listeners, [5671, {\"127.0.0.1\", 5672}]}" = { "ssl_listeners" { "value" = "5671" } { "tuple" { "value" = "127.0.0.1" } { "value" = "5672" } } }
Allow @ in setting (GH issue #92)
test Desktop.lns get "[Desktop Entry] Name[sr@latin] = foobar\n" = { "Desktop Entry" { "Name[sr@latin]" = "foobar" } }
Newlines inside quoted value (GH issue #104)
test Httpd.lns get "Single 'Foo\\ bar' Double \"Foo\\ bar\"\n" = { "directive" = "Single" { "arg" = "'Foo\\\nbar'" } } { "directive" = "Double" { "arg" = "\"Foo\\\nbar\"" } }
Support `##` bashism in conditions (GH issue #118)
test Shellvars.lns get "if [ \"${APACHE_CONFDIR##/etc/apache2-}\" != \"${APACHE_CONFDIR}\" ] ; then SUFFIX=\"-${APACHE_CONFDIR##/etc/apache2-}\" else SUFFIX= fi\n" = { "@if" = "[ \"${APACHE_CONFDIR##/etc/apache2-}\" != \"${APACHE_CONFDIR}\" ]" { "SUFFIX" = "\"-${APACHE_CONFDIR##/etc/apache2-}\"" } { "@else" { "SUFFIX" = "" } } }
Ticket #342: end-of-line comments
test Shellvars_list.lns get "service_ping=\"ping/icmp\" #ping\n" = { "service_ping" { "quote" = "\"" } { "value" = "ping/icmp" } { "#comment" = "ping" } }
Full access test with who/access/control
test Slapd.lns get "access to dn.subtree=\"dc=example,dc=com\" by self write stop\n" = { "access to" = "dn.subtree=\"dc=example,dc=com\"" { "by" = "self" { "access" = "write" } { "control" = "stop" } } }
Test the full conf
test Access.lns get conf = { "access" = "+" { "user" = "ALL" } { "origin" = "LOCAL" } } { "access" = "+" { "user" = "root" } { "origin" = "localhost.localdomain" } } { "access" = "-" { "user" = "root" } { "origin" = "127.0.0.1" } { "origin" = ".localdomain" } } { "access" = "+" { "user" = "root" } { "user" = "alice" { "host" = "server1" } } { "netgroup" = "admins" } { "group" = "wheel" } { "origin" = "cron" } { "origin" = "crond" } { "origin" = ":0" } { "origin" = "tty1" } { "origin" = "tty2" } { "origin" = "tty3" } { "origin" = "tty4" } { "origin" = "tty5" } { "origin" = "tty6" } } { "#comment" = "IP v6 support" } { "access" = "+" { "user" = "john" } { "user" = "foo" } { "origin" = "2001:4ca0:0:101::1" } { "origin" = "2001:4ca0:0:101::/64" } } { "#comment" = "Except" } { "access" = "+" { "user" = "ALL" } { "except" { "user" = "john" } { "netgroup" = "wheel" } } { "origin" = "ALL" } { "except" { "origin" = "LOCAL" } { "origin" = ".win.tue.nl" } } } { "#comment" = "No spaces" } { "access" = "+" { "user" = "root" } { "origin" = ".example.com" } }
Test the full conf
test AFS_cellalias.lns get conf = { "#comment" = "Cell Aliases are meant to act like symlinks like '/afs/openafs.org -> oao'" } { "#comment" = "in root.afs, so sites relying on such a link for their cell can use dynroot." } { "#comment" = "These aliases are set with 'fs newalias', or read from" } { "#comment" = "/usr/vice/etc/CellAlias" } { } { "#comment" = "Formating for /usr/vice/etc/CellAlias is in the form" } { "#comment" = "<target> <alias>" } { "#comment" = "an example would be" } { "#comment" = "fnal.gov/common/usr usr" } { } { "target" = "fnal.gov" { "linkname" = "fnal" } } { "target" = "fnal.gov/files" { "linkname" = "fnal-files" } }
Testing Aliases.lns on file
test Aliases.lns get file = { } { "#comment" = "Aliases in this file will NOT be expanded in the header from" } { "#comment" = "Mail, but WILL be visible over networks or from /bin/mail." } {} { "#comment" = "Basic system aliases -- these MUST be present." } { "1" { "name" = "mailer-daemon" } { "value" = "postmaster" } } { "2" { "name" = "postmaster" } { "value" = "root" } } {} { "#comment" = "General redirections for pseudo accounts." } { "3" { "name" = "bin" } { "value" = "root" } { "value" = "adm" } { "value" = "bob" } } { "4" { "name" = "daemon" } { "value" = "root" } } { "5" { "name" = "adm" } { "value" = "root" } } { "6" { "name" = "file" } { "value" = "/var/foo" } } { "7" { "name" = "pipe1" } { "value" = "|/bin/ls" } } { "8" { "name" = "pipe2" } { "value" = "|\"/usr/bin/ls args,\"" } }
test Anacron.lns get conf = { "#comment" = "/etc/anacrontab: configuration file for anacron" } { } { "SHELL" = "/bin/sh" } { "PATH" = "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" } { } { "#comment" = "These replace cron's entries" } { "entry" = "nice run-parts --report /etc/cron.daily" { "period" = "1" } { "delay" = "5" } { "job-identifier" = "cron.daily" } } { "entry" = "nice run-parts --report /etc/cron.weekly" { "period" = "7" } { "delay" = "10" } { "job-identifier" = "cron.weekly" } } { "entry" = "nice run-parts --report /etc/cron.monthly" { "period_name" = "monthly" } { "delay" = "15" } { "job-identifier" = "cron.monthly" } }
Testing Approx.lns on default_approx
test Approx.lns get default_approx = { "#comment" = "The following are the defaults, so there is no need" } { "#comment" = "to uncomment them unless you want a different value." } { "#comment" = "See approx.conf(5) for details." } { } { "$interface" = "any" } { "$port" = "9999" } { "$interval" = "720" } { "$max_wait" = "10" } { "$max_rate" = "unlimited" } { "$debug" = "false" } { } { "#comment" = "Here are some examples of remote repository mappings." } { "#comment" = "See http://www.debian.org/mirror/list for mirror sites." } { } { "debian" = "http://ftp.nl.debian.org/debian" } { "debian-volatile" = "http://ftp.nl.debian.org/debian-volatile" } { "security" = "http://security.debian.org" }
test Apt_Update_Manager.lns get meta_release = { "#comment" = "default location for the meta-release file" } { } { "METARELEASE" { "URI" = "http://changelogs.ubuntu.com/meta-release" } { "URI_LTS" = "http://changelogs.ubuntu.com/meta-release-lts" } { "URI_UNSTABLE_POSTFIX" = "-development" } { "URI_PROPOSED_POSTFIX" = "-proposed" } }
GH 165
test Authorized_keys.lns get "command=\"echo 'Please login as the user \\\"blaauser\\\" rather than the user \\\"root\\\".';echo;sleep 10\" ssh-rsa DEADBEEF== username1\n" = { "key" = "DEADBEEF==" { "options" { "command" = "echo 'Please login as the user \\\"blaauser\\\" rather than the user \\\"root\\\".';echo;sleep 10" } } { "type" = "ssh-rsa" } { "comment" = "username1" } }
test Authorized_Keys.lns get keys = { "#comment" = "Example keys, one of each type" } { } { "key" = "AAAAB3NzaC1yc2EAAAADAQABAAABAQDpWrKYsEsVUyuwMN4ReBN/TMGsaUWzDKDz/uQr6MlNNM95MDK/BPyJ+DiBiNMFVLpRt3gH3eCJBLJKMuUDaTNy5uym2zNgAaAIVct6M2GHI68W3iY3Ja8/MaRPbyTpMh1O74S+McpAW1SGL2YzFchYMjTnu/kOD3lxiWNiDLvdLFZu0wPOi7CYG37VXR4Thb0cC92zqnCjaP1TwfhpEYUZoowElYkoV2vG+19O6cRm/zduYcf8hmegZKB4GFUJTtZ2gZ18XJDSQd0ykK3KPt/+bKskdrtfiOwSZAmUZmd2YuAlY6+CBn1T3UBdQntueukd0z1xhd6SX7Bl8+qyqLQ3" { "type" = "ssh-rsa" } { "comment" = "user@example" } } { "key" = "AAAA" { "type" = "ssh-dsa" } { "comment" = "user@example" } } { "key" = "AAAA" { "type" = "ecdsa-sha2-nistp256" } { "comment" = "user@example" } } { "key" = "AAAA" { "type" = "ssh-ed25519" } { "comment" = "user@example" } } { } { "#comment" = "Example comments" } { "key" = "AAAA" { "type" = "ssh-dsa" } } { "key" = "AAAA" { "type" = "ssh-dsa" } { "comment" = "user@example" } }
Test the full conf
test Channels.lns get conf = { "entry" = "Direct 8 TV" { "provider" = "SES ASTRA" } { "frequency" = "12551" } { "parameter" = "VC56M2O0S0" } { "signal_source" = "S19.2E" } { "symbol_rate" = "22000" } { "vpid" = "1111" { "codec" = "2" } } { "apid" = "1112" { "lang" = "fra" } { "codec" = "3" } } { "tpid" = "1116" } { "caid" = "0" } { "sid" = "12174" } { "nid" = "1" } { "tid" = "1108" } { "rid" = "0" } } { "group" = "FAVORIS" { "entry" = "Direct 8 TV" { "provider" = "SES ASTRA" } { "frequency" = "12551" } { "parameter" = "VC56M2O0S0" } { "signal_source" = "S19.2E" } { "symbol_rate" = "22000" } { "vpid" = "1111" { "codec" = "2" } } { "apid" = "1112" { "lang" = "fra" } { "codec" = "3" } } { "tpid" = "1116" } { "caid" = "0" } { "sid" = "12175" } { "nid" = "1" } { "tid" = "1108" } { "rid" = "0" } } { "entry" = "TF1" { "provider" = "CSAT" } { "frequency" = "11895" } { "parameter" = "VC34M2O0S0" } { "signal_source" = "S19.2E" } { "symbol_rate" = "27500" } { "vpid" = "171" { "codec" = "2" } } { "apid" = "124" { "lang" = "fra" } { "lang" = "spa" } { "codec" = "4" } } { "apid" = "125" { "lang" = "eng" } { "codec" = "4" } } { "apid_dolby" = "126" { "lang" = "deu" } { "codec" = "4" } } { "tpid" = "53" } { "caid" = "500" } { "caid" = "1811" } { "caid" = "1863" } { "caid" = "100" } { "sid" = "8371" } { "nid" = "1" } { "tid" = "1074" } { "rid" = "0" } } } { "group" = "TNT" { "entry" = "TF1" { "provider" = "SMR6" } { "frequency" = "690167" } { "parameter" = "I999B8C999D999M998T999G999Y0" } { "signal_source" = "T" } { "symbol_rate" = "27500" } { "vpid" = "120" { "codec" = "2" } } { "apid" = "130" { "lang" = "fra" } { "codec" = "3" } } { "apid" = "131" { "lang" = "eng" } { "codec" = "3" } } { "apid" = "133" { "lang" = "qad" } { "codec" = "3" } } { "tpid" = "140" } { "tpid_bylang" = "150" { "lang" = "fra" } } { "tpid_bylang" = "151" { "lang" = "eng" } } { "caid" = "0" } { "sid" = "1537" } { "nid" = "8442" } { "tid" = "6" } { "rid" = "0" } } { "#comment" = "this is a comment" } { "entry" = "France 5" { "provider" = "GR1" } { "frequency" = "618167" } { "parameter" = "I999B8C999D999M998T999G999Y0" } { "signal_source" = "T" } { "symbol_rate" = "27500" } { "vpid" = "374" } { "vpid_pcr" = "320" { "codec" = "2" } } { "apid" = "330" { "lang" = "fra" } { "codec" = "3" } } { "apid" = "331" { "lang" = "qad" } { "codec" = "3" } } { "tpid" = "0" } { "tpid_bylang" = "340" { "lang" = "fra" } } { "caid" = "0" } { "sid" = "260" } { "nid" = "8442" } { "tid" = "1" } { "rid" = "0" } } { "entry" = "CANAL+ FAMILY HD" { "frequency" = "12012" } { "parameter" = "VC23M5O35S1" } { "signal_source" = "S19.2E" } { "symbol_rate" = "27500" } { "vpid" = "164" { "codec" = "27" } } { "apid" = "0" } { "apid_dolby" = "98" { "codec" = "106" } } { "apid_dolby" = "99" { "lang" = "eng" } { "codec" = "106" } } { "tpid" = "0" } { "tpid_bylang" = "45" { "lang" = "fra" } { "lang" = "fra" } } { "caid" = "1811" } { "caid" = "500" } { "caid" = "1863" } { "caid" = "100" } { "caid" = "9C4" } { "caid" = "9C7" } { "caid" = "9AF" } { "sid" = "8825" } { "nid" = "1" } { "tid" = "1080" } { "rid" = "0" } } }
test Collectd.lns get simple = { "directive" = "LoadPlugin" { "arg" = "contextswitch" } } { "directive" = "LoadPlugin" { "arg" = "cpu" } } { "directive" = "FQDNLookup" { "arg" = "\"true\"" } } { "directive" = "Include" { "arg" = "\"/var/lib/puppet/modules/collectd/plugins/*.conf\"" } }
Get config
test CPanel.lns get config = { "#comment" = "### NOTICE ####" } { "#comment" = "After manually editing any configuration settings in this file," } { "#comment" = "please run '/usr/local/cpanel/whostmgr/bin/whostmgr2 --updatetweaksettings'" } { "#comment" = "to fully update your server's configuration." } { } { "skipantirelayd" = "1" } { "ionice_optimizefs" = "6" } { "account_login_access" = "owner_root" } { "enginepl" = "cpanel.pl" } { "stats_log" = "/usr/local/cpanel/logs/stats_log" } { "cpaddons_notify_users" = "Allow users to choose" } { "apache_port" = "0.0.0.0:80" } { "allow_server_info_status_from" = "" } { "system_diskusage_warn_percent" = "82.5500" } { "maxemailsperhour" } { "email_send_limits_max_defer_fail_percentage" } { "default_archive-logs" = "1" } { "SecurityPolicy::xml-api" = "1" }
Testing the full FAI_DiskConfig.lns on simple_config
test FAI_DiskConfig.lns get simple_config = { "#comment" = "A comment" } { "disk_config" = "disk2" { "raw-disk" { "mountpoint" = "-" } { "size" = "0" } { "filesystem" = "-" } { "mount_options" { "1" = "-" } } } } { } { "disk_config" = "lvm" { "vg" { "name" = "my_pv" } { "disk" = "sda2" } } { "vg" { "name" = "test" } { "disk" = "disk1" { "partition" = "9" } } } { "lv" { "vg" = "my_pv" } { "name" = "_swap" } { "mountpoint" = "swap" } { "size" = "2048" } { "filesystem" = "swap" } { "mount_options" { "1" = "sw" } } } { "lv" { "vg" = "my_pv" } { "name" = "_root" } { "mountpoint" = "/" } { "size" = "2048" } { "filesystem" = "ext3" } { "mount_options" { "1" = "rw" } { "2" = "errors" { "value" = "remount-ro" } } } } } { } { "disk_config" = "raid" { "raid1" { "mountpoint" = "/boot" } { "disk" = "disk1" { "partition" = "1" } } { "disk" = "disk2" { "partition" = "1" } } { "disk" = "disk3" { "partition" = "1" } } { "disk" = "disk4" { "partition" = "1" } } { "disk" = "disk5" { "partition" = "1" } } { "disk" = "disk6" { "partition" = "1" } } { "filesystem" = "ext3" } { "mount_options" { "1" = "rw" } } } { "raid1" { "mountpoint" = "swap" } { "disk" = "disk1" { "partition" = "2" } } { "disk" = "disk2" { "partition" = "2" } } { "disk" = "disk3" { "partition" = "2" } } { "disk" = "disk4" { "partition" = "2" } } { "disk" = "disk5" { "partition" = "2" } } { "disk" = "disk6" { "partition" = "2" } } { "filesystem" = "swap" } { "mount_options" { "1" = "sw" } } } { "raid5" { "mountpoint" = "/srv/data" } { "disk" = "disk1" { "partition" = "11" } } { "disk" = "disk2" { "partition" = "11" } } { "disk" = "disk3" { "partition" = "11" } } { "disk" = "disk4" { "partition" = "11" } } { "disk" = "disk5" { "partition" = "11" } } { "disk" = "disk6" { "partition" = "11" } } { "filesystem" = "ext3" } { "mount_options" { "1" = "ro" } } { "fs_options" { "createopts" = "-m 0" } } } { "raid0" { "mountpoint" = "-" } { "disk" = "disk2" { "partition" = "2" } } { "disk" = "sdc1" } { "disk" = "sde1" { "spare" } { "missing" } } { "filesystem" = "ext2" } { "mount_options" { "1" = "default" } } } } { } { "disk_config" = "tmpfs" { "tmpfs" { "mountpoint" = "/var/opt/hosting/tmp" } { "size" = "500" } { "mount_options" { "1" = "defaults" } } } }
test Fonts.lns get conf = { "#declaration" { "#attribute" { "version" = "1.0" } } } { "!DOCTYPE" = "fontconfig" { "SYSTEM" = "fonts.dtd" } } { "#comment" = " /etc/fonts/fonts.conf file to configure system font access " } { "fontconfig" { "#text" = " " } { "#comment" = " DO NOT EDIT THIS FILE. IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED. LOCAL CHANGES BELONG IN 'local.conf'. The intent of this standard configuration file is to be adequate for most environments. If you have a reasonably normal environment and have found problems with this configuration, they are probably things that others will also want fixed. Please submit any problems to the fontconfig bugzilla system located at fontconfig.org Note that the normal 'make install' procedure for fontconfig is to replace any existing fonts.conf file with the new version. Place any local customizations in local.conf which this file references. Keith Packard " } { "#text" = " " } { "#comment" = " Font directory list " } { "#text" = " " } { "dir" { "#text" = "/usr/share/fonts" } } { "#text" = " " } { "dir" { "#text" = "/usr/X11R6/lib/X11/fonts" } } { "#text" = " " } { "dir" { "#text" = "/usr/local/share/fonts" } } { "#text" = " " } { "dir" { "#text" = "~/.fonts" } } { "#text" = " " } { "#comment" = " Accept deprecated 'mono' alias, replacing it with 'monospace' " } { "#text" = " " } { "match" { "#attribute" { "target" = "pattern" } } { "#text" = " " } { "test" { "#attribute" { "qual" = "any" } { "name" = "family" } } { "#text" = " " } { "string" { "#text" = "mono" } } { "#text" = " " } } { "#text" = " " } { "edit" { "#attribute" { "name" = "family" } { "mode" = "assign" } } { "#text" = " " } { "string" { "#text" = "monospace" } } { "#text" = " " } } { "#text" = " " } } { "#text" = " " } { "#comment" = " Accept alternate 'sans serif' spelling, replacing it with 'sans-serif' " } { "#text" = " " } { "match" { "#attribute" { "target" = "pattern" } } { "#text" = " " } { "test" { "#attribute" { "qual" = "any" } { "name" = "family" } } { "#text" = " " } { "string" { "#text" = "sans serif" } } { "#text" = " " } } { "#text" = " " } { "edit" { "#attribute" { "name" = "family" } { "mode" = "assign" } } { "#text" = " " } { "string" { "#text" = "sans-serif" } } { "#text" = " " } } { "#text" = " " } } { "#text" = " " } { "#comment" = " Accept deprecated 'sans' alias, replacing it with 'sans-serif' " } { "#text" = " " } { "match" { "#attribute" { "target" = "pattern" } } { "#text" = " " } { "test" { "#attribute" { "qual" = "any" } { "name" = "family" } } { "#text" = " " } { "string" { "#text" = "sans" } } { "#text" = " " } } { "#text" = " " } { "edit" { "#attribute" { "name" = "family" } { "mode" = "assign" } } { "#text" = " " } { "string" { "#text" = "sans-serif" } } { "#text" = " " } } { "#text" = " " } } { "#text" = " " } { "#comment" = " Load local system customization file " } { "#text" = " " } { "include" { "#attribute" { "ignore_missing" = "yes" } } { "#text" = "conf.d" } } { "#text" = " " } { "#comment" = " Font cache directory list " } { "#text" = " " } { "cachedir" { "#text" = "/var/cache/fontconfig" } } { "#text" = " " } { "cachedir" { "#text" = "~/.fontconfig" } } { "#text" = " " } { "config" { "#text" = " " } { "#comment" = " These are the default Unicode chars that are expected to be blank in fonts. All other blank chars are assumed to be broken and won't appear in the resulting charsets " } { "#text" = " " } { "blank" { "#text" = " " } { "int" { "#text" = "0x0020" } } { "#text" = " " } { "#comment" = " SPACE " } { "#text" = " " } { "int" { "#text" = "0x00A0" } } { "#text" = " " } { "#comment" = " NO-BREAK SPACE " } { "#text" = " " } { "int" { "#text" = "0x00AD" } } { "#text" = " " } { "#comment" = " SOFT HYPHEN " } { "#text" = " " } { "int" { "#text" = "0x034F" } } { "#text" = " " } { "#comment" = " COMBINING GRAPHEME JOINER " } { "#text" = " " } { "int" { "#text" = "0x0600" } } { "#text" = " " } { "#comment" = " ARABIC NUMBER SIGN " } { "#text" = " " } { "int" { "#text" = "0x0601" } } { "#text" = " " } { "#comment" = " ARABIC SIGN SANAH " } { "#text" = " " } { "int" { "#text" = "0x0602" } } { "#text" = " " } { "#comment" = " ARABIC FOOTNOTE MARKER " } { "#text" = " " } { "int" { "#text" = "0x0603" } } { "#text" = " " } { "#comment" = " ARABIC SIGN SAFHA " } { "#text" = " " } { "int" { "#text" = "0x06DD" } } { "#text" = " " } { "#comment" = " ARABIC END OF AYAH " } { "#text" = " " } { "int" { "#text" = "0x070F" } } { "#text" = " " } { "#comment" = " SYRIAC ABBREVIATION MARK " } { "#text" = " " } { "int" { "#text" = "0x115F" } } { "#text" = " " } { "#comment" = " HANGUL CHOSEONG FILLER " } { "#text" = " " } { "int" { "#text" = "0x1160" } } { "#text" = " " } { "#comment" = " HANGUL JUNGSEONG FILLER " } { "#text" = " " } { "int" { "#text" = "0x1680" } } { "#text" = " " } { "#comment" = " OGHAM SPACE MARK " } { "#text" = " " } { "int" { "#text" = "0x17B4" } } { "#text" = " " } { "#comment" = " KHMER VOWEL INHERENT AQ " } { "#text" = " " } { "int" { "#text" = "0x17B5" } } { "#text" = " " } { "#comment" = " KHMER VOWEL INHERENT AA " } { "#text" = " " } { "int" { "#text" = "0x180E" } } { "#text" = " " } { "#comment" = " MONGOLIAN VOWEL SEPARATOR " } { "#text" = " " } { "int" { "#text" = "0x2000" } } { "#text" = " " } { "#comment" = " EN QUAD " } { "#text" = " " } { "int" { "#text" = "0x2001" } } { "#text" = " " } { "#comment" = " EM QUAD " } { "#text" = " " } { "int" { "#text" = "0x2002" } } { "#text" = " " } { "#comment" = " EN SPACE " } { "#text" = " " } { "int" { "#text" = "0x2003" } } { "#text" = " " } { "#comment" = " EM SPACE " } { "#text" = " " } { "int" { "#text" = "0x2004" } } { "#text" = " " } { "#comment" = " THREE-PER-EM SPACE " } { "#text" = " " } { "int" { "#text" = "0x2005" } } { "#text" = " " } { "#comment" = " FOUR-PER-EM SPACE " } { "#text" = " " } { "int" { "#text" = "0x2006" } } { "#text" = " " } { "#comment" = " SIX-PER-EM SPACE " } { "#text" = " " } { "int" { "#text" = "0x2007" } } { "#text" = " " } { "#comment" = " FIGURE SPACE " } { "#text" = " " } { "int" { "#text" = "0x2008" } } { "#text" = " " } { "#comment" = " PUNCTUATION SPACE " } { "#text" = " " } { "int" { "#text" = "0x2009" } } { "#text" = " " } { "#comment" = " THIN SPACE " } { "#text" = " " } { "int" { "#text" = "0x200A" } } { "#text" = " " } { "#comment" = " HAIR SPACE " } { "#text" = " " } { "int" { "#text" = "0x200B" } } { "#text" = " " } { "#comment" = " ZERO WIDTH SPACE " } { "#text" = " " } { "int" { "#text" = "0x200C" } } { "#text" = " " } { "#comment" = " ZERO WIDTH NON-JOINER " } { "#text" = " " } { "int" { "#text" = "0x200D" } } { "#text" = " " } { "#comment" = " ZERO WIDTH JOINER " } { "#text" = " " } { "int" { "#text" = "0x200E" } } { "#text" = " " } { "#comment" = " LEFT-TO-RIGHT MARK " } { "#text" = " " } { "int" { "#text" = "0x200F" } } { "#text" = " " } { "#comment" = " RIGHT-TO-LEFT MARK " } { "#text" = " " } { "int" { "#text" = "0x2028" } } { "#text" = " " } { "#comment" = " LINE SEPARATOR " } { "#text" = " " } { "int" { "#text" = "0x2029" } } { "#text" = " " } { "#comment" = " PARAGRAPH SEPARATOR " } { "#text" = " " } { "int" { "#text" = "0x202A" } } { "#text" = " " } { "#comment" = " LEFT-TO-RIGHT EMBEDDING " } { "#text" = " " } { "int" { "#text" = "0x202B" } } { "#text" = " " } { "#comment" = " RIGHT-TO-LEFT EMBEDDING " } { "#text" = " " } { "int" { "#text" = "0x202C" } } { "#text" = " " } { "#comment" = " POP DIRECTIONAL FORMATTING " } { "#text" = " " } { "int" { "#text" = "0x202D" } } { "#text" = " " } { "#comment" = " LEFT-TO-RIGHT OVERRIDE " } { "#text" = " " } { "int" { "#text" = "0x202E" } } { "#text" = " " } { "#comment" = " RIGHT-TO-LEFT OVERRIDE " } { "#text" = " " } { "int" { "#text" = "0x202F" } } { "#text" = " " } { "#comment" = " NARROW NO-BREAK SPACE " } { "#text" = " " } { "int" { "#text" = "0x205F" } } { "#text" = " " } { "#comment" = " MEDIUM MATHEMATICAL SPACE " } { "#text" = " " } { "int" { "#text" = "0x2060" } } { "#text" = " " } { "#comment" = " WORD JOINER " } { "#text" = " " } { "int" { "#text" = "0x2061" } } { "#text" = " " } { "#comment" = " FUNCTION APPLICATION " } { "#text" = " " } { "int" { "#text" = "0x2062" } } { "#text" = " " } { "#comment" = " INVISIBLE TIMES " } { "#text" = " " } { "int" { "#text" = "0x2063" } } { "#text" = " " } { "#comment" = " INVISIBLE SEPARATOR " } { "#text" = " " } { "int" { "#text" = "0x206A" } } { "#text" = " " } { "#comment" = " INHIBIT SYMMETRIC SWAPPING " } { "#text" = " " } { "int" { "#text" = "0x206B" } } { "#text" = " " } { "#comment" = " ACTIVATE SYMMETRIC SWAPPING " } { "#text" = " " } { "int" { "#text" = "0x206C" } } { "#text" = " " } { "#comment" = " INHIBIT ARABIC FORM SHAPING " } { "#text" = " " } { "int" { "#text" = "0x206D" } } { "#text" = " " } { "#comment" = " ACTIVATE ARABIC FORM SHAPING " } { "#text" = " " } { "int" { "#text" = "0x206E" } } { "#text" = " " } { "#comment" = " NATIONAL DIGIT SHAPES " } { "#text" = " " } { "int" { "#text" = "0x206F" } } { "#text" = " " } { "#comment" = " NOMINAL DIGIT SHAPES " } { "#text" = " " } { "int" { "#text" = "0x2800" } } { "#text" = " " } { "#comment" = " BRAILLE PATTERN BLANK " } { "#text" = " " } { "int" { "#text" = "0x3000" } } { "#text" = " " } { "#comment" = " IDEOGRAPHIC SPACE " } { "#text" = " " } { "int" { "#text" = "0x3164" } } { "#text" = " " } { "#comment" = " HANGUL FILLER " } { "#text" = " " } { "int" { "#text" = "0xFEFF" } } { "#text" = " " } { "#comment" = " ZERO WIDTH NO-BREAK SPACE " } { "#text" = " " } { "int" { "#text" = "0xFFA0" } } { "#text" = " " } { "#comment" = " HALFWIDTH HANGUL FILLER " } { "#text" = " " } { "int" { "#text" = "0xFFF9" } } { "#text" = " " } { "#comment" = " INTERLINEAR ANNOTATION ANCHOR " } { "#text" = " " } { "int" { "#text" = "0xFFFA" } } { "#text" = " " } { "#comment" = " INTERLINEAR ANNOTATION SEPARATOR " } { "#text" = " " } { "int" { "#text" = "0xFFFB" } } { "#text" = " " } { "#comment" = " INTERLINEAR ANNOTATION TERMINATOR " } { "#text" = " " } } { "#comment" = " Rescan configuration every 30 seconds when FcFontSetList is called " } { "#text" = " " } { "rescan" { "#text" = " " } { "int" { "#text" = "30" } } { "#text" = " " } } { "#text" = " " } } { "#text" = " " } }
test Fuse.lns get conf = { "#comment" = "Set the maximum number of FUSE mounts allowed to non-root users." } { "mount_max" = "1000" } { } { "#comment" = "Allow non-root users to specify the 'allow_other' or 'allow_root'" } { "user_allow_other" }
Test without label
test GtkBookmarks.lns get "ftp://user@myftp.com/somedir\n" = { "bookmark" = "ftp://user@myftp.com/somedir" }
test Inputrc.lns get conf = { "#comment" = "/etc/inputrc - global inputrc for libreadline" } { "#comment" = "See readline(3readline) and `info rluserman' for more information." } { } { "#comment" = "Be 8 bit clean." } { "input-meta" = "on" } { "output-meta" = "on" } { } { "#comment" = "To allow the use of 8bit-characters like the german umlauts, uncomment" } { "#comment" = "the line below. However this makes the meta key not work as a meta key," } { "#comment" = "which is annoying to those which don't need to type in 8-bit characters." } { } { "#comment" = "set convert-meta off" } { } { "#comment" = "try to enable the application keypad when it is called. Some systems" } { "#comment" = "need this to enable the arrow keys." } { "#comment" = "set enable-keypad on" } { } { "#comment" = "see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys" } { } { "#comment" = "do not bell on tab-completion" } { "#comment" = "set bell-style none" } { "#comment" = "set bell-style visible" } { } { "#comment" = "some defaults / modifications for the emacs mode" }
Test the full conf
test Iscsid.lns get conf = { "#comment" = "###############" } { "#comment" = "iSNS settings" } { "#comment" = "###############" } { "#comment" = "Address of iSNS server" } { "isns.address" = "127.0.0.1" } { "isns.port" = "3260" } { } { "#comment" = "*************" } { "#comment" = "CHAP Settings" } { "#comment" = "*************" } { } { "#comment" = "To enable CHAP authentication set node.session.auth.authmethod" } { "#comment" = "to CHAP. The default is None." } { "node.session.auth.authmethod" = "CHAP" } { } { "#comment" = "To set a CHAP username and password for initiator" } { "#comment" = "authentication by the target(s), uncomment the following lines:" } { "node.session.auth.username" = "someuser1" } { "node.session.auth.password" = "somep$31#$^&7!" } { } { "#comment" = "To enable CHAP authentication for a discovery session to the target" } { "#comment" = "set discovery.sendtargets.auth.authmethod to CHAP. The default is None." } { "discovery.sendtargets.auth.authmethod" = "CHAP" } { } { "#comment" = "To set a discovery session CHAP username and password for the initiator" } { "#comment" = "authentication by the target(s), uncomment the following lines:" } { "discovery.sendtargets.auth.username" = "someuser3" }
Check whole config file
test Kdump.lns get conf = { "#comment" = "this is a comment" } { "#comment" = "another commented line" } { } { "#comment" = "comment after empty line" } { } { "#comment" = "comment after empty comment" } { "path" = "/var/crash" { "#comment" = "comment after entry" } } { "core_collector" = "makedumpfile -c" } { "default" = "poweroff" } { "raw" = "/dev/sda5" } { "ext3" = "/dev/sda3" } { "net" = "my.server.com:/export/tmp" } { "nfs" = "my.server.com:/export/tmp" } { "net" = "user@my.server.com" } { "ssh" = "user@my.server.com" } { "link_delay" = "60" } { "kdump_pre" = "/var/crash/scripts/kdump-pre.sh" } { "kdump_post" = "/var/crash/scripts/kdump-post.sh" } { "#comment" = "extra_bins /usr/bin/lftp /a/b/c" } { "extra_bins" { "1" = "/usr/bin/lftp" } { "2" = "/a/b/c" } { "#comment" = "comment" } } { "disk_timeout" = "30" } { "extra_modules" { "1" = "gfs2" } { "2" = "extra" } { "3" = "modules" } { "4" = "more" } } { "options" { "babla" { "labl" } { "kbak" } { "df" = "dfg" } } } { "options" { "babla" { "labl" } { "kbak" } { "df" = "dfg" } } } { "options" { "babla" { "labl" } { "kbak" } { "df" = "dfg" } } { "#comment" = "comment" } } { "sshkey" = "/root/.ssh/kdump_id_rsa" } { "force_rebuild" = "1" } { "override_resettable" = "1" } { "dracut_args" = "--omit-drivers \"cfg80211 snd\" --add-drivers \"ext2 ext3\"" } { "fence_kdump_args" = "-p 7410 -f auto" } { "fence_kdump_nodes" { "1" = "192.168.1.10" } { "2" = "10.34.63.155" } } { "debug_mem_level" = "3" } { "blacklist" { "1" = "gfs2" } }
Test the full conf
test Keepalived.lns get conf = { "#comment" = "This is a comment" } { "#comment" = "Configuration File for keepalived" } {} { "global_defs" { "#comment" = "this is who emails will go to on alerts" } { "notification_email" { "email" = "admins@example.com" } { "email" = "fakepager@example.com" } { "#comment" = "add a few more email addresses here if you would like" } } { "notification_email_from" = "admins@example.com" } { } { "smtp_server" = "127.0.0.1" { "#comment" = "I use the local machine to relay mail" } } { "smtp_connect_timeout" = "30" } {} { "#comment" = "each load balancer should have a different ID" } { "#comment" = "this will be used in SMTP alerts, so you should make" } { "#comment" = "each router easily identifiable" } { "lvs_id" = "LVS_EXAMPLE_01" } } {} { "vrrp_sync_group" = "VG1" { "group" { "inside_network" { "#comment" = "name of vrrp_instance (below)" } } { "outside_network" { "#comment" = "One for each moveable IP." } } } } {}
Simple get test
test Known_Hosts.lns get "# A comment foo.example.com,foo,bar ecdsa-sha2-nistp256 AAABBBDKDFX= |1|FhUqf1kMlRWNfK6InQSAmXiNiSY=|jwbKFwD4ipl6D0k6OoshmW7xOao= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIvNOU8OedkWalFmoFcJWP3nasnCLx6M78F9y0rzTQtplggNd0dvR0A4SQOBfHInmk5dH6YGGcpT3PM3cJBR7rI=\n" = { "#comment" = "A comment" } { "1" = "foo.example.com" { "alias" = "foo" } { "alias" = "bar" } { "type" = "ecdsa-sha2-nistp256" } { "key" = "AAABBBDKDFX=" } } { "2" = "|1|FhUqf1kMlRWNfK6InQSAmXiNiSY=|jwbKFwD4ipl6D0k6OoshmW7xOao=" { "type" = "ecdsa-sha2-nistp256" } { "key" = "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIvNOU8OedkWalFmoFcJWP3nasnCLx6M78F9y0rzTQtplggNd0dvR0A4SQOBfHInmk5dH6YGGcpT3PM3cJBR7rI=" } }
test Ldso.lns get conf = { "include" = "/etc/ld.so.conf.d/*.conf" } { } { "#comment" = "libc default configuration" } { "path" = "/usr/local/lib" } { } { "hwcap" { "bit" = "1" } { "name" = "nosegneg" } }
Test the full conf
test LVM.lns get conf = { "#comment" = "Generated by LVM2: date" } {} { "contents" { "str" = "Text Format Volume Group" } } { "version" { "int" = "1" } } {} { "description" { "str" = "Created *after* executing 'eek'" } } {} { "creation_host" { "str" = "eek" } { "#comment" = "Linux eek" } } { "creation_time" { "int" = "6666666666" } { "#comment" = "eeeek" } } {} { "VG1" { "dict" { "id" { "str" = "uuid-uuid-uuid-uuid" } } { "seqno" { "int" = "2" } } { "status" { "list" { "1" { "str" = "RESIZEABLE" } } { "2" { "str" = "READ" } } { "3" { "str" = "WRITE" } } } } { "extent_size" { "int" = "8192" } { "#comment" = "4 Megabytes" } } { "max_lv" { "int" = "0" } } { "max_pv" { "int" = "0" } } { "process_priority" { "int" = "-18" } } {} { "physical_volumes" { "dict" { "pv0" { "dict" { "id" { "str" = "uuid-uuid-uuid-uuid" } } { "device" { "str" = "/dev/sda6" } { "#comment" = "Hint only" } } {} { "status" { "list" { "1" { "str" = "ALLOCATABLE" } } } } { "pe_start" { "int" = "123" } } { "pe_count" { "int" = "123456" } { "#comment" = "many Gigabytes" } } } } } } {} { "logical_volumes" { "dict" { "LogicalEek" { "dict" { "id" { "str" = "uuid-uuid-uuid-uuid" } } { "status" { "list" { "1" { "str" = "READ" } } { "2" { "str" = "WRITE" } } { "3" { "str" = "VISIBLE" } } } } { "segment_count" { "int" = "1" } } {} { "segment1" { "dict" { "start_extent" { "int" = "0" } } { "extent_count" { "int" = "123456" } { "#comment" = "beaucoup Gigabytes" } } {} { "type" { "str" = "striped" } } { "stripe_count" { "int" = "1" } { "#comment" = "linear" } } {} { "stripes" { "list" { "1" { "str" = "pv0" } } { "2" { "int" = "0" } } } } } } } } } } } }
test MongoDBServer.lns get conf = { "port" = "27017" } { "fork" = "true" } { "pidfilepath" = "/var/run/mongodb/mongodb.pid" } { "logpath" = "/var/log/mongodb/mongodb.log" } { "dbpath" = "/var/lib/mongodb" } { "journal" = "true" } { "nohttpinterface" = "true" }
test NetworkManager.lns get conf = { "connection" { "id" = "wifoobar" } { "uuid" = "16fa8830-cf15-4523-8c1f-c6c635246855" } { "permissions" = "user:foo:;" } { "type" = "802-11-wireless" } { } } { "802-11-wireless" { "ssid" = "wifoobar" } { "mode" = "infrastructure" } { "mac-address" = "11:00:99:33:33:AA" } { "security" = "802-11-wireless-security" } { } } { "802-11-wireless-security" { "key-mgmt" = "none" } { "wep-key0" = "123abc123abc" } { } } { "ipv4" { "method" = "auto" } { } } { "ipv6" { "method" = "auto" } { } } { "vpn" { "NAT Traversal Mode" = "natt" } { "DPD idle timeout (our side)" = "0" } }
test OpenShift_Config.lns get conf = { "CLOUD_DOMAIN" = "example.com" } { "VALID_GEAR_SIZES" = "small,medium" } { "DEFAULT_MAX_GEARS" = "100" } { "DEFAULT_GEAR_CAPABILITIES" = "small" } { "DEFAULT_GEAR_SIZE" = "small" } { "MONGO_HOST_PORT" = "localhost:27017" } { "MONGO_USER" = "openshift" } { "MONGO_PASSWORD" = "mooo" } { "MONGO_DB" = "openshift_broker_dev" } { "MONGO_SSL" = "false" } { "ENABLE_USAGE_TRACKING_DATASTORE" = "false" } { "ENABLE_USAGE_TRACKING_AUDIT_LOG" = "false" } { "USAGE_TRACKING_AUDIT_LOG_FILE" = "/var/log/openshift/broker/usage.log" } { "ENABLE_ANALYTICS" = "false" } { "ENABLE_USER_ACTION_LOG" = "true" } { "USER_ACTION_LOG_FILE" = "/var/log/openshift/broker/user_action.log" } { "AUTH_PRIVKEYFILE" = "/etc/openshift/server_priv.pem" } { "AUTH_PRIVKEYPASS" } { "AUTH_PUBKEYFILE" = "/etc/openshift/server_pub.pem" } { "AUTH_RSYNC_KEY_FILE" = "/etc/openshift/rsync_id_rsa" } { "AUTH_SCOPE_TIMEOUTS" = "session=1.days|7.days, *=1.months|6.months" } { "ENABLE_MAINTENANCE_MODE" = "false" } { "MAINTENANCE_NOTIFICATION_FILE" = "/etc/openshift/outage_notification.txt" } { "DOWNLOAD_CARTRIDGES_ENABLED" = "false" }
test OpenShift_Quickstarts.lns get conf = { "array" { "dict" { "entry" = "quickstart" { "dict" { "entry" = "id" { "string" = "1" } } { "entry" = "name" { "string" = "CakePHP" } } { "entry" = "website" { "string" = "http://cakephp.org/" } } { "entry" = "initial_git_url" { "string" = "git://github.com/openshift/cakephp-example.git" } } { "entry" = "cartridges" { "array" { "string" = "php-5.4" } { "string" = "mysql-5.1" } } } { "entry" = "summary" { "string" = "CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Active Record, Association Data Mapping, Front Controller and MVC." } } { "entry" = "tags" { "array" { "string" = "php" } { "string" = "cakephp" } { "string" = "framework" } } } { "entry" = "admin_tags" { "array" } } } } } { "dict" { "entry" = "quickstart" { "dict" { "entry" = "id" { "string" = "2" } } { "entry" = "name" { "string" = "Django" } } { "entry" = "website" { "string" = "https://www.djangoproject.com/" } } { "entry" = "initial_git_url" { "string" = "git://github.com/openshift/django-example.git" } } { "entry" = "cartridges" { "array" { "string" = "python-2.7" } } } { "entry" = "summary" { "string" = "A high-level Python web framework that encourages rapid development and clean, pragmatic design. Administrator user name and password are written to $OPENSHIFT_DATA_DIR/CREDENTIALS." } } { "entry" = "tags" { "array" { "string" = "python" } { "string" = "django" } { "string" = "framework" } } } { "entry" = "admin_tags" { "array" } } } } } { "dict" { "entry" = "quickstart" { "dict" { "entry" = "id" { "string" = "4" } } { "entry" = "name" { "string" = "Drupal" } } { "entry" = "website" { "string" = "http://drupal.org/" } } { "entry" = "initial_git_url" { "string" = "git://github.com/openshift/drupal-example.git" } } { "entry" = "cartridges" { "array" { "string" = "php-5.4" } { "string" = "mysql-5.1" } } } { "entry" = "summary" { "string" = "An open source content management platform written in PHP powering millions of websites and applications. It is built, used, and supported by an active and diverse community of people around the world. Administrator user name and password are written to $OPENSHIFT_DATA_DIR/CREDENTIALS." } } { "entry" = "tags" { "array" { "string" = "php" } { "string" = "drupal" } { "string" = "wiki" } { "string" = "framework" } { "string" = "instant_app" } } } { "entry" = "admin_tags" { "array" } } } } } { "dict" { "entry" = "quickstart" { "dict" { "entry" = "id" { "string" = "6" } } { "entry" = "name" { "string" = "Ruby on Rails" } } { "entry" = "website" { "string" = "http://rubyonrails.org/" } } { "entry" = "initial_git_url" { "string" = "git://github.com/openshift/rails-example.git" } } { "entry" = "cartridges" { "array" { "string" = "ruby-1.9" } { "string" = "mysql-5.1" } } } { "entry" = "summary" { "string" = "An open source web framework for Ruby that is optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration." } } { "entry" = "tags" { "array" { "string" = "ruby" } { "string" = "rails" } { "string" = "framework" } } } { "entry" = "admin_tags" { "array" } } } } } { "dict" { "entry" = "quickstart" { "dict" { "entry" = "id" { "string" = "8" } } { "entry" = "name" { "string" = "WordPress" } } { "entry" = "website" { "string" = "http://wordpress.org" } } { "entry" = "initial_git_url" { "string" = "git://github.com/openshift/wordpress-example.git" } } { "entry" = "cartridges" { "array" { "string" = "php-5.4" } { "string" = "mysql-5.1" } } } { "entry" = "summary" { "string" = "A semantic personal publishing platform written in PHP with a MySQL back end, focusing on aesthetics, web standards, and usability. Administrator user name and password are written to $OPENSHIFT_DATA_DIR/CREDENTIALS." } } { "entry" = "tags" { "array" { "string" = "php" } { "string" = "wordpress" } { "string" = "blog" } { "string" = "framework" } { "string" = "instant_app" } } } { "entry" = "admin_tags" { "array" } } } } } }
test Postfix_Transport.lns get conf = { "#comment" = "a comment" } { "pattern" = "the.backed-up.domain.tld" { "transport" = "relay" } { "nexthop" = "[their.mail.host.tld]" } } { "pattern" = ".my.domain" { "transport" } { "nexthop" } } { "pattern" = "*" { "transport" = "smtp" } { "nexthop" = "outbound-relay.my.domain" } } { "pattern" = "example.com" { "transport" = "uucp" } { "nexthop" = "example" } } { "pattern" = "example.com" { "transport" = "slow" } { "nexthop" } } { "pattern" = "example.com" { "transport" } { "nexthop" = "[gateway.example.com]" } } { "pattern" = "user.foo@example.com" { "transport" = "smtp" } { "nexthop" = "bar.example:2025" } } { "pattern" = ".example.com" { "transport" = "error" } { "nexthop" = "mail for *.example.com is not deliverable" } }
test Postfix_Virtual.lns get conf = { "#comment" = "a comment" } { "pattern" = "virtual-alias.domain" { "destination" = "anything" } } { "pattern" = "postmaster@virtual-alias.domain" { "destination" = "postmaster" } } { "pattern" = "user1@virtual-alias.domain" { "destination" = "address1" } } { "pattern" = "user2@virtual-alias.domain" { "destination" = "address2" } { "destination" = "address3" } } { "pattern" = "root" { "destination" = "robert.oot@domain.com" } } { "pattern" = "@example.net" { "destination" = "root" } { "destination" = "postmaster" } } { "pattern" = "postmaster" { "destination" = "mtaadmin+root=mta1" } }
test Postgresql.lns get conf = { "data_directory" = "/var/lib/postgresql/8.4/main" { "#comment" = "use data in another directory" } } { "hba_file" = "/etc/postgresql/8.4/main/pg_hba.conf" { "#comment" = "host-based authentication file" } } { "ident_file" = "/etc/postgresql/8.4/main/pg_ident.conf" { "#comment" = "ident configuration file" } } { } { "#comment" = "If external_pid_file is not explicitly set, no extra PID file is written." } { "external_pid_file" = "/var/run/postgresql/8.4-main.pid" { "#comment" = "write an extra PID file" } } { "listen_addresses" = "localhost" { "#comment" = "what IP address(es) to listen on;" } } { "port" = "5432" { "#comment" = "(change requires restart)" } } { "max_connections" = "100" { "#comment" = "(change requires restart)" } } { "superuser_reserved_connections" = "3" { "#comment" = "(change requires restart)" } } { "unix_socket_directory" = "/var/run/postgresql" { "#comment" = "(change requires restart)" } } { "unix_socket_group" = "" { "#comment" = "(change requires restart)" } } { "unix_socket_permissions" = "0777" { "#comment" = "begin with 0 to use octal notation" } } { "#comment" = "(change requires restart)" } { "bonjour_name" = "" { "#comment" = "defaults to the computer name" } } { } { "authentication_timeout" = "1min" { "#comment" = "1s-600s" } } { "ssl" = "true" { "#comment" = "(change requires restart)" } } { "ssl_ciphers" = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH" { "#comment" = "allowed SSL ciphers" } } { "ssl_renegotiation_limit" = "512MB" { "#comment" = "amount of data between renegotiations" } } { "password_encryption" = "on" } { "db_user_namespace" = "off" } { } { "search_path" = "\"$user\",public" { "#comment" = "schema names" } } { "default_tablespace" = "" { "#comment" = "a tablespace name, '' uses the default" } } { "temp_tablespaces" = "" { "#comment" = "a list of tablespace names, '' uses" } } { } { "datestyle" = "iso, mdy" } { "intervalstyle" = "postgres" } { "timezone" = "unknown" { "#comment" = "actually, defaults to TZ environment" } }
test Protocols.lns get conf = { "#comment" = "Internet (IP) protocols" } { } { "1" { "protocol" = "ip" } { "number" = "0" } { "alias" = "IP" } { "#comment" = "internet protocol, pseudo protocol number" } } { "#comment" = "hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]" } { "2" { "protocol" = "icmp" } { "number" = "1" } { "alias" = "ICMP" } { "#comment" = "internet control message protocol" } } { "3" { "protocol" = "igmp" } { "number" = "2" } { "alias" = "IGMP" } { "#comment" = "Internet Group Management" } } { "4" { "protocol" = "tp++" } { "number" = "39" } { "alias" = "TP++" } { "#comment" = "TP++ Transport Protocol" } } { "5" { "protocol" = "a/n" } { "number" = "107" } { "alias" = "A/N" } { "#comment" = "Active Networks" } }
test Puppet_Auth.lns get full = { "path" = "^/file_(metadata|content)/user_files/" { "operator" = "~" } { "#comment" = "Set environments" } { "environment" { "1" = "production" } { "2" = "development" } } { "environment" { "3" = "foo" } } { "method" { "1" = "find" } { "2" = "search" } } { "auth" = "yes" } { "method" { "3" = "save" } } { "allow" { "1" = "/^(.+\.)?example.com$/" } } { "allow_ip" { "1" = "192.168.100.0/24" } { "#comment" = "Added in Puppet 3.0.0" } } { "#comment" = "This overrides the previous auth" } { "auth" = "any" } }
test Puppetfile.lns get "forge \"https://forgeapi.puppetlabs.com\" mod 'puppetlabs-razor' mod 'puppetlabs-ntp', \"0.0.3\" mod 'puppetlabs-apt', :git => \"git://github.com/puppetlabs/puppetlabs-apt.git\" mod 'puppetlabs-stdlib', :git => \"git://github.com/puppetlabs/puppetlabs-stdlib.git\" mod 'puppetlabs-apache', '0.6.0', :github_tarball => 'puppetlabs/puppetlabs-apache' metadata\n" = { "forge" = "https://forgeapi.puppetlabs.com" } { } { "1" = "puppetlabs-razor" } { "2" = "puppetlabs-ntp" { "@version" = "0.0.3" } } { } { "3" = "puppetlabs-apt" { "git" = "git://github.com/puppetlabs/puppetlabs-apt.git" } } { } { "4" = "puppetlabs-stdlib" { "git" = "git://github.com/puppetlabs/puppetlabs-stdlib.git" } } { } { "5" = "puppetlabs-apache" { "@version" = "0.6.0" } { "github_tarball" = "puppetlabs/puppetlabs-apache" } } { } { "metadata" }
test Qpid.lns get qpidd = { "#comment" = "Configuration file for qpidd. Entries are of the form:" } { "#comment" = "name=value" } { } { "#comment" = "(Note: no spaces on either side of '='). Using default settings:" } { "#comment" = "\"qpidd --help\" or \"man qpidd\" for more details." } { "cluster-mechanism" = "ANONYMOUS" } { "auth" = "no" } { "max-connections" = "22000" } { "syslog-name" = "qpidd1" }
Top-level test
test Rabbitmq.lns get " % A standard configuration [ {rabbit, [ {ssl_listeners, [5671]}, {ssl_options, [{cacertfile,\"/path/to/testca/cacert.pem\"}, {certfile,\"/path/to/server/cert.pem\"}, {keyfile,\"/path/to/server/key.pem\"}, {verify,verify_peer}, {fail_if_no_peer_cert,false}]} ]} ]. % EOF\n" = { } { "#comment" = "A standard configuration" } { "rabbit" { "ssl_listeners" { "value" = "5671" } } { "ssl_options" { "cacertfile" = "/path/to/testca/cacert.pem" } { "certfile" = "/path/to/server/cert.pem" } { "keyfile" = "/path/to/server/key.pem" } { "verify" = "verify_peer" } { "fail_if_no_peer_cert" = "false" } } } { "#comment" = "EOF" }
Empty value (GH issue #115)
test Redis.lns get "notify-keyspace-events \"\"\n" = { "notify-keyspace-events" = "" }
Testing the full conf against Reprepro_Uploaders.lns
test Reprepro_Uploaders.lns get conf = { "#comment" = "ftpmaster" } { "allow" = "*" { "by" = "key" { "key" = "74BF771E" } } } { } { "allow" { "and" { "or" = "sections" { "or" = "desktop/*" } } } { "by" = "anybody" } } { "allow" { "and" { "or" = "sections" { "or" = "gforge/*" } } } { "and" { "or" = "binaries" { "contain" } { "or" = "bzr" } } { "or" = "source" { "not" } { "or" = "*melanie*" } { "or" = "katya" } } } { "by" = "key" { "key" = "any" } } }
test Rsyslog.lns get conf = { "#comment" = "rsyslog v5 configuration file" } { } { "$ModLoad" = "imuxsock" { "#comment" = "provides support for local system logging (e.g. via logger command)" } } { "$ModLoad" = "imklog" { "#comment" = "provides kernel logging support (previously done by rklogd)" } } { "$UDPServerRun" = "514" } { "$InputTCPServerRun" = "514" } { "$ActionFileDefaultTemplate" = "RSYSLOG_TraditionalFileFormat" } { "$ActionFileEnableSync" = "on" } { "$IncludeConfig" = "/etc/rsyslog.d/*.conf" } { } { "entry" { "selector" { "facility" = "*" } { "level" = "info" } } { "selector" { "facility" = "mail" } { "level" = "none" } } { "selector" { "facility" = "authpriv" } { "level" = "none" } } { "selector" { "facility" = "cron" } { "level" = "none" } } { "action" { "file" = "/var/log/messages" } } } { "entry" { "selector" { "facility" = "authpriv" } { "level" = "*" } } { "action" { "file" = "/var/log/secure" } } } { "entry" { "selector" { "facility" = "*" } { "level" = "emerg" } } { "action" { "user" = "*" } } } { "entry" { "selector" { "facility" = "*" } { "level" = "*" } } { "action" { "protocol" = "@" } { "hostname" = "2.7.4.1" } } } { "entry" { "selector" { "facility" = "*" } { "level" = "*" } } { "action" { "protocol" = "@@" } { "hostname" = "2.7.4.1" } } } { "entry" { "selector" { "facility" = "*" } { "level" = "emerg" } } { "action" { "omusrmsg" = "*" } } } { "entry" { "selector" { "facility" = "*" } { "level" = "emerg" } } { "action" { "omusrmsg" = "foo" } { "omusrmsg" = "bar" } } }
test Simplelines.lns get conf = { "#comment" = "This is a comment" } { } { "1" = "word" } { "2" = "a line" } { "3" = "indented line" } { "4" = "with $péci@l cH@r2ct3rs" }
test Simplevars.lns get conf = { "#comment" = "this is a comment" } { } { "mykey" = "myvalue" { "#comment" = "eol comment" } } { "anotherkey" = "another value" }
Proxycommand is case-insensitive
test Ssh.lns get "Proxycommand ssh -q
Indent when adding to a Match group
test Sshd.lns put match_blocks after set "Match[1]/Settings/PermitRootLogin" "yes"; set "Match[1]/Settings/#comment" "a comment" = "X11Forwarding yes Match User sarko Group pres.* Banner /etc/bienvenue.txt X11Forwarding no PermitRootLogin yes # a comment Match User bush Group pres.* Host white.house.* Banner /etc/welcome.txt\n"
test Subversion.lns get conf = { "#comment" = "This file configures various client-side behaviors." } { "auth" { "password-stores" { "1" = "gnome-keyring" } { "2" = "kwallet" } } { "store-passwords" = "no" } { "store-auth-creds" = "no" } { } } { "helpers" { "editor-cmd" = "/usr/bin/vim" } { "diff-cmd" = "/usr/bin/diff" } { "diff3-cmd" = "/usr/bin/diff3" } { "diff3-has-program-arg" = "yes" } { } } { "tunnels" { "ssh" = "$SVN_SSH ssh -o ControlMaster=no" } { "rsh" = "/path/to/rsh -l myusername" } { } } { "miscellany" { "global-ignores" { "1" = "*.o" } { "2" = "*.lo" } { "3" = "*.la" } { "4" = "*.al" } { "5" = ".libs" } { "6" = "*.so" } { "7" = "*.so.[0-9]*" } { "8" = "*.a" } { "9" = "*.pyc" } { "10" = "*.pyo" } { "11" = "*.rej" } { "12" = "*~" } { "13" = "#*#" } { "14" = ".#*" } { "15" = ".*.swp" } { "16" = ".DS_Store" } } { "#comment" = "Set log-encoding to the default encoding for log messages" } { "log-encoding" = "latin1" } { "use-commit-times" = "yes" } { "no-unlock" = "yes" } { "mime-types-file" = "/path/to/mime.types" } { "preserved-conflict-file-exts" { "1" = "doc" } { "2" = "ppt" } { "3" = "xls" } { "4" = "od?" } } { "enable-auto-props" = "yes" } { "interactive-conflicts" = "no" } { } } { "auto-props" { "*.c" = "svn:eol-style=native" } { "*.cpp" = "svn:eol-style=native" } { "*.h" = "svn:eol-style=native" } { "*.dsp" = "svn:eol-style=CRLF" } { "*.dsw" = "svn:eol-style=CRLF" } { "*.sh" = "svn:eol-style=native;svn:executable" } { "*.txt" = "svn:eol-style=native" } { "*.png" = "svn:mime-type=image/png" } { "*.jpg" = "svn:mime-type=image/jpeg" } { "Makefile" = "svn:eol-style=native" } }
test Sysconfig_Route.lns get "10.40.11.102/32 via 10.40.8.1\n10.1.8.0/24 via 10.40.8.254\n" = { "10.40.8.1" = "10.40.11.102/32" } { "10.40.8.254" = "10.1.8.0/24" }
test Sysctl.lns get default_sysctl = { "#comment" = "Kernel sysctl configuration file" } { "#comment" = "Controls IP packet forwarding"} { "net.ipv4.ip_forward" = "0" } { } { "net.ipv4.conf.default.rp_filter" = "1" } { "net.ipv4.conf.default.accept_source_route" = "0" } { "kernel.sysrq" = "0" } { } { "#comment" = "Semicolon comments are also allowed" } { "net.ipv4.tcp_mem" = "393216 524288 786432" }
test Systemd.lns get desc = { "Unit" { "Description" { "value" = "RPC" } } { "Description" { "value" = "RPC bind service" } } { "Description" { "value" = "RPC bind\ service" } } { "Description" { "value" = "Resets System Activity Logs" } } }
test Up2date.lns get conf = { "#comment" = "Red Hat Update Agent config file." } { "#comment" = "Format: 1.0" } { } { "1" = "debug[comment]" { "value" = "Whether or not debugging is enabled" } } { "2" = "debug" { "value" = "0" } } { } { "3" = "systemIdPath[comment]" { "value" = "Location of system id" } } { "4" = "systemIdPath" { "value" = "/etc/sysconfig/rhn/systemid" } } { } { "5" = "serverURL[comment]" { "value" = "Remote server URL (use FQDN)" } } { "#comment" = "serverURL=https://xmlrpc.rhn.redhat.com/XMLRPC" } { "6" = "serverURL" { "value" = "https://enter.your.server.url.here/XMLRPC" } } { } { "7" = "hostedWhitelist[comment]" { "value" = "RHN Hosted URL's" } } { "8" = "hostedWhitelist" } { } { "9" = "enableProxy[comment]" { "value" = "Use a HTTP Proxy" } } { "10" = "enableProxy" { "value" = "0" } } { } { "11" = "versionOverride[comment]" { "value" = "Override the automatically determined system version" } } { "12" = "versionOverride" } { } { "13" = "httpProxy[comment]" { "value" = "HTTP proxy in host:port format, e.g. squid.redhat.com:3128" } } { "14" = "httpProxy" } { } { "15" = "noReboot[comment]" { "value" = "Disable the reboot actions" } } { "16" = "noReboot" { "value" = "0" } } { } { "17" = "networkRetries[comment]" { "value" = "Number of attempts to make at network connections before giving up" } } { "18" = "networkRetries" { "value" = "1" } } { } { "19" = "disallowConfChanges[comment]" { "value" = "Config options that can not be overwritten by a config update action" } } { "20" = "disallowConfChanges" { "values" { "1" = "noReboot" } { "2" = "sslCACert" } { "3" = "useNoSSLForPackages" } { "4" = "noSSLServerURL" } { "5" = "serverURL" } { "6" = "disallowConfChanges" } } } { } { "21" = "sslCACert[comment]" { "value" = "The CA cert used to verify the ssl server" } } { "22" = "sslCACert" { "value" = "/usr/share/rhn/RHNS-CA-CERT" } } { } { "#comment" = "Akamai does not support http protocol, therefore setting this option as side effect disable \"Location aware\" function" } { "23" = "useNoSSLForPackages[comment]" { "value" = "Use the noSSLServerURL for package, package list, and header fetching (disable Akamai)" } } { "24" = "useNoSSLForPackages" { "value" = "0" } } { } { "25" = "retrieveOnly[comment]" { "value" = "Retrieve packages only" } } { "26" = "retrieveOnly" { "value" = "0" } } { } { "27" = "skipNetwork[comment]" { "value" = "Skips network information in hardware profile sync during registration." } } { "28" = "skipNetwork" { "value" = "0" } } { } { "29" = "tmpDir[comment]" { "value" = "Use this Directory to place the temporary transport files" } } { "30" = "tmpDir" { "value" = "/tmp" } } { } { "31" = "writeChangesToLog[comment]" { "value" = "Log to /var/log/up2date which packages has been added and removed" } } { "32" = "writeChangesToLog" { "value" = "0" } } { } { "33" = "stagingContent[comment]" { "value" = "Retrieve content of future actions in advance" } } { "34" = "stagingContent" { "value" = "1" } } { } { "35" = "stagingContentWindow[comment]" { "value" = "How much forward we should look for future actions. In hours." } } { "36" = "stagingContentWindow" { "value" = "24" } }
Simple get test
test UpdateDB.lns get "# A comment PRUNEPATHS=\"/tmp /var/spool /media /home/.ecryptfs\" PRUNEFS= \"NFS nfs nfs4 rpc_pipefs\" PRUNE_BIND_MOUNTS = \"yes\"\n" = { "#comment" = "A comment" } { "PRUNEPATHS" { "entry" = "/tmp" } { "entry" = "/var/spool" } { "entry" = "/media" } { "entry" = "/home/.ecryptfs" } } { "PRUNEFS" { "entry" = "NFS" } { "entry" = "nfs" } { "entry" = "nfs4" } { "entry" = "rpc_pipefs" } } { "PRUNE_BIND_MOUNTS" = "yes" }
test VMware_Config.lns get conf = { "libdir" = "/usr/lib/vmware" } { "dhcpd.fullpath" = "/usr/bin/vmnet-dhcpd" } { "authd.fullpath" = "/usr/sbin/vmware-authd" } { "authd.client.port" = "902" } { "loop.fullpath" = "/usr/bin/vmware-loop" } { "vmware.fullpath" = "/usr/bin/vmware" } { "control.fullpath" = "/usr/bin/vmware-cmd" } { "serverd.fullpath" = "/usr/sbin/vmware-serverd" } { "wizard.fullpath" = "/usr/bin/vmware-wizard" } { "serverd.init.fullpath" = "/usr/lib/vmware/serverd/init.pl" } { "serverd.vpxuser" = "vpxuser" } { "serverd.snmpdconf.subagentenabled" = "TRUE" } { "template.useFlatDisks" = "TRUE" } { "autoStart.defaultStartDelay" = "60" } { "autoStart.enabled" = "True" } { "autoStart.defaultStopDelay" = "60" }
test Xml.lns put "<a></a >" after set "/a/#text[1]" "foo"; set "/a/#text[2]" "bar" = "<a>foobar</a >"
Check that we can parse an empty line, to fix test-save
test Yum.lns get "\n" = { }
test IniFile.lns_loose get conf_ace = { "section" = ".anon" { "#comment" = "comment with sharp" } { } } { "section" = "section1" { "test_ace" = "value" { "#comment" = "end of line comment" } } { "test_ace" } { "test_ace" = "value with spaces" } { "#comment" = "comment with colon" } { } }
test IniFile.lns_loose_multiline get conf_ace = { "section" = ".anon" { "#comment" = "comment with sharp" } { } } { "section" = "section1" { "test_ace" = "value" { "#comment" = "end of line comment" } } { "test_ace" } { "test_ace" = "value with spaces" } { "#comment" = "comment with colon" } { } }
test Rabbitmq.log_levels get "{log_levels, [{connection, info}]}" = { "log_levels" { "tuple" { "value" = "connection" } { "value" = "info" } } }