summaryrefslogtreecommitdiff
path: root/module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl
diff options
context:
space:
mode:
Diffstat (limited to 'module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl')
-rw-r--r--module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl81
1 files changed, 81 insertions, 0 deletions
diff --git a/module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl b/module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl
new file mode 100644
index 0000000..06bfc68
--- /dev/null
+++ b/module/ri-base/src/main/resources/io/trygvis/rules/scaleway/terraform.drl
@@ -0,0 +1,81 @@
+package io.trygvis.rules.terraform.scaleway
+
+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