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"
0 commit comments