- added minio object storage - added immich photo viewer - added cloudnative-pg postgres operator for db management - added cronjobs to run different maintenance tasks - updated readme
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| apiVersion: v1
 | |
| kind: ConfigMap
 | |
| metadata:
 | |
|   name: update-dns-script
 | |
| data:
 | |
|   update_dns.sh: |
 | |
|     #! /usr/bin/env bash
 | |
|     # This script updates a DNS record using the Cloudflare API.
 | |
|     set -euo pipefail
 | |
| 
 | |
|     function get_my_ip() {
 | |
|         curl -s https://api.ipify.org
 | |
|     }
 | |
| 
 | |
|     function get_zone_id() {
 | |
|         local zone_name="$1"
 | |
|         local api_token="${CLOUDFLARE_API_TOKEN}"
 | |
| 
 | |
|         response=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=${zone_name}" \
 | |
|             -H "Content-Type: application/json" \
 | |
|             -H "Authorization: Bearer ${api_token}")
 | |
| 
 | |
|         if echo "$response" | grep -q '"success":true'; then
 | |
|             echo "$response" | jq -r '.result[0].id'
 | |
|         else
 | |
|             echo "Failed to retrieve zone ID for ${zone_name}. Response: $response"
 | |
|             exit 1
 | |
|         fi
 | |
|     }
 | |
| 
 | |
|     function get_dns_record_id() {
 | |
|         local zone_id="$1"
 | |
|         local api_token="${CLOUDFLARE_API_TOKEN}"
 | |
| 
 | |
|         response=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records" \
 | |
|             -H "Content-Type: application/json" \
 | |
|             -H "Authorization: Bearer ${api_token}")
 | |
| 
 | |
|         if echo "${response}" | grep -q '"success":true'; then
 | |
|             for record in $(echo "${response}" | jq -r '.result[] | select(.type=="A") | .id'); do
 | |
|                 echo "${record}"
 | |
|                 return
 | |
|             done
 | |
|         else
 | |
|             echo "Failed to retrieve DNS record ID for ${record_name}. Response: $response"
 | |
|             exit 1
 | |
|         fi
 | |
|     }
 | |
| 
 | |
|     function update_dns_record() {
 | |
|         local zone_id="$1"
 | |
|         local record_id="$2"
 | |
|         local ip_address="$3"
 | |
|         local api_token="${CLOUDFLARE_API_TOKEN}"
 | |
| 
 | |
|         local max_attempts=3
 | |
|         local attempt=1
 | |
|         local success=false
 | |
| 
 | |
|         while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do
 | |
|             if response=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id}" \
 | |
|                 -H "Content-Type: application/json" \
 | |
|                 -H "Authorization: Bearer ${api_token}" \
 | |
|                 -d '{
 | |
|                     "type": "A",
 | |
|                     "name": "tahmidcloud.com",
 | |
|                     "content": "'"${ip_address}"'",
 | |
|                     "ttl": 1,
 | |
|                     "proxied": false
 | |
|                 }'); then
 | |
|                 if echo "$response" | grep -q '"success":true'; then
 | |
|                     success=true
 | |
|                 else
 | |
|                     echo "Attempt $attempt failed. Response: $response"
 | |
|                 fi
 | |
|             fi
 | |
| 
 | |
|             if [ "$success" = false ] ; then
 | |
|                 if [ $attempt -lt $max_attempts ]; then
 | |
|                     echo "Retrying in 5 seconds..."
 | |
|                     sleep 5
 | |
|                 fi
 | |
|                 ((attempt++))
 | |
|             fi
 | |
|         done
 | |
| 
 | |
|         if [ "$success" = false ]; then
 | |
|             echo "Failed to update DNS record after ${max_attempts} attempts"
 | |
|             exit 1
 | |
|         fi
 | |
|         echo "DNS record updated successfully to IP address: ${ip_address}"
 | |
|     }
 | |
| 
 | |
|     function main() {
 | |
|         if [ -z "${CLOUDFLARE_API_TOKEN:-}" ]; then
 | |
|             echo "CLOUDFLARE_API_TOKEN environment variable is not set."
 | |
|             exit 1
 | |
|         fi
 | |
| 
 | |
|         zone_id=$(get_zone_id "tahmidcloud.com")
 | |
|         record_id=$(get_dns_record_id "${zone_id}")
 | |
|         ip_address=$(get_my_ip)
 | |
| 
 | |
|         update_dns_record "${zone_id}" "${record_id}" "${ip_address}"
 | |
|     }
 | |
| 
 | |
|     main |