(docker: &Docker, network_name: &str)
| 2548 | } |
| 2549 | |
| 2550 | async fn ensure_bridge_network(docker: &Docker, network_name: &str) -> CoreResult<IpAddr> { |
| 2551 | match docker.inspect_network(network_name, None).await { |
| 2552 | Ok(network) => return validate_bridge_network(network_name, &network), |
| 2553 | Err(err) if !is_not_found_error(&err) => { |
| 2554 | return Err(Error::execution(format!( |
| 2555 | "failed to inspect Docker network '{network_name}': {err}" |
| 2556 | ))); |
| 2557 | } |
| 2558 | Err(_) => {} |
| 2559 | } |
| 2560 | |
| 2561 | docker |
| 2562 | .create_network(NetworkCreateRequest { |
| 2563 | name: network_name.to_string(), |
| 2564 | driver: Some(DOCKER_NETWORK_DRIVER.to_string()), |
| 2565 | attachable: Some(true), |
| 2566 | labels: Some(HashMap::from([( |
| 2567 | LABEL_MANAGED_BY.to_string(), |
| 2568 | LABEL_MANAGED_BY_VALUE.to_string(), |
| 2569 | )])), |
| 2570 | ..Default::default() |
| 2571 | }) |
| 2572 | .await |
| 2573 | .map(|_| ()) |
| 2574 | .or_else(|err| { |
| 2575 | if is_conflict_error(&err) { |
| 2576 | Ok(()) |
| 2577 | } else { |
| 2578 | Err(Error::execution(format!( |
| 2579 | "failed to create Docker network '{network_name}': {err}" |
| 2580 | ))) |
| 2581 | } |
| 2582 | })?; |
| 2583 | |
| 2584 | let network = docker |
| 2585 | .inspect_network(network_name, None) |
| 2586 | .await |
| 2587 | .map_err(|err| { |
| 2588 | Error::execution(format!( |
| 2589 | "failed to inspect Docker network '{network_name}' after create: {err}" |
| 2590 | )) |
| 2591 | })?; |
| 2592 | validate_bridge_network(network_name, &network) |
| 2593 | } |
| 2594 | |
| 2595 | fn validate_bridge_network( |
| 2596 | network_name: &str, |
no test coverage detected