summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
Diffstat (limited to 'module')
-rw-r--r--module/acme/src/main/resources/META-INF/kmodule.xml2
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java10
-rw-r--r--module/ri-engine/src/main/resources/META-INF/kmodule.xml7
-rw-r--r--module/ri-engine/src/main/resources/io/trygvis/rules/engine/init.drl (renamed from module/ri-engine/src/main/resources/io/trygvis/rules/engine/default.drl)5
-rw-r--r--module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl18
-rw-r--r--module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl38
6 files changed, 57 insertions, 23 deletions
diff --git a/module/acme/src/main/resources/META-INF/kmodule.xml b/module/acme/src/main/resources/META-INF/kmodule.xml
index da34a59..e86da96 100644
--- a/module/acme/src/main/resources/META-INF/kmodule.xml
+++ b/module/acme/src/main/resources/META-INF/kmodule.xml
@@ -3,7 +3,7 @@
xmlns="http://www.drools.org/xsd/kmodule"
xsi:schemaLocation="http://www.drools.org/xsd/kmodule https://www.drools.org/xsd/kmodule_7_1.xsd">
- <kbase packages="io.trygvis.acme" includes="engine" name="acme-apps">
+ <kbase packages="io.trygvis.acme" includes="dba,engine,machine,terraform" name="acme-apps">
<ksession name="acme-apps" default="true"/>
</kbase>
diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java
index 3c7c755..cc085c0 100644
--- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java
+++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java
@@ -2,6 +2,7 @@ package io.trygvis.rules.engine;
import ch.qos.logback.core.util.FileUtil;
import com.hubspot.jinjava.Jinjava;
+import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
@@ -18,6 +19,15 @@ public class TemplateEngine {
this.basedir = basedir;
}
+ public void clean() {
+ try {
+ System.out.println("Cleaning gen!");
+ FileUtils.deleteDirectory(basedir);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
public void template(String name, String output, Map<String, Object> params) throws IOException {
var template = Files.readString(Path.of("j2", name + ".j2"));
String renderedTemplate = jinjava.render(template, params);
diff --git a/module/ri-engine/src/main/resources/META-INF/kmodule.xml b/module/ri-engine/src/main/resources/META-INF/kmodule.xml
index ffba357..79c5e79 100644
--- a/module/ri-engine/src/main/resources/META-INF/kmodule.xml
+++ b/module/ri-engine/src/main/resources/META-INF/kmodule.xml
@@ -3,6 +3,9 @@
xmlns="http://www.drools.org/xsd/kmodule"
xsi:schemaLocation="http://www.drools.org/xsd/kmodule https://www.drools.org/xsd/kmodule_7_1.xsd">
- <kbase name="engine" packages="io.trygvis.rules.dba,io.trygvis.rules.engine,io.trygvis.rules.machine,io.trygvis.rules.terraform">
- </kbase>
+ <kbase name="all" packages="io.trygvis.rules.*"/>
+ <kbase name="engine" packages="io.trygvis.rules.engine"/>
+ <kbase name="dba" packages="io.trygvis.rules.dba"/>
+ <kbase name="machine" packages="io.trygvis.rules.machine"/>
+ <kbase name="terraform" packages="io.trygvis.rules.terraform"/>
</kmodule>
diff --git a/module/ri-engine/src/main/resources/io/trygvis/rules/engine/default.drl b/module/ri-engine/src/main/resources/io/trygvis/rules/engine/init.drl
index a933bd9..267cc4a 100644
--- a/module/ri-engine/src/main/resources/io/trygvis/rules/engine/default.drl
+++ b/module/ri-engine/src/main/resources/io/trygvis/rules/engine/init.drl
@@ -5,12 +5,13 @@ import org.apache.commons.io.FileSystem
import org.apache.commons.io.FileUtils
import java.io.File
+global io.trygvis.rules.engine.TemplateEngine te;
+
rule "Clean directories"
agenda-group "init"
when
not(KeyValue(key == "rm-gen"));
then
- System.out.println("Cleaning gen!");
- FileUtils.deleteDirectory(new File("gen"));
+ te.clean();
insert(new KeyValue("rm-gen", null));
end
diff --git a/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl b/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl
deleted file mode 100644
index 3ee0583..0000000
--- a/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl
+++ /dev/null
@@ -1,18 +0,0 @@
-package io.trygvis.rules.wireguard;
-
-import java.util.ArrayList
-import io.trygvis.rules.dns.DnsEntry;
-import io.trygvis.rules.machine.Machine;
-import io.trygvis.rules.network.Ipv4Address
-import io.trygvis.rules.network.Ipv4Cidr
-import io.trygvis.rules.network.IpCalc
-
-rule "Generate base"
- agenda-group "generate"
- salience 10
-when
- $net : WgNet()
- $h : WgHost(net == $net.name)
-then
- System.out.println("%s : %s".formatted($net.name, $h.name));
-end
diff --git a/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl b/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl
index 342cbb5..06b9bbf 100644
--- a/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl
+++ b/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl
@@ -6,6 +6,9 @@ import io.trygvis.rules.machine.Machine;
import io.trygvis.rules.network.Ipv4Address
import io.trygvis.rules.network.Ipv4Cidr
import io.trygvis.rules.network.IpCalc
+import java.util.Map
+
+global io.trygvis.rules.engine.TemplateEngine te;
dialect "mvel"
@@ -103,3 +106,38 @@ then
System.out.printf("IP: net=%s, pool.role=%s, host=%s, ip=%s%n", $net.name, $pool.role, $host.name, $ip);
insert(new WgIpAllocation($host.name, $pool.role, $ip))
end
+
+rule "Generate per-net files"
+ agenda-group "generate"
+ salience 10
+when
+ $net : WgNet()
+then
+ te.template("wireguard/ansible", "wireguard-" + $net.name + ".yml", Map.of(
+ "net", $net
+ ));
+
+ // TODO: Generate hosts file
+end
+
+rule "Generate per-net, per-host files"
+ agenda-group "generate"
+ salience 10
+when
+ $net : WgNet()
+ $host : WgHost(net == $net.name)
+ $link : WgIpAllocation(host == $host.name, role == "link")
+ // Needs to be a sub-cidr of the WgNet network cidr, not a specific IP
+ $network : WgIpAllocation(host == $host.name, role == "network")
+then
+ System.out.printf("%s : %s%n", $net.name, $host.name);
+
+ String output = "host_vars/%s/wireguard.yml".formatted($host.name);
+
+ te.template("wireguard/ansible-host", output, Map.of(
+ "net", $net,
+ "host", $host,
+ "link", $link.ip,
+ "network", "TODO"
+ ));
+end