Skip to content

Added support for s2s tunnel health endpoints #214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions fmcapi/api_objects/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@
from .policy_services import ConnectionProfiles
from .policy_services import DynamicAccessPolicies
from .object_services import TimeRanges
from .health import TunnelStatuses
from .health import TunnelDetails
from .health import TunnelSummaries

logging.debug("In the api_objects __init__.py file.")

Expand Down Expand Up @@ -218,4 +221,7 @@
"ConnectionProfiles",
"DynamicAccessPolicies",
"TimeRanges",
"TunnelStatuses",
"TunnelDetails",
"TunnelSummaries",
]
3 changes: 3 additions & 0 deletions fmcapi/api_objects/health/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import logging
from .terminateravpnsessions import TerminateRAVPNSessions
from .tunnelstatuses import TunnelStatuses
from .tunneldetails import TunnelDetails
from .tunnelsummaries import TunnelSummaries

logging.debug("In the health __init__.py file.")

Expand Down
47 changes: 47 additions & 0 deletions fmcapi/api_objects/health/tunneldetails.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from fmcapi.api_objects.apiclasstemplate import APIClassTemplate
import logging


class TunnelDetails(APIClassTemplate):
"""The TunnelDetails Object in the FMC."""

FIRST_SUPPORTED_FMC_VERSION = "7.3"
REQUIRED_FOR_GET = ["container_uuid"]
VALID_JSON_DATA = [
"type",
"peerA",
"peerB",
]

VALID_FOR_KWARGS = VALID_JSON_DATA + ["container_uuid"]

URL_SUFFIX = f"/health/tunnelstatuses"

def __init__(self, fmc, **kwargs):
"""
Initialize TunnelDetails object.

:param fmc (object): FMC object
:param **kwargs: Any other values passed during instantiation.
:return: requests response
"""
super().__init__(fmc, **kwargs)
logging.debug("In __init__() for TunnelDetails class.")
self.parse_kwargs(**kwargs)
URL_CONTAINER_SUFFIX = f"/{self.container_uuid}/tunneldetails"
self.URL = self.URL + URL_CONTAINER_SUFFIX

def delete(self, **kwargs):
"""DELETE method for API for TunnelDetails not supported."""
logging.info("DELETE method for API for TunnelDetails not supported.")
pass

def put(self):
"""PUT method for API for TunnelDetails not supported."""
logging.info("PUT method for API for TunnelDetails not supported.")
pass

def post(self, **kwargs):
"""POST method for API for TunnelDetails not supported."""
logging.info("POST method for API for TunnelDetails not supported.")
pass
54 changes: 54 additions & 0 deletions fmcapi/api_objects/health/tunnelstatuses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from fmcapi.api_objects.apiclasstemplate import APIClassTemplate
import logging


class TunnelStatuses(APIClassTemplate):
"""The TunnelStatuses Object in the FMC."""

FIRST_SUPPORTED_FMC_VERSION = "7.3"
VALID_JSON_DATA = [
"id",
"type",
"state",
"lastChange",
"vpnTopology",
"peerA",
"peerB",
]
VALID_GET_FILTERS = [
"vpnTopologyId", # vpnTopologyId: uuid of vpn topo
"deviceId", # deviceId: uuid of device
"status", # status: TUNNEL_UP|TUNNEL_DOWN|UNKNOWN
"deployedStatus", # deployedStatus: Deployed|Configured|Both
"sortBy", # sortBy: :|<|> Topology|Device|Status|LastChange (sortBy<Device == sort by device in ascending order)
]
VALID_FOR_KWARGS = VALID_JSON_DATA + VALID_GET_FILTERS + []

URL_SUFFIX = "/health/tunnelstatuses"

def __init__(self, fmc, **kwargs):
"""
Initialize TunnelStatuses object.

:param fmc (object): FMC object
:param **kwargs: Any other values passed during instantiation.
:return: requests response
"""
super().__init__(fmc, **kwargs)
logging.debug("In __init__() for TunnelStatuses class.")
self.parse_kwargs(**kwargs)

def delete(self, **kwargs):
"""DELETE method for API for TunnelStatuses not supported."""
logging.info("DELETE method for API for TunnelStatuses not supported.")
pass

def put(self):
"""PUT method for API for TunnelStatuses not supported."""
logging.info("PUT method for API for TunnelStatuses not supported.")
pass

def post(self, **kwargs):
"""POST method for API for TunnelStatuses not supported."""
logging.info("POST method for API for TunnelStatuses not supported.")
pass
50 changes: 50 additions & 0 deletions fmcapi/api_objects/health/tunnelsummaries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from fmcapi.api_objects.apiclasstemplate import APIClassTemplate
import logging


class TunnelSummaries(APIClassTemplate):
"""The TunnelSummaries Object in the FMC."""

FIRST_SUPPORTED_FMC_VERSION = "7.3"
VALID_JSON_DATA = [
"tunnelCount",
"tunnelUpCount",
"tunnelDownCount",
"tunnelUnknownCount",
"type",
]
VALID_GET_FILTERS = [
"vpnTopologyId", # vpnTopologyId: uuid of vpn topo
"deviceId", # deviceId: uuid of device
"groupBy", # Topology|Device
]
VALID_FOR_KWARGS = VALID_JSON_DATA + VALID_GET_FILTERS + []

URL_SUFFIX = "/health/tunnelsummaries"

def __init__(self, fmc, **kwargs):
"""
Initialize TunnelSummaries object.

:param fmc (object): FMC object
:param **kwargs: Any other values passed during instantiation.
:return: requests response
"""
super().__init__(fmc, **kwargs)
logging.debug("In __init__() for TunnelSummaries class.")
self.parse_kwargs(**kwargs)

def delete(self, **kwargs):
"""DELETE method for API for TunnelSummaries not supported."""
logging.info("DELETE method for API for TunnelSummaries not supported.")
pass

def put(self):
"""PUT method for API for TunnelSummaries not supported."""
logging.info("PUT method for API for TunnelSummaries not supported.")
pass

def post(self, **kwargs):
"""POST method for API for TunnelSummaries not supported."""
logging.info("POST method for API for TunnelSummaries not supported.")
pass
8 changes: 7 additions & 1 deletion unit_tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@
from .dynamicaccesspolicies import test__dynamicaccesspolicies
from .timeranges import test__timeranges
from .fqdns import test__fqdns
from .tunnelstatuses import test__tunnelstatuses
from .tunneldetails import test__tunneldetails
from .tunnelsummaries import test__tunnelsummaries

logging.debug("In the unit-tests __init__.py file.")

Expand Down Expand Up @@ -161,5 +164,8 @@
"test__connectionprofiles",
"test__dynamicaccesspolicies",
"test__timeranges",
"test__fqdns"
"test__fqdns",
"test__tunnelstatuses",
"test__tunneldetails",
"test__tunnelsummaries",
]
12 changes: 12 additions & 0 deletions unit_tests/tunneldetails.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import logging
import fmcapi


def test__tunneldetails(fmc):
logging.info("Test TunnelDetails. Get TunnelDetails.")

obj1 = fmcapi.TunnelDetails(fmc=fmc, container_uuid="40A6B737-FDDC-0ed3-0000-000000000297") # Tunnel uuid not topology uuid
tunnel_details = obj1.get()
del obj1

logging.info("Test TunnelDetails done.\n")
17 changes: 17 additions & 0 deletions unit_tests/tunnelstatuses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import logging
import fmcapi


def test__tunnelstatuses(fmc):
logging.info("Test TunnelStatuses. Get TunnelStatuses.")

obj1 = fmcapi.TunnelStatuses(fmc=fmc)
all_tunnel_statuses = obj1.get()
del(obj1)

obj2 = fmcapi.TunnelStatuses(fmc=fmc)
obj2.id = "40A6B737-FDDC-0ed3-0000-000000000297"
id_tunnel_status = obj2.get()
del(obj2)

logging.info("Test TunnelStatuses done.\n")
12 changes: 12 additions & 0 deletions unit_tests/tunnelsummaries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import logging
import fmcapi


def test__tunnelsummaries(fmc):
logging.info("Test TunnelSummaries. Get TunnelSummaries.")

obj1 = fmcapi.TunnelSummaries(fmc=fmc)
tunnel_summaries = obj1.get()
del obj1

logging.info("Test TunnelSummaries done.\n")