Simple Example for foreman-tasks locks

Hi All,

I was looking for a simple example of how to use locks of foreman-tasks
(dynflow). I can see that Actions::EntryAction mixes in the
Actions::Helpers::Lock but for me it is not clear how to use it.

regards,
Daniel

Hello,

there are two types of locks - exclusive (blocking other tasks to lock the
same resource) and non-exclusive also called links. To automatically create
link to some object, you only define related_resource method in your task

   def related_resources
     [ ::Host.first ]
   end

As you can see, it should return array of linked objects, first host in this
case.

To create a lock you need to first defined what locks are available for a
given task, e.g.

   # names of locks that can be locked
   def available_locks
     [ :read, :write ]
   end

When the task has this defined you can lock resources in planning like this

   # locking only in plan phase
   def plan(params)
     lock!(::FactValue.first, :read)
     # exclusive_lock!(::Host.last) # locks all available locks on a given 

resource
link!(::FactValue.last) # this would add link lock
plan_self :params => params
end
# exclusive_lock! and lock! creates the same kind of lock,
exclusive_lock! just locks all available locks

I'm in the middle of writing the manual for the foreman-tasks plugin. When I
finish user guide, I'll send a PR so others can contribute. I also plan to put
together developer guide which would cover this.

Hope this helps

··· On pátek 16. prosince 2016 16:28:47 CET Daniel Kuffner wrote: > Hi All, > > I was looking for a simple example of how to use locks of foreman-tasks > (dynflow). I can see that Actions::EntryAction mixes in the > Actions::Helpers::Lock but for me it is not clear how to use it. > > regards, > Daniel


Marek