@@ -13,20 +13,17 @@ import (
13
13
"time"
14
14
15
15
"github.com/google/uuid"
16
- "github.com/hashicorp/yamux"
17
16
"github.com/moby/moby/pkg/namesgenerator"
18
17
"github.com/tabbed/pqtype"
19
18
"golang.org/x/xerrors"
20
19
protobuf "google.golang.org/protobuf/proto"
21
- "nhooyr.io/websocket"
22
20
"storj.io/drpc/drpcmux"
23
21
"storj.io/drpc/drpcserver"
24
22
25
23
"cdr.dev/slog"
26
24
27
25
"github.com/coder/coder/coderd/database"
28
26
"github.com/coder/coder/coderd/httpapi"
29
- "github.com/coder/coder/coderd/httpmw"
30
27
"github.com/coder/coder/coderd/parameter"
31
28
"github.com/coder/coder/coderd/rbac"
32
29
"github.com/coder/coder/coderd/telemetry"
@@ -65,100 +62,6 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) {
65
62
httpapi .Write (ctx , rw , http .StatusOK , daemons )
66
63
}
67
64
68
- // Serves the provisioner daemon protobuf API over a WebSocket.
69
- func (api * API ) provisionerDaemonsListen (rw http.ResponseWriter , r * http.Request ) {
70
- daemon := httpmw .ProvisionerDaemon (r )
71
- api .Logger .Warn (r .Context (), "daemon connected" , slog .F ("daemon" , daemon .Name ))
72
-
73
- api .websocketWaitMutex .Lock ()
74
- api .websocketWaitGroup .Add (1 )
75
- api .websocketWaitMutex .Unlock ()
76
- defer api .websocketWaitGroup .Done ()
77
-
78
- conn , err := websocket .Accept (rw , r , & websocket.AcceptOptions {
79
- // Need to disable compression to avoid a data-race.
80
- CompressionMode : websocket .CompressionDisabled ,
81
- })
82
- if err != nil {
83
- httpapi .Write (r .Context (), rw , http .StatusBadRequest , codersdk.Response {
84
- Message : "Internal error accepting websocket connection." ,
85
- Detail : err .Error (),
86
- })
87
- return
88
- }
89
- // Align with the frame size of yamux.
90
- conn .SetReadLimit (256 * 1024 )
91
-
92
- // Multiplexes the incoming connection using yamux.
93
- // This allows multiple function calls to occur over
94
- // the same connection.
95
- config := yamux .DefaultConfig ()
96
- config .LogOutput = io .Discard
97
- session , err := yamux .Server (websocket .NetConn (r .Context (), conn , websocket .MessageBinary ), config )
98
- if err != nil {
99
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("multiplex server: %s" , err ))
100
- return
101
- }
102
- mux := drpcmux .New ()
103
- err = proto .DRPCRegisterProvisionerDaemon (mux , & provisionerdServer {
104
- AccessURL : api .AccessURL ,
105
- ID : daemon .ID ,
106
- Database : api .Database ,
107
- Pubsub : api .Pubsub ,
108
- Provisioners : daemon .Provisioners ,
109
- Telemetry : api .Telemetry ,
110
- Logger : api .Logger .Named (fmt .Sprintf ("provisionerd-%s" , daemon .Name )),
111
- })
112
- if err != nil {
113
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("drpc register provisioner daemon: %s" , err ))
114
- return
115
- }
116
- server := drpcserver .NewWithOptions (mux , drpcserver.Options {
117
- Log : func (err error ) {
118
- if xerrors .Is (err , io .EOF ) {
119
- return
120
- }
121
- api .Logger .Debug (r .Context (), "drpc server error" , slog .Error (err ))
122
- },
123
- })
124
- err = server .Serve (r .Context (), session )
125
- if err != nil && ! xerrors .Is (err , io .EOF ) {
126
- api .Logger .Debug (r .Context (), "provisioner daemon disconnected" , slog .Error (err ))
127
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("serve: %s" , err ))
128
- return
129
- }
130
- _ = conn .Close (websocket .StatusGoingAway , "" )
131
- }
132
-
133
- func (api * API ) postProvisionerDaemon (rw http.ResponseWriter , r * http.Request ) {
134
- if ! api .Authorize (r , rbac .ActionCreate , rbac .ResourceProvisionerDaemon ) {
135
- httpapi .Forbidden (rw )
136
- return
137
- }
138
-
139
- var req codersdk.CreateProvisionerDaemonRequest
140
- if ! httpapi .Read (r .Context (), rw , r , & req ) {
141
- return
142
- }
143
-
144
- provisioner , err := api .Database .InsertProvisionerDaemon (r .Context (), database.InsertProvisionerDaemonParams {
145
- ID : uuid .New (),
146
- CreatedAt : database .Now (),
147
- Name : req .Name ,
148
- Provisioners : []database.ProvisionerType {database .ProvisionerTypeTerraform },
149
- AuthToken : uuid.NullUUID {Valid : true , UUID : uuid .New ()},
150
- })
151
- if err != nil {
152
- httpapi .Write (r .Context (), rw , http .StatusInternalServerError , codersdk.Response {
153
- Message : "Error inserting provisioner daemon." ,
154
- Detail : err .Error (),
155
- })
156
- return
157
- }
158
-
159
- httpapi .Write (r .Context (), rw , http .StatusCreated , convertProvisionerDaemon (provisioner ))
160
- }
161
-
162
65
// CreateInMemoryProvisionerDaemon is an in-memory connection to a provisionerd. Useful when starting coderd and provisionerd
163
66
// in the same process.
164
67
func (api * API ) CreateInMemoryProvisionerDaemon (ctx context.Context ) (client proto.DRPCProvisionerDaemonClient , err error ) {
@@ -1106,19 +1009,3 @@ func convertWorkspaceTransition(transition database.WorkspaceTransition) (sdkpro
1106
1009
return 0 , xerrors .Errorf ("unrecognized transition: %q" , transition )
1107
1010
}
1108
1011
}
1109
-
1110
- func convertProvisionerDaemon (daemon database.ProvisionerDaemon ) codersdk.ProvisionerDaemon {
1111
- result := codersdk.ProvisionerDaemon {
1112
- ID : daemon .ID ,
1113
- CreatedAt : daemon .CreatedAt ,
1114
- UpdatedAt : daemon .UpdatedAt ,
1115
- Name : daemon .Name ,
1116
- }
1117
- for _ , provisionerType := range daemon .Provisioners {
1118
- result .Provisioners = append (result .Provisioners , codersdk .ProvisionerType (provisionerType ))
1119
- }
1120
- if daemon .AuthToken .Valid {
1121
- result .AuthToken = & daemon .AuthToken .UUID
1122
- }
1123
- return result
1124
- }
0 commit comments