diff --git a/README.md b/README.md
index 959020b..50ae765 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
> *Linderhof* — the smallest and most intimate of Ludwig II's Bavarian palaces, the only one he lived to see completed; built entirely to his own vision as a private retreat. ([Wikipedia](https://en.wikipedia.org/wiki/Linderhof_Palace))
+**[codeberg.org/opennomad/linderhof](https://codeberg.org/opennomad/linderhof)**
+
a self-hosting stack based on ansible and docker compose that comes with
- email
diff --git a/roles/caddy/tasks/main.yml b/roles/caddy/tasks/main.yml
index db38c66..74e55a4 100644
--- a/roles/caddy/tasks/main.yml
+++ b/roles/caddy/tasks/main.yml
@@ -38,6 +38,16 @@
mode: "0775" # also allow members of the docker group to write
loop: "{{ caddy_sites }}"
+- name: Deploy default landing page for empty sites
+ template:
+ src: index.html.j2
+ dest: "/srv/caddy/sites/{{ item }}/index.html"
+ owner: root
+ group: docker
+ mode: "0644"
+ force: false # never overwrite real content
+ loop: "{{ caddy_sites }}"
+
- name: Install Caddyfile
template:
src: Caddyfile.j2
diff --git a/roles/caddy/templates/index.html.j2 b/roles/caddy/templates/index.html.j2
new file mode 100644
index 0000000..5dba69b
--- /dev/null
+++ b/roles/caddy/templates/index.html.j2
@@ -0,0 +1,86 @@
+{#
+ Adapted from "Coming Soon" by Steven Tang (github.com/YC/coming-soon)
+ MIT License — https://github.com/YC/coming-soon/blob/master/LICENSE
+#}
+
+
+
+
+
+ {{ item }}
+
+
+
+
+ {{ item }}.
+ Something's on its way.
+
+
+
+
diff --git a/roles/dns/defaults/main.yml b/roles/dns/defaults/main.yml
index 0db6919..2329672 100644
--- a/roles/dns/defaults/main.yml
+++ b/roles/dns/defaults/main.yml
@@ -1,2 +1,3 @@
---
dns_zones: []
+hcloud_labels: {} # override in config.yml — see config.yml.setup for recommended labels
diff --git a/roles/dns/tasks/extra_mail_domain.yml b/roles/dns/tasks/extra_mail_domain.yml
index c2bbc41..0996821 100644
--- a/roles/dns/tasks/extra_mail_domain.yml
+++ b/roles/dns/tasks/extra_mail_domain.yml
@@ -7,6 +7,7 @@
ttl: 300
records:
- value: "{{ server_ip }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
@@ -18,6 +19,7 @@
ttl: 300
records:
- value: "10 {{ mail_hostname }}."
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
@@ -29,6 +31,7 @@
ttl: 300
records:
- value: "{{ 'v=spf1 mx -all' | hetzner.hcloud.txt_record }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
@@ -40,6 +43,7 @@
ttl: 300
records:
- value: "{{ ('v=DMARC1; p=none; rua=mailto:dmarc@' + extra_domain) | hetzner.hcloud.txt_record }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
@@ -51,6 +55,7 @@
ttl: 300
records:
- value: "{{ dkim_keys[extra_domain] | hetzner.hcloud.txt_record }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
when: dkim_keys is defined and extra_domain in dkim_keys
diff --git a/roles/dns/tasks/main.yml b/roles/dns/tasks/main.yml
index 003f616..33da81c 100644
--- a/roles/dns/tasks/main.yml
+++ b/roles/dns/tasks/main.yml
@@ -3,6 +3,7 @@
hetzner.hcloud.zone:
name: "{{ item.zone }}"
mode: primary
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
loop: "{{ dns_zones }}"
@@ -17,6 +18,7 @@
type: "{{ item.1.type }}"
ttl: "{{ item.1.ttl | default(300) }}"
records: "{{ item.1.records }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
loop: "{{ dns_zones | subelements('records') }}"
@@ -29,6 +31,7 @@
hetzner.hcloud.zone:
name: "{{ item }}"
mode: primary
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
loop: "{{ mail_domains | difference([domain]) }}"
@@ -51,6 +54,7 @@
ttl: 300
records:
- value: "{{ item.value | hetzner.hcloud.txt_record }}"
+ labels: "{{ hcloud_labels }}"
api_token: "{{ hcloud_token }}"
state: present
loop: "{{ dkim_keys | default({}) | dict2items }}"
diff --git a/roles/provision/defaults/main.yml b/roles/provision/defaults/main.yml
index f542660..17e035e 100644
--- a/roles/provision/defaults/main.yml
+++ b/roles/provision/defaults/main.yml
@@ -3,3 +3,4 @@ cloud_provider: hetzner
hcloud_server_type: cx23
hcloud_image: ubuntu-24.04
hcloud_location: fsn1
+hcloud_labels: {} # override in config.yml — see config.yml.setup for recommended labels
diff --git a/setup.sh b/setup.sh
index 6d72c3a..98246b8 100755
--- a/setup.sh
+++ b/setup.sh
@@ -45,6 +45,8 @@ ok "collections installed"
echo
info "stack setup"
prompt stack_name "Stack name" "home"
+export stack_name
+
LINDERHOF_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/linderhof"
STACK_DIR="$LINDERHOF_CONFIG_DIR/$stack_name"
@@ -174,7 +176,7 @@ if [[ -f "$CONFIG" ]]; then
warn "config.yml already exists — skipping (not overwriting)"
else
info "writing config.yml..."
- envsubst '$admin_user $server_name $server_ip $domain $ssh_key_pub' \
+ envsubst '$admin_user $server_name $server_ip $domain $ssh_key_pub $stack_name' \
< "$TEMPLATES/config.yml.setup" > "$CONFIG"
ok "config.yml created"
fi