Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

Commit 5381865

Browse files
committed
chore(cloudflare): add secrets; first attempt at a tunnel
1 parent 1c45abc commit 5381865

File tree

3 files changed

+89
-5
lines changed

3 files changed

+89
-5
lines changed

terraform/module/iot-backend/zigbee2mqtt/main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,7 @@ resource "kubernetes_ingress_v1" "zigbee2mqtt_ingress" {
5858
}
5959
}
6060
}
61+
62+
output "hostname" {
63+
value = var.ui_host
64+
}

terraform/network.tf

Lines changed: 84 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
locals {
2+
cloudflare_account_id = onepassword_item.cloudflare_provider.section[0].field[0].value
3+
cloudflare_zone_id = onepassword_item.cloudflare_provider.section[0].field[1].value
4+
cloudflare_zone = "reducer.io"
5+
}
6+
17
resource "kubernetes_namespace_v1" "network" {
28
metadata {
39
name = "network"
@@ -40,7 +46,7 @@ resource "onepassword_item" "cloudflare_tunnel" {
4046
}
4147

4248
# Create tunnel
43-
resource "cloudflare_tunnel" "homelab_tunnel" {
49+
resource "cloudflare_tunnel" "homelab" {
4450
name = "homelab"
4551
account_id = onepassword_item.cloudflare_provider.section[0].field[0].value
4652
secret = base64encode(onepassword_item.cloudflare_tunnel.password)
@@ -51,8 +57,81 @@ module "cloudflared" {
5157
source = "./module/service/cloudflared"
5258
namespace = kubernetes_namespace_v1.network.metadata[0].name
5359

54-
tunnel_id = cloudflare_tunnel.homelab_tunnel.id
55-
tunnel_name = cloudflare_tunnel.homelab_tunnel.name
56-
account_tag = onepassword_item.cloudflare_provider.section[0].field[0].value
57-
tunnel_secret = cloudflare_tunnel.homelab_tunnel.secret
60+
tunnel_id = cloudflare_tunnel.homelab.id
61+
tunnel_name = cloudflare_tunnel.homelab.name
62+
account_tag = local.cloudflare_account_id
63+
tunnel_secret = cloudflare_tunnel.homelab.secret
64+
}
65+
66+
resource "cloudflare_record" "zigbee2mqtt" {
67+
name = "z2m"
68+
type = "CNAME"
69+
zone_id = local.cloudflare_zone_id
70+
value = "${cloudflare_tunnel.homelab.id}.cfargotunnel.com"
71+
proxied = true
72+
}
73+
74+
resource "cloudflare_access_application" "home" {
75+
zone_id = local.cloudflare_zone_id
76+
name = "Access application for home.${local.cloudflare_zone}"
77+
domain = "z2m.${local.cloudflare_zone}"
78+
session_duration = "1h"
79+
type = "self_hosted"
80+
app_launcher_visible = true
81+
}
82+
83+
resource "cloudflare_access_policy" "http_policy" {
84+
application_id = cloudflare_access_application.home.id
85+
zone_id = local.cloudflare_zone_id
86+
87+
name = "Example policy for http_app.${local.cloudflare_zone}"
88+
precedence = 1
89+
decision = "allow"
90+
include {
91+
email = ["[email protected]"]
92+
}
93+
}
94+
95+
resource "cloudflare_tunnel_config" "homelab" {
96+
account_id = local.cloudflare_account_id
97+
tunnel_id = cloudflare_tunnel.homelab.id
98+
99+
config {
100+
ingress_rule {
101+
hostname = "z2m.reducer.io"
102+
service = "http://zigbee2mqtt.iot-backend"
103+
}
104+
105+
ingress_rule {
106+
service = "http://192.168.68.66:9002"
107+
}
108+
}
109+
}
110+
111+
resource "onepassword_item" "google_oauth" {
112+
vault = data.onepassword_vault.homelab.uuid
113+
category = "password"
114+
title = "Google OAuth info"
115+
116+
# The OAuth client secret is stored in the password field.
117+
118+
section {
119+
label = "Settings"
120+
121+
field {
122+
label = "OAuth client ID"
123+
}
124+
}
125+
}
126+
127+
resource "cloudflare_access_identity_provider" "google" {
128+
account_id = local.cloudflare_account_id
129+
name = "Reducer"
130+
type = "google-apps"
131+
132+
config {
133+
client_id = onepassword_item.google_oauth.section[0].field[0].value
134+
client_secret = onepassword_item.google_oauth.password
135+
apps_domain = "reducer.io"
136+
}
58137
}

terraform/secrets.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ module "onepassword" {
1212
}
1313

1414
data "onepassword_vault" "homelab" {
15+
# The provider looks up the vault UUID from the vault name and populates `uuid`.
1516
name = var.onepassword_vault_name
1617
}

0 commit comments

Comments
 (0)