package io.trygvis.rules.terraform import io.trygvis.rules.dba.Cluster import io.trygvis.rules.dba.Container import io.trygvis.rules.machine.Machine import io.trygvis.rules.dns.DnsEntry import io.trygvis.rules.dns.DnsEntryTerraformExpression import java.util.ArrayList; import java.util.Map; global io.trygvis.rules.engine.TemplateEngine te; dialect "mvel" declare ScalewayMachine machine : Machine key : String end declare GoogleManagedZoneTerraformExpression name : String end rule "Terraform for Machine" when $machine: Machine() then ScalewayMachine scw = new ScalewayMachine(); scw.setKey($machine.name); scw.setMachine($machine); insert(scw); end rule "Create DNS entry for Terraform Machine" when $machine : Machine(fqdn != null) not(DnsEntry(fqdn == $machine.fqdn)) then DnsEntry a = DnsEntry.a($machine.fqdn); insert(a); String ipv4 = "scaleway_instance_ip.%s.address".formatted($machine.name); insert(new DnsEntryTerraformExpression(a, $machine.name, ipv4)); end rule "main-scaleway-machine.tf" agenda-group "generate" when $managedZones : ArrayList() from collect(GoogleManagedZoneTerraformExpression()) then String path = "terraform/main-scaleway-machine.tf"; te.template("terraform/main-scaleway-machine", path, Map.of( "managedZones", $managedZones )); end rule "TF for TerraformMachine" agenda-group "generate" when $m: Machine() $scw: ScalewayMachine(machine == $m) then String path = "terraform/scaleway-machine-%s.tf".formatted($scw.getKey()); te.template("terraform/machine", path, Map.of("m", $m, "scw", $scw)); end rule "Terraform for DNS" agenda-group "generate" when $entry: DnsEntry() $tf : DnsEntryTerraformExpression(entry == $entry) $managedZone : GoogleManagedZoneTerraformExpression() then String path = "terraform/dns-%s.tf".formatted($tf.key); te.template("terraform/record-set", path, Map.of( "entry", $entry, "managedZone", $managedZone, "tf", $tf) ); end