Skip to content

Commit fab1960

Browse files
authored
fix: allow tag removal in provisioner upsert (coder#14187)
1 parent 49feb12 commit fab1960

7 files changed

+50
-11
lines changed

coderd/database/dump.sql

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE UNIQUE INDEX idx_provisioner_daemons_name_owner_key ON provisioner_daemons USING btree (name, lower(COALESCE((tags ->> 'owner'::text), ''::text)));
2+
3+
COMMENT ON INDEX idx_provisioner_daemons_name_owner_key IS 'Allow unique provisioner daemon names by user';
4+
5+
DROP INDEX idx_provisioner_daemons_org_name_owner_key;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE UNIQUE INDEX idx_provisioner_daemons_org_name_owner_key ON provisioner_daemons USING btree (organization_id, name, lower(COALESCE((tags ->> 'owner'::text), ''::text)));
2+
3+
COMMENT ON INDEX idx_provisioner_daemons_org_name_owner_key IS 'Allow unique provisioner daemon names by organization and user';
4+
5+
DROP INDEX idx_provisioner_daemons_name_owner_key;

coderd/database/queries.sql.go

+1-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/provisionerdaemons.sql

+1-4
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,13 @@ VALUES (
4545
@version,
4646
@organization_id,
4747
@api_version
48-
) ON CONFLICT("name", LOWER(COALESCE(tags ->> 'owner'::text, ''::text))) DO UPDATE SET
48+
) ON CONFLICT("organization_id", "name", LOWER(COALESCE(tags ->> 'owner'::text, ''::text))) DO UPDATE SET
4949
provisioners = @provisioners,
5050
tags = @tags,
5151
last_seen_at = @last_seen_at,
5252
"version" = @version,
5353
api_version = @api_version,
5454
organization_id = @organization_id
55-
WHERE
56-
-- Only ones with the same tags are allowed clobber
57-
provisioner_daemons.tags <@ @tags :: jsonb
5855
RETURNING *;
5956

6057
-- name: UpdateProvisionerDaemonLastSeenAt :exec

coderd/database/unique_constraint.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

enterprise/coderd/provisionerdaemons_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,41 @@ func TestProvisionerDaemonServe(t *testing.T) {
347347
}
348348
})
349349

350+
t.Run("ChangeTags", func(t *testing.T) {
351+
t.Parallel()
352+
client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{
353+
Features: license.Features{
354+
codersdk.FeatureExternalProvisionerDaemons: 1,
355+
},
356+
}})
357+
another, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.ScopedRoleOrgAdmin(user.OrganizationID))
358+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
359+
defer cancel()
360+
req := codersdk.ServeProvisionerDaemonRequest{
361+
ID: uuid.New(),
362+
Name: testutil.MustRandString(t, 63),
363+
Organization: user.OrganizationID,
364+
Provisioners: []codersdk.ProvisionerType{
365+
codersdk.ProvisionerTypeEcho,
366+
},
367+
Tags: map[string]string{
368+
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
369+
},
370+
}
371+
_, err := another.ServeProvisionerDaemon(ctx, req)
372+
require.NoError(t, err)
373+
374+
// add tag
375+
req.Tags["new"] = "tag"
376+
_, err = another.ServeProvisionerDaemon(ctx, req)
377+
require.NoError(t, err)
378+
379+
// remove tag
380+
delete(req.Tags, "new")
381+
_, err = another.ServeProvisionerDaemon(ctx, req)
382+
require.NoError(t, err)
383+
})
384+
350385
t.Run("PSK_daily_cost", func(t *testing.T) {
351386
t.Parallel()
352387
const provPSK = `provisionersftw`

0 commit comments

Comments
 (0)