Source code for saltext.vcf.clients.nsx_edge
"""NSX Management API — edge nodes.
Edge NODES are individual transport nodes of type ``EdgeNode`` (as opposed to
:mod:`saltext.vcf.clients.nsx_edge_cluster`, which manages the containing
CLUSTERS). Edge nodes are managed through the shared transport-node API
(``/api/v1/transport-nodes``) filtered on ``node_types=EdgeNode``.
Single-node reads (``get`` / ``get_or_none``) delegate to
:mod:`saltext.vcf.clients.nsx_transport_node` so the 404 handling and endpoint
shape stay in one place. Only the edge-specific behaviour lives here:
``list_`` (adds the ``node_types=EdgeNode`` filter), write endpoints
(``create``/``update``/``delete`` — transport_node has no CRUD), plus
``redeploy`` / ``state`` / ``cluster_allocation_status``.
"""
from saltext.vcf.clients import nsx_transport_node
from saltext.vcf.utils import nsx
PATH = nsx_transport_node.PATH
EDGE_CLUSTERS_PATH = "/api/v1/edge-clusters"
[docs]
def list_(opts, profile=None):
"""List all edge transport nodes (``node_types=EdgeNode``)."""
return nsx.api_get(opts, PATH, params={"node_types": "EdgeNode"}, profile=profile)
[docs]
def get(opts, node_id, profile=None):
"""Get a single edge transport node by id."""
return nsx_transport_node.get(opts, node_id, profile=profile)
[docs]
def get_or_none(opts, node_id, profile=None):
"""Return the edge node, or ``None`` if the API responds 404."""
return nsx_transport_node.get_or_none(opts, node_id, profile=profile)
[docs]
def create(opts, body, profile=None):
"""Create an edge transport node. *body* is the TransportNode spec dict."""
return nsx.api_post(opts, PATH, body=body, profile=profile)
[docs]
def update(opts, node_id, body, profile=None):
"""Update an existing edge transport node."""
return nsx.api_put(opts, f"{PATH}/{node_id}", body=body, profile=profile)
[docs]
def delete(opts, node_id, profile=None):
"""Delete an edge transport node."""
return nsx.api_delete(opts, f"{PATH}/{node_id}", profile=profile)
[docs]
def redeploy(opts, node_id, body=None, profile=None):
"""Redeploy an edge transport node (POST with ``?action=redeploy``)."""
return nsx.api_post(opts, f"{PATH}/{node_id}?action=redeploy", body=body, profile=profile)
[docs]
def state(opts, node_id, profile=None):
"""Return the realization state of the edge transport node."""
return nsx.api_get(opts, f"{PATH}/{node_id}/state", profile=profile)
[docs]
def cluster_allocation_status(opts, cluster_id, profile=None):
"""Return allocation status for edge nodes in *cluster_id*."""
return nsx.api_get(
opts, f"{EDGE_CLUSTERS_PATH}/{cluster_id}/allocation-status", profile=profile
)