(
&self,
sandbox_id: &str,
sandbox_name: &str,
)
| 1265 | } |
| 1266 | |
| 1267 | async fn find_managed_container_summary( |
| 1268 | &self, |
| 1269 | sandbox_id: &str, |
| 1270 | sandbox_name: &str, |
| 1271 | ) -> Result<Option<ContainerSummary>, Status> { |
| 1272 | let mut label_filter_values = Vec::new(); |
| 1273 | if !sandbox_id.is_empty() { |
| 1274 | label_filter_values.push(format!("{LABEL_SANDBOX_ID}={sandbox_id}")); |
| 1275 | } else if !sandbox_name.is_empty() { |
| 1276 | label_filter_values.push(format!("{LABEL_SANDBOX_NAME}={sandbox_name}")); |
| 1277 | } |
| 1278 | |
| 1279 | let filters = |
| 1280 | managed_container_label_filters(&self.config.sandbox_namespace, label_filter_values); |
| 1281 | let containers = self |
| 1282 | .docker |
| 1283 | .list_containers(Some( |
| 1284 | ListContainersOptionsBuilder::default() |
| 1285 | .all(true) |
| 1286 | .filters(&filters) |
| 1287 | .build(), |
| 1288 | )) |
| 1289 | .await |
| 1290 | .map_err(|err| internal_status("find Docker sandbox container", err))?; |
| 1291 | |
| 1292 | Ok(containers.into_iter().find(|summary| { |
| 1293 | let Some(labels) = summary.labels.as_ref() else { |
| 1294 | return false; |
| 1295 | }; |
| 1296 | let namespace_matches = labels |
| 1297 | .get(LABEL_SANDBOX_NAMESPACE) |
| 1298 | .is_some_and(|value| value == &self.config.sandbox_namespace); |
| 1299 | let id_matches = sandbox_id.is_empty() |
| 1300 | || labels |
| 1301 | .get(LABEL_SANDBOX_ID) |
| 1302 | .is_some_and(|value| value == sandbox_id); |
| 1303 | let name_matches = sandbox_name.is_empty() |
| 1304 | || labels |
| 1305 | .get(LABEL_SANDBOX_NAME) |
| 1306 | .is_some_and(|value| value == sandbox_name); |
| 1307 | namespace_matches && id_matches && name_matches |
| 1308 | })) |
| 1309 | } |
| 1310 | |
| 1311 | async fn ensure_image_available(&self, sandbox_id: &str, image: &str) -> Result<(), Status> { |
| 1312 | let policy = self.config.image_pull_policy.trim().to_ascii_lowercase(); |
no test coverage detected