From 149cf9efadb1da64b9ee716ac9bee1ac0c0e1329 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 6 Jan 2021 16:04:22 +0100 Subject: Using agenda groups to sequence phases. --- .gitignore | 1 + acme-apps/dns/acme-1.tf | 8 +++++++ acme-apps/dns/acme-2.tf | 8 +++++++ acme-apps/dns/acme-3.tf | 8 +++++++ acme-apps/platform/terraform/acme-1.tf | 15 +++++++++++++ acme-apps/platform/terraform/acme-2.tf | 15 +++++++++++++ acme-apps/platform/terraform/acme-3.tf | 15 +++++++++++++ gen/dns/acme-1.tf | 8 ------- gen/dns/acme-2.tf | 8 ------- gen/dns/acme-3.tf | 8 ------- gen/platform/terraform/acme-1.tf | 15 ------------- gen/platform/terraform/acme-2.tf | 15 ------------- gen/platform/terraform/acme-3.tf | 15 ------------- .../main/java/io/trygvis/acme/AcmeAppsMain.java | 7 +++++- .../src/main/java/io/trygvis/acme/VpnMain.java | 7 +++++- .../main/java/io/trygvis/rules/engine/Engine.java | 25 ++++++++++++---------- .../io/trygvis/rules/engine/TemplateEngine.java | 16 ++++++-------- .../io/trygvis/rules/terraform/terraform.drl | 2 ++ .../io/trygvis/rules/wireguard/generate.drl | 18 ++++++++++++++++ 19 files changed, 123 insertions(+), 91 deletions(-) create mode 100644 acme-apps/dns/acme-1.tf create mode 100644 acme-apps/dns/acme-2.tf create mode 100644 acme-apps/dns/acme-3.tf create mode 100644 acme-apps/platform/terraform/acme-1.tf create mode 100644 acme-apps/platform/terraform/acme-2.tf create mode 100644 acme-apps/platform/terraform/acme-3.tf delete mode 100644 gen/dns/acme-1.tf delete mode 100644 gen/dns/acme-2.tf delete mode 100644 gen/dns/acme-3.tf delete mode 100644 gen/platform/terraform/acme-1.tf delete mode 100644 gen/platform/terraform/acme-2.tf delete mode 100644 gen/platform/terraform/acme-3.tf create mode 100644 module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl diff --git a/.gitignore b/.gitignore index 55c9d4a..93a2aa4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.iml target *.log +.idea diff --git a/acme-apps/dns/acme-1.tf b/acme-apps/dns/acme-1.tf new file mode 100644 index 0000000..2252410 --- /dev/null +++ b/acme-apps/dns/acme-1.tf @@ -0,0 +1,8 @@ +resource "google_dns_record_set" "acme-1" { + name = "acme-1.machine.acme.com" + managed_zone = "" + type = "A" + ttl = 300 + + rrdatas = [var.addresses.scaleway_instance_ip.acme-1.address] +} diff --git a/acme-apps/dns/acme-2.tf b/acme-apps/dns/acme-2.tf new file mode 100644 index 0000000..04b79a2 --- /dev/null +++ b/acme-apps/dns/acme-2.tf @@ -0,0 +1,8 @@ +resource "google_dns_record_set" "acme-2" { + name = "acme-2.machine.acme.com" + managed_zone = "" + type = "A" + ttl = 300 + + rrdatas = [var.addresses.scaleway_instance_ip.acme-2.address] +} diff --git a/acme-apps/dns/acme-3.tf b/acme-apps/dns/acme-3.tf new file mode 100644 index 0000000..57d9f45 --- /dev/null +++ b/acme-apps/dns/acme-3.tf @@ -0,0 +1,8 @@ +resource "google_dns_record_set" "acme-3" { + name = "acme-3.machine.acme.com" + managed_zone = "" + type = "A" + ttl = 300 + + rrdatas = [var.addresses.scaleway_instance_ip.acme-3.address] +} diff --git a/acme-apps/platform/terraform/acme-1.tf b/acme-apps/platform/terraform/acme-1.tf new file mode 100644 index 0000000..8100533 --- /dev/null +++ b/acme-apps/platform/terraform/acme-1.tf @@ -0,0 +1,15 @@ +resource "scaleway_instance_server" "acme-1" { + name = "acme-1" + type = "DEV1-S" + image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" + ip_id = scaleway_instance_ip.acme-1.id + enable_dynamic_ip = false + enable_ipv6 = true +} + +resource "scaleway_instance_ip" "acme-1" {} + +#resource "scaleway_instance_ip_reverse_dns" "acme-1" { +# ip_id = scaleway_instance_ip.acme-1.id +# reverse = "acme-1.${google_dns_managed_zone.machine.dns_name}" +#} diff --git a/acme-apps/platform/terraform/acme-2.tf b/acme-apps/platform/terraform/acme-2.tf new file mode 100644 index 0000000..07d5e8b --- /dev/null +++ b/acme-apps/platform/terraform/acme-2.tf @@ -0,0 +1,15 @@ +resource "scaleway_instance_server" "acme-2" { + name = "acme-1" + type = "DEV1-S" + image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" + ip_id = scaleway_instance_ip.acme-2.id + enable_dynamic_ip = false + enable_ipv6 = true +} + +resource "scaleway_instance_ip" "acme-2" {} + +#resource "scaleway_instance_ip_reverse_dns" "acme-2" { +# ip_id = scaleway_instance_ip.acme-2.id +# reverse = "acme-2.${google_dns_managed_zone.machine.dns_name}" +#} diff --git a/acme-apps/platform/terraform/acme-3.tf b/acme-apps/platform/terraform/acme-3.tf new file mode 100644 index 0000000..a2246bc --- /dev/null +++ b/acme-apps/platform/terraform/acme-3.tf @@ -0,0 +1,15 @@ +resource "scaleway_instance_server" "acme-3" { + name = "acme-1" + type = "DEV1-S" + image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" + ip_id = scaleway_instance_ip.acme-3.id + enable_dynamic_ip = false + enable_ipv6 = true +} + +resource "scaleway_instance_ip" "acme-3" {} + +#resource "scaleway_instance_ip_reverse_dns" "acme-3" { +# ip_id = scaleway_instance_ip.acme-3.id +# reverse = "acme-3.${google_dns_managed_zone.machine.dns_name}" +#} diff --git a/gen/dns/acme-1.tf b/gen/dns/acme-1.tf deleted file mode 100644 index 2252410..0000000 --- a/gen/dns/acme-1.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "google_dns_record_set" "acme-1" { - name = "acme-1.machine.acme.com" - managed_zone = "" - type = "A" - ttl = 300 - - rrdatas = [var.addresses.scaleway_instance_ip.acme-1.address] -} diff --git a/gen/dns/acme-2.tf b/gen/dns/acme-2.tf deleted file mode 100644 index 04b79a2..0000000 --- a/gen/dns/acme-2.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "google_dns_record_set" "acme-2" { - name = "acme-2.machine.acme.com" - managed_zone = "" - type = "A" - ttl = 300 - - rrdatas = [var.addresses.scaleway_instance_ip.acme-2.address] -} diff --git a/gen/dns/acme-3.tf b/gen/dns/acme-3.tf deleted file mode 100644 index 57d9f45..0000000 --- a/gen/dns/acme-3.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "google_dns_record_set" "acme-3" { - name = "acme-3.machine.acme.com" - managed_zone = "" - type = "A" - ttl = 300 - - rrdatas = [var.addresses.scaleway_instance_ip.acme-3.address] -} diff --git a/gen/platform/terraform/acme-1.tf b/gen/platform/terraform/acme-1.tf deleted file mode 100644 index 8100533..0000000 --- a/gen/platform/terraform/acme-1.tf +++ /dev/null @@ -1,15 +0,0 @@ -resource "scaleway_instance_server" "acme-1" { - name = "acme-1" - type = "DEV1-S" - image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" - ip_id = scaleway_instance_ip.acme-1.id - enable_dynamic_ip = false - enable_ipv6 = true -} - -resource "scaleway_instance_ip" "acme-1" {} - -#resource "scaleway_instance_ip_reverse_dns" "acme-1" { -# ip_id = scaleway_instance_ip.acme-1.id -# reverse = "acme-1.${google_dns_managed_zone.machine.dns_name}" -#} diff --git a/gen/platform/terraform/acme-2.tf b/gen/platform/terraform/acme-2.tf deleted file mode 100644 index 07d5e8b..0000000 --- a/gen/platform/terraform/acme-2.tf +++ /dev/null @@ -1,15 +0,0 @@ -resource "scaleway_instance_server" "acme-2" { - name = "acme-1" - type = "DEV1-S" - image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" - ip_id = scaleway_instance_ip.acme-2.id - enable_dynamic_ip = false - enable_ipv6 = true -} - -resource "scaleway_instance_ip" "acme-2" {} - -#resource "scaleway_instance_ip_reverse_dns" "acme-2" { -# ip_id = scaleway_instance_ip.acme-2.id -# reverse = "acme-2.${google_dns_managed_zone.machine.dns_name}" -#} diff --git a/gen/platform/terraform/acme-3.tf b/gen/platform/terraform/acme-3.tf deleted file mode 100644 index a2246bc..0000000 --- a/gen/platform/terraform/acme-3.tf +++ /dev/null @@ -1,15 +0,0 @@ -resource "scaleway_instance_server" "acme-3" { - name = "acme-1" - type = "DEV1-S" - image = "b3042271-d2b1-4f87-b407-aedd3bbd1663" - ip_id = scaleway_instance_ip.acme-3.id - enable_dynamic_ip = false - enable_ipv6 = true -} - -resource "scaleway_instance_ip" "acme-3" {} - -#resource "scaleway_instance_ip_reverse_dns" "acme-3" { -# ip_id = scaleway_instance_ip.acme-3.id -# reverse = "acme-3.${google_dns_managed_zone.machine.dns_name}" -#} diff --git a/module/acme/src/main/java/io/trygvis/acme/AcmeAppsMain.java b/module/acme/src/main/java/io/trygvis/acme/AcmeAppsMain.java index f21ebc3..caab325 100644 --- a/module/acme/src/main/java/io/trygvis/acme/AcmeAppsMain.java +++ b/module/acme/src/main/java/io/trygvis/acme/AcmeAppsMain.java @@ -2,11 +2,16 @@ package io.trygvis.acme; import io.trygvis.rules.engine.Engine; +import java.io.File; import java.io.IOException; public class AcmeAppsMain { public static void main(String[] args) throws IOException { - try (var engine = new Engine("acme-apps", "acme.yaml")) { + try (var engine = new Engine( + "acme-apps", + "acme.yaml", + new File("acme-apps"), + new String[]{"init", "generate"})) { engine.io.dump("acme/apps", engine.session.getFactHandles()); } } diff --git a/module/acme/src/main/java/io/trygvis/acme/VpnMain.java b/module/acme/src/main/java/io/trygvis/acme/VpnMain.java index d6c8061..1859e2a 100644 --- a/module/acme/src/main/java/io/trygvis/acme/VpnMain.java +++ b/module/acme/src/main/java/io/trygvis/acme/VpnMain.java @@ -6,11 +6,16 @@ import io.trygvis.rules.machine.Machine; import io.trygvis.rules.network.Ipv4Address; import io.trygvis.rules.network.Ipv4Cidr; +import java.io.File; import java.io.IOException; public class VpnMain { public static void main(String[] args) throws IOException { - try (var engine = new Engine("acme-wireguard", "acme.yaml")) { + try (var engine = new Engine( + "acme-wireguard", + "acme.yaml", + new File("acme-wireguard"), + new String[]{"init", "generate"})) { engine.io.dump("acme/wireguard", engine.session.getFactHandles(), (Object o) -> o.getClass().getName().contains("Wg") || o instanceof Machine diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java index f624603..b73e2e8 100644 --- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java +++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java @@ -7,36 +7,39 @@ import org.kie.api.event.rule.RuleRuntimeEventListener; import org.kie.api.runtime.KieSession; import java.io.Closeable; +import java.io.File; import java.io.IOException; public class Engine implements Closeable { public final DbIo io; public final KieSession session; - public Engine(String k, String database) throws IOException { + public Engine(String name, String database, File output, String[] agendaGroups) throws IOException { var services = KieServices.Factory.get(); var container = services.getKieClasspathContainer(); - var kieBase = container.getKieBase(k); + var kieBase = container.getKieBase(name); io = new DbIo(kieBase); var objects = io.load(database); - session = container.newKieSession(k); + session = container.newKieSession(name); - session.setGlobal("te", new TemplateEngine()); + var logger = new WorkingMemoryConsoleLogger(session); + session.addEventListener((AgendaEventListener) logger); + session.addEventListener((RuleRuntimeEventListener) logger); + + session.setGlobal("te", new TemplateEngine(output)); for (var object : objects) { System.out.println("object = " + object); session.insert(object); } - var logger = new WorkingMemoryConsoleLogger(session); - session.addEventListener((AgendaEventListener) logger); - session.addEventListener((RuleRuntimeEventListener) logger); - - session.getAgenda().getAgendaGroup("init").setFocus(); - - session.fireAllRules(); + for (var agendaGroup : agendaGroups) { + System.out.println("Setting agenda: " + agendaGroup); + session.getAgenda().getAgendaGroup(agendaGroup).setFocus(); + session.fireAllRules(); + } } @Override 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 ace7aaf..3c7c755 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 @@ -12,18 +12,16 @@ import java.util.Map; public class TemplateEngine { private final Jinjava jinjava = new Jinjava(); + private final File basedir; + + public TemplateEngine(File basedir) { + this.basedir = basedir; + } + public void template(String name, String output, Map params) throws IOException { var template = Files.readString(Path.of("j2", name + ".j2")); String renderedTemplate = jinjava.render(template, params); -// System.out.println("-----------------------------------"); -// for (var item : params.entrySet()) { -// System.out.printf(" %s : %s%n", item.getKey(), item.getValue()); -// } - System.out.println("-----------------------------------"); - System.out.println(renderedTemplate); - System.out.println("-----------------------------------"); - - var f = new File("gen", output); + var f = new File(basedir, output); FileUtil.createMissingParentDirectories(f); Files.writeString(f.toPath(), renderedTemplate); } diff --git a/module/ri-engine/src/main/resources/io/trygvis/rules/terraform/terraform.drl b/module/ri-engine/src/main/resources/io/trygvis/rules/terraform/terraform.drl index 40b9f7c..b3d176b 100644 --- a/module/ri-engine/src/main/resources/io/trygvis/rules/terraform/terraform.drl +++ b/module/ri-engine/src/main/resources/io/trygvis/rules/terraform/terraform.drl @@ -39,6 +39,7 @@ then end rule "TF for TerraformMachine" + agenda-group "generate" when $m: Machine() $scw: ScalewayMachine(machine == $m) @@ -48,6 +49,7 @@ then end rule "Terraform for DNS" + agenda-group "generate" when $entry: DnsEntry() $tf : DnsEntryTerraformExpression(entry == $entry) 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 new file mode 100644 index 0000000..3ee0583 --- /dev/null +++ b/module/ri-wireguard/src/main/resources/io/trygvis/rules/wireguard/generate.drl @@ -0,0 +1,18 @@ +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 -- cgit v1.2.3