#!/bin/bash # Migration script from Cozystack ConfigMaps to Package-based configuration # This script converts cozystack, cozystack-branding, and cozystack-scheduling # ConfigMaps into a Package resource with the new values structure. set -e NAMESPACE="cozy-system" echo "=============================" echo " Cozystack Migration to v1.0 " echo "=============================" echo "" echo "This script will convert existing ConfigMaps to a Package resource." echo "" # Check if kubectl is available if ! command -v kubectl &> /dev/null; then echo "Error: kubectl is not installed or not in PATH" exit 1 fi # Check if jq is available if ! command -v jq &> /dev/null; then echo "Error: jq is not installed or not in PATH" exit 1 fi # Check if we can access the cluster if ! kubectl get namespace "$NAMESPACE" &> /dev/null; then echo "Error: Cannot access namespace $NAMESPACE" exit 1 fi # Read ConfigMap cozystack echo "Reading ConfigMap cozystack..." COZYSTACK_CM=$(kubectl get configmap -n "$NAMESPACE" cozystack -o json 2>/dev/null || echo "{}") # Read ConfigMap cozystack-branding echo "Reading ConfigMap cozystack-branding..." BRANDING_CM=$(kubectl get configmap -n "$NAMESPACE" cozystack-branding -o json 2>/dev/null || echo "{}") # Read ConfigMap cozystack-scheduling echo "Reading ConfigMap cozystack-scheduling..." SCHEDULING_CM=$(kubectl get configmap -n "$NAMESPACE" cozystack-scheduling -o json 2>/dev/null || echo "{}") # Extract values from cozystack ConfigMap CLUSTER_DOMAIN=$(echo "$COZYSTACK_CM" | jq -r '.data["cluster-domain"] // "cozy.local"') ROOT_HOST=$(echo "$COZYSTACK_CM" | jq -r '.data["root-host"] // "example.org"') API_SERVER_ENDPOINT=$(echo "$COZYSTACK_CM" | jq -r '.data["api-server-endpoint"] // ""') OIDC_ENABLED=$(echo "$COZYSTACK_CM" | jq -r '.data["oidc-enabled"] // "false"') KEYCLOAK_REDIRECTS=$(echo "$COZYSTACK_CM" | jq -r '.data["extra-keycloak-redirect-uri-for-dashboard"] // ""' ) TELEMETRY_ENABLED=$(echo "$COZYSTACK_CM" | jq -r '.data["telemetry-enabled"] // "true"') BUNDLE_NAME=$(echo "$COZYSTACK_CM" | jq -r '.data["bundle-name"] // "paas-full"') # Network configuration POD_CIDR=$(echo "$COZYSTACK_CM" | jq -r '.data["ipv4-pod-cidr"] // "10.244.0.0/16"') POD_GATEWAY=$(echo "$COZYSTACK_CM" | jq -r '.data["ipv4-pod-gateway"] // "10.244.0.1"') SVC_CIDR=$(echo "$COZYSTACK_CM" | jq -r '.data["ipv4-svc-cidr"] // "10.96.0.0/16"') JOIN_CIDR=$(echo "$COZYSTACK_CM" | jq -r '.data["ipv4-join-cidr"] // "100.64.0.0/16"') EXTERNAL_IPS=$(echo "$COZYSTACK_CM" | jq -r '.data["expose-external-ips"] // ""') if [ -z "$EXTERNAL_IPS" ]; then EXTERNAL_IPS="[]" else EXTERNAL_IPS=$(echo "$EXTERNAL_IPS" | sed 's/,/\n/g' | awk 'BEGIN{print}{print " - "$0}') fi # Determine bundle type case "$BUNDLE_NAME" in paas-full|distro-full) SYSTEM_ENABLED="true" SYSTEM_TYPE="full" ;; paas-hosted|distro-hosted) SYSTEM_ENABLED="false" SYSTEM_TYPE="hosted" ;; *) SYSTEM_ENABLED="false" SYSTEM_TYPE="hosted" ;; esac # Update bundle naming BUNDLE_NAME=$(echo "$BUNDLE_NAME" | sed 's/paas/isp/') # Extract branding if available BRANDING=$(echo "$BRANDING_CM" | jq -r '.data // {} | to_entries[] | "\(.key): \"\(.value)\""') if [ -z "$BRANDING" ]; then BRANDING="{}" else BRANDING=$(echo "$BRANDING" | awk 'BEGIN{print}{print " " $0}') fi # Extract scheduling if available SCHEDULING_CONSTRAINTS=$(echo "$SCHEDULING_CM" | jq -r '.data["globalAppTopologySpreadConstraints"] // ""') if [ -z "$SCHEDULING_CONSTRAINTS" ]; then SCHEDULING_CONSTRAINTS='""' else SCHEDULING_CONSTRAINTS=$(echo "$SCHEDULING_CONSTRAINTS" | awk 'BEGIN{print}{print " " $0}') fi echo "" echo "Extracted configuration:" echo " Cluster Domain: $CLUSTER_DOMAIN" echo " Root Host: $ROOT_HOST" echo " API Server Endpoint: $API_SERVER_ENDPOINT" echo " OIDC Enabled: $OIDC_ENABLED" echo " Bundle Name: $BUNDLE_NAME" echo " System Enabled: $SYSTEM_ENABLED" echo " System Type: $SYSTEM_TYPE" echo "" # Generate Package YAML PACKAGE_YAML=$(cat <