summaryrefslogtreecommitdiffstats
path: root/roles/cloudflared
diff options
context:
space:
mode:
authorAhmed Abdelhalim <[email protected]>2026-07-17 15:40:59 +0200
committerAhmed Abdelhalim <[email protected]>2026-07-17 15:40:59 +0200
commit28d802e0ebcf6d192ac398a6b64be2760d7ba2a4 (patch)
tree29daf2e814be989fbf8033ecf9353c8417e516bf /roles/cloudflared
parent22988554510dd5d76df4037cebe8e6662f4dbc61 (diff)
Add cloudflare tunnel configurations
Diffstat (limited to 'roles/cloudflared')
-rw-r--r--roles/cloudflared/handlers/main.yml6
-rw-r--r--roles/cloudflared/meta/argument_specs.yml9
-rw-r--r--roles/cloudflared/meta/main.yml20
-rw-r--r--roles/cloudflared/tasks/install-alpine.yml32
-rw-r--r--roles/cloudflared/tasks/install-archlinux.yml23
-rw-r--r--roles/cloudflared/tasks/install-debian.yml23
-rw-r--r--roles/cloudflared/tasks/main.yml7
-rw-r--r--roles/cloudflared/templates/cloudflared.initd.j210
-rw-r--r--roles/cloudflared/templates/cloudflared.service.j212
9 files changed, 142 insertions, 0 deletions
diff --git a/roles/cloudflared/handlers/main.yml b/roles/cloudflared/handlers/main.yml
new file mode 100644
index 00000000..69ccaaf5
--- /dev/null
+++ b/roles/cloudflared/handlers/main.yml
@@ -0,0 +1,6 @@
+---
+- name: "Restart cloudflared"
+ become: true
+ ansible.builtin.service:
+ name: "cloudflared"
+ state: "restarted"
diff --git a/roles/cloudflared/meta/argument_specs.yml b/roles/cloudflared/meta/argument_specs.yml
new file mode 100644
index 00000000..f20b75dd
--- /dev/null
+++ b/roles/cloudflared/meta/argument_specs.yml
@@ -0,0 +1,9 @@
+---
+argument_specs:
+ main:
+ options:
+ cloudflared_tunnel_token:
+ type: "str"
+ description: "Cloudflare tunnel token from Zero Trust dashboard"
+ required: false
+ no_log: true
diff --git a/roles/cloudflared/meta/main.yml b/roles/cloudflared/meta/main.yml
new file mode 100644
index 00000000..8842aaa1
--- /dev/null
+++ b/roles/cloudflared/meta/main.yml
@@ -0,0 +1,20 @@
+---
+dependencies: []
+galaxy_info:
+ author: "a14m"
+ description: "Install and configure Cloudflare Tunnel daemon"
+ license: "MIT"
+ min_ansible_version: "2.18"
+ platforms:
+ - name: "Alpine"
+ versions:
+ - "all"
+ - name: "ArchLinux"
+ versions:
+ - "all"
+ - name: "Ubuntu"
+ versions:
+ - "noble"
+ - name: "Debian"
+ versions:
+ - "bookworm"
diff --git a/roles/cloudflared/tasks/install-alpine.yml b/roles/cloudflared/tasks/install-alpine.yml
new file mode 100644
index 00000000..28437fc9
--- /dev/null
+++ b/roles/cloudflared/tasks/install-alpine.yml
@@ -0,0 +1,32 @@
+---
+- name: "Check if cloudflared binary exists"
+ ansible.builtin.stat:
+ path: "/usr/local/bin/cloudflared"
+ register: cloudflared_binary
+
+- name: "Download cloudflared binary"
+ become: true
+ ansible.builtin.get_url:
+ url: "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64"
+ dest: "/usr/local/bin/cloudflared"
+ mode: "0755"
+ owner: "root"
+ group: "root"
+ when: not cloudflared_binary.stat.exists
+
+- name: "Deploy cloudflared OpenRC service"
+ become: true
+ ansible.builtin.template:
+ src: "cloudflared.initd.j2"
+ dest: "/etc/init.d/cloudflared"
+ owner: "root"
+ group: "root"
+ mode: "0755"
+ notify: "Restart cloudflared"
+
+- name: "Start and enable cloudflared"
+ become: true
+ ansible.builtin.service:
+ name: "cloudflared"
+ state: "started"
+ enabled: true
diff --git a/roles/cloudflared/tasks/install-archlinux.yml b/roles/cloudflared/tasks/install-archlinux.yml
new file mode 100644
index 00000000..5d122644
--- /dev/null
+++ b/roles/cloudflared/tasks/install-archlinux.yml
@@ -0,0 +1,23 @@
+---
+- name: "Install cloudflared"
+ become: true
+ ansible.builtin.package:
+ name: "cloudflared"
+ state: "present"
+
+- name: "Deploy cloudflared systemd service"
+ become: true
+ ansible.builtin.template:
+ src: "cloudflared.service.j2"
+ dest: "/etc/systemd/system/cloudflared.service"
+ owner: "root"
+ group: "root"
+ mode: "0644"
+ notify: "Restart cloudflared"
+
+- name: "Start and enable cloudflared"
+ become: true
+ ansible.builtin.service:
+ name: "cloudflared"
+ state: "started"
+ enabled: true
diff --git a/roles/cloudflared/tasks/install-debian.yml b/roles/cloudflared/tasks/install-debian.yml
new file mode 100644
index 00000000..5d122644
--- /dev/null
+++ b/roles/cloudflared/tasks/install-debian.yml
@@ -0,0 +1,23 @@
+---
+- name: "Install cloudflared"
+ become: true
+ ansible.builtin.package:
+ name: "cloudflared"
+ state: "present"
+
+- name: "Deploy cloudflared systemd service"
+ become: true
+ ansible.builtin.template:
+ src: "cloudflared.service.j2"
+ dest: "/etc/systemd/system/cloudflared.service"
+ owner: "root"
+ group: "root"
+ mode: "0644"
+ notify: "Restart cloudflared"
+
+- name: "Start and enable cloudflared"
+ become: true
+ ansible.builtin.service:
+ name: "cloudflared"
+ state: "started"
+ enabled: true
diff --git a/roles/cloudflared/tasks/main.yml b/roles/cloudflared/tasks/main.yml
new file mode 100644
index 00000000..e4a3b36e
--- /dev/null
+++ b/roles/cloudflared/tasks/main.yml
@@ -0,0 +1,7 @@
+---
+- name: "Skip if tunnel token not defined"
+ when: cloudflared_tunnel_token is not defined
+ ansible.builtin.meta: end_role
+
+- name: "Include OS-specific installation tasks"
+ ansible.builtin.include_tasks: "install-{{ ansible_facts['os_family'] | lower }}.yml"
diff --git a/roles/cloudflared/templates/cloudflared.initd.j2 b/roles/cloudflared/templates/cloudflared.initd.j2
new file mode 100644
index 00000000..72368c17
--- /dev/null
+++ b/roles/cloudflared/templates/cloudflared.initd.j2
@@ -0,0 +1,10 @@
+#!/sbin/openrc-run
+
+description="Cloudflare Tunnel"
+command="/usr/local/bin/cloudflared"
+command_args="tunnel --no-autoupdate run --token {{ cloudflared_tunnel_token }}"
+command_background=true
+pidfile="/run/cloudflared.pid"
+depend() {
+ need net
+}
diff --git a/roles/cloudflared/templates/cloudflared.service.j2 b/roles/cloudflared/templates/cloudflared.service.j2
new file mode 100644
index 00000000..d88f15ec
--- /dev/null
+++ b/roles/cloudflared/templates/cloudflared.service.j2
@@ -0,0 +1,12 @@
+[Unit]
+Description=Cloudflare Tunnel
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/cloudflared tunnel --no-autoupdate run --token {{ cloudflared_tunnel_token }}
+Restart=on-failure
+RestartSec=5
+
+[Install]
+WantedBy=multi-user.target