Skip to content

Commit 555ee66

Browse files
committed
Return complete manifest
1 parent 34935c5 commit 555ee66

File tree

10 files changed

+69
-11
lines changed

10 files changed

+69
-11
lines changed

coderd/database/dbfake/databasefake.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2700,6 +2700,8 @@ func (q *fakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg databa
27002700
//nolint:gosimple
27012701
metadatum := database.WorkspaceAgentMetadatum{
27022702
WorkspaceAgentID: arg.WorkspaceAgentID,
2703+
Cmd: arg.Cmd,
2704+
DisplayName: arg.DisplayName,
27032705
Key: arg.Key,
27042706
Timeout: arg.Timeout,
27052707
Interval: arg.Interval,

coderd/database/dump.sql

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/migrations/000110_workspace_agent_metadata.up.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
-- key enough?
33
CREATE TABLE workspace_agent_metadata (
44
workspace_agent_id uuid NOT NULL,
5+
display_name text NOT NULL,
56
key character varying(128) NOT NULL,
7+
cmd text[] NOT NULL,
68
value text NOT NULL,
79
error text NOT NULL,
810
timeout bigint NOT NULL,

coderd/database/models.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaceagents.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,14 @@ WHERE
9898
INSERT INTO
9999
workspace_agent_metadata (
100100
workspace_agent_id,
101+
display_name,
101102
key,
103+
cmd,
102104
timeout,
103105
interval
104106
)
105107
VALUES
106-
($1, $2, $3, $4);
108+
($1, $2, $3, $4, $5, $6);
107109

108110
-- name: UpdateWorkspaceAgentMetadata :exec
109111
UPDATE

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,6 +1229,8 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
12291229
for _, md := range prAgent.Metadata {
12301230
err := db.InsertWorkspaceAgentMetadata(ctx, database.InsertWorkspaceAgentMetadataParams{
12311231
WorkspaceAgentID: agentID,
1232+
DisplayName: md.DisplayName,
1233+
Cmd: md.Cmd,
12321234
Key: md.Key,
12331235
Timeout: md.Timeout,
12341236
Interval: md.Interval,

coderd/workspaceagents.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ func (api *API) workspaceAgentManifest(rw http.ResponseWriter, r *http.Request)
105105
})
106106
return
107107
}
108+
109+
metadata, err := api.Database.GetWorkspaceAgentMetadata(ctx, workspaceAgent.ID)
110+
if err != nil {
111+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
112+
Message: "Internal error fetching workspace agent metadata.",
113+
Detail: err.Error(),
114+
})
115+
return
116+
}
117+
108118
resource, err := api.Database.GetWorkspaceResourceByID(ctx, workspaceAgent.ResourceID)
109119
if err != nil {
110120
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
@@ -161,6 +171,7 @@ func (api *API) workspaceAgentManifest(rw http.ResponseWriter, r *http.Request)
161171
StartupScriptTimeout: time.Duration(apiAgent.StartupScriptTimeoutSeconds) * time.Second,
162172
ShutdownScript: apiAgent.ShutdownScript,
163173
ShutdownScriptTimeout: time.Duration(apiAgent.ShutdownScriptTimeoutSeconds) * time.Second,
174+
Metadata: convertWorkspaceAgentMetadataDesc(metadata),
164175
})
165176
}
166177

@@ -832,6 +843,20 @@ func convertApps(dbApps []database.WorkspaceApp) []codersdk.WorkspaceApp {
832843
return apps
833844
}
834845

846+
func convertWorkspaceAgentMetadataDesc(mds []database.WorkspaceAgentMetadatum) []agentsdk.MetadataDescription {
847+
metadata := make([]agentsdk.MetadataDescription, 0)
848+
for _, datum := range mds {
849+
metadata = append(metadata, agentsdk.MetadataDescription{
850+
DisplayName: datum.DisplayName,
851+
Key: datum.Key,
852+
Cmd: datum.Cmd,
853+
Interval: time.Duration(datum.Interval) * time.Second,
854+
Timeout: time.Duration(datum.Timeout) * time.Second,
855+
})
856+
}
857+
return metadata
858+
}
859+
835860
func convertWorkspaceAgent(derpMap *tailcfg.DERPMap, coordinator tailnet.Coordinator, dbAgent database.WorkspaceAgent, apps []codersdk.WorkspaceApp, agentInactiveDisconnectTimeout time.Duration, agentFallbackTroubleshootingURL string) (codersdk.WorkspaceAgent, error) {
836861
var envs map[string]string
837862
if dbAgent.EnvironmentVariables.Valid {
@@ -1146,7 +1171,7 @@ func (api *API) watchWorkspaceAgentMetadata(rw http.ResponseWriter, r *http.Requ
11461171
})
11471172
_ = sendEvent(ctx, codersdk.ServerSentEvent{
11481173
Type: codersdk.ServerSentEventTypeData,
1149-
Data: convertWorkspaceAgentMetadata(data),
1174+
Data: convertWorkspaceAgentMetadataResult(data),
11501175
})
11511176
}
11521177

@@ -1166,7 +1191,7 @@ func (api *API) watchWorkspaceAgentMetadata(rw http.ResponseWriter, r *http.Requ
11661191
<-senderClosed
11671192
}
11681193

1169-
func convertWorkspaceAgentMetadata(db []database.WorkspaceAgentMetadatum) []codersdk.WorkspaceAgentMetadataResult {
1194+
func convertWorkspaceAgentMetadataResult(db []database.WorkspaceAgentMetadatum) []codersdk.WorkspaceAgentMetadataResult {
11701195
var result []codersdk.WorkspaceAgentMetadataResult
11711196
for _, datum := range db {
11721197
result = append(result, codersdk.WorkspaceAgentMetadataResult{

coderd/workspaceagents_test.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,7 +1170,7 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
11701170
{
11711171
DisplayName: "Second Meta",
11721172
Key: "foo2",
1173-
Cmd: []string{"echo", "hi"},
1173+
Cmd: []string{"echo", "howdy"},
11741174
Interval: 10,
11751175
Timeout: 3,
11761176
},
@@ -1199,6 +1199,18 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
11991199
agentClient := agentsdk.New(client.URL)
12001200
agentClient.SetSessionToken(authToken)
12011201

1202+
ctx, _ := testutil.Context(t)
1203+
1204+
manifest, err := agentClient.Manifest(ctx)
1205+
require.NoError(t, err)
1206+
1207+
// Verify manifest API response.
1208+
require.Equal(t, "First Meta", manifest.Metadata[0].DisplayName)
1209+
require.Equal(t, "foo1", manifest.Metadata[0].Key)
1210+
require.Equal(t, []string{"echo", "hi"}, manifest.Metadata[0].Cmd)
1211+
require.Equal(t, time.Second*(10), manifest.Metadata[0].Interval)
1212+
require.Equal(t, time.Second*3, manifest.Metadata[0].Timeout)
1213+
12021214
ctx, cancel := testutil.Context(t)
12031215
defer cancel()
12041216

@@ -1207,7 +1219,7 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
12071219
require.NoError(t, err, "post metadata", t)
12081220
}
12091221

1210-
workspace, err := client.Workspace(ctx, workspace.ID)
1222+
workspace, err = client.Workspace(ctx, workspace.ID)
12111223
require.NoError(t, err, "get workspace")
12121224

12131225
agentID := workspace.LatestBuild.Resources[0].Agents[0].ID

codersdk/agentsdk/agentsdk.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@ func (c *Client) GitSSHKey(ctx context.Context) (GitSSHKey, error) {
6969
// back to coderd. It is provided via the `metadata` list in the `coder_agent`
7070
// block.
7171
type MetadataDescription struct {
72-
Key string
73-
Cmd []string
74-
Interval time.Duration
75-
Timeout time.Duration
72+
DisplayName string `json:"display_name,omitempty"`
73+
Key string `json:"key,omitempty"`
74+
Cmd []string `json:"cmd,omitempty"`
75+
Interval time.Duration `json:"interval,omitempty"`
76+
Timeout time.Duration `json:"timeout,omitempty"`
7677
}
7778

7879
// In the future, we may want to support sending back multiple values for

0 commit comments

Comments
 (0)