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: [email protected]
> [mailto:[email protected]] 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
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
> _______________________________________________
> Help-cfengine mailing list
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine