Justin- And the reason I mentioned regextract() is that I know that a new Nova release is coming RSN. You can certainly get the last field from a line with a regex that looks like '.*\s(.*)', relying on the greed of the first pattern, and then grabbing $(match.1) as the field you want, and doing something complicated with a method... but I figured you'd be willing to wait for the easy way :-)
-Dan > Dan, > > Unless I'm missing something, that's not feasible for us since we use > Nova. We'd need to wait for new packages (for all of our platforms) that > are built on the latest version of Community and then upgrade all > systems. (The Nova upgrade process, especially for bug fixes and new > features, is a concern of mine for which I have a ticket open.) > > Justin > > -----Original Message----- > From: d...@lonewolf.com [mailto:d...@lonewolf.com] On Behalf Of > daniel.kl...@cfengine.com > Sent: Monday, March 01, 2010 12:04 PM > To: Justin Lloyd > Cc: Help-cfengine > Subject: Re: Editing known_hosts files > > In the latest version, look at regextract() - I think that'll help get > the > field you want, so you can do your insert... > > -Dan > > > No responses? Ok, let me restate the problem more simply. > > > > Given a file whose lines have three space-delimited fields, and given > a > > string variable that contains a similar line, how do I replace the > > entire line in the file whose third field matches the third field in > the > > string with that variable? If there is no matching line, just insert > the > > string as a new line. > > > > So if I have the file /tmp/test and the variable $(line) containing "a > b > > 6" (not hard-coded but rather obtained from another host using > > remotescalar()): > > > > # cat /tmp/test > > 1 2 3 > > 4 5 6 > > 7 8 9 > > # cf-agent -Kf ./test.cf > > # cat /tmp/test > > 1 2 3 > > a b 6 > > 7 8 9 > > # > > > > splitstring() returns an slist but you can't index into an slist to > > match the ends of the lines, so the following does not work (but it or > > something like it would be nice): > > > > vars: > > > > "line" string => remotescalar(...); > > "fields" slist => splitstring("line", " ", 3); > > > > delete_lines: > > > > ".*$(line[2])"; > > > > insert_lines: > > > > "$(line)"; > > > > Thoughts? > > > > Thanks, > > Justin > > > > -----Original Message----- > > From: help-cfengine-boun...@cfengine.org > > [mailto:help-cfengine-boun...@cfengine.org] On Behalf Of Justin Lloyd > > Sent: Friday, February 26, 2010 6:22 PM > > To: Help-cfengine > > Subject: Editing known_hosts files > > > > Ok, I'm thoroughly stumped here. I had something from testing several > > months ago that I thought was doing the right thing, but now I don't > > think it was. > > > > I want to insert into ~root/.ssh/known_hosts on certain hosts the root > > public ssh key from a trusted root host. But the trickier part is to > > delete any lines from the known_hosts file that match the beginning > and > > end of the new key to be added without affecting any other lines. For > > example, say I have > > > > $(trustedhostkey) = "ssh-dss blahblahblahblah r...@trustedhost" > > > > and in the local ~root/.ssh/known_hosts file: > > > > ssh-dss someoldkeytexthere r...@trustedhost > > ssh-dss someotherkeytextab r...@anotherhost > > > > I just want to replace the first line with $(trustedhostkey) since the > > whole line doesn't match the new key but it does match ssh-dss at the > > beginning and r...@trustedhost at the end. (If the right key is > already > > in the file, then it can be left alone.) > > > > Before I had something like > > > > vars: > > > > "key" string => remotescalar("root_key", "trustedhost", "yes"); # > > yes = encryption > > "key_fields" slist => splitstring("$(key)", " ", 3) > > > > delete_lines: > > > > "$(key_fields[0]) .* $(key_fields[2])"; > > > > insert_lines: > > > > "$(key)"; > > > > But now I've noticed that the indexing of an slist doesn't work. I've > > been playing around with replace_patterns, trying to figure out how I > > might use $(match.N) backrefs, but no success yet. > > > > Any thoughts on how to do this? > > > > Thanks, > > Justin > > > > > > This electronic communication and any attachments may contain > > confidential and proprietary > > information of DigitalGlobe, Inc. If you are not the intended > recipient, > > or an agent or employee > > responsible for delivering this communication to the intended > recipient, > > or if you have received > > this communication in error, please do not print, copy, retransmit, > > disseminate or > > otherwise use the information. Please indicate to the sender that you > > have received this > > communication in error, and delete the copy you received. DigitalGlobe > > reserves the > > right to monitor any electronic communication sent or received by its > > employees, agents > > or representatives. > > > > _______________________________________________ > > Help-cfengine mailing list > > Help-cfengine@cfengine.org > > https://cfengine.org/mailman/listinfo/help-cfengine > > _______________________________________________ > > Help-cfengine mailing list > > Help-cfengine@cfengine.org > > https://cfengine.org/mailman/listinfo/help-cfengine > > This electronic communication and any attachments may contain confidential an > d proprietary > information of DigitalGlobe, Inc. If you are not the intended recipient, or a > n agent or employee > responsible for delivering this communication to the intended recipient, or i > f you have received > this communication in error, please do not print, copy, retransmit, dissemina > te or > otherwise use the information. Please indicate to the sender that you have re > ceived this > communication in error, and delete the copy you received. DigitalGlobe reserv > es the > right to monitor any electronic communication sent or received by its employe > es, agents > or representatives. > _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine