fn build_backends()

in src/api.rs [614:671]


fn build_backends(
    region: &String,
    annotations: &BTreeMap<String, String>,
    project: &String,
    service_name: &String,
    service_ns: &String,
) -> anyhow::Result<Vec<HashMap<String, String>>> {
    if let Some(unmanaged_ig) = annotations.get(LB_IG_ANNOTATION_KEY) {
        debug!(
            "using zonal unmanaged instance groups for service: {}/{}",
            service_ns, service_name
        );
        return Ok(build_zonal_instance_group_backends(
            &project,
            &service_ns,
            &service_name,
            unmanaged_ig,
        )?);
    }
    if let Some(zonal_ig) = annotations.get(LB_ZONAL_MIG_ANNOTATION_KEY) {
        debug!(
            "using zonal managed instance groups for service: {}/{}",
            service_ns, service_name
        );
        return Ok(build_zonal_instance_group_backends(
            &project,
            &service_ns,
            &service_name,
            zonal_ig,
        )?);
    }
    let mut backends = vec![];
    if let Some(managed_ig) = annotations.get(LB_REGIONAL_MIG_ANNOTATION_KEY) {
        managed_ig.split(",").for_each(|group| {
            let mut backend = HashMap::<String, String>::new();
            backend.insert(
                String::from("group"),
                utils::build_regional_instance_group_url(&project, region, &group.to_string()),
            );
            backend.insert(String::from("balancingMode"), String::from("CONNECTION"));
            backends.push(backend);
        });
        debug!(
            "using provided regional managed instance groups for service: {}/{} count: {}",
            service_ns,
            service_name,
            backends.iter().count()
        );
    }
    if backends.is_empty() {
        return Err(anyhow!(
            "error occurred building backends for service: {}/{}",
            service_ns,
            service_name
        ));
    }
    Ok(backends)
}