mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat(coderd): update API to allow filtering provisioner daemons by tags (#15448)
This PR provides new parameters to an endpoint that will be necessary for #15048
This commit is contained in:
@@ -10,7 +10,11 @@ SELECT
|
||||
FROM
|
||||
provisioner_daemons
|
||||
WHERE
|
||||
organization_id = @organization_id;
|
||||
-- This is the original search criteria:
|
||||
organization_id = @organization_id :: uuid
|
||||
AND
|
||||
-- adding support for searching by tags:
|
||||
(@want_tags :: tagset = 'null' :: tagset OR provisioner_tagset_contains(provisioner_daemons.tags::tagset, @want_tags::tagset));
|
||||
|
||||
-- name: DeleteOldProvisionerDaemons :exec
|
||||
-- Delete provisioner daemons that have been created at least a week ago
|
||||
|
||||
@@ -16,21 +16,17 @@ WHERE
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
provisioner_jobs AS nested
|
||||
provisioner_jobs AS potential_job
|
||||
WHERE
|
||||
nested.started_at IS NULL
|
||||
AND nested.organization_id = @organization_id
|
||||
potential_job.started_at IS NULL
|
||||
AND potential_job.organization_id = @organization_id
|
||||
-- Ensure the caller has the correct provisioner.
|
||||
AND nested.provisioner = ANY(@types :: provisioner_type [ ])
|
||||
AND CASE
|
||||
-- Special case for untagged provisioners: only match untagged jobs.
|
||||
WHEN nested.tags :: jsonb = '{"scope": "organization", "owner": ""}' :: jsonb
|
||||
THEN nested.tags :: jsonb = @tags :: jsonb
|
||||
-- Ensure the caller satisfies all job tags.
|
||||
ELSE nested.tags :: jsonb <@ @tags :: jsonb
|
||||
END
|
||||
AND potential_job.provisioner = ANY(@types :: provisioner_type [ ])
|
||||
-- elsewhere, we use the tagset type, but here we use jsonb for backward compatibility
|
||||
-- they are aliases and the code that calls this query already relies on a different type
|
||||
AND provisioner_tagset_contains(@provisioner_tags :: jsonb, potential_job.tags :: jsonb)
|
||||
ORDER BY
|
||||
nested.created_at
|
||||
potential_job.created_at
|
||||
FOR UPDATE
|
||||
SKIP LOCKED
|
||||
LIMIT
|
||||
@@ -160,4 +156,4 @@ RETURNING *;
|
||||
-- name: GetProvisionerJobTimingsByJobID :many
|
||||
SELECT * FROM provisioner_job_timings
|
||||
WHERE job_id = $1
|
||||
ORDER BY started_at ASC;
|
||||
ORDER BY started_at ASC;
|
||||
|
||||
Reference in New Issue
Block a user