curl --request GET \
--url https://api.example.com/api/v1/job-device-statuses/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/job-device-statuses/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/job-device-statuses/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/job-device-statuses/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/job-device-statuses/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/job-device-statuses/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-device-statuses/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"count": 123,
"results": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"device": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"nvswitch_rack_slot": "ST0",
"nvswitch_switch_role": "",
"nvswitch_nvos_hostname": "<string>",
"enrollment_validated_ref": "<string>",
"current_instance_uuid": "<string>",
"device_type_kind": "<string>",
"device_type_vendor": "<string>",
"device_type_model": "<string>",
"device_type_resource_class": "<string>",
"role_name": "<string>",
"role_slug": "<string>",
"device_class": "gpu_compute",
"rack_name": "<string>",
"rack_serial_number": "",
"location_name": "<string>",
"site_name": "<string>",
"site_slug": "<string>",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organisation_slug": "<string>",
"links": {
"self": "<string>",
"collection": "<string>",
"device_type": "<string>",
"role": "<string>",
"rack": "<string>",
"location": "<string>",
"site": "<string>",
"jobs": "<string>",
"job_device_statuses": "<string>",
"netbox": "<string>"
},
"customer_ready": true,
"topology": {},
"topology_group_types": {},
"short_name": "<string>",
"current_tenant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"current_tenant_name": "<string>",
"current_allocation_annotations": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"nvswitch_ztp_completed_at": "2023-11-07T05:31:56Z",
"nvswitch_ztp_evidence_source": "<string>",
"position": "<string>",
"enrollment_proof_source": "enrolled",
"entered_triage_at": "2023-11-07T05:31:56Z",
"inventory_only": true,
"device_type": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rack": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"annotations": {},
"tags": [
"<string>"
],
"serial_number": "<string>",
"infrastructure_ref": "<string>",
"ironic_provision_state": "enroll",
"placement_traits": [
"<string>"
],
"slurm_states": [
"ALLOCATED"
],
"slurm_state_updated_at": "2023-11-07T05:31:56Z",
"slurm_state_reason": "<string>",
"operational_failure_reason": "<string>",
"operational_failure_details": "<string>",
"ironic_maintenance": true,
"ironic_maintenance_reason": "<string>",
"ironic_fault": "<string>",
"ironic_last_error": "<string>",
"triage_ticket_url": "<string>",
"parent_ticket_url": "<string>",
"netbox_id": 1073741823,
"interfaces": [
{
"name": "<string>",
"type": "<string>",
"type_display": "<string>",
"ip_addresses": [
"<string>"
],
"mac_address": "<string>",
"ib_device_guid": "<string>"
}
],
"inventory_status": "planned",
"operational_status": "unknown",
"health_status": "unknown",
"platform_class": "<string>",
"entered_service_at": "2023-11-07T05:31:56Z",
"in_triage": true,
"chad_ignore": true
},
"job": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"temporal_workflow_name": "EnrollmentWorkflow",
"organisation": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"category": "enrolment"
},
"created_by": "<string>",
"ai_failure_summary": {
"headline": "<string>",
"explanation": "<string>",
"failure_categories": {}
},
"test_slugs": [
"multi-node.hello-world"
],
"hostlist": "<string>",
"chad_sop": {
"id": "<string>",
"name": "<string>",
"version": 1073741824
},
"links": {
"self": "<string>",
"collection": "<string>",
"workflow": "<string>",
"devices": "<string>",
"job_device_statuses": "<string>",
"temporal": "<string>",
"logs": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"parameters": "<unknown>",
"max_attempts_override": 123,
"source_test_execution": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"devices": [
{
"name": "<string>",
"rack_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rack_name": "<string>",
"position": 123,
"pod": "<string>"
}
],
"device_count": 123,
"failed_device_count": 123,
"unevaluated_device_count": 123,
"name": "<string>",
"status": "pending",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"temporal_workflow_id": "<string>"
},
"failure_code": "UNMAPPED_APPLICATION_ERROR",
"ai_diagnosis": {
"headline": "<string>",
"explanation": "<string>"
},
"node_diagnostics": {
"schema_version": 123,
"failure_signature": "clean_failed.neutron_ports",
"findings": [
{
"domain": "openstack_baremetal",
"code": "clean_failed.neutron_ports",
"collector": "ironic-node"
}
],
"collectors": [
{
"slug": "ironic-node",
"status": "completed"
}
],
"artifact": {
"bucket": "<string>",
"key_prefix": "<string>"
}
},
"responsible_team": "fleet_manager",
"links": {
"self": "<string>",
"collection": "<string>",
"job": "<string>",
"device": "<string>",
"temporal": "<string>",
"logs": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"status": "running",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"temporal_workflow_id": "<string>",
"phase": "<string>",
"failure_message": "<string>"
}
],
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2"
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}List job device statuses
List, retrieve and partially update the statuses of a device in a job.
Writes go through PATCH only. PUT is deliberately disabled: the sole
writer (the workflow agent’s SDK job_executions manager) uses PATCH, and
the organic fm.device.validation-requested producer lives on
partial_update — leaving a full-replace PUT open would be a status
write path that bypasses that enqueue chokepoint.
curl --request GET \
--url https://api.example.com/api/v1/job-device-statuses/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/job-device-statuses/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/job-device-statuses/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/job-device-statuses/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/job-device-statuses/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/job-device-statuses/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-device-statuses/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"count": 123,
"results": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"device": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"nvswitch_rack_slot": "ST0",
"nvswitch_switch_role": "",
"nvswitch_nvos_hostname": "<string>",
"enrollment_validated_ref": "<string>",
"current_instance_uuid": "<string>",
"device_type_kind": "<string>",
"device_type_vendor": "<string>",
"device_type_model": "<string>",
"device_type_resource_class": "<string>",
"role_name": "<string>",
"role_slug": "<string>",
"device_class": "gpu_compute",
"rack_name": "<string>",
"rack_serial_number": "",
"location_name": "<string>",
"site_name": "<string>",
"site_slug": "<string>",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organisation_slug": "<string>",
"links": {
"self": "<string>",
"collection": "<string>",
"device_type": "<string>",
"role": "<string>",
"rack": "<string>",
"location": "<string>",
"site": "<string>",
"jobs": "<string>",
"job_device_statuses": "<string>",
"netbox": "<string>"
},
"customer_ready": true,
"topology": {},
"topology_group_types": {},
"short_name": "<string>",
"current_tenant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"current_tenant_name": "<string>",
"current_allocation_annotations": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"nvswitch_ztp_completed_at": "2023-11-07T05:31:56Z",
"nvswitch_ztp_evidence_source": "<string>",
"position": "<string>",
"enrollment_proof_source": "enrolled",
"entered_triage_at": "2023-11-07T05:31:56Z",
"inventory_only": true,
"device_type": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rack": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"annotations": {},
"tags": [
"<string>"
],
"serial_number": "<string>",
"infrastructure_ref": "<string>",
"ironic_provision_state": "enroll",
"placement_traits": [
"<string>"
],
"slurm_states": [
"ALLOCATED"
],
"slurm_state_updated_at": "2023-11-07T05:31:56Z",
"slurm_state_reason": "<string>",
"operational_failure_reason": "<string>",
"operational_failure_details": "<string>",
"ironic_maintenance": true,
"ironic_maintenance_reason": "<string>",
"ironic_fault": "<string>",
"ironic_last_error": "<string>",
"triage_ticket_url": "<string>",
"parent_ticket_url": "<string>",
"netbox_id": 1073741823,
"interfaces": [
{
"name": "<string>",
"type": "<string>",
"type_display": "<string>",
"ip_addresses": [
"<string>"
],
"mac_address": "<string>",
"ib_device_guid": "<string>"
}
],
"inventory_status": "planned",
"operational_status": "unknown",
"health_status": "unknown",
"platform_class": "<string>",
"entered_service_at": "2023-11-07T05:31:56Z",
"in_triage": true,
"chad_ignore": true
},
"job": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"temporal_workflow_name": "EnrollmentWorkflow",
"organisation": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"category": "enrolment"
},
"created_by": "<string>",
"ai_failure_summary": {
"headline": "<string>",
"explanation": "<string>",
"failure_categories": {}
},
"test_slugs": [
"multi-node.hello-world"
],
"hostlist": "<string>",
"chad_sop": {
"id": "<string>",
"name": "<string>",
"version": 1073741824
},
"links": {
"self": "<string>",
"collection": "<string>",
"workflow": "<string>",
"devices": "<string>",
"job_device_statuses": "<string>",
"temporal": "<string>",
"logs": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"parameters": "<unknown>",
"max_attempts_override": 123,
"source_test_execution": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"devices": [
{
"name": "<string>",
"rack_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rack_name": "<string>",
"position": 123,
"pod": "<string>"
}
],
"device_count": 123,
"failed_device_count": 123,
"unevaluated_device_count": 123,
"name": "<string>",
"status": "pending",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"temporal_workflow_id": "<string>"
},
"failure_code": "UNMAPPED_APPLICATION_ERROR",
"ai_diagnosis": {
"headline": "<string>",
"explanation": "<string>"
},
"node_diagnostics": {
"schema_version": 123,
"failure_signature": "clean_failed.neutron_ports",
"findings": [
{
"domain": "openstack_baremetal",
"code": "clean_failed.neutron_ports",
"collector": "ironic-node"
}
],
"collectors": [
{
"slug": "ironic-node",
"status": "completed"
}
],
"artifact": {
"bucket": "<string>",
"key_prefix": "<string>"
}
},
"responsible_team": "fleet_manager",
"links": {
"self": "<string>",
"collection": "<string>",
"job": "<string>",
"device": "<string>",
"temporal": "<string>",
"logs": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"status": "running",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"temporal_workflow_id": "<string>",
"phase": "<string>",
"failure_message": "<string>"
}
],
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2"
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}{
"detail": "<string>",
"code": "error",
"field_errors": [
{
"field": "<string>",
"messages": [
"<string>"
]
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Query Parameters
Multiple values may be separated by commas.
Multiple values may be separated by commas.
Number of results to return per page.
1 <= x <= 500Which field to use when ordering the results.
updated_at, -updated_at A page number within the paginated result set.
Multiple values may be separated by commas.
Multiple values may be separated by commas.
cancelled, completed, failed, running, superseded, terminated, timed_out Multiple values may be separated by commas.
BackendVrfIsolateWorkflow, BackendVrfReturnWorkflow, ColdResetBmcWorkflow, ConnectivityVerificationWorkflow, CustomerReleaseWorkflow, DisableMaintenanceModeWorkflow, EnrollmentWorkflow, FirmwareInventoryWorkflow, FirmwarePolicyVerificationWorkflow, FirmwareVerificationWorkflow, FrontendVrfIsolateWorkflow, FrontendVrfReturnWorkflow, ImageNodeWorkflow, IronicNodeCleanWorkflow, MultiNodeBurnInCollectiveWorkflow, MultiNodeBurnInPairwiseWorkflow, NVSwitchFirmwarePolicyVerificationWorkflow, NodeDiagnosticsWorkflow, NodeSwapWorkflow, NvLinkIsolateWorkflow, NvLinkReturnWorkflow, PowerCycleWorkflow, PowerOffWorkflow, PrepareHardwareTestImagesWorkflow, QuarantineWorkflow, ReleaseWorkflow, ReportGenerationWorkflow, SetMaintenanceModeWorkflow, SingleNodeBurnInWorkflow, SlurmAdoptWorkflow, SlurmDrainNodeWorkflow, SlurmReleaseWorkflow, SlurmResumeNodeWorkflow, UnenrollmentWorkflow, UnimageNodeWorkflow