import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { Card, CardHeader, CardTitle, CardDescription, CardContent } from '../../components/ui/card'; import { Button } from '../../components/ui/button'; import { Skeleton } from '../../components/ui/skeleton'; import { DownloadButton } from '../../components/DownloadButton'; import { CopyButton } from '../../components/CopyButton'; import { ConfigViewer } from '../../components/ConfigViewer'; import { FileText, AlertTriangle, RefreshCw } from 'lucide-react'; import { useKubeconfig, useTalosconfig, useRegenerateKubeconfig } from '../../hooks/useClusterAccess'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../components/ui/collapsible'; export function ClusterAccessPage() { const { instanceId } = useParams<{ instanceId: string }>(); const [showKubeconfigPreview, setShowKubeconfigPreview] = useState(false); const [showTalosconfigPreview, setShowTalosconfigPreview] = useState(false); const [showRegenerateDialog, setShowRegenerateDialog] = useState(false); const { data: kubeconfig, isLoading: kubeconfigLoading, refetch: refetchKubeconfig } = useKubeconfig(instanceId); const { data: talosconfig, isLoading: talosconfigLoading } = useTalosconfig(instanceId); const regenerateMutation = useRegenerateKubeconfig(instanceId); const handleRegenerate = async () => { await regenerateMutation.mutateAsync(); await refetchKubeconfig(); setShowRegenerateDialog(false); }; if (!instanceId) { return (

No instance selected

); } return (

Cluster Access

Download kubeconfig and talosconfig files

{/* Kubeconfig Card */}
Kubeconfig Configuration file for accessing the Kubernetes cluster with kubectl
{kubeconfigLoading ? ( ) : kubeconfig?.kubeconfig ? ( <>

Usage:

kubectl --kubeconfig={instanceId}-kubeconfig.yaml get nodes

Or set as default:

export KUBECONFIG=~/.kube/{instanceId}-kubeconfig.yaml
) : (

Kubeconfig not available

Generate cluster configuration first

)}
{/* Talosconfig Card */}
Talosconfig Configuration file for accessing Talos nodes with talosctl
{talosconfigLoading ? ( ) : talosconfig?.talosconfig ? ( <>

Usage:

talosctl --talosconfig={instanceId}-talosconfig.yaml get members

Or set as default:

export TALOSCONFIG=~/.talos/{instanceId}-talosconfig.yaml
) : (

Talosconfig not available

Generate cluster configuration first

)}
{/* Regenerate Confirmation Dialog */} Regenerate Kubeconfig This will regenerate the kubeconfig file. Any existing kubeconfig files will be invalidated. Are you sure you want to continue?
); }