Skip to content

Commit d97a601

Browse files
committed
Add unique identifier to avoid clashing volumes and mounts
1 parent d07bd55 commit d97a601

File tree

1 file changed

+29
-16
lines changed
  • crates/stackable-operator/src/commons/s3

1 file changed

+29
-16
lines changed

crates/stackable-operator/src/commons/s3/helpers.rs

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ impl ResolvedS3Connection {
7979
/// * Needed TLS volumes
8080
pub fn add_volumes_and_mounts(
8181
&self,
82+
unique_identifier: &str,
8283
pod_builder: &mut PodBuilder,
8384
container_builders: Vec<&mut ContainerBuilder>,
8485
) -> Result<(), S3Error> {
85-
let (volumes, mounts) = self.volumes_and_mounts()?;
86+
let (volumes, mounts) = self.volumes_and_mounts(unique_identifier)?;
8687
pod_builder.add_volumes(volumes);
8788
for cb in container_builders {
8889
cb.add_volume_mounts(mounts.clone());
@@ -93,22 +94,28 @@ impl ResolvedS3Connection {
9394

9495
/// It is recommended to use [`Self::add_volumes_and_mounts`], this function returns you the
9596
/// volumes and mounts in case you need to add them by yourself.
96-
pub fn volumes_and_mounts(&self) -> Result<(Vec<Volume>, Vec<VolumeMount>), S3Error> {
97+
pub fn volumes_and_mounts(
98+
&self,
99+
unique_identifier: &str,
100+
) -> Result<(Vec<Volume>, Vec<VolumeMount>), S3Error> {
97101
let mut volumes = Vec::new();
98102
let mut mounts = Vec::new();
99103

100104
if let Some(credentials) = &self.credentials {
101105
let secret_class = &credentials.secret_class;
102-
let volume_name = format!("{secret_class}-s3-credentials");
106+
let volume_name = format!("{secret_class}-s3-credentials-{unique_identifier}");
103107

104108
volumes.push(
105109
credentials
106110
.to_volume(&volume_name)
107111
.context(AddS3CredentialVolumesSnafu)?,
108112
);
109113
mounts.push(
110-
VolumeMountBuilder::new(volume_name, format!("{SECRET_BASE_PATH}/{secret_class}"))
111-
.build(),
114+
VolumeMountBuilder::new(
115+
volume_name,
116+
format!("{SECRET_BASE_PATH}/{secret_class}-{unique_identifier}"),
117+
)
118+
.build(),
112119
);
113120
}
114121

@@ -125,12 +132,12 @@ impl ResolvedS3Connection {
125132

126133
/// Returns the path of the files containing bind user and password.
127134
/// This will be None if there are no credentials for this LDAP connection.
128-
pub fn credentials_mount_paths(&self) -> Option<(String, String)> {
135+
pub fn credentials_mount_paths(&self, unique_identifier: &str) -> Option<(String, String)> {
129136
self.credentials.as_ref().map(|bind_credentials| {
130137
let secret_class = &bind_credentials.secret_class;
131138
(
132-
format!("{SECRET_BASE_PATH}/{secret_class}/accessKey"),
133-
format!("{SECRET_BASE_PATH}/{secret_class}/secretKey"),
139+
format!("{SECRET_BASE_PATH}/{secret_class}-{unique_identifier}/accessKey"),
140+
format!("{SECRET_BASE_PATH}/{secret_class}-{unique_identifier}/secretKey"),
134141
)
135142
})
136143
}
@@ -198,7 +205,7 @@ mod test {
198205
credentials: None,
199206
tls: TlsClientDetails { tls: None },
200207
};
201-
let (volumes, mounts) = s3.volumes_and_mounts().unwrap();
208+
let (volumes, mounts) = s3.volumes_and_mounts("lakehouse").unwrap();
202209

203210
assert_eq!(s3.endpoint().unwrap(), Url::parse("http://minio").unwrap());
204211
assert_eq!(volumes, vec![]);
@@ -223,7 +230,7 @@ mod test {
223230
}),
224231
},
225232
};
226-
let (mut volumes, mut mounts) = s3.volumes_and_mounts().unwrap();
233+
let (mut volumes, mut mounts) = s3.volumes_and_mounts("lakehouse").unwrap();
227234

228235
assert_eq!(
229236
s3.endpoint().unwrap(),
@@ -234,7 +241,10 @@ mod test {
234241
assert_eq!(mounts.len(), 1);
235242
let mount = mounts.remove(0);
236243

237-
assert_eq!(&volume.name, "ionos-s3-credentials-s3-credentials");
244+
assert_eq!(
245+
&volume.name,
246+
"ionos-s3-credentials-s3-credentials-lakehouse"
247+
);
238248
assert_eq!(
239249
&volume
240250
.ephemeral
@@ -252,12 +262,15 @@ mod test {
252262
);
253263

254264
assert_eq!(mount.name, volume.name);
255-
assert_eq!(mount.mount_path, "/stackable/secrets/ionos-s3-credentials");
256265
assert_eq!(
257-
s3.credentials_mount_paths(),
266+
mount.mount_path,
267+
"/stackable/secrets/ionos-s3-credentials-lakehouse"
268+
);
269+
assert_eq!(
270+
s3.credentials_mount_paths("lakehouse"),
258271
Some((
259-
"/stackable/secrets/ionos-s3-credentials/accessKey".to_string(),
260-
"/stackable/secrets/ionos-s3-credentials/secretKey".to_string()
272+
"/stackable/secrets/ionos-s3-credentials-lakehouse/accessKey".to_string(),
273+
"/stackable/secrets/ionos-s3-credentials-lakehouse/secretKey".to_string()
261274
))
262275
);
263276
}
@@ -275,7 +288,7 @@ mod test {
275288
}),
276289
},
277290
};
278-
let (volumes, mounts) = s3.volumes_and_mounts().unwrap();
291+
let (volumes, mounts) = s3.volumes_and_mounts("lakehouse").unwrap();
279292

280293
assert_eq!(
281294
s3.endpoint().unwrap(),

0 commit comments

Comments
 (0)