Skip to content

Commit 469b77d

Browse files
fhennigsoenkeliebau
authored andcommitted
Added resolve to S3ConnectionDef (#388)
## Description - Renamed ConnectionDef to S3ConnectionDef for consistency - Added a `resolve` function to the S3ConnectionDef, similar to the function on the S3BucketDef - minor documentation fix
1 parent 72442f6 commit 469b77d

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

src/commons/s3.rs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub struct S3BucketSpec {
3131
#[serde(default, skip_serializing_if = "Option::is_none")]
3232
pub bucket_name: Option<String>,
3333
#[serde(default, skip_serializing_if = "Option::is_none")]
34-
pub connection: Option<ConnectionDef>,
34+
pub connection: Option<S3ConnectionDef>,
3535
}
3636

3737
impl S3BucketSpec {
@@ -57,14 +57,10 @@ impl S3BucketSpec {
5757
namespace: Option<&str>,
5858
) -> OperatorResult<InlinedS3BucketSpec> {
5959
match self.connection.as_ref() {
60-
Some(ConnectionDef::Reference(res_name)) => Ok(InlinedS3BucketSpec {
61-
connection: Some(S3ConnectionSpec::get(res_name, client, namespace).await?),
60+
Some(connection_def) => Ok(InlinedS3BucketSpec {
61+
connection: Some(connection_def.resolve(client, namespace).await?),
6262
bucket_name: self.bucket_name.clone(),
6363
}),
64-
Some(ConnectionDef::Inline(conn_spec)) => Ok(InlinedS3BucketSpec {
65-
bucket_name: self.bucket_name.clone(),
66-
connection: Some(conn_spec.clone()),
67-
}),
6864
None => Ok(InlinedS3BucketSpec {
6965
bucket_name: self.bucket_name.clone(),
7066
connection: None,
@@ -135,8 +131,8 @@ impl S3BucketDef {
135131
) -> OperatorResult<InlinedS3BucketSpec> {
136132
match self {
137133
S3BucketDef::Inline(s3_bucket) => s3_bucket.inlined(client, namespace).await,
138-
S3BucketDef::Reference(_s3_bucket) => {
139-
S3BucketSpec::get(_s3_bucket.as_str(), client, namespace)
134+
S3BucketDef::Reference(s3_bucket) => {
135+
S3BucketSpec::get(s3_bucket.as_str(), client, namespace)
140136
.await?
141137
.inlined(client, namespace)
142138
.await
@@ -145,14 +141,30 @@ impl S3BucketDef {
145141
}
146142
}
147143

148-
/// S3 connection definition used by [S3BucketSpec]
144+
/// Operators are expected to define fields for this type in order to work with S3 connections.
149145
#[derive(Clone, Debug, Deserialize, JsonSchema, PartialEq, Serialize)]
150146
#[serde(rename_all = "camelCase")]
151-
pub enum ConnectionDef {
147+
pub enum S3ConnectionDef {
152148
Inline(S3ConnectionSpec),
153149
Reference(String),
154150
}
155151

152+
impl S3ConnectionDef {
153+
/// Returns an [S3ConnectionSpec].
154+
pub async fn resolve(
155+
&self,
156+
client: &Client,
157+
namespace: Option<&str>,
158+
) -> OperatorResult<S3ConnectionSpec> {
159+
match self {
160+
S3ConnectionDef::Inline(s3_connection_spec) => Ok(s3_connection_spec.clone()),
161+
S3ConnectionDef::Reference(s3_conn_reference) => {
162+
S3ConnectionSpec::get(s3_conn_reference, client, namespace).await
163+
}
164+
}
165+
}
166+
}
167+
156168
/// S3 connection definition as CRD.
157169
#[derive(CustomResource, Clone, Debug, Default, Deserialize, JsonSchema, PartialEq, Serialize)]
158170
#[kube(
@@ -197,14 +209,14 @@ impl S3ConnectionSpec {
197209

198210
#[cfg(test)]
199211
mod test {
200-
use crate::commons::s3::ConnectionDef;
212+
use crate::commons::s3::S3ConnectionDef;
201213
use crate::commons::s3::{S3BucketSpec, S3ConnectionSpec};
202214

203215
#[test]
204216
fn test_ser_inline() {
205217
let bucket = S3BucketSpec {
206218
bucket_name: Some("test-bucket-name".to_owned()),
207-
connection: Some(ConnectionDef::Inline(S3ConnectionSpec {
219+
connection: Some(S3ConnectionDef::Inline(S3ConnectionSpec {
208220
host: Some("host".to_owned()),
209221
port: Some(8080),
210222
secret_class: None,

0 commit comments

Comments
 (0)