Skip to content

Commit 6507644

Browse files
committed
fix: stop inserting provisioner daemons into the database
Signed-off-by: Spike Curtis <spike@coder.com>
1 parent 41433cd commit 6507644

File tree

4 files changed

+29
-76
lines changed

4 files changed

+29
-76
lines changed

coderd/coderd.go

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,35 +1065,26 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti
10651065
}
10661066
}()
10671067

1068-
name := namesgenerator.GetRandomName(1)
1069-
// nolint:gocritic // Inserting a provisioner daemon is a system function.
1070-
daemon, err := api.Database.InsertProvisionerDaemon(dbauthz.AsSystemRestricted(ctx), database.InsertProvisionerDaemonParams{
1071-
ID: uuid.New(),
1072-
CreatedAt: database.Now(),
1073-
Name: name,
1074-
Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform},
1075-
Tags: database.StringMap{
1076-
provisionerdserver.TagScope: provisionerdserver.ScopeOrganization,
1077-
},
1068+
tags, err := json.Marshal(database.StringMap{
1069+
provisionerdserver.TagScope: provisionerdserver.ScopeOrganization,
10781070
})
1079-
if err != nil {
1080-
return nil, xerrors.Errorf("insert provisioner daemon %q: %w", name, err)
1081-
}
1082-
1083-
tags, err := json.Marshal(daemon.Tags)
10841071
if err != nil {
10851072
return nil, xerrors.Errorf("marshal tags: %w", err)
10861073
}
10871074

10881075
mux := drpcmux.New()
1089-
1076+
name := namesgenerator.GetRandomName(1)
1077+
logger := api.Logger.Named(fmt.Sprintf("inmem-provisionerd-%s", name))
1078+
logger.Info(ctx, "starting in-memory provisioner daemon")
10901079
err = proto.DRPCRegisterProvisionerDaemon(mux, &provisionerdserver.Server{
1091-
AccessURL: api.AccessURL,
1092-
ID: daemon.ID,
1093-
OIDCConfig: api.OIDCConfig,
1094-
Database: api.Database,
1095-
Pubsub: api.Pubsub,
1096-
Provisioners: daemon.Provisioners,
1080+
AccessURL: api.AccessURL,
1081+
ID: uuid.New(),
1082+
OIDCConfig: api.OIDCConfig,
1083+
Database: api.Database,
1084+
Pubsub: api.Pubsub,
1085+
Provisioners: []database.ProvisionerType{
1086+
database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform,
1087+
},
10971088
GitAuthConfigs: api.GitAuthConfigs,
10981089
Telemetry: api.Telemetry,
10991090
Tracer: tracer,
@@ -1103,7 +1094,7 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti
11031094
TemplateScheduleStore: api.TemplateScheduleStore,
11041095
UserQuietHoursScheduleStore: api.UserQuietHoursScheduleStore,
11051096
AcquireJobDebounce: debounce,
1106-
Logger: api.Logger.Named(fmt.Sprintf("provisionerd-%s", daemon.Name)),
1097+
Logger: logger,
11071098
DeploymentValues: api.DeploymentValues,
11081099
})
11091100
if err != nil {
@@ -1115,16 +1106,14 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti
11151106
if xerrors.Is(err, io.EOF) {
11161107
return
11171108
}
1118-
api.Logger.Debug(ctx, "drpc server error", slog.Error(err))
1109+
logger.Debug(ctx, "drpc server error", slog.Error(err))
11191110
},
11201111
},
11211112
)
11221113
go func() {
11231114
err := server.Serve(ctx, serverSession)
1124-
if err != nil && !xerrors.Is(err, io.EOF) {
1125-
api.Logger.Debug(ctx, "provisioner daemon disconnected", slog.Error(err))
1126-
}
1127-
// close the sessions so we don't leak goroutines serving them.
1115+
logger.Info(ctx, "provisioner daemon disconnected", slog.Error(err))
1116+
// close the sessions, so we don't leak goroutines serving them.
11281117
_ = clientSession.Close()
11291118
_ = serverSession.Close()
11301119
}()

codersdk/organizations.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ func (c *Client) Organization(ctx context.Context, id uuid.UUID) (Organization,
150150
}
151151

152152
// ProvisionerDaemons returns provisioner daemons available.
153+
//
154+
// Deprecated: We no longer track provisioner daemons as they connect. This function may return historical data
155+
// but new provisioner daemons will not appear.
153156
func (c *Client) ProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) {
154157
res, err := c.Request(ctx, http.MethodGet,
155158
// TODO: the organization path parameter is currently ignored.

enterprise/coderd/provisionerdaemons.go

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -186,23 +186,7 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
186186
}
187187
}
188188

189-
name := namesgenerator.GetRandomName(1)
190-
daemon, err := api.Database.InsertProvisionerDaemon(ctx, database.InsertProvisionerDaemonParams{
191-
ID: uuid.New(),
192-
CreatedAt: database.Now(),
193-
Name: name,
194-
Provisioners: provisioners,
195-
Tags: tags,
196-
})
197-
if err != nil {
198-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
199-
Message: "Internal error writing provisioner daemon.",
200-
Detail: err.Error(),
201-
})
202-
return
203-
}
204-
205-
rawTags, err := json.Marshal(daemon.Tags)
189+
rawTags, err := json.Marshal(tags)
206190
if err != nil {
207191
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
208192
Message: "Internal error marshaling daemon tags.",
@@ -243,19 +227,22 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
243227
return
244228
}
245229
mux := drpcmux.New()
230+
daemonName := namesgenerator.GetRandomName(1)
231+
logger := api.Logger.Named(fmt.Sprintf("ext-provisionerd-%s", daemonName))
232+
logger.Info(ctx, "starting external provisioner daemon")
246233
err = proto.DRPCRegisterProvisionerDaemon(mux, &provisionerdserver.Server{
247234
AccessURL: api.AccessURL,
248235
GitAuthConfigs: api.GitAuthConfigs,
249236
OIDCConfig: api.OIDCConfig,
250-
ID: daemon.ID,
237+
ID: uuid.New(),
251238
Database: api.Database,
252239
Pubsub: api.Pubsub,
253-
Provisioners: daemon.Provisioners,
240+
Provisioners: provisioners,
254241
Telemetry: api.Telemetry,
255242
Auditor: &api.AGPL.Auditor,
256243
TemplateScheduleStore: api.AGPL.TemplateScheduleStore,
257244
UserQuietHoursScheduleStore: api.AGPL.UserQuietHoursScheduleStore,
258-
Logger: api.Logger.Named(fmt.Sprintf("provisionerd-%s", daemon.Name)),
245+
Logger: logger,
259246
Tags: rawTags,
260247
Tracer: trace.NewNoopTracerProvider().Tracer("noop"),
261248
DeploymentValues: api.DeploymentValues,
@@ -269,12 +256,12 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
269256
if xerrors.Is(err, io.EOF) {
270257
return
271258
}
272-
api.Logger.Debug(ctx, "drpc server error", slog.Error(err))
259+
logger.Debug(ctx, "drpc server error", slog.Error(err))
273260
},
274261
})
275262
err = server.Serve(ctx, session)
263+
logger.Info(ctx, "provisioner daemon disconnected", slog.Error(err))
276264
if err != nil && !xerrors.Is(err, io.EOF) {
277-
api.Logger.Debug(ctx, "provisioner daemon disconnected", slog.Error(err))
278265
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("serve: %s", err))
279266
return
280267
}

enterprise/coderd/provisionerdaemons_test.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
4040
})
4141
require.NoError(t, err)
4242
srv.DRPCConn().Close()
43-
daemons, err := client.ProvisionerDaemons(ctx)
44-
require.NoError(t, err)
45-
require.Len(t, daemons, 1)
4643
})
4744

4845
t.Run("NoLicense", func(t *testing.T) {
@@ -61,11 +58,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
6158
var apiError *codersdk.Error
6259
require.ErrorAs(t, err, &apiError)
6360
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
64-
65-
// querying provisioner daemons is forbidden without license
66-
_, err = client.ProvisionerDaemons(ctx)
67-
require.ErrorAs(t, err, &apiError)
68-
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
6961
})
7062

7163
t.Run("Organization", func(t *testing.T) {
@@ -91,9 +83,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
9183
var apiError *codersdk.Error
9284
require.ErrorAs(t, err, &apiError)
9385
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
94-
daemons, err := client.ProvisionerDaemons(ctx)
95-
require.NoError(t, err)
96-
require.Len(t, daemons, 0)
9786
})
9887

9988
t.Run("OrganizationNoPerms", func(t *testing.T) {
@@ -119,9 +108,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
119108
var apiError *codersdk.Error
120109
require.ErrorAs(t, err, &apiError)
121110
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
122-
daemons, err := client.ProvisionerDaemons(ctx)
123-
require.NoError(t, err)
124-
require.Len(t, daemons, 0)
125111
})
126112

127113
t.Run("UserLocal", func(t *testing.T) {
@@ -207,9 +193,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
207193
require.NoError(t, err)
208194
err = srv.DRPCConn().Close()
209195
require.NoError(t, err)
210-
daemons, err := client.ProvisionerDaemons(ctx)
211-
require.NoError(t, err)
212-
require.Len(t, daemons, 1)
213196
})
214197

215198
t.Run("BadPSK", func(t *testing.T) {
@@ -239,9 +222,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
239222
var apiError *codersdk.Error
240223
require.ErrorAs(t, err, &apiError)
241224
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
242-
daemons, err := client.ProvisionerDaemons(ctx)
243-
require.NoError(t, err)
244-
require.Len(t, daemons, 0)
245225
})
246226

247227
t.Run("NoAuth", func(t *testing.T) {
@@ -270,9 +250,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
270250
var apiError *codersdk.Error
271251
require.ErrorAs(t, err, &apiError)
272252
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
273-
daemons, err := client.ProvisionerDaemons(ctx)
274-
require.NoError(t, err)
275-
require.Len(t, daemons, 0)
276253
})
277254

278255
t.Run("NoPSK", func(t *testing.T) {
@@ -301,8 +278,5 @@ func TestProvisionerDaemonServe(t *testing.T) {
301278
var apiError *codersdk.Error
302279
require.ErrorAs(t, err, &apiError)
303280
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
304-
daemons, err := client.ProvisionerDaemons(ctx)
305-
require.NoError(t, err)
306-
require.Len(t, daemons, 0)
307281
})
308282
}

0 commit comments

Comments
 (0)