I would read the json and construct an object, and then do the comparison.
this only the update bit will go inside the converge_by block.
if you split up your content into several file, syncing them will be a
pain. Because chef generates resources dynamically, at no point in chef run
you can decide that which of those files (that belong to a conf.d style
directory) are from your lwrp. That said we still use this pattern, but
only in one cookbook, i.e. iptables. Where we drop the rules based on roles
(one chain for each role, containing all hosts from that role) using lwrps
, but removing the files that are extra (stale roles etc) is done by a
handler. So the whole cookbook is a combination of lwrp + report handler.
We had to take the handler route also due to chef running delayed
notifications even if the chef-run fails. we didnt want to lock down our
instances if the chef run fails.
but now we are considering using the same pattern for nginx/apache/cron.d
style config management.
alternatively you can define resources explicitly with :delete action , but
then as time will go by, you’ll have resources with :delete actions even if
they dont need to (for newer nodes, where those files were not even
created). expanded run list will also increase , and so is chef run time.
On Wed, Oct 9, 2013 at 11:32 PM, Christopher Armstrong <
Say I have a directory that Chef maintains which is full of JSON files. I
have an LWRP which writes these JSON files to the directory. For example’s
sake, let’s say the resource is widget:
widget “widget1” do
widget “widget2” do
Great. Chef runs, and it ensures that I have these JSON files and that the
content is what I expect. Now, if I want to remove a widget, I have to
update my cookbook and run Chef:
widget “widget2” do
Obviously, this is clunky. I’d like to rewrite my LWRP so that it reads
the files in the directory, “plays” my changes on top of them, and then
cleans up what I don’t want. So, if I start with two files in that
directory but my Chef recipe only creates one widget, the other will
automatically be deleted. In my Chef output, I should see that one was
deleted. Is the way to approach this to create resources from each of the
existing files, and then run :delete on the difference?
Is there an existing pattern for this, or an example cookbook which
already does this that I can use as an example?
Any help is appreciated!