[chef] Re: Re: Best pattern for automatically creating/deleting resources based on what has changed?


Chronological Thread 
  • From: Torben Knerr < >
  • To:
  • Subject: [chef] Re: Re: Best pattern for automatically creating/deleting resources based on what has changed?
  • Date: Thu, 10 Oct 2013 19:03:15 +0200

Slightly different approach: use databags to manage all the widgets. In your recipe iterate over the databag items and call your widget lwrp for each of them. If you know that all your nodes are converged in a specific interval you can purge the "action :delete" items later.

If you really don't want the explicit :delete, is rm-rf'ing the widgets directory beforehand an option? Otherwise the cleanup handler approach seems much cleaner to me.

On Oct 10, 2013 9:13 AM, "Ranjib Dey" < "> > wrote:
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 < " target="_blank"> > wrote:
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
    created_by "chris"
    owned_by "john"
end

widget "widget2" do
    created_by "john"
    owned_by "chris"
end

etc...

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
    action :delete
end

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!

Thanks,
Chris




Archive powered by MHonArc 2.6.16.

§