[augeas-devel] Dealing with empty values
Erinn Looney-Triggs
erinn.looneytriggs at gmail.com
Thu Nov 18 18:05:58 UTC 2010
On 11/18/2010 10:10 AM, Raphaël Pinson wrote:
> Hi Erinn,
>
> On Thu, Nov 18, 2010 at 5:55 PM, Erinn Looney-Triggs
> <erinn.looneytriggs at gmail.com <mailto:erinn.looneytriggs at gmail.com>>
> wrote:
>
> Searched around to try to find an answer to this but can't find
> anything
> yet. I am writing a lense for /etc/default/useradd, pretty simple file
> really key value separated by =. Here is the lense:
> module Useradd =
> autoload xfm
>
> let eq = Util.del_str "="
>
> let record =
> let value = store /[^ \t\n]+([ \t]+[^ \t\n]+)*/ in
> [ key Rx.word . eq . value . Util.eol ]
>
> let lns = (record | Util.comment | Util.empty) *
>
> let filter = incl "/etc/defaults/useradd" . Util.stdexcl
>
> let xfm = transform lns filter
>
> Here are the tests:
>
> module Test_useradd =
>
> let record = "GROUP=100
> HOME=/home
> INACTIVE=-1
> EXPIRE=
> SHELL=/bin/bash
> SKEL=/etc/skel
> CREATE_MAIL_SPOOL=yes
> "
>
> test Useradd.lns get record =
> { "GROUP" = "100" }
> { "HOME" = "/home" }
> { "INACTIVE" = "-1" }
> { "EXPIRE" = "" }
> { "SHELL" = "/bin/bash" }
> { "SKEL" = "/etc/skel" }
> { "CREATE_MAIL_SPOOL" = "yes" }
>
> let comment ="# useradd defaults file
> "
>
> test Useradd.lns get comment =
> {"#comment" = "useradd defaults file"}
>
> The problem is the EXPIRE= line. now I know that as my match currently
> stands it is looking for a value not delimited by a \n or a space. So
> clearly that isn't going to work but I can't figure out what will.
> Myabe
> I am making this harder than it needs to be but storing \n as a value
> works, sort of except that you now have a newline as a value. I guess
> what I am looking fro is to replace the newline with "" as the value.
> Del would seem to be right for that, but I can't seem to store a del.
> Any help would be appreciated as I am pretty new to this.
>
>
>
> I'd say the simplest way to do that would be to make value optional:
>
> let record =
> let value = store /[^ \t\n]+([ \t]+[^ \t\n]+)*/ in
> [ key Rx.word . eq . value? . Util.eol ]
>
> and then:
>
> test Useradd.lns get record =
> { "GROUP" = "100" }
> { "HOME" = "/home" }
> { "INACTIVE" = "-1" }
>
> { "EXPIRE" }
>
> { "SHELL" = "/bin/bash" }
>
> { "SKEL" = "/etc/skel" }
>
> { "CREATE_MAIL_SPOOL" = "yes" }
>
>
> Since "=" is mandatory in your file, you can consider that an empty
> value can be represented by a flag.
>
>
> Raphaël
>
>
Great thanks for that, solves the issue very nicely. I will be opening
up another bug with the lens and tests here in a few minutes.
Thanks again,
-Erinn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20101118/7777ebf8/attachment.htm>
More information about the augeas-devel
mailing list