summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2021-01-03 23:58:21 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2021-01-03 23:58:21 +0100
commit4dcc43061d05f14ceddbb9f3a0c43ab908b89a4b (patch)
tree6287e48715840f68ae3449e491fb3a0b5a45f480 /src
parentb7d0da791505ec08bc5e87dc1f5245078c8b3d42 (diff)
downloadrules-sandbox-4dcc43061d05f14ceddbb9f3a0c43ab908b89a4b.tar.gz
rules-sandbox-4dcc43061d05f14ceddbb9f3a0c43ab908b89a4b.tar.bz2
rules-sandbox-4dcc43061d05f14ceddbb9f3a0c43ab908b89a4b.tar.xz
rules-sandbox-4dcc43061d05f14ceddbb9f3a0c43ab908b89a4b.zip
VPN work.
Also better sorting of output objects.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/io/trygvis/rules/acme/AcmeIo.java19
-rw-r--r--src/main/java/io/trygvis/rules/engine/Main.java2
-rw-r--r--src/main/resources/io/trygvis/rules/acme/acme.drl9
-rw-r--r--src/main/resources/io/trygvis/rules/acme/vpn.drl30
-rw-r--r--src/main/resources/io/trygvis/rules/machine/machine.drl6
5 files changed, 38 insertions, 28 deletions
diff --git a/src/main/java/io/trygvis/rules/acme/AcmeIo.java b/src/main/java/io/trygvis/rules/acme/AcmeIo.java
index 488c93a..0bd0f1e 100644
--- a/src/main/java/io/trygvis/rules/acme/AcmeIo.java
+++ b/src/main/java/io/trygvis/rules/acme/AcmeIo.java
@@ -15,8 +15,8 @@ import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
+import java.util.TreeMap;
import java.util.function.Function;
@SuppressWarnings("unchecked")
@@ -83,10 +83,6 @@ public class AcmeIo {
private static <A, T extends Comparable<T>> Comparator comparable(Class<A> klass, String name) {
- if (klass.getName().contains("Wg")) {
- System.out.println("AcmeIo.invoker");
- }
-
try {
var method = klass.getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1));
if (!method.isAccessible()) {
@@ -98,6 +94,17 @@ public class AcmeIo {
try {
var x = (T) method.invoke(a);
var y = (T) method.invoke(b);
+
+ if (x == null && y == null) {
+ return 0;
+ }
+
+ if (x == null) {
+ return -1;
+ } else if (y == null) {
+ return 1;
+ }
+
return x.compareTo(y);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
@@ -133,7 +140,7 @@ public class AcmeIo {
}
}
- var facts = new HashMap<Class<?>, FactCollection<Object>>(factHandles.size());
+ var facts = new TreeMap<Class<?>, FactCollection<Object>>(Comparator.comparing(Class::getName));
for (var handle : factHandles) {
if (handle instanceof DefaultFactHandle h) {
var obj = h.getObject();
diff --git a/src/main/java/io/trygvis/rules/engine/Main.java b/src/main/java/io/trygvis/rules/engine/Main.java
index a3b0259..5556db7 100644
--- a/src/main/java/io/trygvis/rules/engine/Main.java
+++ b/src/main/java/io/trygvis/rules/engine/Main.java
@@ -38,7 +38,7 @@ public class Main {
io.dump("phase-1", session.getFactHandles());
- io.dump("vs0", session.getFactHandles(), (Object o) -> {
+ io.dump("vpn0", session.getFactHandles(), (Object o) -> {
return o.getClass().getName().contains("Wg") || o instanceof Machine || o instanceof DnsEntry;
});
diff --git a/src/main/resources/io/trygvis/rules/acme/acme.drl b/src/main/resources/io/trygvis/rules/acme/acme.drl
index e2cb9da..72d296c 100644
--- a/src/main/resources/io/trygvis/rules/acme/acme.drl
+++ b/src/main/resources/io/trygvis/rules/acme/acme.drl
@@ -8,6 +8,11 @@ declare AcmeServer
machine : Machine
end
+//declare MachinePublicName
+// machine : Machine
+// fqdn : String
+//end
+
rule "Ops"
when
$ops: AcmeOps()
@@ -45,8 +50,10 @@ end
rule "Set public domain for ACME servers"
when
- $s : AcmeServer()
+ $m : Machine(fqdn == null)
+ $s : AcmeServer(machine == $m)
then
var fqdn = "%s.machine.acme.com".formatted($s.machine.name);
$s.machine.fqdn = fqdn;
+ update($s.machine)
end
diff --git a/src/main/resources/io/trygvis/rules/acme/vpn.drl b/src/main/resources/io/trygvis/rules/acme/vpn.drl
index 3f62fbd..cfdbef9 100644
--- a/src/main/resources/io/trygvis/rules/acme/vpn.drl
+++ b/src/main/resources/io/trygvis/rules/acme/vpn.drl
@@ -2,6 +2,7 @@ package io.trygvis.rules.acme;
import io.trygvis.rules.machine.Machine;
import io.trygvis.rules.dns.DnsEntry;
+import io.trygvis.rules.acme.AcmeServer;
dialect "mvel"
@@ -12,34 +13,35 @@ end
declare WgHost
name : String
- machine : Machine
+// machine : Machine
net : String
publicName : String
netToNetIp : String
networkIp : String
end
-rule "Set name from machine's name"
- salience 10
-when
- $h : WgHost(name == null, machine != null)
-then
- $h.name = $h.machine.name;
-
- update($h)
-end
-
rule "WgHost VPN machines"
when
- $machine : Machine(name.startsWith("acme-"))
- $wgNet : WgNet(name == "vs0")
+ $machine : Machine()
+ $wgNet : WgNet(name == "vpn0")
+ not(WgHost(name == $machine.name))
then
var wgHost = new WgHost();
- wgHost.machine = $machine;
+ wgHost.name = $machine.name;
wgHost.net = $wgNet.name;
+ wgHost.publicName = $machine.fqdn;
insert(wgHost)
end
+rule "Set public name of WgHost"
+when
+ $host : WgHost(publicName == null)
+ $m : Machine(name == $host.name, fqdn != null)
+then
+ $host.publicName = $m.fqdn;
+ update($host)
+end
+
rule "Make DNS entries for all VPN hosts"
when
$h : WgHost()
diff --git a/src/main/resources/io/trygvis/rules/machine/machine.drl b/src/main/resources/io/trygvis/rules/machine/machine.drl
index df0d002..a9a379f 100644
--- a/src/main/resources/io/trygvis/rules/machine/machine.drl
+++ b/src/main/resources/io/trygvis/rules/machine/machine.drl
@@ -4,9 +4,3 @@ import io.trygvis.rules.dba.Cluster;
import io.trygvis.rules.dba.Container;
import io.trygvis.rules.machine.Machine;
import io.trygvis.rules.dns.DnsEntry;
-
-rule "New machine"
-when
- $container: Container()
-then
-end