Skip to content

Commit 33ae519

Browse files
committed
Implement CeleryConnection for Postgresql
1 parent 9e31680 commit 33ae519

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

crates/stackable-operator/src/databases/databases/postgresql.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{
88
commons::networking::HostName,
99
databases::{
1010
drivers::{
11+
celery::{CeleryDatabaseConnection, CeleryDatabaseConnectionDetails},
1112
jdbc::{JDBCDatabaseConnection, JDBCDatabaseConnectionDetails},
1213
sqlalchemy::{SQLAlchemyDatabaseConnection, SQLAlchemyDatabaseConnectionDetails},
1314
},
@@ -109,6 +110,36 @@ impl SQLAlchemyDatabaseConnection for PostgresqlConnection {
109110
}
110111
}
111112

113+
impl CeleryDatabaseConnection for PostgresqlConnection {
114+
fn celery_connection_details(
115+
&self,
116+
unique_database_name: &str,
117+
) -> CeleryDatabaseConnectionDetails {
118+
let Self {
119+
host,
120+
port,
121+
database,
122+
credentials_secret,
123+
parameters,
124+
} = self;
125+
let (username_env, password_env) =
126+
username_and_password_envs(unique_database_name, credentials_secret);
127+
128+
let uri_template = format!(
129+
"db+postgresql://${{env:{username_env_name}}}:${{env:{password_env_name}}}@{host}:{port}/{database}{parameters}",
130+
username_env_name = username_env.name,
131+
password_env_name = password_env.name,
132+
parameters = connection_parameters_as_url_query_parameters(parameters)
133+
);
134+
CeleryDatabaseConnectionDetails {
135+
uri_template,
136+
username_env: Some(username_env),
137+
password_env: Some(password_env),
138+
generic_uri_var: None,
139+
}
140+
}
141+
}
142+
112143
#[cfg(test)]
113144
mod tests {
114145
use super::*;
@@ -151,6 +182,16 @@ mod tests {
151182
jdbc_connection_details.password_env.unwrap().name,
152183
"METADATA_DATABASE_PASSWORD"
153184
);
185+
186+
let celery_connection_details =
187+
postgres_connection.celery_connection_details(UNIQUE_DATABASE_NAME);
188+
assert_eq!(
189+
celery_connection_details.uri_template,
190+
"db+postgresql://${env:METADATA_DATABASE_USERNAME}:${env:METADATA_DATABASE_PASSWORD}@airflow-postgresql:5432/airflow"
191+
);
192+
assert!(celery_connection_details.username_env.is_some());
193+
assert!(celery_connection_details.password_env.is_some());
194+
assert!(celery_connection_details.generic_uri_var.is_none());
154195
}
155196

156197
#[test]

crates/stackable-operator/src/databases/tests.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ impl DummyJDBCConnection {
3434
#[derive(Clone, Debug, Deserialize, JsonSchema, PartialEq, Serialize)]
3535
#[serde(rename_all = "camelCase")]
3636
enum DummyCeleryConnection {
37+
Postgresql(PostgresqlConnection),
3738
Redis(RedisConnection),
3839
#[allow(unused)]
3940
Generic(GenericCeleryDatabaseConnection),
@@ -42,6 +43,7 @@ enum DummyCeleryConnection {
4243
impl DummyCeleryConnection {
4344
fn as_celery_database_connection(&self) -> &dyn CeleryDatabaseConnection {
4445
match self {
46+
Self::Postgresql(p) => p,
4547
Self::Redis(r) => r,
4648
Self::Generic(g) => g,
4749
}

0 commit comments

Comments
 (0)