| 682 | } |
| 683 | |
| 684 | fn normalize_compute_driver_socket_args(args: &mut RunArgs, matches: &ArgMatches) -> Result<()> { |
| 685 | let Some(socket) = args.compute_driver_socket.as_ref() else { |
| 686 | return Ok(()); |
| 687 | }; |
| 688 | if socket.as_os_str().is_empty() { |
| 689 | return Err(miette::miette!( |
| 690 | "--compute-driver-socket must not be an empty path" |
| 691 | )); |
| 692 | } |
| 693 | if arg_defaulted(matches, "drivers") { |
| 694 | return Err(miette::miette!( |
| 695 | "--compute-driver-socket requires --drivers <name> or OPENSHELL_DRIVERS=<name> to select a non-reserved compute driver name" |
| 696 | )); |
| 697 | } |
| 698 | |
| 699 | match args.drivers.as_slice() { |
| 700 | [driver] => { |
| 701 | let driver = openshell_core::config::normalize_compute_driver_name(driver) |
| 702 | .map_err(|err| miette::miette!("{err}"))?; |
| 703 | if matches!( |
| 704 | driver.parse::<ComputeDriverKind>().ok(), |
| 705 | Some( |
| 706 | ComputeDriverKind::Docker |
| 707 | | ComputeDriverKind::Podman |
| 708 | | ComputeDriverKind::Kubernetes |
| 709 | | ComputeDriverKind::Vm |
| 710 | ) |
| 711 | ) { |
| 712 | return Err(miette::miette!( |
| 713 | "--compute-driver-socket cannot be combined with reserved built-in compute driver '{driver}'" |
| 714 | )); |
| 715 | } |
| 716 | args.drivers[0] = driver; |
| 717 | Ok(()) |
| 718 | } |
| 719 | drivers => Err(miette::miette!( |
| 720 | "--compute-driver-socket requires exactly one compute driver name, got: {}", |
| 721 | drivers.join(",") |
| 722 | )), |
| 723 | } |
| 724 | } |
| 725 | |
| 726 | fn effective_single_driver(args: &RunArgs) -> Option<ComputeDriverKind> { |
| 727 | match args.drivers.as_slice() { |