import { DateTooltip } from "@/components/shared/date-tooltip"; import { DialogAction } from "@/components/shared/dialog-action"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { api } from "@/utils/api"; import { Boxes, HelpCircle, Loader2, LockIcon, MoreHorizontal, } from "lucide-react"; import { toast } from "sonner"; import { AddNode } from "./add-node"; import { ShowNodeData } from "./show-node-data"; interface Props { serverId?: string; } export const ShowNodes = ({ serverId }: Props) => { const { data, isLoading, refetch } = api.cluster.getNodes.useQuery({ serverId, }); const { data: registry } = api.registry.all.useQuery(); const { mutateAsync: deleteNode } = api.cluster.removeWorker.useMutation(); const haveAtLeastOneRegistry = !!(registry && registry?.length > 0); return (
Cluster Add nodes to your cluster
{haveAtLeastOneRegistry && (
)}
{isLoading ? (
) : haveAtLeastOneRegistry ? (
A list of your managers / workers. Hostname Status Role Availability Engine Version Created Actions {data?.map((node) => { const isManager = node.Spec.Role === "manager"; return ( {node.Description.Hostname} {node.Status.State} {node?.Spec?.Role} {node.Spec.Availability} {node?.Description.Engine.EngineVersion} Created{" "} Actions {!node?.ManagerStatus?.Leader && ( { await deleteNode({ nodeId: node.ID, serverId, }) .then(() => { refetch(); toast.success( "Node deleted successfully", ); }) .catch(() => { toast.error("Error deleting node"); }); }} > e.preventDefault()} > Delete )} ); })}
) : (
To add nodes to your cluster, you need to configure at least one registry. Nodes need a registry to pull images from.
  • Docker Registry: Use custom registries like Docker Hub, DigitalOcean Registry, etc.
)}
); };