Skip to content

Commit ed1d05d

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

File tree

6 files changed

+736
-714
lines changed

6 files changed

+736
-714
lines changed

agent/agent.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,6 +1410,8 @@ 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 _, manifest.
1414+
14131415
for k, v := range envs {
14141416
updated = append(updated, fmt.Sprintf("%s=%s", k, v))
14151417
}

agent/proto/agent.pb.go

Lines changed: 700 additions & 709 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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ 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 {

coderd/agentapi/manifest.go

Lines changed: 6 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,10 +155,10 @@ 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,

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.UserSecret `json:"user_secrets"`
117118
}
118119

119120
type LogSource struct {

codersdk/agentsdk/convert.go

Lines changed: 26 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,23 @@ func ProtoFromDevcontainer(dc codersdk.WorkspaceAgentDevcontainer) *proto.Worksp
449455
ConfigPath: dc.ConfigPath,
450456
}
451457
}
458+
459+
func SecretsFromProto(pss []*proto.Secret) ([]codersdk.UserSecret, error) {
460+
ret := make([]codersdk.UserSecret, 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.UserSecret, error) {
472+
return codersdk.UserSecret{
473+
Name: ps.Name,
474+
EnvName: ps.EnvName,
475+
FilePath: ps.FilePath,
476+
}, nil
477+
}

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