diff options
Diffstat (limited to 'example/modules/acme/src/main/resources/io/trygvis/acme/acme.drl')
-rw-r--r-- | example/modules/acme/src/main/resources/io/trygvis/acme/acme.drl | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/example/modules/acme/src/main/resources/io/trygvis/acme/acme.drl b/example/modules/acme/src/main/resources/io/trygvis/acme/acme.drl new file mode 100644 index 0000000..6a2f33b --- /dev/null +++ b/example/modules/acme/src/main/resources/io/trygvis/acme/acme.drl @@ -0,0 +1,81 @@ +package io.trygvis.acme; + +import io.trygvis.rules.machine.Machine; +import io.trygvis.rules.dba.Cluster; +import io.trygvis.rules.dba.Container +import io.trygvis.rules.terraform.TerraformResource; +import io.trygvis.rules.terraform.TerraformMain +import io.trygvis.rules.terraform.TerraformProvider; + +dialect "mvel" + +declare AcmeServer + name : String + machine : Machine +end + +rule "Create Acme servers" +when + $m : Machine(name.startsWith("acme-")) + not(AcmeServer(name == $m.name)) +then + var s = new AcmeServer(); + s.name = $m.name; + s.machine = $m; + insert(s); +end + +rule "Set public domain for ACME servers" +when + $m : Machine(fqdn == null) + $s : AcmeServer(machine == $m) +then + var fqdn = "%s.machine.acme.com".formatted($m.name); + modify ($m) { + fqdn = fqdn + } +end + +rule "Make Terraform module for machines" +when + not TerraformMain(module == "terraform") +then + var module = new TerraformMain("terraform"); + + var scaleway = new TerraformProvider("scaleway", "2.0.0-rc1"); + module.getProviders().put("scaleway", scaleway); + + insert(module) +end + +rule "Make Scaleway Terraform resources for Machine" +when + $m : Machine() + $s : AcmeServer(machine == $m) +then + var ip = new TerraformResource("terraform/" + $m.name + "-ip.tf", "scaleway_instance_ip", $m.name); + var instance = new TerraformResource("terraform/" + $m.name + "-instance.tf", "scaleway_server_instance", $m.name) + .set("name", "acme-1") + .set("type", "DEV1-S") + .set("image", "b3042271-d2b1-4f87-b407-aedd3bbd1663") + .setExpression("ip_id", ip.name + ".ip") + .set("enable_dynamic_ip", false) + .set("enable_ipv6", true); + + + var rev = new TerraformResource("terraform/" + $m.name + "-ip.tf", "scaleway_instance_reverse_dns", $m.name) + .set("reverse", $m.fqdn + ".") + .setExpression("ip_id", ip.name + ".id"); + var dns = new TerraformResource("terraform/" + $m.name + "-dns.tf", "google_dns_record_set", $m.name) + .set("name", $m.fqdn) + .setExpression("managed_zone", "var.dns_zone") + .set("type", "A") + .set("ttl", 300) + .array("rrdatas") + .addExpression(ip.name + ".id"); + + insert(instance) + insert(ip) + insert(rev) + insert(dns) +end |