summaryrefslogtreecommitdiff
path: root/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl
diff options
context:
space:
mode:
Diffstat (limited to 'module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl')
-rw-r--r--module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/wireguard.drl38
1 files changed, 38 insertions, 0 deletions
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