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.Map; global io.trygvis.rules.engine.TemplateEngine te; declare ScalewayMachine machine : Machine key : String fqdn : String end rule "Terraform for Machine" when $machine: Machine() then var fqdn = "%s.machine.acme.com".formatted($machine.name); var a = DnsEntry.a(fqdn); var aaaa = DnsEntry.aaaa(fqdn); var scw = new ScalewayMachine(); scw.setKey($machine.name); scw.setMachine($machine); scw.setFqdn(fqdn); var ipv4 = "scaleway_instance_ip.%s.address".formatted($machine.name); // var ipv6 = "scaleway_instance_server.%s.public_ipv6.address".formatted($machine.name); insert(scw); insert(a); insert(aaaa); insert(new DnsEntryTerraformExpression(a, $machine.name, ipv4)); // insert(new DnsEntryValue(aaaa, ipv6)); end rule "TF for TerraformMachine" when $m: Machine() $scw: ScalewayMachine(machine == $m) then var path = "platform/terraform/%s.tf".formatted($scw.getKey()); te.template("terraform-machine", path, Map.of("m", $m, "scw", $scw)); end rule "Terraform for DNS" when $entry: DnsEntry() $tf : DnsEntryTerraformExpression(entry == $entry) then var path = "dns/%s.tf".formatted($tf.key); te.template("terraform-record-set", path, Map.of( "entry", $entry, "tf", $tf) ); end