[chef] Re: Re: Re: Re: notifies on resource not notifying


Chronological Thread 
  • From: Seif Attar < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: notifies on resource not notifying
  • Date: Fri, 28 Dec 2012 17:47:48 +0000

I seem to be getting the same problem with the template resource, the resource runs, I can see in the log output that the content has been updated, but the notifies don't trigger.

Is it possible that I am suffering from the same bug? I can't imagine that a basic resource like template would have a problem with notifications, there must be something with my setup.

I had a look at the source code of the template and file providers, but couldn't see anywhere that it calls updated_by_last_action(true) :S

My gut feeling is that it is something that has to do with the windows file provider.


On 27 December 2012 18:46, Seif Attar < " target="_blank"> > wrote:
Thank you both for taking the time to explain this, I get it now.

To get the teamcity_build resource to notify, all I need to do is call @new_resource.updated_by_last_action(true)

Thanks for the advice on the idempotency, I think I will need to take it with the original cookbook author as he had provided a parameter 'overwrite' on the resource, which currently throws an exception if overwrite is false and the file already existed. I guess to keep with current behaviour:

If the files doesn't exist -> download and set updated
files exists and override is false -> throw
file exists, override is true and checksums differ -> download and set updated
file exists, override is true and checksums differ -> do nothing and don't set updated.

Had a quick look at adding basic auth to remote_file and it seems it would require changes to Chef::Rest as well, too risky for my basic ruby skills :) copying the checksum code into those recipes would be easier.

Thanks again,
Seif


On 27 December 2012 18:12, Sean OMeara < " target="_blank"> > wrote:
Hi Seif.

It turns out that I gave you the wrong advice, since I didn't actually
dig into the teamcity cookbook code (like I am now.)

The gist I sent you was a workaround for when you're using nested Chef
resources in LWRP code. It would help in a situation like this:

# cookbooks/custom/providers/foo.rb

action :download do

  directory "/some/dir" do
     action :create
   owner "fonzi"

   remote_file "somefile" do
       source "http://www.example.com/somefile.tgz"
       checksum "123456"
   end

end


^ In that example, "directory" and "remote_file" are Chef resources.
One of the contracts that a Chef provider has to fulfill is that it
will set the new_resource.updated_by_last_action(true) it they make a
change to the system.

If  'directory[/some/dir]' had to be repaired in any way, the
directory provider setting that flag is what allows notifications to
happen.

if 'remote_file[somefile]' had to be repaired, the same idea applies.

The bug the gist worked around was that the custom_foo resource
defined in the LWRP code could not inherit the updated status of the
nested 'directory' or 'remote_file' resources.


While good to know, this is now the problem you have.

The work you're doing is implemented in two pure-ruby library
functions that ship with the cookbook.

initialize_connection
download_all

Since these are not idempotent Chef resources, the work-around does not apply.
Please feel free to un-cargo-cult your code. My bad.


What you really need to do is setup tests to determine if you need to
"fix" a teamcity_build resource on disk.

If the resource needs to be repaired, THEN do the work:
  initialize_connection
  download_all
new_resource.updated_by_last_action(true)

That will allow notifications to work in the default run_context

This deck does a really good job at explaining how it all works.
http://www.slideshare.net/geekbri/lwrp-presentation#btnNext

-s

On Thu, Dec 27, 2012 at 12:32 PM, Seif Attar < " target="_blank"> > wrote:
> Thanks Sean,
>
> My ruby skills are limited, and I didn't quite get that gist or what it was
> doing, but I did manage to get something working:
>
> https://github.com/seif/teamcity/commit/125633db4ccd62a43f3946feae00ba358b5d75b1
>
> I am not sure what
>
> if sub_run_context.resource_collection.any?(&:updated?)
>
>
>
> Is supposed to do, as it was always returning false for me. What effects
> will removing it do? does the provider look sane to you now?
>
> Much appreciated,
>
> Seif
>
>
>
> On 27 December 2012 15:52, Sean OMeara < " target="_blank"> > wrote:
>>
>> Hi Seif!
>>
>> This is a bug in the LWRP DSL.
>>
>> You can read about it here:
>> http://tickets.opscode.com/browse/CHEF-3681
>>
>> There is a fix coming in Chef 11 which will require a small changes to
>> the all LWRP code including teamcity and windows cookbooks to make
>> notifications work.
>>
>> In the meantime, you modify the teamcity_build LWRP and cargo-cult the
>> pattern referenced in the above ticket.
>>
>>
>> https://gist.github.com/d85be145f3ff824ccc07/0e97d44f20ec65411b141cb46cbeb19bb34b44ad
>>
>> Good luck and let me know if you have any questions!
>>
>> -s
>>
>> On Thu, Dec 27, 2012 at 10:43 AM, Seif Attar < " target="_blank"> > wrote:
>> > Hello,
>> >
>> > I am writing a recipe that calls 3 resources, the first resource has
>> > conditional execution and a notifies, goal being that the other 2 dont
>> > run
>> > unless this one passed the condition.
>> >
>> > I can see the first resource being run, but it doesn't seem to be
>> > notifying,
>> > can someone help figure out what I am messing up? is there a better way
>> > to
>> > go about this?
>> >
>> > Here is a gist of the recipe, and the debug output from Chef 10.16.4:
>> >
>> > https://gist.github.com/4389024
>> >
>> > Any help appreciated.
>> >
>> > Thanks
>
>





Archive powered by MHonArc 2.6.16.

§