mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 02:10:05 +00:00 
			
		
		
		
	Changes: add AppView port; add CSP whitelist; new tasks (01_pds, 02_social_app, 03_dns); switch templates to BLUESKY_* vars; update docker-compose and env; TCP healthcheck; remove admin_password from schema. Conversation context: https://chatgpt.com/share/68b85276-e0ec-800f-90ec-480a1d528593
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.9 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 }}"
 | ||
|         proxied: false
 | ||
| 
 | ||
|       - type: AAAA
 | ||
|         zone: "{{ BLUESKY_API_DOMAIN | to_zone }}"
 | ||
|         name: "{{ BLUESKY_API_DOMAIN }}"
 | ||
|         content: "{{ networks.internet.ip6 | default('') }}"
 | ||
|         proxied: false
 | ||
|         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 }}"
 | ||
| 
 | ||
|       # 3) Web UI host (only if enabled)
 | ||
|       - type: A
 | ||
|         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
 | ||
|         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
 | ||
|         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
 | ||
|         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') }}"
 | ||
| 
 |