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.
-s
On Thu, Dec 27, 2012 at 12:32 PM, Seif Attar iam@seifattar.net 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:
Workaround for LWRP DSL bug · seif/teamcity@125633d · GitHub
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 someara@gmail.com 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.
Intelligent Provider Action · GitHub
Good luck and let me know if you have any questions!
-s
On Thu, Dec 27, 2012 at 10:43 AM, Seif Attar iam@seifattar.net 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:
default.rb · GitHub
Any help appreciated.
Thanks