const DEST=dest; const DOMAIN = config.domain; fn post_template() { let nss = list_namespace().items.filter(|ns| ns.metadata.name.starts_with(`${global::DOMAIN}-`)).map(|ns| ns.metadata.name); let pgs = []; let rediss = []; let mongos = []; let ndbs = []; for ns in nss { let svcs = list_service(ns).items; let secrets = list_secret(ns).items; for svc in svcs { if svc.metadata.name.ends_with("-pg-rw") && svc.spec.ports.some(|p| p.port==5432) { let basename = svc.metadata.name-"-pg-rw"; let pg_secrets = secrets.filter(|s| s.metadata.name == `${basename}-pg-app`); if pg_secrets.len>0 && basename.split("-").len>1 { let tmp = (basename-"-dataset").split("-"); let comp = tmp[tmp.len-1]; log_info(`Found a PG database ${svc.metadata.namespace} ${basename}`); pgs += #{ name: `${basename}-pg`, dbname: comp, username: comp, namespace: svc.metadata.namespace, secret: #{ name: `${basename}-pg-app`, key: "password" } }; } } if svc.metadata.name.ends_with("-mongo-svc") && svc.spec.ports.some(|p| p.port == 27017) { let basename = svc.metadata.name-"-mongo-svc"; let mongo_secrets = secrets.filter(|s| s.metadata.name == `${basename}-mongo`); if mongo_secrets.len>0 && basename.split("-").len>1 { let tmp = (basename-"-dataset").split("-"); let comp = tmp[tmp.len-1]; log_info(`Found a MongoDB database ${svc.metadata.namespace} ${basename}`); mongos += #{ name: `${basename}-mongo`, dbname: comp, username: comp, namespace: svc.metadata.namespace, secret: #{ name: `${basename}-mongo`, key: "password" } }; } } if svc.metadata.name.ends_with("-mysqld") && svc.spec.ports.some(|p| p.port == 3306) { let basename = svc.metadata.name-"-mysqld"; let ndb_secrets = secrets.filter(|s| s.metadata.name == `${basename}-mysql-app`); if ndb_secrets.len>0 && basename.split("-").len>1 { let tmp = (basename-"-dataset").split("-"); let comp = tmp[tmp.len-1]; log_info(`Found a Mysql(NDB) database ${svc.metadata.namespace} ${basename}`); ndbs += #{ name: svc.metadata.name, dbname: comp, username: comp, namespace: svc.metadata.namespace, secret: #{ name: `${basename}-mysql-app`, key: "password" } }; } } if svc.metadata.name.ends_with("-redis") && svc.spec.ports.some(|p| p.port == 6379) { let basename = svc.metadata.name-"-redis"; let ndb_secrets = secrets.filter(|s| s.metadata.name == `${basename}-mysql-app`); let tmp = (basename-"-dataset").split("-"); let comp = tmp[tmp.len-1]; log_info(`Found a Redis database ${svc.metadata.namespace} ${basename}`); if comp == "authentik" { rediss += #{ name: svc.metadata.name, namespace: svc.metadata.namespace, secret: #{ name: comp, key: "AUTHENTIK_REDIS__PASSWORD" } }; } else { rediss += #{ name: svc.metadata.name, namespace: svc.metadata.namespace }; } } } } save_to_tf(`${global::DEST}/detected.tf`, "detected", #{ pgs: pgs, mongos: mongos, rediss: rediss, ndbs: ndbs }); }