pub async fn migrate_nodes(
infra: &InfraContext<'_>,
token: &str,
target_group_name_vec: &[String],
parent_group_name_vec: &[String],
hosts_expression: &str,
dry_run: bool,
create_group: bool,
) -> Result<(Vec<String>, Vec<NodeMigrationResult>), Error>Expand description
Move the nodes resolved from hosts_expression out of any group
in parent_name_vec and into every group in
target_group_name_vec.
The xname set is curated through
node_ops::get_curated_group_from_xname_hostlist and then
filtered to the requested parents — nodes that don’t currently
belong to one of those parents are silently skipped, which keeps
the call idempotent when the user passes the same expression
twice. Each target_name is required to exist unless
create_group is true (in dry-run mode the missing-group case
is reported as a BadRequest so the operator sees what would have
been created). Returns the moved xnames and one
NodeMigrationResult per (target, parent) pair, with both
membership lists sorted for stable rendering.
§Errors
- [
Error::BadRequest] when the resolved xname list is empty, the caller lacks group access to one of the resolved xnames, or a dry-run would require creating a missing target group. - [
Error::NotFound] when a target group is missing andcreate_groupis false. - [
Error::NetError] / [Error::CsmError] from any of theget_group/migrate_group_membersbackend calls.