From f741bc6a20f2c5cd4cd93c4e6da6c3774e5038a8 Mon Sep 17 00:00:00 2001
From: Jelle van der Waa <jelle@archlinux.org>
Date: Fri, 14 May 2021 18:30:01 +0200
Subject: [PATCH] Terraform uptimerobot monitors

Add our uptimerobot to terraform so it's managed in code and we can
easily extend it. This currently only adds our to be monitored sites and
leaves the status page as is now.

Deleting resources on uptimerobot will cause terraform unable to run
see: https://github.com/louy/terraform-provider-uptimerobot/issues/82

References: #209
---
 group_vars/all/vault_uptimerobot.yml | 11 +++++++
 tf-stage2/.terraform.lock.hcl        | 19 ++++++++++++
 tf-stage2/uptimerobot.tf             | 46 ++++++++++++++++++++++++++++
 tf-stage2/versions.tf                |  4 +++
 4 files changed, 80 insertions(+)
 create mode 100644 group_vars/all/vault_uptimerobot.yml
 create mode 100644 tf-stage2/uptimerobot.tf

diff --git a/group_vars/all/vault_uptimerobot.yml b/group_vars/all/vault_uptimerobot.yml
new file mode 100644
index 000000000..d9f12015d
--- /dev/null
+++ b/group_vars/all/vault_uptimerobot.yml
@@ -0,0 +1,11 @@
+$ANSIBLE_VAULT;1.1;AES256
+62633262613331616434383361643166396632326534376238363661343162383563633738666165
+3265376465363330373030636337643838663232346331660a356536353363363837323466363066
+65363737363465643633323536393261636438383336343334656439333136383934376538653466
+3965373639366131330a633962366637396332363237363364383238663133323664616132303365
+62653761353366623364363365633937343339386562323133353030316635376265356166343965
+64333931383836306563373138383262313335663530623863666565656136653162333437333536
+34346632313438386362643433373936346266353562333562303562303432316330663261303636
+32363735346366323038346336386364313634356131633463373837366261623534626361636563
+36656164633363396231346135643765663062656230333838343538643361383632373533306236
+3261343064333737346166316562616637353330373736633634
diff --git a/tf-stage2/.terraform.lock.hcl b/tf-stage2/.terraform.lock.hcl
index e13204fa2..276336bde 100644
--- a/tf-stage2/.terraform.lock.hcl
+++ b/tf-stage2/.terraform.lock.hcl
@@ -18,6 +18,25 @@ provider "registry.terraform.io/hashicorp/external" {
   ]
 }
 
+provider "registry.terraform.io/louy/uptimerobot" {
+  version     = "0.5.1"
+  constraints = "0.5.1"
+  hashes = [
+    "h1:Oc5L04pt+5NJ8n47K7tVHbqFmuobW/x5zaF5sPGCQwE=",
+    "zh:0cab4092125cf524a2e5caf74a4e90f230734b20bbceb20e51ffb82f2fcc90fc",
+    "zh:130d9d9ddb2f9070d7846066d424d785a624472a25b413382bf6e80ad4754158",
+    "zh:29c1ff142ec76adb751cf1e99b2c7bd9ba5f17b97bfcce5954043db9c4a83039",
+    "zh:2ade3d4b911bcceb795b009105dfd58c40d27d06c2ea7402159a76559e86dd25",
+    "zh:474d83e659597ee143d09100787bb35daf05dc2a0b3fbfcb8159792143b8c598",
+    "zh:62694db2f947bafb00532a5b961067eb488005061e684eb74148bcbf80805270",
+    "zh:6a4e423519a331328764ba0790eb79c63882e77aa8ffdf811a319b5efaf7034e",
+    "zh:7e7f7c16f54690f84fcb6d1a90848bd51fc7b2eb2cc23bfa0583e18a80157393",
+    "zh:a4a63a32ac0bbe0d11fda36768c824698db4c2378cbfdf5522276fe996621864",
+    "zh:af3062664c5c4ec012af48dea769318dcb8ef77cbb59f15d8b6c252fb9adda85",
+    "zh:de555bac4bd86d17e7b5592ec22a6db8d1496470d3dab4fa286a86e44bdad991",
+  ]
+}
+
 provider "registry.terraform.io/mrparkers/keycloak" {
   version     = "2.0.0"
   constraints = "2.0.0"
diff --git a/tf-stage2/uptimerobot.tf b/tf-stage2/uptimerobot.tf
new file mode 100644
index 000000000..326fb0dcf
--- /dev/null
+++ b/tf-stage2/uptimerobot.tf
@@ -0,0 +1,46 @@
+# When deleting a resource outside of terraform, the provider errors out and a
+# resource has to be manually deleted in terraform, see:
+# https://github.com/louy/terraform-provider-uptimerobot/issues/82
+
+data "external" "vault_uptimerobot" {
+  program = ["${path.module}/../misc/get_key.py", "group_vars/all/vault_uptimerobot.yml",
+    "vault_uptimerobot_api_key",
+    "vault_uptimerobot_alert_contact",
+  "--format", "json"]
+}
+
+provider "uptimerobot" {
+  api_key = data.external.vault_uptimerobot.result.vault_uptimerobot_api_key
+}
+
+data "uptimerobot_account" "account" {}
+
+data "uptimerobot_alert_contact" "default_alert_contact" {
+  friendly_name = data.external.vault_uptimerobot.result.vault_uptimerobot_alert_contact
+}
+
+locals {
+  archlinux_org_monitor = {
+    "Wiki"             = "https://wiki.archlinux.org"
+    "Website"          = "https://archlinux.org"
+    "Security Tracker" = "https://security.archlinux.org"
+    "Gitlab"           = "https://gitlab.archlinux.org"
+    "Forum"            = "https://bbs.archlinux.org"
+    "Bugtracker"       = "https://bugs.archlinux.org"
+    "AUR"              = "https://aur.archlinux.org"
+    "Man"              = "https://man.archlinux.org"
+  }
+}
+
+resource "uptimerobot_monitor" "uptimerobot_monitor_archlinux" {
+  for_each = local.archlinux_org_monitor
+
+  friendly_name = each.key
+  type          = "http"
+  url           = each.value
+  interval      = 60
+
+  alert_contact {
+    id = data.uptimerobot_alert_contact.default_alert_contact.id
+  }
+}
diff --git a/tf-stage2/versions.tf b/tf-stage2/versions.tf
index aa545e7b8..348849460 100644
--- a/tf-stage2/versions.tf
+++ b/tf-stage2/versions.tf
@@ -7,6 +7,10 @@ terraform {
       source  = "mrparkers/keycloak"
       version = "2.0.0"
     }
+    uptimerobot = {
+      source  = "louy/uptimerobot"
+      version = "0.5.1"
+    }
   }
   required_version = ">= 0.13"
 }
-- 
GitLab