For what it worth there's a solution here too "http://stackoverflow.com/a/28076452/3627607" with links to a cookbook actually using it with 2 templates, a nice trick.
Le 2015-05-26 03:21, Kevin Keane Subscription a écrit :
Thank you so much! I created a github gist with my solution so the next person can find it.
https://gist.github.com/kkeane/38020a052a73067c3812
Kevin Keane
The NetTech
http://www.4nettech.com
Our values: Privacy, Liberty, Justice
See https://www.4nettech.com/corp/the-nettech-values.html
-----Original message----- From: Noah Kantrowitz <
> Sent: Monday 25th May 2015 16:27 To:
Subject: [chef] Re: Using time stamps in a template?
No, I would have two template resources, one acting as an idempotence check for the sans-serial data and the other is the full content with serial. A better approach is to try to keep the serial in its own file and use an include. A rough example of the first (not actually going to test this):
template '/etc/bind/myzone.partial' do source 'whatever.erb' variables serial: 0 notifies :run, 'ruby_block[dns trick]', :immediately end
ruby_block 'dns trick' do block do path = '/etc/bind/myzone.serial' IO.write(path, IO.read(path).to_i + 1) end end
template '/etc/bind/myzone' do source 'whatever.erb' variables lazy { {serial: IO.read('/etc/bind/myzone.serial') } } end
This shows two templates, when the serial=0 one updates it bumps the serial file, which the second will use to generate the real zone config. The second approach might be possible with $INCLUDE in BIND but I'm not familiar enough with its usage to show an example.
--Noah
On May 25, 2015, at 4:10 PM, Kevin Keane Subscription <
> wrote:
> Interesting thought. Basically, you are suggesting that the template generate an intermediate file, and then in a separate step, I'd use something like sed or awk to insert the actual time stamp. > > Thank you! I knew somebody had a solution for my problem! > > Kevin Keane > > The NetTech > > http://www.4nettech.com > > Our values: Privacy, Liberty, Justice > > See https://www.4nettech.com/corp/the-nettech-values.html > > > > -----Original message----- > From: Noah Kantrowitz <
> > Sent: Monday 25th May 2015 12:20 > To:
> Subject: [chef] Re: Using time stamps in a template? > > You would have to implement the idempotence check yourself separate from the file contents. You could do something like make a template with the serial always set to 0, and use a notification that when that template changes trigger a ruby_block to bump the serial number on disk and write out the real template. > > --Noah > > On May 25, 2015, at 8:26 AM, Kevin Keane Subscription <
> wrote: > > > I am looking for a way to put a time stamp into a template, *without* causing the file to be regenerated on each chef run. I want the time stamp to be updated only if something else has changed in the template, as well. > > > > The use case is for generating a DNS zone file and updating the serial number only when there was a change. > > > > Is there a common solution for this problem in Chef? > > > > > > > > Kevin Keane > > > > The NetTech > > > > 760-721-8339 > > > > http://www.4nettech.com > > > > Our values: Privacy, Liberty, Justice > > > > See https://www.4nettech.com/corp/the-nettech-values.html > > > > > > >
|