1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-25 01:38:08 +00:00

Merge pull request #987 from GNS3/nat_vmware

NAT node can use the VMware NAT
This commit is contained in:
Jeremy Grossmann 2017-05-11 14:03:34 +08:00 committed by GitHub
commit 633cdef0bc
3 changed files with 35 additions and 12 deletions

View File

@ -30,14 +30,21 @@ class Nat(Cloud):
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
if sys.platform.startswith("linux"):
if "virbr0" not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]: if "virbr0" not in [interface["name"] for interface in gns3server.utils.interfaces.interfaces()]:
raise NodeError("virbr0 is missing. You need to install libvirt") 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 = [ ports = [
{ {
"name": "nat0", "name": "nat0",
"type": "ethernet", "type": "ethernet",
"interface": "virbr0", "interface": interface,
"port_number": 0 "port_number": 0
} }
] ]
@ -54,7 +61,7 @@ class Nat(Cloud):
@classmethod @classmethod
def is_supported(self): def is_supported(self):
return sys.platform.startswith("linux") return True
def __json__(self): def __json__(self):
return { return {

View File

@ -17,14 +17,12 @@
import uuid import uuid
import pytest import pytest
from unittest.mock import MagicMock from unittest.mock import MagicMock, patch
from tests.utils import asyncio_patch
from gns3server.compute.builtin.nodes.nat import Nat 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()) nat = Nat("nat1", str(uuid.uuid4()), project, MagicMock())
assert nat.__json__() == { assert nat.__json__() == {
"name": "nat1", "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"
}
]
}

View File

@ -29,12 +29,9 @@ from gns3server.version import __version__
@pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
def test_get(http_compute, windows_platform): def test_get(http_compute, windows_platform):
"""
Nat, is supported outside linux
"""
response = http_compute.get('/capabilities', example=True) response = http_compute.get('/capabilities', example=True)
assert response.status == 200 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") @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")