Perhaps you misspoke, but you said you want to run a recipe only if a file
exists, right?
Why use unless, then? Of course those three lines wouldn't work since it's
doing "IF /etc/foo/bar NOT exist THEN include_recipe".
On Thu, Oct 8, 2015 at 12:17 PM, Doug Garstang doug@slice.com wrote:
All,
Trying to do a conditional include_recipe based on a file existing.
Doesn't work due to compile/converge stage stuff.
I was certain the syntax should work since I believe I've used it before,
but I tested it anyway before sending this. Here's what I did:
Set up a blank cookbook
Loaded it up in Vagrant (still empty recipe)
Added a dependency on the git cookbook https://supermarket.chef.io/cookbooks/git and reprovisioned the VM (still
with an empty recipe) -- nothing happened, as expected
Added the following bit to the recipe:
if ::File.exists?('/tmp/gitexists')
include_recipe "git"
end
Then re-ran Vagrant -- again, nothing happened as expected.
5. Logged in to the VM and did a touch /tmp/gitexists
6. Logged out, reprovisioned the VM, this time git did get installed.
Perhaps you misspoke, but you said you want to run a recipe only if a file
exists, right?
Why use unless, then? Of course those three lines wouldn't work since
it's doing "IF /etc/foo/bar NOT exist THEN include_recipe".
On Thu, Oct 8, 2015 at 12:17 PM, Doug Garstang doug@slice.com wrote:
All,
Trying to do a conditional include_recipe based on a file existing.
Doesn't work due to compile/converge stage stuff.
Similarly, you probably want to package your recipe as an LWRP and then
you can:
unless File::exist?("/etc/foo/bar")
foo "bar" do
action :run
end
end
Or use a not_if, or just bake the File.exist? check into the LWRP.
Since you mention you've had compile/converge issues its probably better
to bake the File.exist? check into the idempotency check of an LWRP and
then you always call the LWRP and the provider code simply does
"return if File.exist?("/etc/foo/bar")" and then the calling code is not
responsible for that check and just calls the LWRP.
On 10/08/2015 09:17 AM, Doug Garstang wrote:
All,
Trying to do a conditional include_recipe based on a file existing.
Doesn't work due to compile/converge stage stuff.
this can fail the chef run, as the cookbook/recipe inclusion is happening during convergence phase, and chef has no way to ensure that this cookbook is synced (i.e. downloaded from chef server). a safer way will be to also declare the same cookbook as dependency in metadata of the cookbook where this resource is declared.
i still feel this is bit hacky, and and if this is a common requirement (i.e. conditionally include recipe based on the information available during converge time) , debate it and get a public API in place for doing this