package io.trygvis.rules.acme; import io.trygvis.rules.machine.Machine; import io.trygvis.rules.dba.Cluster; import io.trygvis.rules.dba.Container; dialect "mvel" declare AcmeServer name : String machine : Machine end rule "Ops" when $ops: AcmeOps() then var cluster = new Cluster("acme-ops"); insert(cluster); insert(new Container(cluster, "app", "pdb", "postgresql", "11")); insert(new Container(cluster, "app", "n8n", "n8n", "0.84.1")); end rule "MyApp" when $app: AcmeMyApp() then var cluster = new Cluster("acme-" + $app.environment); insert(cluster); var tag = $app.dockerTag; insert(new Container(cluster, "app", "statera", "statera", tag)); insert(new Container(cluster, "app", "statera-console", "statera-console", tag)); insert(new Container(cluster, "app", "4tune-web", "4tune-web", tag)); insert(new Container(cluster, "app", "4tune-api", "4tune-api", tag)); insert(new Container(cluster, "db", "pdb", "postgresql", "13")); insert(new Container(cluster, "db", "mdb", "mongodb", "3.2")); end rule "Create Acme servers" when $m : Machine(name.startsWith("acme-")) not(AcmeServer(name == $m.name)) then var s = new AcmeServer(); s.name = $m.name; s.machine = $m; insert(s); end rule "Set public domain for ACME servers" when $m : Machine(fqdn == null) $s : AcmeServer(machine == $m) then $s.machine.fqdn = "%s.machine.acme.com".formatted($s.machine.name); update($s.machine) end