@@ -65,6 +65,15 @@ func CollectEnvWithMetadata(ctx context.Context, projectCfg ProjectConfig, globa
6565 if err != nil {
6666 return nil , err
6767 }
68+
69+ if len (envCfg .Mapping ) > 0 {
70+ mkp , ok := p .(provider.MultiKeyProvider )
71+ if ! ok {
72+ return nil , fmt .Errorf ("provider %s does not support multi-key secret reading (required by mapping)" , envCfg .GetProvider ())
73+ }
74+ return provider .CollectMappedSecrets (ctx , mkp , envCfg .Mapping )
75+ }
76+
6877 return provider .ListOrDescribe (ctx , p , provider .ResolvedPrefix (envCfg .ToProviderConfig ()))
6978}
7079
@@ -77,6 +86,23 @@ func FetchSecret(ctx context.Context, projectCfg ProjectConfig, globalCfg Global
7786 if err != nil {
7887 return "" , err
7988 }
89+
90+ if sm , ok := envCfg .Mapping [key ]; ok {
91+ mkp , ok := p .(provider.MultiKeyProvider )
92+ if ! ok {
93+ return "" , fmt .Errorf ("provider %s does not support multi-key secret reading (required by mapping)" , envCfg .GetProvider ())
94+ }
95+ data , err := mkp .ReadSecret (ctx , sm .Path )
96+ if err != nil {
97+ return "" , err
98+ }
99+ val , ok := data [sm .Key ]
100+ if ! ok {
101+ return "" , fmt .Errorf ("key %q not found in secret at path %q" , sm .Key , sm .Path )
102+ }
103+ return val , nil
104+ }
105+
80106 return p .Get (ctx , provider .ApplyPrefix (envCfg .ToProviderConfig (), key ))
81107}
82108
@@ -85,6 +111,9 @@ func WriteSecret(ctx context.Context, projectCfg ProjectConfig, globalCfg Global
85111 if ! ok {
86112 return fmt .Errorf ("env %q not found in project config" , envName )
87113 }
114+ if len (envCfg .Mapping ) > 0 {
115+ return fmt .Errorf ("env %q uses mapping mode; secrets are read-only and managed externally" , envName )
116+ }
88117 p , err := NewProvider (envName , envCfg , globalCfg )
89118 if err != nil {
90119 return err
@@ -97,6 +126,9 @@ func DeleteSecret(ctx context.Context, projectCfg ProjectConfig, globalCfg Globa
97126 if ! ok {
98127 return fmt .Errorf ("env %q not found in project config" , envName )
99128 }
129+ if len (envCfg .Mapping ) > 0 {
130+ return fmt .Errorf ("env %q uses mapping mode; secrets are read-only and managed externally" , envName )
131+ }
100132 p , err := NewProvider (envName , envCfg , globalCfg )
101133 if err != nil {
102134 return err
0 commit comments