Skip to content

Commit a03615a

Browse files
authored
feature: disable provisionerd listen endpoint (#1614)
* feature: disable provisionerd listen endpoint Signed-off-by: Spike Curtis <spike@coder.com> * Regenerate ts types Signed-off-by: Spike Curtis <spike@coder.com>
1 parent d181731 commit a03615a

File tree

5 files changed

+6
-122
lines changed

5 files changed

+6
-122
lines changed

coderd/coderd.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,6 @@ func newRouter(options *Options, a *api) chi.Router {
209209
r.Get("/resources", a.templateVersionResources)
210210
r.Get("/logs", a.templateVersionLogs)
211211
})
212-
r.Route("/provisionerdaemons", func(r chi.Router) {
213-
r.Route("/me", func(r chi.Router) {
214-
r.Get("/listen", a.provisionerDaemonsListen)
215-
})
216-
})
217212
r.Route("/users", func(r chi.Router) {
218213
r.Get("/first", a.firstUser)
219214
r.Post("/first", a.postFirstUser)

coderd/coderd_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,6 @@ func TestAuthorizeAllEndpoints(t *testing.T) {
106106
"GET:/api/v2/parameters/{scope}/{id}": {NoAuthorize: true},
107107
"DELETE:/api/v2/parameters/{scope}/{id}/{name}": {NoAuthorize: true},
108108

109-
"GET:/api/v2/provisionerdaemons/me/listen": {NoAuthorize: true},
110-
111109
"DELETE:/api/v2/templates/{template}": {NoAuthorize: true},
112110
"GET:/api/v2/templates/{template}": {NoAuthorize: true},
113111
"GET:/api/v2/templates/{template}/versions": {NoAuthorize: true},

coderd/provisionerdaemons.go

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ import (
1313
"time"
1414

1515
"github.com/google/uuid"
16-
"github.com/hashicorp/yamux"
1716
"github.com/moby/moby/pkg/namesgenerator"
1817
"github.com/tabbed/pqtype"
1918
"golang.org/x/xerrors"
2019
protobuf "google.golang.org/protobuf/proto"
21-
"nhooyr.io/websocket"
2220
"storj.io/drpc/drpcmux"
2321
"storj.io/drpc/drpcserver"
2422

@@ -49,77 +47,6 @@ func (api *api) provisionerDaemonsByOrganization(rw http.ResponseWriter, r *http
4947
httpapi.Write(rw, http.StatusOK, daemons)
5048
}
5149

52-
// Serves the provisioner daemon protobuf API over a WebSocket.
53-
func (api *api) provisionerDaemonsListen(rw http.ResponseWriter, r *http.Request) {
54-
api.websocketWaitMutex.Lock()
55-
api.websocketWaitGroup.Add(1)
56-
api.websocketWaitMutex.Unlock()
57-
defer api.websocketWaitGroup.Done()
58-
59-
conn, err := websocket.Accept(rw, r, &websocket.AcceptOptions{
60-
// Need to disable compression to avoid a data-race.
61-
CompressionMode: websocket.CompressionDisabled,
62-
})
63-
if err != nil {
64-
httpapi.Write(rw, http.StatusBadRequest, httpapi.Response{
65-
Message: fmt.Sprintf("accept websocket: %s", err),
66-
})
67-
return
68-
}
69-
// Align with the frame size of yamux.
70-
conn.SetReadLimit(256 * 1024)
71-
72-
daemon, err := api.Database.InsertProvisionerDaemon(r.Context(), database.InsertProvisionerDaemonParams{
73-
ID: uuid.New(),
74-
CreatedAt: database.Now(),
75-
Name: namesgenerator.GetRandomName(1),
76-
Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform},
77-
})
78-
if err != nil {
79-
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("insert provisioner daemon: %s", err))
80-
return
81-
}
82-
83-
// Multiplexes the incoming connection using yamux.
84-
// This allows multiple function calls to occur over
85-
// the same connection.
86-
config := yamux.DefaultConfig()
87-
config.LogOutput = io.Discard
88-
session, err := yamux.Server(websocket.NetConn(r.Context(), conn, websocket.MessageBinary), config)
89-
if err != nil {
90-
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("multiplex server: %s", err))
91-
return
92-
}
93-
mux := drpcmux.New()
94-
err = proto.DRPCRegisterProvisionerDaemon(mux, &provisionerdServer{
95-
AccessURL: api.AccessURL,
96-
ID: daemon.ID,
97-
Database: api.Database,
98-
Pubsub: api.Pubsub,
99-
Provisioners: daemon.Provisioners,
100-
Logger: api.Logger.Named(fmt.Sprintf("provisionerd-%s", daemon.Name)),
101-
})
102-
if err != nil {
103-
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("drpc register provisioner daemon: %s", err))
104-
return
105-
}
106-
server := drpcserver.NewWithOptions(mux, drpcserver.Options{
107-
Log: func(err error) {
108-
if xerrors.Is(err, io.EOF) {
109-
return
110-
}
111-
api.Logger.Debug(r.Context(), "drpc server error", slog.Error(err))
112-
},
113-
})
114-
err = server.Serve(r.Context(), session)
115-
if err != nil && !xerrors.Is(err, io.EOF) {
116-
api.Logger.Debug(r.Context(), "provisioner daemon disconnected", slog.Error(err))
117-
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("serve: %s", err))
118-
return
119-
}
120-
_ = conn.Close(websocket.StatusGoingAway, "")
121-
}
122-
12350
// ListenProvisionerDaemon is an in-memory connection to a provisionerd. Useful when starting coderd and provisionerd
12451
// in the same process.
12552
func (c *coderD) ListenProvisionerDaemon(ctx context.Context) (client proto.DRPCProvisionerDaemonClient, err error) {

codersdk/provisionerdaemons.go

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,12 @@ import (
55
"database/sql"
66
"encoding/json"
77
"fmt"
8-
"io"
98
"net/http"
109
"net/url"
1110
"strconv"
1211
"time"
1312

1413
"github.com/google/uuid"
15-
"github.com/hashicorp/yamux"
16-
"golang.org/x/xerrors"
17-
"nhooyr.io/websocket"
18-
19-
"github.com/coder/coder/provisionerd/proto"
20-
"github.com/coder/coder/provisionersdk"
2114
)
2215

2316
type LogSource string
@@ -86,35 +79,6 @@ type ProvisionerJobLog struct {
8679
Output string `json:"output"`
8780
}
8881

89-
// ListenProvisionerDaemon returns the gRPC service for a provisioner daemon implementation.
90-
func (c *Client) ListenProvisionerDaemon(ctx context.Context) (proto.DRPCProvisionerDaemonClient, error) {
91-
serverURL, err := c.URL.Parse("/api/v2/provisionerdaemons/me/listen")
92-
if err != nil {
93-
return nil, xerrors.Errorf("parse url: %w", err)
94-
}
95-
conn, res, err := websocket.Dial(ctx, serverURL.String(), &websocket.DialOptions{
96-
HTTPClient: c.HTTPClient,
97-
// Need to disable compression to avoid a data-race.
98-
CompressionMode: websocket.CompressionDisabled,
99-
})
100-
if err != nil {
101-
if res == nil {
102-
return nil, err
103-
}
104-
return nil, readBodyAsError(res)
105-
}
106-
// Align with the frame size of yamux.
107-
conn.SetReadLimit(256 * 1024)
108-
109-
config := yamux.DefaultConfig()
110-
config.LogOutput = io.Discard
111-
session, err := yamux.Client(websocket.NetConn(ctx, conn, websocket.MessageBinary), config)
112-
if err != nil {
113-
return nil, xerrors.Errorf("multiplex client: %w", err)
114-
}
115-
return proto.NewDRPCProvisionerDaemonClient(provisionersdk.Conn(session)), nil
116-
}
117-
11882
// provisionerJobLogsBefore provides log output that occurred before a time.
11983
// This is abstracted from a specific job type to provide consistency between
12084
// APIs. Logs is the only shared route between jobs.

site/src/api/typesGenerated.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ export interface ParameterSchema {
183183
readonly validation_contains: string[]
184184
}
185185

186-
// From codersdk/provisionerdaemons.go:40:6
186+
// From codersdk/provisionerdaemons.go:33:6
187187
export interface ProvisionerDaemon {
188188
readonly id: string
189189
readonly created_at: string
@@ -193,7 +193,7 @@ export interface ProvisionerDaemon {
193193
readonly provisioners: ProvisionerType[]
194194
}
195195

196-
// From codersdk/provisionerdaemons.go:70:6
196+
// From codersdk/provisionerdaemons.go:63:6
197197
export interface ProvisionerJob {
198198
readonly id: string
199199
readonly created_at: string
@@ -204,7 +204,7 @@ export interface ProvisionerJob {
204204
readonly worker_id?: string
205205
}
206206

207-
// From codersdk/provisionerdaemons.go:80:6
207+
// From codersdk/provisionerdaemons.go:73:6
208208
export interface ProvisionerJobLog {
209209
readonly id: string
210210
readonly created_at: string
@@ -445,10 +445,10 @@ export interface WorkspaceResource {
445445
readonly agents?: WorkspaceAgent[]
446446
}
447447

448-
// From codersdk/provisionerdaemons.go:30:6
448+
// From codersdk/provisionerdaemons.go:23:6
449449
export type LogLevel = "debug" | "error" | "info" | "trace" | "warn"
450450

451-
// From codersdk/provisionerdaemons.go:23:6
451+
// From codersdk/provisionerdaemons.go:16:6
452452
export type LogSource = "provisioner" | "provisioner_daemon"
453453

454454
// From codersdk/parameters.go:30:6
@@ -463,7 +463,7 @@ export type ParameterSourceScheme = "data" | "none"
463463
// From codersdk/parameters.go:38:6
464464
export type ParameterTypeSystem = "hcl" | "none"
465465

466-
// From codersdk/provisionerdaemons.go:50:6
466+
// From codersdk/provisionerdaemons.go:43:6
467467
export type ProvisionerJobStatus = "canceled" | "canceling" | "failed" | "pending" | "running" | "succeeded"
468468

469469
// From codersdk/organizations.go:14:6

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