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)
}