I have a library that needs to set up a raw ruby resource, similar to how
it’s documented here: http://docs.opscode.com/chef/resources.html#ruby-block.
Unfortunately, part of that is setting up the RunContext, which I cannot
find properly documented anywhere.
The code snippet run_context = Chef::RunContext.new(node, {}) fails with
an ArgumentError wrong number of arguments (2 for 3), which after looking
at the raw RunContext code, is correct - it wants a third, undocumented
argument called “events”.
How do I instantiate such an object to pass to the RunContext so I can get
my resource to work correctly? Can someone point me at some documentation
or an example for this?
a run context object expects a node object at leas (rc=
Chef::RunContext.new(node, nil, nil)) , check the setup_run_context method
inside lib/chef/client.rb
I have a library that needs to set up a raw ruby resource, similar to how
it's documented here: All Infra Resources. Unfortunately,
part of that is setting up the RunContext, which I cannot find properly
documented anywhere.
The code snippet run_context = Chef::RunContext.new(node, {}) fails with
an ArgumentError wrong number of arguments (2 for 3), which after looking
at the raw RunContext code, is correct - it wants a third, undocumented
argument called "events".
How do I instantiate such an object to pass to the RunContext so I can get
my resource to work correctly? Can someone point me at some documentation
or an example for this?
a run context object expects a node object at leas (rc=
Chef::RunContext.new(node, nil, nil)) , check the setup_run_context method
inside lib/chef/client.rb
I have a library that needs to set up a raw ruby resource, similar to how
it's documented here: All Infra Resources. Unfortunately,
part of that is setting up the RunContext, which I cannot find properly
documented anywhere.
The code snippet run_context = Chef::RunContext.new(node, {}) fails
with an ArgumentError wrong number of arguments (2 for 3), which after
looking at the raw RunContext code, is correct - it wants a third,
undocumented argument called "events".
How do I instantiate such an object to pass to the RunContext so I can
get my resource to work correctly? Can someone point me at some
documentation or an example for this?
Is it reasonable to just nil the events dispatcher out? I'm struggling to
understand what it does in a concrete manner - I'd be delighted to RTFM if
there's some overview documentation about how I interact with it somewhere
that I cannot find.
If I wanted to just use an existing events dispatcher during a run, how
would I access it? Is that even a reasonable question, or should I be
making a new one if I am making a new run context?
a run context object expects a node object at leas (rc=
Chef::RunContext.new(node, nil, nil)) , check the setup_run_context method
inside lib/chef/client.rb
I have a library that needs to set up a raw ruby resource, similar to how
it's documented here: All Infra Resources. Unfortunately,
part of that is setting up the RunContext, which I cannot find properly
documented anywhere.
The code snippet run_context = Chef::RunContext.new(node, {}) fails
with an ArgumentError wrong number of arguments (2 for 3), which after
looking at the raw RunContext code, is correct - it wants a third,
undocumented argument called "events".
How do I instantiate such an object to pass to the RunContext so I can
get my resource to work correctly? Can someone point me at some
documentation or an example for this?
event dispatchers provides a generic event handler framework, formatters
for example uses this. Depending upon what you are trying to do (or what
api you are exposing via your modules) you can either reuse the existing
handler or just pass nil. If you are exposing a single resource with all
idempotency implementation inside your provider, you might create a run
context from scratch , with no event dispatcher and use appropriate chef
helpers (like converge_by, updated_by_last_action etc) to expose state
change, and chef can take care of the rest. Other wise you can take the
use_inline_resource like route where your sub-context will be constructed
from current run context, this is a proxy abstractions, as in your
abstraction will be broken down into individual resources (that your
abstractions define) transparently, and the full blown
run_context.resource_collection will show all those resources.
i cant find the link, but there was a superb post by yfeldbum on similar
lines?
Is it reasonable to just nil the events dispatcher out? I'm struggling to
understand what it does in a concrete manner - I'd be delighted to RTFM if
there's some overview documentation about how I interact with it somewhere
that I cannot find.
If I wanted to just use an existing events dispatcher during a run, how
would I access it? Is that even a reasonable question, or should I be
making a new one if I am making a new run context?
a run context object expects a node object at leas (rc=
Chef::RunContext.new(node, nil, nil)) , check the setup_run_context method
inside lib/chef/client.rb
I have a library that needs to set up a raw ruby resource, similar to
how it's documented here: All Infra Resources. Unfortunately,
part of that is setting up the RunContext, which I cannot find properly
documented anywhere.
The code snippet run_context = Chef::RunContext.new(node, {}) fails
with an ArgumentError wrong number of arguments (2 for 3), which after
looking at the raw RunContext code, is correct - it wants a third,
undocumented argument called "events".
How do I instantiate such an object to pass to the RunContext so I can
get my resource to work correctly? Can someone point me at some
documentation or an example for this?
On Wednesday, September 25, 2013 at 11:48 AM, Brian Hatfield wrote:
Thank you for you response!
Is it reasonable to just nil the events dispatcher out? I'm struggling to understand what it does in a concrete manner - I'd be delighted to RTFM if there's some overview documentation about how I interact with it somewhere that I cannot find.
The event dispatcher provides callbacks for all manner of events that happen in a Chef run, and the formatter output is built on top of this API. If you pass the existing event dispatcher in to a new run context, you'll get formatted output about what happens in the nested Chef run.
If I wanted to just use an existing events dispatcher during a run, how would I access it? Is that even a reasonable question, or should I be making a new one if I am making a new run context?
RunContext#events (from the outer run context) will give you the existing one.