use isoloom_plan::Environment;
use isoloom_spec::model;
use crate::file::ComposeFile;
pub const MANAGED_LABEL: &str = "isoloom.managed";
pub const ENVIRONMENT_LABEL: &str = "isoloom.environment";
pub(crate) const PERSISTENT_LABEL: &str = "isoloom.persistent";
pub(crate) fn mark(env: &Environment, file: &mut ComposeFile) {
let ours = [(MANAGED_LABEL.to_owned(), "true".to_owned()), (ENVIRONMENT_LABEL.to_owned(), env.name.clone())];
for svc in file.services.values_mut() {
svc.labels.extend(ours.clone());
if let Some(b) = &mut svc.build {
b.labels.extend(ours.clone());
}
}
for n in file.networks.values_mut() {
n.labels.extend(ours.clone());
}
for v in file.volumes.values_mut().filter(|v| !v.external) {
v.labels.extend(ours.clone());
}
}
pub(crate) fn ports(m: &model::Machine) -> impl Iterator<Item = (String, String)> + '_ {
m.ports.iter().map(|p| {
let kind = if p.http { "http" } else { p.protocol.id() };
(format!("isoloom.port.{}", m.port_label(p)), format!("{kind}:{}", p.port))
})
}