Forum: CFEngine Help
Subject: Re: /etc/resolv.conf: if updating, backup first
Author: matt_garman
Link to topic: https://cfengine.com/forum/read.php?3,23954,23956#msg-23956
neilhwatson Wrote:
-------------------------------------------------------
> I'm skeptical of your claim that the first bundle
> in your post always edits. I would expect the
> agent to build in the file in memory and write to
> disk only if there is a change. Also, see
> edit_backup in the reference.
First, the edit_backup was the elegant solution I was looking for. Thanks!
Now: I actually created my own resolvconf() bundle that is a tweaked version of
what stdlib provides. However, the bundle usually edits my resolv.conf file.
But so far, I haven't determined what triggers the edit; sometimes it edits and
sometimes it doesn't.
Here's the full contents of "resolv.cf":
body common control
{
inputs => { "cfengine_stdlib.cf" };
version => "1.0";
bundlesequence => { "resolv" };
}
body edit_defaults timestamp
{
edit_backup => "timestamp";
max_file_size => "inf";
}
# modified resolvconf() from cfengine_stdlib.cf
# - search is the search domains with space
# - nameservers is an slist of nameserver addresses
# - commented is an slist of nameserver addresses that will be
# inserted as a comment
bundle edit_line my_resolvconf(search, nameservers, commented)
{
delete_lines:
"search.*" comment => "Reset search lines from resolver";
"nameserver.*" comment => "Reset nameservers in resolver";
insert_lines:
"search $(search)"
comment => "Add search domains to resolver",
location => start;
"nameserver $(nameservers)"
comment => "Add name servers to resolver";
"#nameserver $(commented)"
comment => "Add commented name servers to resolver";
}
bundle agent resolv
{
vars:
"search" string => "mydomain.com";
"nameservers" slist => { "192.168.184.7", "192.168.187.103" };
"commented" slist => { "192.168.185.220", "4.2.2.1" };
files:
"${sys.resolv}" -> "Some Stakeholder"
comment => "Make sure file ${sys.resolv} is correct",
edit_line => my_resolvconf("${search}", "${nameservers}",
"${commented}"),
edit_defaults => timestamp;
}
So, here is the initial state of my /etc/resolv.conf:
# date ; ls -lah /etc/resolv.conf* ; cat /etc/resolv.conf
Tue Nov 15 14:52:23 CST 2011
-rw-r--r-- 1 root root 120 Nov 15 14:28 /etc/resolv.conf
search mydomain.com
#nameserver 192.168.185.220
#nameserver 4.2.2.1
nameserver 192.168.184.7
nameserver 192.168.187.103
In other words, it is exactly as I want it. But if I do a "cf-agent -f
./resolv.cf":
# date ; ls -lah /etc/resolv.conf* ; cat /etc/resolv.conf
Tue Nov 15 14:54:03 CST 2011
-rw-r--r-- 1 root root 120 Nov 15 14:53 /etc/resolv.conf
-rw-r--r-- 1 root root 93 Nov 15 14:53
/etc/resolv.conf_1321390422_Tue_Nov_15_14_53_43_2011.cf-before-edit
search mydomain.com
#nameserver 192.168.185.220
#nameserver 4.2.2.1
nameserver 192.168.184.7
nameserver 192.168.187.103
Now if I diff those files:
# diff /etc/resolv.conf
/etc/resolv.conf_1321390422_Tue_Nov_15_14_53_43_2011.cf-before-edit
5d4
< nameserver 192.168.187.103
If I run "cf-agent -f ./resolv.conf" right away, it stays exactly as it is
above. But if I wait a while, it will edit the file again (and create another
backup). Looks like the wait is about three and a half minutes:
# date ; cf-agent -f ./resolv.cf ; ls -lah /etc/resolv.conf*
Tue Nov 15 14:57:14 CST 2011
-rw-r--r-- 1 root root 120 Nov 15 14:57 /etc/resolv.conf
-rw-r--r-- 1 root root 93 Nov 15 14:53
/etc/resolv.conf_1321390422_Tue_Nov_15_14_53_43_2011.cf-before-edit
-rw-r--r-- 1 root root 93 Nov 15 14:57
/etc/resolv.conf_1321390634_Tue_Nov_15_14_57_15_2011.cf-before-edit
# date ; cf-agent -f ./resolv.cf ; ls -lah /etc/resolv.conf*
Tue Nov 15 14:57:14 CST 2011
-rw-r--r-- 1 root root 120 Nov 15 14:57 /etc/resolv.conf
-rw-r--r-- 1 root root 93 Nov 15 14:53
/etc/resolv.conf_1321390422_Tue_Nov_15_14_53_43_2011.cf-before-edit
-rw-r--r-- 1 root root 93 Nov 15 14:57
/etc/resolv.conf_1321390634_Tue_Nov_15_14_57_15_2011.cf-before-edit
-rw-r--r-- 1 root root 93 Nov 15 15:00
/etc/resolv.conf_1321390838_Tue_Nov_15_15_00_39_2011.cf-before-edit
I get this behavior from running cf-agent in a tight loop, with a sleep, ala:
while [ 1 ] ; do echo -e "\n\n\n--------" ; date ; cf-agent -f ./resolv.cf ; ls
-lah /etc/resolv.conf* ; sleep 10s ; done
So it definitely edits when it doesn't need to. I'm assuming the problem is on
my side---hoping the CFE community can point out what I'm doing wrong!
Thanks again,
Matt
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine