Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a03615a

Browse files
authored
feature: disable provisionerd listen endpoint (#1614)
* feature: disable provisionerd listen endpoint Signed-off-by: Spike Curtis <[email protected]> * Regenerate ts types Signed-off-by: Spike Curtis <[email protected]>
1 parent d181731 commit a03615a

File tree

5 files changed

+6
-122
lines changed

5 files changed

+6
-122
lines changed

coderd/coderd.go

-5
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

-2
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

-73
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

-36
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

+6-6
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)