You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I introduced this in cd72bb6.
When the newly structured abs task calls lib/task_helper's
get_inventory_hash() method and finds a pre-existing inventory_full_path
file. It attempts to call
PuppetLitmus::InventoryManipulation.inventory_hash_from_inventory_file()
which fails, because that method is not a class method.
The puzzling thing about this is why it ever worked, because I was wrong
that puppetlabs#187 was pre-existing.
The issue here is that the abs (the previous version), docker,
docker_exp, and vagrant tasks all use 'include PuppetLitmus::InventoryManipulation'
or 'include PuppetLitmus' (which includes InventoryManipulation) in the
scope of global functions declared implicitly on the main Object. This
causes the included module to be included in the base Object class,
which effectively makes its methods available everywhere. So a call to
PuppetLitmus::InventoryManipulation.inventory_hash_from_inventory_file()
actually works, as would String.inventory_hash_from_inventory_file or
anything else...
When I 'fixed' the abs task to include PuppetLitmus::InventoryManipulation
within the new ABSProvision class, I broke that global behavior
but only for abs.
The fix is straightforward now that I know what's going on. Removing the
module prefix from the method call works for both the new abs task and
the other tasks that still rely on the global behavior. In the abs task
case, InventoryManipulation is included in the class, so the methods are
available. For the other tasks, InventoryManipulation is still included
by main, and the methods are available everywhere anyway.
Describe the Bug
If you run provision::abs when spec/fixtures/litmus_inventory.yaml already exists, it will fail with a NoMethodError.
Expected Behavior
The provision::abs task should go about it's business whether or not the litmus_inventory.yaml already exists.
Steps to Reproduce
Bumped into this in a test case in #186.
The text was updated successfully, but these errors were encountered: