Skip to content
This repository has been archived by the owner on Jul 25, 2024. It is now read-only.

Also fetch LAVA job definition for watchjobs #1123

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions squad/api/ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,16 @@ def watch_job(request, group_slug, project_slug, version, environment_slug):
job_id=testjob_id
)

# check if backend is able to fetch job definition
try:
definition = backend.get_job_definition(testjob_id)
if not definition:
return HttpResponseBadRequest(f"No job definition found for job {testjob_id}: {definition}")
test_job.definition = definition
except NotImplementedError:
# backend does not work with job definitions
pass

# sanitize job_url
try:
backend.get_implementation().job_url(test_job)
Expand Down
3 changes: 3 additions & 0 deletions squad/ci/backend/fake.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,8 @@ def cancel(self, test_job):
def check_job_definition(self, definition):
return True

def get_job_definition(self, test_job):
return "sample job definition"

def supports_callbacks(self):
return False
11 changes: 11 additions & 0 deletions squad/ci/backend/lava.py
Original file line number Diff line number Diff line change
Expand Up @@ -775,3 +775,14 @@ def check_job_definition(self, definition):
return True
except yaml.YAMLError as e:
return str(e)

def get_job_definition(self, job_id):
if self.use_xml_rpc:
return self.proxy.scheduler.jobs.definition(job_id)
job_resp = requests.get(
f'{self.api_url_base}/jobs/{job_id}/definition/',
headers=self.authentication,
timeout=self.settings.get(timeout_variable_name, DEFAULT_TIMEOUT)
)
if job_resp.status_code == 200:
return job_resp.json()
10 changes: 8 additions & 2 deletions squad/ci/backend/null.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,18 +92,24 @@ def cancel(self, test_job):
"""
raise NotImplementedError

def job_url(selt, test_job):
def job_url(self, test_job):
"""
Returns the URL of the test job in the backend
"""
raise NotImplementedError

def check_job_definition(selt, definition):
def check_job_definition(self, definition):
"""
Returns True if job definition checks out or an error message
"""
raise NotImplementedError

def get_job_definition(self, job_id):
"""
Returns the job definition for a given test job
"""
raise NotImplementedError

def supports_callbacks(self):
"""
Returns True if this backend supports callbacks, False otherwise
Expand Down
3 changes: 3 additions & 0 deletions squad/ci/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ def get_implementation(self):
def check_job_definition(self, definition):
return self.get_implementation().check_job_definition(definition)

def get_job_definition(self, job_id):
return self.get_implementation().get_job_definition(job_id)

def supports_callbacks(self):
return self.get_implementation().supports_callbacks()

Expand Down
2 changes: 2 additions & 0 deletions test/api/test_ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,8 @@ def test_watch_testjob(self, fetch):
1,
testjob_queryset.count()
)
testjob = testjob_queryset.first()
self.assertTrue(len(testjob.definition) > 0)
fetch.assert_called_with(testjob_queryset.first().id)
logentry_queryset = LogEntry.objects.filter(
user_id=self.project_privileged_user.pk,
Expand Down
Loading