Hi guys,
I''ve got /etc/resolve.conf managed by Puppet:
file { "/etc/resolv.conf":
ensure => present,
source =>
"puppet:///modules/system/etc/resolv.conf.${dns_zone}.${dc_use}",
group => "root",
owner => "root",
mode => "0644"
}
if $dns_search_path {
line_replace { "/etc/resolv.conf":
replacement => "search
${dns_search_path}",
pattern => "search .*",
require => File["/etc/resolv.conf"],
}
}
The trouble is that the file is fetched from the server on every puppet
agent run and line_replace() is then executed.
info: Caching catalog for ssutt1ldv.example.com
info: Applying configuration version ''1306990268''
--- /etc/resolv.conf 2011-06-02 16:46:22.000000000 +1200
+++ /tmp/puppet-file.18828.0 2011-06-02 16:51:10.000000000 +1200
@@ -1,3 +1,3 @@
-search something.else.example.com
+search example.com
nameserver 172.26.203.23
nameserver 172.27.203.23
info: FileBucket got a duplicate file {md5}8a9e992c28b98fbc544d99512f54e657
info: /Stage[main]/System::Files/File[/etc/resolv.conf]: Filebucketed
/etc/resolv.conf to puppet with sum 8a9e992c28b98fbc544d99512f54e657
notice: /Stage[main]/System::Files/File[/etc/resolv.conf]/content:
content changed ''{md5}8a9e992c28b98fbc544d99512f54e657'' to
''{md5}10e974d9fac3b24d638478ac1852d896''
notice:
/Stage[main]/System::Files/Line_replace[/etc/resolv.conf]/Exec[/usr/bin/perl
-pi -e ''s/search .*/search something.else.example.com/''
''/etc/resolv.conf'']/returns: executed successfully
notice: Finished catalog run in 5.93 seconds
Can I do something about it? For instance record the search path
somewhere and only trigger the whole thing if it changes?
For most servers the default path is good but some require a different
one that I specify in their ''node { $dns_search_path = ... }''.
Thanks!
GiBo
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.
yzhkpli@gmail.com
2011-Jun-02 05:40 UTC
Re: [Puppet Users] line replace triggers file reload
perhaps you should add a check :onlyif cannot find pattern(dns_search_path) in resolv.conf,then puppet actions. can you paste your full code . I didnot see the define or param class or (custom type?)line_replace? thank you~~~ From China mainland[?] On Thu, Jun 2, 2011 at 1:01 PM, Giovanni Bordello <gibo@gentlemail.com>wrote:> Hi guys, > > I''ve got /etc/resolve.conf managed by Puppet: > > file { "/etc/resolv.conf": > ensure => present, > source => > "puppet:///modules/system/etc/resolv.conf.${dns_zone}.${dc_use}", > group => "root", > owner => "root", > mode => "0644" > } > > if $dns_search_path { > line_replace { "/etc/resolv.conf": > replacement => "search ${dns_search_path}", > pattern => "search .*", > require => File["/etc/resolv.conf"], > } > } > > The trouble is that the file is fetched from the server on every puppet > agent run and line_replace() is then executed. > > info: Caching catalog for ssutt1ldv.example.com > info: Applying configuration version ''1306990268'' > --- /etc/resolv.conf 2011-06-02 16:46:22.000000000 +1200 > +++ /tmp/puppet-file.18828.0 2011-06-02 16:51:10.000000000 +1200 > @@ -1,3 +1,3 @@ > -search something.else.example.com > +search example.com > nameserver 172.26.203.23 > nameserver 172.27.203.23 > info: FileBucket got a duplicate file {md5}8a9e992c28b98fbc544d99512f54e657 > info: /Stage[main]/System::Files/File[/etc/resolv.conf]: Filebucketed > /etc/resolv.conf to puppet with sum 8a9e992c28b98fbc544d99512f54e657 > notice: /Stage[main]/System::Files/File[/etc/resolv.conf]/content: content > changed ''{md5}8a9e992c28b98fbc544d99512f54e657'' to > ''{md5}10e974d9fac3b24d638478ac1852d896'' > notice: > /Stage[main]/System::Files/Line_replace[/etc/resolv.conf]/Exec[/usr/bin/perl > -pi -e ''s/search .*/search something.else.example.com/'' > ''/etc/resolv.conf'']/returns: executed successfully > notice: Finished catalog run in 5.93 seconds > > Can I do something about it? For instance record the search path somewhere > and only trigger the whole thing if it changes? > > For most servers the default path is good but some require a different one > that I specify in their ''node { $dns_search_path = ... }''. > > Thanks! > > GiBo > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > >-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Giovanni Bordello
2011-Jun-02 05:59 UTC
Re: [Puppet Users] line replace triggers file reload
Hi,
it''s a modified replace() function taken from here:
http://projects.puppetlabs.com/projects/1/wiki/Simple_Text_Patterns
define line_replace($pattern, $replacement) {
$file = $name
err ("line_replace... $name")
exec { "/usr/bin/perl -pi -e
''s/$pattern/$replacement/'' ''$file''":
onlyif => "/usr/bin/perl -ne ''BEGIN { \$ret = 1; }
\$ret = 0 if
/$pattern/ && ! /$replacement/ ; END { exit \$ret; }''
''$file''",
}
}
The problem is not that line_replace() kicks in every time (it doesn''t,
it only does when $dns_search_path is defined, that''s ok). The problem
is:
- Puppet Agent loads a pristine resolv.conf from the server and records
the {md5}
- Then it runs line_replace() and changes the search path.
- All good, file looks as expected.
On the next run the Agent checks resolv.conf''s {md5} and realises
it''s
different from what was recorded (of course, one line was changed). So
it reloads it from the server in the pristine form again and recods the
pristine {md5}.
Then line_replace() kicks in again, does its "onlyif=>" test but
that''s
false, because the file has just been loaded from the server. So it
replaces the line, leading to a changed {md5}.
And that goes on and on every time puppet agent is run.
Can I do something about that?
GiBo
On 02/06/11 17:40, yzhkpli@gmail.com wrote:> perhaps you should add a check :onlyif cannot find
> pattern(dns_search_path) in resolv.conf,then puppet actions.
>
>
> can you paste your full code . I didnot see the define or param class
> or (custom type?)line_replace?
> thank you~~~
>
> From China mainland
>
>
>
> On Thu, Jun 2, 2011 at 1:01 PM, Giovanni Bordello <gibo@gentlemail.com
> <mailto:gibo@gentlemail.com>> wrote:
>
> Hi guys,
>
> I''ve got /etc/resolve.conf managed by Puppet:
>
> file { "/etc/resolv.conf":
> ensure => present,
> source =>
>
"puppet:///modules/system/etc/resolv.conf.${dns_zone}.${dc_use}",
> group => "root",
> owner => "root",
> mode => "0644"
> }
>
> if $dns_search_path {
> line_replace { "/etc/resolv.conf":
> replacement => "search
${dns_search_path}",
> pattern => "search .*",
> require =>
File["/etc/resolv.conf"],
> }
> }
>
> The trouble is that the file is fetched from the server on every
> puppet agent run and line_replace() is then executed.
>
> info: Caching catalog for ssutt1ldv.example.com
> <http://ssutt1ldv.example.com>
> info: Applying configuration version ''1306990268''
> --- /etc/resolv.conf 2011-06-02 16:46:22.000000000 +1200
> +++ /tmp/puppet-file.18828.0 2011-06-02 16:51:10.000000000 +1200
> @@ -1,3 +1,3 @@
> -search something.else.example.com
<http://something.else.example.com>
> +search example.com <http://example.com>
> nameserver 172.26.203.23
> nameserver 172.27.203.23
> info: FileBucket got a duplicate file
> {md5}8a9e992c28b98fbc544d99512f54e657
> info: /Stage[main]/System::Files/File[/etc/resolv.conf]:
> Filebucketed /etc/resolv.conf to puppet with sum
> 8a9e992c28b98fbc544d99512f54e657
> notice: /Stage[main]/System::Files/File[/etc/resolv.conf]/content:
> content changed
''{md5}8a9e992c28b98fbc544d99512f54e657'' to
> ''{md5}10e974d9fac3b24d638478ac1852d896''
> notice:
>
/Stage[main]/System::Files/Line_replace[/etc/resolv.conf]/Exec[/usr/bin/perl
> -pi -e ''s/search .*/search something.else.example.com/
> <http://something.else.example.com/>''
''/etc/resolv.conf'']/returns:
> executed successfully
> notice: Finished catalog run in 5.93 seconds
>
> Can I do something about it? For instance record the search path
> somewhere and only trigger the whole thing if it changes?
>
> For most servers the default path is good but some require a
> different one that I specify in their ''node { $dns_search_path
> ... }''.
>
> Thanks!
>
> GiBo
>
> --
> You received this message because you are subscribed to the Google
> Groups "Puppet Users" group.
> To post to this group, send email to puppet-users@googlegroups.com
> <mailto:puppet-users@googlegroups.com>.
> To unsubscribe from this group, send email to
> puppet-users+unsubscribe@googlegroups.com
> <mailto:puppet-users%2Bunsubscribe@googlegroups.com>.
> For more options, visit this group at
> http://groups.google.com/group/puppet-users?hl=en.
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Puppet Users" group.
> To post to this group, send email to puppet-users@googlegroups.com.
> To unsubscribe from this group, send email to
> puppet-users+unsubscribe@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/puppet-users?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to
puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.
Giovanni Bordello
2011-Jun-02 06:22 UTC
Re: [Puppet Users] [SOLVED] line replace triggers file reload
Sorted, I''ve done it using a template: search <%= dns_search_path %> nameserver ... nameserver ... That way the file is (presumably?) created on the master and looks constant to the client. GiBo On 02/06/11 17:59, Giovanni Bordello wrote:> Hi, > > it''s a modified replace() function taken from here: > http://projects.puppetlabs.com/projects/1/wiki/Simple_Text_Patterns > > define line_replace($pattern, $replacement) { > $file = $name > err ("line_replace... $name") > exec { "/usr/bin/perl -pi -e ''s/$pattern/$replacement/'' ''$file''": > onlyif => "/usr/bin/perl -ne ''BEGIN { \$ret = 1; } \$ret = 0 > if /$pattern/ && ! /$replacement/ ; END { exit \$ret; }'' ''$file''", > } > } > > The problem is not that line_replace() kicks in every time (it > doesn''t, it only does when $dns_search_path is defined, that''s ok). > The problem is: > > - Puppet Agent loads a pristine resolv.conf from the server and > records the {md5} > - Then it runs line_replace() and changes the search path. > - All good, file looks as expected. > > On the next run the Agent checks resolv.conf''s {md5} and realises it''s > different from what was recorded (of course, one line was changed). So > it reloads it from the server in the pristine form again and recods > the pristine {md5}. > > Then line_replace() kicks in again, does its "onlyif=>" test but > that''s false, because the file has just been loaded from the server. > So it replaces the line, leading to a changed {md5}. > > And that goes on and on every time puppet agent is run. > > Can I do something about that? > > GiBo > > On 02/06/11 17:40, yzhkpli@gmail.com wrote: >> perhaps you should add a check :onlyif cannot find >> pattern(dns_search_path) in resolv.conf,then puppet actions. >> >> >> can you paste your full code . I didnot see the define or param class >> or (custom type?)line_replace? >> thank you~~~ >> >> From China mainland >> >> >> >> On Thu, Jun 2, 2011 at 1:01 PM, Giovanni Bordello >> <gibo@gentlemail.com <mailto:gibo@gentlemail.com>> wrote: >> >> Hi guys, >> >> I''ve got /etc/resolve.conf managed by Puppet: >> >> file { "/etc/resolv.conf": >> ensure => present, >> source => >> "puppet:///modules/system/etc/resolv.conf.${dns_zone}.${dc_use}", >> group => "root", >> owner => "root", >> mode => "0644" >> } >> >> if $dns_search_path { >> line_replace { "/etc/resolv.conf": >> replacement => "search ${dns_search_path}", >> pattern => "search .*", >> require => File["/etc/resolv.conf"], >> } >> } >> >> The trouble is that the file is fetched from the server on every >> puppet agent run and line_replace() is then executed. >> >> info: Caching catalog for ssutt1ldv.example.com >> <http://ssutt1ldv.example.com> >> info: Applying configuration version ''1306990268'' >> --- /etc/resolv.conf 2011-06-02 16:46:22.000000000 +1200 >> +++ /tmp/puppet-file.18828.0 2011-06-02 16:51:10.000000000 +1200 >> @@ -1,3 +1,3 @@ >> -search something.else.example.com >> <http://something.else.example.com> >> +search example.com <http://example.com> >> nameserver 172.26.203.23 >> nameserver 172.27.203.23 >> info: FileBucket got a duplicate file >> {md5}8a9e992c28b98fbc544d99512f54e657 >> info: /Stage[main]/System::Files/File[/etc/resolv.conf]: >> Filebucketed /etc/resolv.conf to puppet with sum >> 8a9e992c28b98fbc544d99512f54e657 >> notice: >> /Stage[main]/System::Files/File[/etc/resolv.conf]/content: >> content changed ''{md5}8a9e992c28b98fbc544d99512f54e657'' to >> ''{md5}10e974d9fac3b24d638478ac1852d896'' >> notice: >> /Stage[main]/System::Files/Line_replace[/etc/resolv.conf]/Exec[/usr/bin/perl >> -pi -e ''s/search .*/search something.else.example.com/ >> <http://something.else.example.com/>'' >> ''/etc/resolv.conf'']/returns: executed successfully >> notice: Finished catalog run in 5.93 seconds >> >> Can I do something about it? For instance record the search path >> somewhere and only trigger the whole thing if it changes? >> >> For most servers the default path is good but some require a >> different one that I specify in their ''node { $dns_search_path >> ... }''. >> >> Thanks! >> >> GiBo >> >> -- >> You received this message because you are subscribed to the >> Google Groups "Puppet Users" group. >> To post to this group, send email to >> puppet-users@googlegroups.com <mailto:puppet-users@googlegroups.com>. >> To unsubscribe from this group, send email to >> puppet-users+unsubscribe@googlegroups.com >> <mailto:puppet-users%2Bunsubscribe@googlegroups.com>. >> For more options, visit this group at >> http://groups.google.com/group/puppet-users?hl=en. >> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Puppet Users" group. >> To post to this group, send email to puppet-users@googlegroups.com. >> To unsubscribe from this group, send email to >> puppet-users+unsubscribe@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/puppet-users?hl=en. > -- > You received this message because you are subscribed to the Google > Groups "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en.-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Patrick Mohr
2011-Jun-02 08:33 UTC
Re: [Puppet Users] [SOLVED] line replace triggers file reload
On Wed, Jun 1, 2011 at 11:22 PM, Giovanni Bordello <gibo@gentlemail.com>wrote:> Sorted, I''ve done it using a template: > > search <%= dns_search_path %> > nameserver ... > nameserver ... > > That way the file is (presumably?) created on the master and looks constant > to the client. > >To answer your implicit question. The file is generated on the master and embedded in the catalog. Then the catalog is send to the client. -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.