feat(plc): dynamic PLC testing via ephemeral soft-PLC (#193)
CI / Check (push) Has been skipped
CI / Detect Changes (push) Successful in 3s
CI / Deploy Agent (push) Successful in 3m55s
CI / Deploy Dashboard (push) Successful in 2m37s
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Successful in 1m49s
CI / Check (push) Has been skipped
CI / Detect Changes (push) Successful in 3s
CI / Deploy Agent (push) Successful in 3m55s
CI / Deploy Dashboard (push) Successful in 2m37s
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Successful in 1m49s
This commit was merged in pull request #193.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use compliance_core::config::PlcRuntimeConfig;
|
||||
use compliance_core::AgentConfig;
|
||||
use secrecy::SecretString;
|
||||
|
||||
@@ -63,5 +64,28 @@ pub fn load_config() -> Result<AgentConfig, AgentError> {
|
||||
pentest_imap_password: env_secret_opt("PENTEST_IMAP_PASSWORD"),
|
||||
admin_api_token: env_secret_opt("ADMIN_API_TOKEN"),
|
||||
tenant_registry_url: env_var_opt("TENANT_REGISTRY_URL"),
|
||||
plc_runtime: load_plc_runtime_config(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Build the ephemeral soft-PLC provisioning config from the environment,
|
||||
/// falling back to [`PlcRuntimeConfig::default`] for any unset knob. Disabled
|
||||
/// unless `PLC_RUNTIME_ENABLED` is truthy — it requires Docker access.
|
||||
fn load_plc_runtime_config() -> PlcRuntimeConfig {
|
||||
let d = PlcRuntimeConfig::default();
|
||||
PlcRuntimeConfig {
|
||||
enabled: env_var_opt("PLC_RUNTIME_ENABLED")
|
||||
.map(|v| v == "1" || v.eq_ignore_ascii_case("true"))
|
||||
.unwrap_or(d.enabled),
|
||||
image: env_var_opt("PLC_RUNTIME_IMAGE").unwrap_or(d.image),
|
||||
network: env_var_opt("PLC_RUNTIME_NETWORK").unwrap_or(d.network),
|
||||
memory: env_var_opt("PLC_RUNTIME_MEMORY").unwrap_or(d.memory),
|
||||
cpus: env_var_opt("PLC_RUNTIME_CPUS").unwrap_or(d.cpus),
|
||||
max_lifetime_secs: env_var_opt("PLC_RUNTIME_MAX_LIFETIME_SECS")
|
||||
.and_then(|v| v.parse().ok())
|
||||
.unwrap_or(d.max_lifetime_secs),
|
||||
openplc_user: env_var_opt("PLC_RUNTIME_OPENPLC_USER").unwrap_or(d.openplc_user),
|
||||
openplc_password: env_secret_opt("PLC_RUNTIME_OPENPLC_PASSWORD")
|
||||
.unwrap_or(d.openplc_password),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user