Skip to main content

Clusters

This article refers to SDK version v0.5.0. The current SDK version is N/A.

A cluster groups nodes so they can be configured and deployed to together, without repeating the same call once per node. Clusters have their own global secrets and configuration, independent of any single node's. See the Overview for narrative examples, and Clusters for the equivalent Panel actions.

Concept

Cluster. A group of nodes an operator manages and deploys to as one unit in Barbara Panel, giving High Availability instead of a single point of failure.

Learn more

ClustersResource

ClustersResource(client: BarbaraClient)

list

list(*, search: Optional[str] = None, size: Optional[int] = None) -> List[Cluster]

Returns a single page — use paginate() for total or to page through more clusters than the server's default page size.

paginate

paginate(*, search: Optional[str] = None, size: int = 50, from_: int = 0) -> Page

get

get(cluster_id: str) -> Cluster

update

update(cluster_id: str, name: str) -> None

No documented response body — call get() afterwards if you need it.

delete

delete(cluster_id: str) -> None

create

create(
name: str,
primary_node: Dict[str, Any],
*,
secondary_nodes: Optional[List[Dict[str, Any]]] = None,
enable_cluster_volumes: bool = False,
virtual_ip_enabled: bool = False,
id_vrr: Optional[int] = None,
password: Optional[str] = None,
virtual_ip: Optional[str] = None,
sync_time: Optional[float] = None,
multicast: bool = False,
default_addr_pool: Optional[List[str]] = None,
subnet_size: Optional[int] = None,
) -> None

primary_node and each item of secondary_nodes are the raw per-node VRRP/swarm config dicts the API expects (nodeId, labels as base64 JSON, advertiseAddr, ...) — this method doesn't reshape them, since cluster networking config is inherently node-specific. password (VRRP password) is base64-encoded internally.

join_node

join_node(
cluster_id: str,
node_id: str,
*,
labels: Dict[str, str],
restrict_swarm_traffic_to_interface: bool,
advertise_addr: str,
iface: Optional[str] = None,
unicast_ip: Optional[str] = None,
swarm_iface: Optional[str] = None,
priority: Optional[float] = None,
track_interfaces: Optional[List[str]] = None,
) -> None

labels is a plain {key: value} mapping — JSON+base64-encoded internally, matching the convention documented on the endpoint.

leave_node

leave_node(cluster_id: str, node_id: str, *, force: bool = False) -> None

pause_node

pause_node(cluster_id: str, node_id: str) -> None

drain_node

drain_node(cluster_id: str, node_id: str) -> None

set_node_active

set_node_active(cluster_id: str, node_id: str) -> None

update_node_config

update_node_config(cluster_id: str, node_id: str, labels: Dict[str, str]) -> None

labels is a plain {key: value} mapping — JSON+base64-encoded internally.

create_swarm_volume

create_swarm_volume(cluster_id: str, volume_name: str) -> None

volume_name is base64-encoded internally.

delete_all_swarm_volumes

delete_all_swarm_volumes(cluster_id: str) -> None

delete_swarm_volume

delete_swarm_volume(cluster_id: str, volume_id: str) -> None

volume_id is an internal _id, not the volume name — see NodesResource.list_docker_volumes for the equivalent lookup at node scope.

set_global_config

set_global_config(
cluster_id: str,
*,
config: Optional[Dict[str, Any]] = None,
config_id: Optional[str] = None,
) -> None

list_global_secrets

list_global_secrets(cluster_id: str) -> List[Dict[str, Any]]

secrets is a single object per cluster ({"secretList": [...], "lastUpdated": ...}), not an array — the actual per-secret list is secrets.secretList.

get_global_secret

get_global_secret(cluster_id: str, secret_id: str) -> GlobalSecret

export_global_secrets

export_global_secrets(cluster_id: str) -> List[Dict[str, Any]]

create_global_secrets

create_global_secrets(cluster_id: str, secrets: Dict[str, str]) -> None

delete_global_secret

delete_global_secret(cluster_id: str, secret_id: str) -> None

delete_all_global_secrets

delete_all_global_secrets(cluster_id: str) -> None

create_docker_credentials

create_docker_credentials(cluster_id: str, credentials: List[Dict[str, str]]) -> None

delete_all_docker_credentials

delete_all_docker_credentials(cluster_id: str) -> None

delete_all_swarm_configs

delete_all_swarm_configs(cluster_id: str) -> None

delete_swarm_config

delete_swarm_config(cluster_id: str, config_id: str) -> None

delete_all_swarm_secrets

delete_all_swarm_secrets(cluster_id: str) -> None

delete_swarm_secret

delete_swarm_secret(cluster_id: str, secret_id: str) -> None

AsyncClustersResource

AsyncClustersResource(client: AsyncBarbaraClient)

list

list(*, search: Optional[str] = None, size: Optional[int] = None) -> List[Cluster]

paginate

paginate(*, search: Optional[str] = None, size: int = 50, from_: int = 0) -> Page

get

get(cluster_id: str) -> Cluster

update

update(cluster_id: str, name: str) -> None

delete

delete(cluster_id: str) -> None

create

create(
name: str,
primary_node: Dict[str, Any],
*,
secondary_nodes: Optional[List[Dict[str, Any]]] = None,
enable_cluster_volumes: bool = False,
virtual_ip_enabled: bool = False,
id_vrr: Optional[int] = None,
password: Optional[str] = None,
virtual_ip: Optional[str] = None,
sync_time: Optional[float] = None,
multicast: bool = False,
default_addr_pool: Optional[List[str]] = None,
subnet_size: Optional[int] = None,
) -> None

join_node

join_node(
cluster_id: str,
node_id: str,
*,
labels: Dict[str, str],
restrict_swarm_traffic_to_interface: bool,
advertise_addr: str,
iface: Optional[str] = None,
unicast_ip: Optional[str] = None,
swarm_iface: Optional[str] = None,
priority: Optional[float] = None,
track_interfaces: Optional[List[str]] = None,
) -> None

leave_node

leave_node(cluster_id: str, node_id: str, *, force: bool = False) -> None

pause_node

pause_node(cluster_id: str, node_id: str) -> None

drain_node

drain_node(cluster_id: str, node_id: str) -> None

set_node_active

set_node_active(cluster_id: str, node_id: str) -> None

update_node_config

update_node_config(cluster_id: str, node_id: str, labels: Dict[str, str]) -> None

create_swarm_volume

create_swarm_volume(cluster_id: str, volume_name: str) -> None

delete_all_swarm_volumes

delete_all_swarm_volumes(cluster_id: str) -> None

delete_swarm_volume

delete_swarm_volume(cluster_id: str, volume_id: str) -> None

set_global_config

set_global_config(
cluster_id: str,
*,
config: Optional[Dict[str, Any]] = None,
config_id: Optional[str] = None,
) -> None

list_global_secrets

list_global_secrets(cluster_id: str) -> List[Dict[str, Any]]

get_global_secret

get_global_secret(cluster_id: str, secret_id: str) -> GlobalSecret

export_global_secrets

export_global_secrets(cluster_id: str) -> List[Dict[str, Any]]

create_global_secrets

create_global_secrets(cluster_id: str, secrets: Dict[str, str]) -> None

delete_global_secret

delete_global_secret(cluster_id: str, secret_id: str) -> None

delete_all_global_secrets

delete_all_global_secrets(cluster_id: str) -> None

create_docker_credentials

create_docker_credentials(cluster_id: str, credentials: List[Dict[str, str]]) -> None

delete_all_docker_credentials

delete_all_docker_credentials(cluster_id: str) -> None

delete_all_swarm_configs

delete_all_swarm_configs(cluster_id: str) -> None

delete_swarm_config

delete_swarm_config(cluster_id: str, config_id: str) -> None

delete_all_swarm_secrets

delete_all_swarm_secrets(cluster_id: str) -> None

delete_swarm_secret

delete_swarm_secret(cluster_id: str, secret_id: str) -> None

Signatures above are generated from barbara-api-sdk 0.5.0 docstrings. If a new SDK release changes one, this page needs a re-sync — the surrounding prose does not update itself.