lockable-resources-plugin icon indicating copy to clipboard operation
lockable-resources-plugin copied to clipboard

Feature request: ability to add/remove lockable resources through API

Open tstibbs opened this issue 6 years ago • 8 comments

It would be really useful to able to add/remove lockable resources via an API (either REST or through the groovy console). This would enable the locks to represent real world non-static things - i.e. as you scale your infrastructure, you can scale your locks to reflect this.

tstibbs avatar May 18 '18 08:05 tstibbs

I also would like some kind of REST API for this, so I could lock stuff in one Jenkins instance from a another Jenkins instance.

I can use the GET calls that the lockable resources frontend uses, but i don't think it was intended for that kind of usage: https://jenkins/lockable-resources/reserve?resource=lockname https://jenkins/lockable-resources/unreserve?resource=lockname

When I used the "reserve" endpoint it would always return with status code 302, even if the lock had already been locked by someone else. The "unreserve" endpoint on the other side does fail with status code 403 if the lock is not currently locked or locked by someone else (the get call was performed with a none admin user).

simontunnat avatar Jun 03 '20 09:06 simontunnat

I also wish there was also a REST API for this. In the meantime I created a python API to control lockable resources (reserve, unreserve, list etc). https://pypi.org/project/jenkins-lockable-resources/

Hope that can help.

alexandre-perrin avatar Sep 28 '20 10:09 alexandre-perrin

I also would like a REST API. We have a resource that can be used externally from outside Jenkins. E.g. I would like to lock the resource from outside Jenkins.

odin- avatar Mar 03 '21 12:03 odin-

@odin- For the time being , you can put all the logic in a groovy code (groovy code support locking functionality) in a scripted or a declarative pipeline and then call your job remotely using curl or from some other point.

bcamishrapr avatar Dec 17 '21 10:12 bcamishrapr

FWIW, a PR to define an /api endpoint was recently merged (with no further details at that time, just exposing whatever is properly marked in the codebase).

There is also JCasC support to pre-define resources, and a way to define "ephemeral" resources by just trying to lock a non-existing one.

Other than that, groovy code, scripted pipelines and Jenkins Shared Libraries are in position to import the LockableResourcesManager and/or LockableResource classes and call their methods for lower-level manipulations.

jimklimov avatar Feb 06 '22 12:02 jimklimov

This was recently closed, but I'm also pushing for something similar in https://github.com/jenkinsci/lockable-resources-plugin/pull/305 with a updateLock step. Yes the LockableResourcesManager can be pulled into groovy, but using it directly is not a great experience. The updateLock would either set attributes to an existing lock or create a new one (not ephemeral) if it doesn't exist. I'd be happy to hear feedback to make it work with your use cases as well.

gaspardpetit avatar Feb 13 '22 01:02 gaspardpetit

Is there any API documentation on what is supported?

vishnugovind avatar Jan 24 '24 17:01 vishnugovind