Skip to content

Commit 104fdf9

Browse files
authored
fix(agents): correct logic for agents secrets flags (#554)
- None required for `lk agent deploy` - Use lazy exaluation if secrets set via flags in `lk agent update-secrets`
1 parent f2fd436 commit 104fdf9

File tree

2 files changed

+48
-30
lines changed

2 files changed

+48
-30
lines changed

cmd/lk/agent.go

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ var (
6868
}
6969

7070
secretsFileFlag = &cli.StringFlag{
71-
Name: "secrets-file",
72-
Usage: "`FILE` containing secret KEY=VALUE pairs, one per line. These will be injected as environment variables into the agent.",
73-
Required: false,
71+
Name: "secrets-file",
72+
Usage: "`FILE` containing secret KEY=VALUE pairs, one per line. These will be injected as environment variables into the agent.",
73+
TakesFile: true,
74+
Required: false,
7475
}
7576

7677
secretsFlag = &cli.StringSliceFlag{
@@ -121,6 +122,8 @@ var (
121122
Before: createAgentClient,
122123
Action: deployAgent,
123124
Flags: []cli.Flag{
125+
secretsFlag,
126+
secretsFileFlag,
124127
tomlFlag,
125128
},
126129
ArgsUsage: "[working-dir]",
@@ -374,7 +377,7 @@ func createAgent(ctx context.Context, cmd *cli.Command) error {
374377
fmt.Printf("Creating agent [%s]\n", util.Accented(agentConfig.Name))
375378
}
376379

377-
secrets, err := requireSecrets(ctx, cmd)
380+
secrets, err := requireSecrets(ctx, cmd, true, false)
378381
if err != nil {
379382
return err
380383
}
@@ -522,19 +525,21 @@ func deployAgent(ctx context.Context, cmd *cli.Command) error {
522525
return fmt.Errorf("config file [%s] required to update agent", util.Accented(tomlFilename))
523526
}
524527

525-
secrets, err := requireSecrets(ctx, cmd)
526-
if err != nil {
527-
return err
528-
}
529-
530528
req := &lkproto.DeployAgentRequest{
531529
AgentName: agentConfig.Name,
532-
Secrets: secrets,
533530
Replicas: int32(agentConfig.Replicas),
534531
CpuReq: string(agentConfig.CPU),
535532
MaxReplicas: int32(agentConfig.MaxReplicas),
536533
}
537534

535+
secrets, err := requireSecrets(ctx, cmd, false, true)
536+
if err != nil {
537+
return err
538+
}
539+
if len(secrets) > 0 {
540+
req.Secrets = secrets
541+
}
542+
538543
resp, err := agentsClient.DeployAgent(ctx, req)
539544
if err != nil {
540545
if twerr, ok := err.(twirp.Error); ok {
@@ -640,6 +645,14 @@ func updateAgent(ctx context.Context, cmd *cli.Command) error {
640645
MaxReplicas: int32(agentConfig.MaxReplicas),
641646
}
642647

648+
secrets, err := requireSecrets(ctx, cmd, false, true)
649+
if err != nil {
650+
return err
651+
}
652+
if len(secrets) > 0 {
653+
req.Secrets = secrets
654+
}
655+
643656
resp, err := agentsClient.UpdateAgent(ctx, req)
644657
if err != nil {
645658
if twerr, ok := err.(twirp.Error); ok {
@@ -867,7 +880,7 @@ func updateAgentSecrets(ctx context.Context, cmd *cli.Command) error {
867880
return err
868881
}
869882

870-
secrets, err := requireSecrets(ctx, cmd)
883+
secrets, err := requireSecrets(ctx, cmd, true, true)
871884
if err != nil {
872885
return err
873886
}
@@ -918,7 +931,7 @@ func getAgentName(cmd *cli.Command, agentDir string, tomlFileName string) (strin
918931
return agentName, nil
919932
}
920933

921-
func requireSecrets(_ context.Context, cmd *cli.Command) ([]*lkproto.AgentSecret, error) {
934+
func requireSecrets(_ context.Context, cmd *cli.Command, required, lazy bool) ([]*lkproto.AgentSecret, error) {
922935
silent := cmd.Bool("silent")
923936
secrets := make(map[string]*lkproto.AgentSecret)
924937
for _, secret := range cmd.StringSlice("secrets") {
@@ -930,24 +943,27 @@ func requireSecrets(_ context.Context, cmd *cli.Command) ([]*lkproto.AgentSecret
930943
secrets[secret[0]] = agentSecret
931944
}
932945

933-
file, env, err := agentfs.DetectEnvFile(cmd.String("secrets-file"))
934-
if err != nil {
935-
return nil, err
936-
}
937-
if file != "" && !silent {
938-
fmt.Printf("Using secrets file [%s]\n", util.Accented(file))
939-
}
940-
941-
for k, v := range env {
942-
if _, exists := secrets[k]; exists {
943-
continue
946+
shouldReadFromDisk := cmd.IsSet("secrets-file") || !lazy || (required && len(secrets) == 0)
947+
if shouldReadFromDisk {
948+
file, env, err := agentfs.DetectEnvFile(cmd.String("secrets-file"))
949+
if err != nil {
950+
return nil, err
951+
}
952+
if file != "" && !silent {
953+
fmt.Printf("Using secrets file [%s]\n", util.Accented(file))
944954
}
945955

946-
secret := &lkproto.AgentSecret{
947-
Name: k,
948-
Value: []byte(v),
956+
for k, v := range env {
957+
if _, exists := secrets[k]; exists {
958+
continue
959+
}
960+
961+
secret := &lkproto.AgentSecret{
962+
Name: k,
963+
Value: []byte(v),
964+
}
965+
secrets[k] = secret
949966
}
950-
secrets[k] = secret
951967
}
952968

953969
var secretsSlice []*lkproto.AgentSecret
@@ -960,7 +976,7 @@ func requireSecrets(_ context.Context, cmd *cli.Command) ([]*lkproto.AgentSecret
960976
secretsSlice = append(secretsSlice, secret)
961977
}
962978

963-
if len(secretsSlice) == 0 {
979+
if required && len(secretsSlice) == 0 {
964980
msg := "no secrets provided"
965981
if secretsIgnored {
966982
msg = "no valid secrets provided, LIVEKIT_ secrets are ignored and injected automatically to your agent"

pkg/bootstrap/bootstrap.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,14 @@ func ParseTaskfile(rootPath string) (*ast.Taskfile, error) {
135135
return nil, nil
136136
}
137137

138-
file, err := os.ReadFile(taskfilePath)
138+
file, err := os.Open(taskfilePath)
139139
if err != nil {
140140
return nil, err
141141
}
142+
defer file.Close()
143+
142144
tf := &ast.Taskfile{}
143-
if err := yaml.Unmarshal(file, tf); err != nil {
145+
if err := yaml.NewDecoder(file).Decode(tf); err != nil {
144146
return nil, err
145147
}
146148
return tf, nil

0 commit comments

Comments
 (0)