Skip to content

Commit f430027

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

27 files changed

+870
-93
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy