|
18 | 18 | //! registry first, then dd-procmgr's process environment, so service-local |
19 | 19 | //! overrides match agent config resolution. |
20 | 20 |
|
| 21 | +use super::secrets; |
| 22 | + |
21 | 23 | struct EnvBinding { |
22 | 24 | key: &'static str, |
23 | 25 | env_vars: &'static [&'static str], |
@@ -101,13 +103,13 @@ pub(super) fn env_vars_for_key(key: &str) -> &'static [&'static str] { |
101 | 103 | .unwrap_or(&[]) |
102 | 104 | } |
103 | 105 |
|
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> { |
105 | 107 | let names = env_vars_for_key(key); |
106 | 108 | if !names.is_empty() { |
107 | | - return env_bool_from_names(names); |
| 109 | + return env_bool_from_names(names, agent_yaml); |
108 | 110 | } |
109 | 111 | let auto = auto_env_var_for_key(key); |
110 | | - env_bool_from_names(&[&auto]) |
| 112 | + env_bool_from_names(&[&auto], agent_yaml) |
111 | 113 | } |
112 | 114 |
|
113 | 115 | /// 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 { |
152 | 154 | env_var_value(name).is_some() |
153 | 155 | } |
154 | 156 |
|
155 | | -fn env_bool_from_names(names: &[&str]) -> Option<bool> { |
| 157 | +fn env_bool_from_names(names: &[&str], agent_yaml: &str) -> Option<bool> { |
156 | 158 | for name in names { |
157 | 159 | 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); |
159 | 161 | } |
160 | 162 | } |
161 | 163 | None |
162 | 164 | } |
163 | 165 |
|
| 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 | + |
164 | 177 | /// Core Agent SCM `Environment` overrides, then dd-procmgr process env. |
165 | 178 | /// SCM wins when present so config gates match agent service-local resolution. |
166 | 179 | fn env_var_value(name: &str) -> Option<String> { |
|
0 commit comments