Skip to content

Commit 7153cf9

Browse files
feat(procmgr): secret backend resolution for config gates (split PR 3/4)
Resolve ENC[...] gate values via secret_backend_command and native backends, matching Agent precedence and spawning backends under the core Agent account.
1 parent ecd5a4d commit 7153cf9

10 files changed

Lines changed: 2818 additions & 92 deletions

File tree

pkg/procmgr/rust/src/config_gate.rs

Lines changed: 662 additions & 87 deletions
Large diffs are not rendered by default.

pkg/procmgr/rust/src/config_gate/env_bindings.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
//! registry first, then dd-procmgr's process environment, so service-local
1919
//! overrides match agent config resolution.
2020
21+
use super::secrets;
22+
2123
struct EnvBinding {
2224
key: &'static str,
2325
env_vars: &'static [&'static str],
@@ -101,13 +103,13 @@ pub(super) fn env_vars_for_key(key: &str) -> &'static [&'static str] {
101103
.unwrap_or(&[])
102104
}
103105

104-
pub(super) fn env_bool_for_config_key(key: &str) -> Option<bool> {
106+
pub(super) fn env_bool_for_config_key(key: &str, agent_yaml: &str) -> Option<bool> {
105107
let names = env_vars_for_key(key);
106108
if !names.is_empty() {
107-
return env_bool_from_names(names);
109+
return env_bool_from_names(names, agent_yaml);
108110
}
109111
let auto = auto_env_var_for_key(key);
110-
env_bool_from_names(&[&auto])
112+
env_bool_from_names(&[&auto], agent_yaml)
111113
}
112114

113115
/// Whether any env var bound to `key` is set to a non-empty value (mirrors Go `IsConfigured` env source).
@@ -152,15 +154,26 @@ fn env_var_nonempty(name: &str) -> bool {
152154
env_var_value(name).is_some()
153155
}
154156

155-
fn env_bool_from_names(names: &[&str]) -> Option<bool> {
157+
fn env_bool_from_names(names: &[&str], agent_yaml: &str) -> Option<bool> {
156158
for name in names {
157159
if let Some(value) = env_var_value(name) {
158-
return Some(super::parse_agent_bool_string(&value).unwrap_or(false));
160+
return bool_from_env_string(&value, agent_yaml);
159161
}
160162
}
161163
None
162164
}
163165

166+
fn bool_from_env_string(value: &str, agent_yaml: &str) -> Option<bool> {
167+
let resolved = secrets::resolve_config_string(value, agent_yaml);
168+
if let Some(enabled) = super::parse_agent_bool_string(&resolved) {
169+
return Some(enabled);
170+
}
171+
if secrets::is_enc(value) {
172+
return None;
173+
}
174+
Some(super::parse_agent_bool_string(value).unwrap_or(false))
175+
}
176+
164177
/// Core Agent SCM `Environment` overrides, then dd-procmgr process env.
165178
/// SCM wins when present so config gates match agent service-local resolution.
166179
fn env_var_value(name: &str) -> Option<String> {

0 commit comments

Comments
 (0)