feat: mssql support cert configuration (#5559)

* feat: mssql support cert configuration

* use tokio async

* using jobdir

* use std
This commit is contained in:
Alexander Petric
2025-04-02 20:10:51 +00:00
committed by GitHub
parent b8e3e143b5
commit 5f050cac64
2 changed files with 27 additions and 5 deletions
@@ -32,6 +32,9 @@ struct MssqlDatabase {
instance_name: Option<String>,
#[serde(default, deserialize_with = "deserialize_aad_token")]
aad_token: Option<AadToken>,
trust_cert: Option<bool>,
#[serde(deserialize_with = "empty_string_as_none")]
ca_cert: Option<String>,
}
#[derive(Debug, Deserialize)]
@@ -53,6 +56,7 @@ pub async fn do_mssql(
canceled_by: &mut Option<CanceledBy>,
worker_name: &str,
occupancy_metrics: &mut OccupancyMetrics,
job_dir: &str,
) -> error::Result<Box<RawValue>> {
let mssql_args = build_args_values(job, client, db).await?;
@@ -120,6 +124,23 @@ pub async fn do_mssql(
));
}
// Handle certificate trust configuration
if database.trust_cert.unwrap_or(true) {
// If trust_cert is true, ignore ca_cert and trust any certificate
config.trust_cert();
tracing::info!("MSSQL: disabling certificate validation");
} else if let Some(ca_cert) = &database.ca_cert {
// Only use ca_cert if trust_cert is false
let cert_path = format!("{}/ca_cert.pem", job_dir);
std::fs::write(&cert_path, ca_cert)
.map_err(|e| Error::ExecutionErr(format!("Failed to write CA certificate: {}", e)))?;
// Use the CA certificate for trust
config.trust_cert_ca(cert_path);
tracing::info!("MSSQL: using provided CA certificate for trust");
}
let tcp = if use_instance_name {
TcpStream::connect_named(&config).await.map_err(to_anyhow)? // named instance
} else {
+6 -5
View File
@@ -1823,12 +1823,12 @@ async fn get_same_worker_job(
) -> windmill_common::error::Result<Option<PulledJob>> {
sqlx::query_as::<_, PulledJob>(
"WITH ping AS (
UPDATE v2_job_runtime SET ping = NOW() WHERE id = $1
UPDATE v2_job_runtime SET ping = NOW() WHERE id = $1
),
started_at AS (
UPDATE v2_job_queue SET started_at = NOW() WHERE id = $1
)
SELECT
SELECT
v2_job_queue.workspace_id,
v2_job_queue.id,
v2_job.args,
@@ -1864,10 +1864,10 @@ async fn get_same_worker_job(
v2_job.raw_lock,
v2_job.raw_flow,
pj.runnable_path as parent_runnable_path,
p.email as permissioned_as_email, p.username as permissioned_as_username, p.is_admin as permissioned_as_is_admin,
p.email as permissioned_as_email, p.username as permissioned_as_username, p.is_admin as permissioned_as_is_admin,
p.is_operator as permissioned_as_is_operator, p.groups as permissioned_as_groups, p.folders as permissioned_as_folders
FROM v2_job_queue
INNER JOIN v2_job ON v2_job.id = v2_job_queue.id
FROM v2_job_queue
INNER JOIN v2_job ON v2_job.id = v2_job_queue.id
LEFT JOIN v2_job_status ON v2_job_status.id = v2_job_queue.id
LEFT JOIN job_perms p ON p.job_id = v2_job.id
LEFT JOIN v2_job pj ON v2_job.parent_job = pj.id
@@ -2745,6 +2745,7 @@ async fn handle_code_execution_job(
canceled_by,
worker_name,
occupancy_metrics,
job_dir,
)
.await;
}