mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-20 09:16:03 +02:00
- Added 'solo' flag support for A/AAAA, CNAME/MX/TXT, and SRV records in sys-dns-cloudflare-records. - Simplified sys-svc-dns: removed NS management tasks and CLOUDFLARE_NAMESERVERS default. - Renamed 03_apex.yml back to 02_apex.yml, adjusted AAAA task name. - Updated web-app-bluesky DNS tasks: marked critical records with 'solo'. - Updated web-app-mailu DNS tasks: removed cleanup block, enforced 'solo' on all records. - Adjusted constructor stage to call domain_mappings with AUTO_BUILD_ALIASES parameter. Conversation: https://chatgpt.com/share/68cd20d8-9ba8-800f-b070-f7294f072c40
81 lines
3.0 KiB
YAML
81 lines
3.0 KiB
YAML
---
|
||
# Creates Cloudflare DNS records for Bluesky:
|
||
# - PDS/API host (A/AAAA)
|
||
# - Handle TXT verification (_atproto)
|
||
# - Optional Web UI host (A/AAAA)
|
||
# - Optional custom AppView host (A/AAAA)
|
||
#
|
||
# Requirements:
|
||
# DNS_PROVIDER == 'cloudflare'
|
||
# CLOUDFLARE_API_TOKEN set
|
||
#
|
||
# Inputs (inventory/vars):
|
||
# BLUESKY_API_DOMAIN, BLUESKY_WEB_DOMAIN, BLUESKY_VIEW_DOMAIN
|
||
# BLUESKY_WEB_ENABLED (bool), BLUESKY_VIEW_ENABLED (bool)
|
||
# PRIMARY_DOMAIN
|
||
# networks.internet.ip4 (and optionally networks.internet.ip6)
|
||
|
||
- name: "DNS (Cloudflare) for Bluesky – base records"
|
||
include_role:
|
||
name: sys-dns-cloudflare-records
|
||
when: DNS_PROVIDER | lower == 'cloudflare'
|
||
vars:
|
||
cloudflare_records:
|
||
# 1) PDS / API host
|
||
- type: A
|
||
zone: "{{ BLUESKY_API_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_API_DOMAIN }}"
|
||
content: "{{ networks.internet.ip4 }}"
|
||
solo: true
|
||
proxied: false
|
||
|
||
- type: AAAA
|
||
zone: "{{ BLUESKY_API_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_API_DOMAIN }}"
|
||
content: "{{ networks.internet.ip6 | default('') }}"
|
||
proxied: false
|
||
solo: true
|
||
state: "{{ (networks.internet.ip6 is defined and (networks.internet.ip6 | string) | length > 0) | ternary('present','absent') }}"
|
||
|
||
# 2) Handle verification for primary handle (Apex)
|
||
- type: TXT
|
||
zone: "{{ PRIMARY_DOMAIN | to_zone }}"
|
||
name: "_atproto.{{ PRIMARY_DOMAIN }}"
|
||
value: '"did=did:web:{{ BLUESKY_API_DOMAIN }}"'
|
||
solo: true
|
||
|
||
# 3) Web UI host (only if enabled)
|
||
- type: A
|
||
solo: true
|
||
zone: "{{ BLUESKY_WEB_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_WEB_DOMAIN }}"
|
||
content: "{{ networks.internet.ip4 }}"
|
||
proxied: true
|
||
state: "{{ (BLUESKY_WEB_ENABLED | bool) | ternary('present','absent') }}"
|
||
|
||
- type: AAAA
|
||
solo: true
|
||
zone: "{{ BLUESKY_WEB_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_WEB_DOMAIN }}"
|
||
content: "{{ networks.internet.ip6 | default('') }}"
|
||
proxied: true
|
||
state: "{{ (BLUESKY_WEB_ENABLED | bool) and (networks.internet.ip6 is defined) and ((networks.internet.ip6 | string) | length > 0) | ternary('present','absent') }}"
|
||
|
||
# 4) Custom AppView host (only if you actually run one and it's not api.bsky.app)
|
||
- type: A
|
||
solo: true
|
||
zone: "{{ BLUESKY_VIEW_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_VIEW_DOMAIN }}"
|
||
content: "{{ networks.internet.ip4 }}"
|
||
proxied: false
|
||
state: "{{ (BLUESKY_VIEW_ENABLED | bool) and (BLUESKY_VIEW_DOMAIN != 'api.bsky.app') | ternary('present','absent') }}"
|
||
|
||
- type: AAAA
|
||
solo: true
|
||
zone: "{{ BLUESKY_VIEW_DOMAIN | to_zone }}"
|
||
name: "{{ BLUESKY_VIEW_DOMAIN }}"
|
||
content: "{{ networks.internet.ip6 | default('') }}"
|
||
proxied: false
|
||
state: "{{ (BLUESKY_VIEW_ENABLED | bool) and (BLUESKY_VIEW_DOMAIN != 'api.bsky.app') and (networks.internet.ip6 is defined) and ((networks.internet.ip6 | string) | length > 0) | ternary('present','absent') }}"
|
||
|