The best option with Puppet when facing such issues is to write an Augeaprovider in Ruby.
On Mon, Feb 22, 2016 at 9:02 AM Mol, Xavier (SCC) <[email protected]> wrote: > Hi Raphaël, > > > > thank you again for your kind and response! > > > > This neat trick using defvar works just fine with augtool, which I only > used for demonstrating my use case. Actually I need to solve this problem > through Puppet. > > > > Puppet does support checking the necessity for changes with Augeas before > they are carried out (by means of the 'onlyif' parameter to the augeas > defined type). Though I try my best to avoid that, since these checks can > only be applied once for a set of changes. Splitting my changes in smaller > sets introduces issues with the order they are applied in to the file. > Chances are, that the same trick working for augtool can be used in Puppet, > too, though I haven't tested it, yet. > > > > Ciao, > > Xavier. > > > > *From:* Raphaël Pinson [mailto:[email protected]] > *Sent:* Friday, February 12, 2016 6:45 PM > *To:* Mol, Xavier (SCC) > *Cc:* [email protected] > *Subject:* Re: [augeas-devel] How to select nodes in distinct position, > possibly creating them? > > > > Hi Xavier, > > > > > > There is not easy way using augtool. When using the Augeas API (in any > language), you can easily check for the presence of a node and decide if > you need to create it or not. In augtool, you can't do that (yet, until the > Lua code is merged). There is a little trick you can use though, using > defvar: > > > > > > # define $nomatch as /t if it doesn't have an "A" node > > augtool> defvar nomatch /t[count(A)=0] > > # insert using $nomatch, which may not be defined > > augtool> ins A before $nomatch/B > > # You are sure it exists now > > augtool> set /t/A "value" > > > > > > Raphaël > > > > > > On Fri, Feb 12, 2016 at 4:13 PM, Mol, Xavier (SCC) <[email protected]> > wrote: > > Hello Augeas experts, > > I'm looking for a way to select a node in an Augeas tree in a distinct > position, which isn't difficult, but I also want to create that node in > case it doesn't exist yet, which seems impossible to me as of now. An > example probably illustrates better what I mean... > > augtool> touch /t/#comment > augtool> ins "" after /t/*[last()] > augtool> touch /t/B > augtool> touch /t/C > augtool> print /t > /t > /t/#comment > /t/ > /t/B > /t/C > > > What can I do now to make a node "A" appear right in front of "B"? The > straight forward answer is, like this: > > insert "A" before "B" > > That works fine as long as there is no "A" node already, which I can't > know beforehand. I could guarantee that there is no such node, by deleting > it first (this very trick was taken from the Augeas wiki: > https://github.com/hercules-team/augeas/wiki/Path-expressions#Tips_amp_Tricks > ). > > augtool> rm /t/A[following-sibling::*[1][self::B]] > rm : /t/A[following-sibling::*[1][self::B]] 0 > > > However, this way I might destroy any children of "A", which henceforth > are lost. In other words, I'd replace "A" instead of updating it. > > > Normally one selects specific nodes with 'defnode', which will create new > nodes if no match was found. > > augtool> defnode newNode /t/A[following-sibling::*[1][self::B]] > augtool> print /t > /t > /t/#comment > /t/ > /t/B > /t/C > /t/A > > The problem this time is, that the new node will be appended to tree in > last position, so it needs to be moved to the correct position manually. > And 'mv' in turn has the inherent drawback, that it cannot target relative > positions, only specific destinations. Which means, replacing existing > nodes, which I don't want. > > Does someone maybe have a solution to this? Or is this another situation > that needs to be dealt with by applications utilizting Augeas, since Augeas > doesn't interpret the format of the files it edits? > > Thank you for your time, > Xavier. > > PS: I'll be on holidays next week, so I won't be able to answer any > replies until I've returned. > > > **** > Karlsruher Institute of Technology (KIT) > Steinbuch Centre for Computing (SCC) > > B. Sc. Xavier Mol > GridKa Storage Administrator and Support Manager > > Hermann-von-Helmholtz-Platz 1 > Geb. 449 > 76344 Eggenstein-Leopoldshafen > Phone: +49 721 608 23041 > Email: [email protected] > www.kit.edu > KIT - University of the State of Baden-Württemberg and National > Large-scale Research Center of the Helmholtz Association > "Since 2010, the KIT has been certified as a family-friendly university." > **** > > > > _______________________________________________ > augeas-devel mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/augeas-devel > > > > > > -- > > Raphaël Pinson > > Infrastructure Developer & Training Leader > > +33 458 482 013 > > > > Camptocamp France > Savoie Technolac > BP 352 > 48, avenue du Lac du Bourget > 73372 Le Bourget du Lac, Cedex > www.camptocamp.com >
_______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
