[chef] Re: LWRP and new_resource.updated_by_last_action


Chronological Thread 
  • From: Maxim Kulkin < >
  • To:
  • Subject: [chef] Re: LWRP and new_resource.updated_by_last_action
  • Date: Tue, 6 Dec 2011 09:53:09 +0400

Creating resources inside provider is not a best approach and thus the 
problems you encounter. You should look into resource definitions instead.
Also, if you want immediate notifications on a group of resources, there was 
a discussion on that in this mailing list last month called "Resource 
groups". There were several solutions proposed.

On Nov 30, 2011, at 19:01, 
< >
 
< >
 wrote:

> I'm trying to get my LWRP resource - which just a collection of other 
> resources
> - to tell it's "invoker" that it changed. The invoker does this:
> 
> ruby_block "display_changed" do
>       action :nothing
>       block do
>               Chef::Log.info "RESOURCE CHANGED!!!!!"
>       end
> end
> 
> myresource "myresource_name" do
>       action :install
>       version "360"
>       notifies :create, resources(:ruby_block => "display_changed"),
> :immediately
> end
> 
> if, in the "myresource" provider :install action I do a direct
> new_resource.updated_by_last_action(true), then the "display_changed"
> ruby_block does get executed BUT before all the LWRP resources get 
> processed.
> 
> If however I do THIS in the provider;
> 
> 
>       ruby_block "set_changed" do
>               action :nothing
>               block do
>                       new_resource.updated_by_last_action(true)
>                       Chef::Log.info "PROVIDER CHANGED!!!!!"
>               end
>       end
> 
>       execute "install_component" do
>               command "tar --no-same-owner -xzf #{component_local_archive}"
>               cwd "#{component_path}"
>               user "#{component_owner}"
>               group "#{component_group}"
>               not_if "test -d {component_path}/bin"
>               notifies :create, resources(:ruby_block => "set_changed"),
> :immediately
>       end
> 
>       ruby_block "display_changed" do
>               block do
>                       Chef::Log.info "CHANGED =
> #{new_resource.updated_by_last_action?}"
>               end
>       end
> 
> and {component_path}/bin does not exist, then "set_changed" gets executed 
> and
> display_changed displays "CHANGED = true" (i.e. business as expected) BUT 
> the
> "invoking resource" does NOT see the change.
> 
> if {component_path}/bin does exist then "set_changed" does not get executed 
> and
> display_changed displays "CHANGED = false" i.e. business as expected.
> 
> Any way out of this?



  • [chef] Re: LWRP and new_resource.updated_by_last_action, Maxim Kulkin, 12/05/2011

Archive powered by MHonArc 2.6.16.

§