Content-Length: 550038 | pFad | http://github.com/coder/coder/commit/27de2ce76c39160f53e1c1cddc9828d89c76c849

65 feat: pass secrets to agent via Manifest · coder/coder@27de2ce · GitHub
Skip to content

Commit 27de2ce

Browse files
feat: pass secrets to agent via Manifest
1 parent a1ee752 commit 27de2ce

File tree

8 files changed

+778
-716
lines changed

8 files changed

+778
-716
lines changed

agent/agent.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,6 +1410,10 @@ func (a *agent) updateCommandEnv(current []string) (updated []string, err error)
14101410
}
14111411
envs["PATH"] = fmt.Sprintf("%s%c%s", a.scriptRunner.ScriptBinDir(), filepath.ListSeparator, envs["PATH"])
14121412

1413+
for _, secret := range manifest.UserSecrets {
1414+
envs[secret.EnvName] = secret.Value
1415+
}
1416+
14131417
for k, v := range envs {
14141418
updated = append(updated, fmt.Sprintf("%s=%s", k, v))
14151419
}

agent/proto/agent.pb.go

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

agent/proto/agent.proto

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,14 @@ message Manifest {
9999
repeated WorkspaceAgentMetadata.Description metadata = 12;
100100
repeated WorkspaceAgentDevcontainer devcontainers = 17;
101101

102-
map<string,Secret> user_secrets = 19;
102+
repeated Secret user_secrets = 19;
103103
}
104104

105105
message Secret {
106106
string name = 1;
107107
string env_name = 2;
108108
string file_path = 3;
109+
string value = 4;
109110
}
110111

111112
message WorkspaceAgentDevcontainer {

coderd/agentapi/manifest.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
9797
return nil, xerrors.Errorf("fetching workspace agent data: %w", err)
9898
}
9999

100+
_ = userSecrets
101+
100102
appSlug := appurl.ApplicationURL{
101103
AppSlugOrPort: "{{port}}",
102104
AgentName: workspaceAgent.Name,
@@ -153,13 +155,14 @@ func (a *ManifestAPI) GetManifest(ctx context.Context, _ *agentproto.GetManifest
153155
}, nil
154156
}
155157

156-
func dbUserSecretsToProto(userSecrets []database.UserSecret) map[string]*agentproto.Secret {
157-
userSecretsProto := make(map[string]*agentproto.Secret)
158-
for _, userSecret := range userSecrets {
159-
userSecretsProto[userSecret.Name] = &agentproto.Secret{
158+
func dbUserSecretsToProto(userSecrets []database.UserSecret) []*agentproto.Secret {
159+
userSecretsProto := make([]*agentproto.Secret, 0)
160+
for i, userSecret := range userSecrets {
161+
userSecretsProto[i] = &agentproto.Secret{
160162
Name: userSecret.Name,
161163
EnvName: userSecret.EnvName,
162164
FilePath: userSecret.FilePath,
165+
Value: userSecret.Value,
163166
}
164167
}
165168

codersdk/agentsdk/agentsdk.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ type Manifest struct {
114114
Metadata []codersdk.WorkspaceAgentMetadataDescription `json:"metadata"`
115115
Scripts []codersdk.WorkspaceAgentScript `json:"scripts"`
116116
Devcontainers []codersdk.WorkspaceAgentDevcontainer `json:"devcontainers"`
117+
UserSecrets []codersdk.UserSecretWithValue `json:"user_secrets"`
117118
}
118119

119120
type LogSource struct {

codersdk/agentsdk/convert.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ func ManifestFromProto(manifest *proto.Manifest) (Manifest, error) {
4343
if err != nil {
4444
return Manifest{}, xerrors.Errorf("error converting workspace agent devcontainers: %w", err)
4545
}
46+
userSecrets, err := SecretsFromProto(manifest.UserSecrets)
47+
if err != nil {
48+
return Manifest{}, xerrors.Errorf("error converting workspace agent devcontainers: %w", err)
49+
}
50+
4651
return Manifest{
4752
ParentID: parentID,
4853
AgentID: agentID,
@@ -62,6 +67,7 @@ func ManifestFromProto(manifest *proto.Manifest) (Manifest, error) {
6267
DisableDirectConnections: manifest.DisableDirectConnections,
6368
Metadata: MetadataDescriptionsFromProto(manifest.Metadata),
6469
Devcontainers: devcontainers,
70+
UserSecrets: userSecrets,
6571
}, nil
6672
}
6773

@@ -449,3 +455,24 @@ func ProtoFromDevcontainer(dc codersdk.WorkspaceAgentDevcontainer) *proto.Worksp
449455
ConfigPath: dc.ConfigPath,
450456
}
451457
}
458+
459+
func SecretsFromProto(pss []*proto.Secret) ([]codersdk.UserSecretWithValue, error) {
460+
ret := make([]codersdk.UserSecretWithValue, len(pss))
461+
for i, ps := range pss {
462+
secret, err := SecretFromProto(ps)
463+
if err != nil {
464+
return nil, xerrors.Errorf("parse secret %v: %w", i, err)
465+
}
466+
ret[i] = secret
467+
}
468+
return ret, nil
469+
}
470+
471+
func SecretFromProto(ps *proto.Secret) (codersdk.UserSecretWithValue, error) {
472+
return codersdk.UserSecretWithValue{
473+
Name: ps.Name,
474+
EnvName: ps.EnvName,
475+
FilePath: ps.FilePath,
476+
Value: ps.Value,
477+
}, nil
478+
}

codersdk/user_secrets.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ type UserSecret struct {
4141
UpdatedAt time.Time `json:"updated_at" format:"date-time"`
4242
}
4343

44+
type UserSecretWithValue struct {
45+
ID uuid.UUID `json:"id" format:"uuid"`
46+
UserID uuid.UUID `json:"user_id" format:"uuid"`
47+
Name string `json:"name"`
48+
Description string `json:"description,omitempty"`
49+
EnvName string `json:"env_name,omitempty"`
50+
FilePath string `json:"file_path,omitempty"`
51+
Value string `json:"value"`
52+
CreatedAt time.Time `json:"created_at" format:"date-time"`
53+
UpdatedAt time.Time `json:"updated_at" format:"date-time"`
54+
}
55+
4456
type UserSecretValue struct {
4557
Value string `json:"value"`
4658
}

site/src/api/typesGenerated.ts

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

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/coder/coder/commit/27de2ce76c39160f53e1c1cddc9828d89c76c849

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy