Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ec2c529

Browse files
authored
Merge pull request jrxFive#77 from xbreak/deregister-prune
Added support for optional `purge` parameter in job.deregister.
2 parents 9ce1450 + c9ff8b3 commit ec2c529

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

docs/api/job.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ This endpoint deregisters a job, and stops all allocations part of it.
502502

503503
https://www.nomadproject.io/api/jobs.html#stop-a-job
504504

505-
Example:
505+
Example of deferred removal of job (performed by Nomad garbage collector):
506506

507507
```
508508
import nomad
@@ -511,3 +511,13 @@ my_nomad = nomad.Nomad(host='192.168.33.10')
511511
512512
my_nomad.job.deregister_job("example")
513513
```
514+
515+
Example of immediate removal of job (job not queryable after this):
516+
517+
```
518+
import nomad
519+
520+
my_nomad = nomad.Nomad(host='192.168.33.10')
521+
522+
my_nomad.job.deregister_job("example", purge=True)
523+
```

nomad/api/job.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,27 @@ def stable_job(self, id, version, stable):
271271
"Stable": stable}
272272
return self.request(id, "stable", json=revert_json, method="post").json()
273273

274-
def deregister_job(self, id):
274+
def deregister_job(self, id, purge=None):
275275
""" Deregisters a job, and stops all allocations part of it.
276276
277277
https://www.nomadproject.io/docs/http/job.html
278278
279279
arguments:
280280
- id
281+
- purge (bool), optionally specifies whether the job should be
282+
stopped and purged immediately (`purge=True`) or deferred to the
283+
Nomad garbage collector (`purge=False`).
284+
281285
returns: dict
282286
raises:
283287
- nomad.api.exceptions.BaseNomadException
284288
- nomad.api.exceptions.URLNotFoundNomadException
289+
- nomad.api.exceptions.InvalidParameters
285290
"""
286-
return self.request(id, method="delete").json()
291+
params = None
292+
if purge is not None:
293+
if not isinstance(purge, bool):
294+
raise nomad.api.exceptions.InvalidParameters("purge is invalid "
295+
"(expected type %s but got %s)"%(type(bool()), type(purge)))
296+
params = {"purge": purge}
297+
return self.request(id, params=params, method="delete").json()

tests/test_job.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,19 @@ def test_dunder_getattr(nomad_setup):
145145

146146
with pytest.raises(AttributeError):
147147
d = nomad_setup.job.does_not_exist
148+
149+
def test_delete_job_with_invalid_purge_param_raises(nomad_setup):
150+
with pytest.raises(exceptions.InvalidParameters):
151+
nomad_setup.job.deregister_job("example", purge='True')
152+
153+
def test_delete_job_with_purge(nomad_setup):
154+
# Run this last since it will purge the job completely, resetting things like
155+
# job version
156+
assert "EvalID" in nomad_setup.job.deregister_job("example", purge=True)
157+
158+
# Job should not be available after a purge.
159+
with pytest.raises(exceptions.URLNotFoundNomadException):
160+
nomad_setup.job.get_job("example")
161+
162+
# Reregister job
163+
test_register_job(nomad_setup)

0 commit comments

Comments
 (0)