Ask every host a proposal targets whether it can take the change (DAWG-153).
const url = 'https://api.updawg.net/v1/orgs/example/proposals/example/preflight';const options = {method: 'POST'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.updawg.net/v1/orgs/example/proposals/example/preflightEach is sent a signed run_preflight job naming exactly the proposal’s
packages. The agent changes nothing: it looks at disk space, held
packages, edited configuration files, DKMS modules, snapshots and reboots,
and answers pass, warn or fail for each. For a proposal that has not
started changing hosts (open, snoozed, scheduled) or has halted. Asking
again replaces the last results once they are all in.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Organization slug.
The prp_… id.
Responses
Section titled “Responses”Asked for; the jobs are being signed.
A proposal’s preflight.
object
Why one cannot be asked for now. Absent when it can.
Every host the proposal targets that is still in the fleet.
object
What the host found, once it has reported. A failing check is an answer, not a failed job.
object
The specifics: a package, a file, a module.
Stable, for code: disk_space, held_packages, modified_conffiles,
dkms_modules, snapshot, reboot, for a package change
approved_only, and for a release upgrade release_upgrade and
third_party_repos. A newer agent may add more.
pass, warn or fail.
One sentence for a person, saying what to do when it is not a pass.
The current preflight job’s status: queued, delivered, running,
succeeded, failed, rejected_by_host, expired, cancelled.
Absent before one is signed for this host.
Why there are no checks: the host refused the job (an agent not
permitted preflight says so), or it failed.
Examplegenerated
{ "blocked": "example", "hosts": [ { "checks": [ { "items": [ "example" ], "name": "example", "status": "example", "summary": "example" } ], "finished_at": "2026-04-15T12:00:00Z", "host_id": "example", "hostname": "example", "job_status": "example", "problem": "example" } ], "requested": { "at": "2026-04-15T12:00:00Z", "by": "example", "email": "example", "name": "example" }}No session.
object
Examplegenerated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}Not permitted for this role.
object
Examplegenerated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}No such proposal here.
object
Examplegenerated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}Not possible now; detail says why.
object
Examplegenerated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}Over the organization’s request limit. Retry-After says when to try again; RateLimit-Limit is the burst.
object
Examplegenerated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}