Skip to main content

Node network

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

Mounted at client.nodes.network. Covers the Networking card on a node's detail page in Panel — Ethernet/WiFi/Mobile interfaces, VLANs, hostname, VPN, Proxy, Standalone Mode, IPTables, and NTP servers. Every write is checked (best-effort, non-blocking) against the caller's token role before being sent. See the Overview for narrative examples.

Concept

Standalone Mode. A fallback Wi-Fi/Ethernet access point Barbara Panel can enable on a node, so an operator can reach it directly on-site even if its normal network connection is down.

Learn more

NodeNetworkResource

NodeNetworkResource(client: BarbaraClient)

get

get(node_id: str) -> NodeNetwork

Snapshot of every physical interface plus VPN/Proxy state — the data behind the Networking card as a whole.

get_hostname

get_hostname(node_id: str) -> str

No dedicated GET endpoint for the hostname alone — reads it back from the node's own document (same one client.nodes.get() returns) and decodes the base64 the wire uses for this field.

set_hostname

set_hostname(node_id: str, hostname: str) -> None

Academy: "Adjust the hostname".

update_ethernet_interface

update_ethernet_interface(
node_id: str,
iface_name: str,
*,
dhcp: Optional[bool] = None,
ip: Optional[str] = None,
gateway: Optional[str] = None,
auto_dns: Optional[bool] = None,
dns: Optional[str] = None,
ip_aliases: Optional[List[str]] = None,
dns_aliases: Optional[List[str]] = None,
metric: Optional[int] = None,
rollback: bool = True,
) -> None

Academy: "Adjust a physical interface" > "Ethernet". Only the parameters given are changed — anything left as None keeps its current value.

update_wifi_interface

update_wifi_interface(
node_id: str,
iface_name: str,
*,
ssid: str,
psk: str,
hidden: bool,
dhcp: bool,
ip: str,
gateway: str,
dns: str,
auto_dns: bool,
ip_aliases: List[str],
dns_aliases: List[str],
metric: int,
rollback: bool = True,
) -> None

Academy: "Adjust a physical interface" > "WiFi (WLAN)". Unlike Ethernet/Mobile, the API requires the full configuration on every call — there's no partial-update form for this endpoint. psk is base64-encoded internally.

update_mobile_interface

update_mobile_interface(
node_id: str,
iface_name: str,
*,
apn: Optional[str] = None,
user: Optional[str] = None,
password: Optional[str] = None,
metric: Optional[int] = None,
rollback: bool = True,
) -> None

Academy: "Adjust a physical interface" > "Mobile". password is base64-encoded internally. Only the parameters given are changed.

create_vlan_interface

create_vlan_interface(
node_id: str,
parent_iface_name: str,
*,
vlan_id: int,
name: str,
dhcp: bool,
ip: str,
dns: str,
gateway: str,
metric: int,
auto_dns: bool,
ip_aliases: List[str],
dns_aliases: List[str],
mtu: Optional[int] = None,
reorder_headers: Optional[bool] = None,
loose_binding: Optional[bool] = None,
gvrp: Optional[bool] = None,
mvrp: Optional[bool] = None,
rollback: bool = True,
) -> None

Configures a VLAN. parent_iface_name is the physical Ethernet interface (e.g. "eno1") the VLAN sits on — it is both the URL path segment and the request body's eth field. vlan_id is the VLAN ID (1-4094). name is the new VLAN interface's own display name (letters/digits only, no spaces or special characters, per Panel's own field hint) — this is what vlan_interface_exists/delete_vlan_interface later take, not parent_iface_name: the two methods key off different things, despite both being "the path segment" on the wire.

delete_vlan_interface

delete_vlan_interface(node_id: str, name: str, *, rollback: bool = True) -> None

name is the VLAN interface's own name, as given to create_vlan_interface's name argument — not the parent's.

vlan_interface_exists

vlan_interface_exists(node_id: str, name: str) -> bool

name is the VLAN interface's own name (see delete_vlan_interface).

enable_proxy

enable_proxy(
node_id: str,
*,
url: str,
user: Optional[str] = None,
password: Optional[str] = None,
rollback: bool = True,
) -> None

Academy: "Enable the proxy". Only HTTP and Socks5 are supported. Takes effect after the node reboots. user/password are base64-encoded internally; both required by the wire, so empty string is sent when not given.

disable_proxy

disable_proxy(node_id: str, *, rollback: bool = True) -> None

Academy: "Disable the proxy". Takes effect after the node reboots.

enable_vpn

enable_vpn(node_id: str) -> None

Provisions the node's VPN identity. Academy: "Activate VPN" (the one-time activation step) — must be called once before start_vpn/stop_vpn.

start_vpn

start_vpn(node_id: str) -> None

Academy: the VPN ON/OFF toggle in the Advanced section, set to ON.

stop_vpn

stop_vpn(node_id: str) -> None

Academy: the VPN ON/OFF toggle in the Advanced section, set to OFF.

enable_standalone_mode

enable_standalone_mode(
node_id: str,
*,
ip: str,
netmask: str,
metric: int,
iface_name: str = '',
gateway: str = '',
dns: str = '',
ssid: str = '',
psk: str = '',
hidden: bool = False,
enable_network: bool = True,
rollback: bool = True,
) -> None

Academy: "Configure and enable Standalone Mode". iface_name empty means "Any Interface"; ssid/psk empty means no WiFi (Ethernet-only). Unlike the WiFi interface's psk, this one is sent as plain text (see module docstring).

disable_standalone_mode

disable_standalone_mode(node_id: str, *, rollback: bool = True) -> None

Academy: "Disable Standalone Mode".

renew_standalone_credentials

renew_standalone_credentials(node_id: str) -> None

Academy: "Regenerate" button next to the Standalone Mode credentials (Show Credentials popup).

get_iptables

get_iptables(node_id: str) -> Dict[str, Any]

No dedicated GET endpoint — reads it back from the node's own document, decoding iptablesConf from base64. iptables_id is "000000000000000000000000" when no custom rules have ever been set, not None or absent — pass it straight through to update_iptables either way.

update_iptables

update_iptables(
node_id: str,
*,
iptables_conf: str,
iptables_id: Optional[str] = None,
rollback: bool = True,
) -> None

Academy: "Configure IPTables". iptables_conf is the raw iptables rules text, base64-encoded internally. iptables_id is an existing config's id, when replacing one rather than setting it for the first time.

create_ntp_server

create_ntp_server(node_id: str, server: str) -> None

server is the NTP server address/hostname, base64-encoded internally. The response doesn't include the created entry's id — read it back from client.nodes.get(node_id) if you need it (see module docstring).

update_ntp_server

update_ntp_server(node_id: str, ntp_id: str, server: str) -> None

delete_ntp_server

delete_ntp_server(node_id: str, ntp_id: str) -> None

AsyncNodeNetworkResource

AsyncNodeNetworkResource(client: AsyncBarbaraClient)

get

get(node_id: str) -> NodeNetwork

get_hostname

get_hostname(node_id: str) -> str

set_hostname

set_hostname(node_id: str, hostname: str) -> None

update_ethernet_interface

update_ethernet_interface(
node_id: str,
iface_name: str,
*,
dhcp: Optional[bool] = None,
ip: Optional[str] = None,
gateway: Optional[str] = None,
auto_dns: Optional[bool] = None,
dns: Optional[str] = None,
ip_aliases: Optional[List[str]] = None,
dns_aliases: Optional[List[str]] = None,
metric: Optional[int] = None,
rollback: bool = True,
) -> None

update_wifi_interface

update_wifi_interface(
node_id: str,
iface_name: str,
*,
ssid: str,
psk: str,
hidden: bool,
dhcp: bool,
ip: str,
gateway: str,
dns: str,
auto_dns: bool,
ip_aliases: List[str],
dns_aliases: List[str],
metric: int,
rollback: bool = True,
) -> None

update_mobile_interface

update_mobile_interface(
node_id: str,
iface_name: str,
*,
apn: Optional[str] = None,
user: Optional[str] = None,
password: Optional[str] = None,
metric: Optional[int] = None,
rollback: bool = True,
) -> None

create_vlan_interface

create_vlan_interface(
node_id: str,
parent_iface_name: str,
*,
vlan_id: int,
name: str,
dhcp: bool,
ip: str,
dns: str,
gateway: str,
metric: int,
auto_dns: bool,
ip_aliases: List[str],
dns_aliases: List[str],
mtu: Optional[int] = None,
reorder_headers: Optional[bool] = None,
loose_binding: Optional[bool] = None,
gvrp: Optional[bool] = None,
mvrp: Optional[bool] = None,
rollback: bool = True,
) -> None

delete_vlan_interface

delete_vlan_interface(node_id: str, name: str, *, rollback: bool = True) -> None

vlan_interface_exists

vlan_interface_exists(node_id: str, name: str) -> bool

enable_proxy

enable_proxy(
node_id: str,
*,
url: str,
user: Optional[str] = None,
password: Optional[str] = None,
rollback: bool = True,
) -> None

disable_proxy

disable_proxy(node_id: str, *, rollback: bool = True) -> None

enable_vpn

enable_vpn(node_id: str) -> None

start_vpn

start_vpn(node_id: str) -> None

stop_vpn

stop_vpn(node_id: str) -> None

enable_standalone_mode

enable_standalone_mode(
node_id: str,
*,
ip: str,
netmask: str,
metric: int,
iface_name: str = '',
gateway: str = '',
dns: str = '',
ssid: str = '',
psk: str = '',
hidden: bool = False,
enable_network: bool = True,
rollback: bool = True,
) -> None

disable_standalone_mode

disable_standalone_mode(node_id: str, *, rollback: bool = True) -> None

renew_standalone_credentials

renew_standalone_credentials(node_id: str) -> None

get_iptables

get_iptables(node_id: str) -> Dict[str, Any]

update_iptables

update_iptables(
node_id: str,
*,
iptables_conf: str,
iptables_id: Optional[str] = None,
rollback: bool = True,
) -> None

create_ntp_server

create_ntp_server(node_id: str, server: str) -> None

update_ntp_server

update_ntp_server(node_id: str, ntp_id: str, server: str) -> None

delete_ntp_server

delete_ntp_server(node_id: str, ntp_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.