Skip to content

Commit 8bee6f5

Browse files
committed
feat(coderd): add endpoint to list provisioner daemons
Updates #15190 Updates #15084 Supercedes #15940
1 parent 4495db8 commit 8bee6f5

28 files changed

+919
-110
lines changed

coderd/apidoc/docs.go

Lines changed: 105 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 97 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,9 @@ func New(options *Options) *API {
10071007
})
10081008
})
10091009
})
1010+
r.Route("/provisionerdaemons", func(r chi.Router) {
1011+
r.Get("/", api.provisionerDaemons)
1012+
})
10101013
})
10111014
})
10121015
r.Route("/templates", func(r chi.Router) {

coderd/database/dbauthz/dbauthz.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,10 @@ func (q *querier) GetProvisionerDaemonsByOrganization(ctx context.Context, organ
19281928
return fetchWithPostFilter(q.auth, policy.ActionRead, q.db.GetProvisionerDaemonsByOrganization)(ctx, organizationID)
19291929
}
19301930

1931+
func (q *querier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.Context, arg database.GetProvisionerDaemonsWithStatusByOrganizationParams) ([]database.GetProvisionerDaemonsWithStatusByOrganizationRow, error) {
1932+
return fetchWithPostFilter(q.auth, policy.ActionRead, q.db.GetProvisionerDaemonsWithStatusByOrganization)(ctx, arg)
1933+
}
1934+
19311935
func (q *querier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (database.ProvisionerJob, error) {
19321936
job, err := q.db.GetProvisionerJobByID(ctx, id)
19331937
if err != nil {

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,6 +2119,18 @@ func (s *MethodTestSuite) TestExtraMethods() {
21192119
s.NoError(err, "get provisioner daemon by org")
21202120
check.Args(database.GetProvisionerDaemonsByOrganizationParams{OrganizationID: org.ID}).Asserts(d, policy.ActionRead).Returns(ds)
21212121
}))
2122+
s.Run("GetProvisionerDaemonsWithStatusByOrganization", s.Subtest(func(db database.Store, check *expects) {
2123+
org := dbgen.Organization(s.T(), db, database.Organization{})
2124+
d := dbgen.ProvisionerDaemon(s.T(), db, database.ProvisionerDaemon{
2125+
OrganizationID: org.ID,
2126+
Tags: map[string]string{
2127+
provisionersdk.TagScope: provisionersdk.ScopeOrganization,
2128+
},
2129+
})
2130+
ds, err := db.GetProvisionerDaemonsWithStatusByOrganization(context.Background(), database.GetProvisionerDaemonsWithStatusByOrganizationParams{OrganizationID: org.ID})
2131+
s.NoError(err, "get provisioner daemon with status by org")
2132+
check.Args(database.GetProvisionerDaemonsWithStatusByOrganizationParams{OrganizationID: org.ID}).Asserts(d, policy.ActionRead).Returns(ds)
2133+
}))
21222134
s.Run("GetEligibleProvisionerDaemonsByProvisionerJobIDs", s.Subtest(func(db database.Store, check *expects) {
21232135
org := dbgen.Organization(s.T(), db, database.Organization{})
21242136
tags := database.StringMap(map[string]string{

coderd/database/dbgen/dbgen.go

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -505,9 +505,27 @@ func GroupMember(t testing.TB, db database.Store, member database.GroupMemberTab
505505

506506
// ProvisionerDaemon creates a provisioner daemon as far as the database is concerned. It does not run a provisioner daemon.
507507
// If no key is provided, it will create one.
508-
func ProvisionerDaemon(t testing.TB, db database.Store, daemon database.ProvisionerDaemon) database.ProvisionerDaemon {
508+
func ProvisionerDaemon(t testing.TB, db database.Store, orig database.ProvisionerDaemon) database.ProvisionerDaemon {
509509
t.Helper()
510510

511+
var defOrgID uuid.UUID
512+
if orig.OrganizationID == uuid.Nil {
513+
defOrg, _ := db.GetDefaultOrganization(genCtx)
514+
defOrgID = defOrg.ID
515+
}
516+
517+
daemon := database.UpsertProvisionerDaemonParams{
518+
Name: takeFirst(orig.Name, testutil.GetRandomName(t)),
519+
OrganizationID: takeFirst(orig.OrganizationID, defOrgID, uuid.New()),
520+
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
521+
Provisioners: takeFirstSlice(orig.Provisioners, []database.ProvisionerType{database.ProvisionerTypeEcho}),
522+
Tags: takeFirstMap(orig.Tags, database.StringMap{}),
523+
KeyID: takeFirst(orig.KeyID, uuid.Nil),
524+
LastSeenAt: takeFirst(orig.LastSeenAt, sql.NullTime{Time: dbtime.Now(), Valid: true}),
525+
Version: takeFirst(orig.Version, "v0.0.0"),
526+
APIVersion: takeFirst(orig.APIVersion, "1.1"),
527+
}
528+
511529
if daemon.KeyID == uuid.Nil {
512530
key, err := db.InsertProvisionerKey(genCtx, database.InsertProvisionerKeyParams{
513531
ID: uuid.New(),
@@ -521,24 +539,7 @@ func ProvisionerDaemon(t testing.TB, db database.Store, daemon database.Provisio
521539
daemon.KeyID = key.ID
522540
}
523541

524-
if daemon.CreatedAt.IsZero() {
525-
daemon.CreatedAt = dbtime.Now()
526-
}
527-
if daemon.Name == "" {
528-
daemon.Name = "test-daemon"
529-
}
530-
531-
d, err := db.UpsertProvisionerDaemon(genCtx, database.UpsertProvisionerDaemonParams{
532-
Name: daemon.Name,
533-
OrganizationID: daemon.OrganizationID,
534-
CreatedAt: daemon.CreatedAt,
535-
Provisioners: daemon.Provisioners,
536-
Tags: daemon.Tags,
537-
KeyID: daemon.KeyID,
538-
LastSeenAt: daemon.LastSeenAt,
539-
Version: daemon.Version,
540-
APIVersion: daemon.APIVersion,
541-
})
542+
d, err := db.UpsertProvisionerDaemon(genCtx, daemon)
542543
require.NoError(t, err)
543544
return d
544545
}
@@ -1109,6 +1110,12 @@ func takeFirstSlice[T any](values ...[]T) []T {
11091110
})
11101111
}
11111112

1113+
func takeFirstMap[T, E comparable](values ...map[T]E) map[T]E {
1114+
return takeFirstF(values, func(v map[T]E) bool {
1115+
return v != nil
1116+
})
1117+
}
1118+
11121119
// takeFirstF takes the first value that returns true
11131120
func takeFirstF[Value any](values []Value, take func(v Value) bool) Value {
11141121
for _, v := range values {

0 commit comments

Comments
 (0)