isoloom_compose/
labels.rs1use isoloom_plan::Environment;
6use isoloom_spec::model;
7
8use crate::file::ComposeFile;
9
10pub const MANAGED_LABEL: &str = "isoloom.managed";
12pub const ENVIRONMENT_LABEL: &str = "isoloom.environment";
14pub(crate) const PERSISTENT_LABEL: &str = "isoloom.persistent";
16
17pub(crate) fn mark(env: &Environment, file: &mut ComposeFile) {
21 let ours = [(MANAGED_LABEL.to_owned(), "true".to_owned()), (ENVIRONMENT_LABEL.to_owned(), env.name.clone())];
22 for svc in file.services.values_mut() {
23 svc.labels.extend(ours.clone());
24 if let Some(b) = &mut svc.build {
25 b.labels.extend(ours.clone());
26 }
27 }
28 for n in file.networks.values_mut() {
29 n.labels.extend(ours.clone());
30 }
31 for v in file.volumes.values_mut().filter(|v| !v.external) {
32 v.labels.extend(ours.clone());
33 }
34}
35
36pub(crate) fn ports(m: &model::Machine) -> impl Iterator<Item = (String, String)> + '_ {
40 m.ports.iter().map(|p| {
41 let kind = if p.http { "http" } else { p.protocol.id() };
42 (format!("isoloom.port.{}", m.port_label(p)), format!("{kind}:{}", p.port))
43 })
44}