mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-25 16:28:11 +00:00
NAT node can use the VMware NAT
On Windows and Mac OS this allow the NAT node to use the VMware nat (it's always vmnet8). On Linux we still use the libvirt NAT
This commit is contained in:
parent
273a711459
commit
b0f45035a9
@ -30,14 +30,21 @@ class Nat(Cloud):
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
if sys.platform.startswith("linux"):
|
||||
if "virbr0" not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]:
|
||||
raise NodeError("virbr0 is missing. You need to install libvirt")
|
||||
interface = "virbr0"
|
||||
else:
|
||||
if "vmnet8" not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]:
|
||||
raise NodeError("vmnet8 is missing. You need to install VMware or use the NAT node on GNS3 VM")
|
||||
interface = "vmnet8"
|
||||
|
||||
ports = [
|
||||
{
|
||||
"name": "nat0",
|
||||
"type": "ethernet",
|
||||
"interface": "virbr0",
|
||||
"interface": interface,
|
||||
"port_number": 0
|
||||
}
|
||||
]
|
||||
@ -54,7 +61,7 @@ class Nat(Cloud):
|
||||
|
||||
@classmethod
|
||||
def is_supported(self):
|
||||
return sys.platform.startswith("linux")
|
||||
return True
|
||||
|
||||
def __json__(self):
|
||||
return {
|
||||
|
@ -17,14 +17,12 @@
|
||||
|
||||
import uuid
|
||||
import pytest
|
||||
from unittest.mock import MagicMock
|
||||
from tests.utils import asyncio_patch
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from gns3server.compute.builtin.nodes.nat import Nat
|
||||
from gns3server.compute.vpcs import VPCS
|
||||
|
||||
|
||||
def test_json(on_gns3vm, project):
|
||||
def test_json_gns3vm(on_gns3vm, project):
|
||||
nat = Nat("nat1", str(uuid.uuid4()), project, MagicMock())
|
||||
assert nat.__json__() == {
|
||||
"name": "nat1",
|
||||
@ -40,3 +38,24 @@ def test_json(on_gns3vm, project):
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
def test_json_darwin(darwin_platform, project):
|
||||
with patch("gns3server.utils.interfaces.interfaces", return_value=[
|
||||
{"name": "eth0", "special": False, "type": "ethernet"},
|
||||
{"name": "vmnet8", "special": True, "type": "ethernet"}]):
|
||||
nat = Nat("nat1", str(uuid.uuid4()), project, MagicMock())
|
||||
assert nat.__json__() == {
|
||||
"name": "nat1",
|
||||
"node_id": nat.id,
|
||||
"project_id": project.id,
|
||||
"status": "started",
|
||||
"ports_mapping": [
|
||||
{
|
||||
"interface": "vmnet8",
|
||||
"name": "nat0",
|
||||
"port_number": 0,
|
||||
"type": "ethernet"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -29,12 +29,9 @@ from gns3server.version import __version__
|
||||
|
||||
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
|
||||
def test_get(http_compute, windows_platform):
|
||||
"""
|
||||
Nat, is supported outside linux
|
||||
"""
|
||||
response = http_compute.get('/capabilities', example=True)
|
||||
assert response.status == 200
|
||||
assert response.json == {'node_types': ['cloud', 'ethernet_hub', 'ethernet_switch', 'vpcs', 'virtualbox', 'dynamips', 'frame_relay_switch', 'atm_switch', 'qemu', 'vmware', 'docker', 'iou'], 'version': __version__, 'platform': sys.platform}
|
||||
assert response.json == {'node_types': ['cloud', 'ethernet_hub', 'ethernet_switch', 'nat', 'vpcs', 'virtualbox', 'dynamips', 'frame_relay_switch', 'atm_switch', 'qemu', 'vmware', 'docker', 'iou'], 'version': __version__, 'platform': sys.platform}
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
|
||||
|
Loading…
Reference in New Issue
Block a user