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+
17resource "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+ 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}
0 commit comments