gns3-server 3.0.0b3__py3-none-any.whl → 3.0.0rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gns3-server might be problematic. Click here for more details.
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/METADATA +32 -31
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/RECORD +93 -89
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/WHEEL +1 -1
- gns3server/api/routes/compute/cloud_nodes.py +1 -1
- gns3server/api/routes/compute/docker_nodes.py +3 -0
- gns3server/api/routes/compute/nat_nodes.py +1 -1
- gns3server/api/routes/compute/vmware_nodes.py +1 -1
- gns3server/api/routes/compute/vpcs_nodes.py +10 -4
- gns3server/api/routes/controller/projects.py +13 -1
- gns3server/api/routes/controller/users.py +2 -2
- gns3server/appliances/almalinux.gns3a +6 -6
- gns3server/appliances/aruba-arubaoscx.gns3a +39 -0
- gns3server/appliances/cisco-csr1000v.gns3a +28 -2
- gns3server/appliances/cisco-iou-l2.gns3a +2 -2
- gns3server/appliances/cisco-iou-l3.gns3a +2 -2
- gns3server/appliances/cisco-vWLC.gns3a +29 -1
- gns3server/appliances/debian.gns3a +28 -0
- gns3server/appliances/fortiadc.gns3a +46 -4
- gns3server/appliances/fortianalyzer.gns3a +42 -0
- gns3server/appliances/fortiauthenticator.gns3a +58 -2
- gns3server/appliances/fortigate.gns3a +42 -0
- gns3server/appliances/fortimanager.gns3a +42 -0
- gns3server/appliances/fortiweb.gns3a +56 -0
- gns3server/appliances/hbcd-pe.gns3a +62 -0
- gns3server/appliances/juniper-junos-space.gns3a +3 -2
- gns3server/appliances/juniper-vmx-legacy.gns3a +1 -1
- gns3server/appliances/juniper-vmx-vcp.gns3a +1 -1
- gns3server/appliances/juniper-vmx-vfp.gns3a +2 -1
- gns3server/appliances/juniper-vqfx-pfe.gns3a +1 -1
- gns3server/appliances/juniper-vqfx-re.gns3a +2 -1
- gns3server/appliances/juniper-vrr.gns3a +1 -1
- gns3server/appliances/juniper-vsrx.gns3a +2 -1
- gns3server/appliances/mikrotik-chr.gns3a +30 -99
- gns3server/appliances/nixos.gns3a +52 -0
- gns3server/appliances/opnsense.gns3a +13 -0
- gns3server/appliances/pan-vm-fw.gns3a +26 -0
- gns3server/appliances/reactos.gns3a +10 -10
- gns3server/appliances/security-onion.gns3a +27 -3
- gns3server/appliances/truenas.gns3a +104 -0
- gns3server/appliances/ubuntu-cloud.gns3a +35 -20
- gns3server/appliances/ubuntu-docker.gns3a +1 -1
- gns3server/appliances/ubuntu-gui.gns3a +13 -0
- gns3server/appliances/viptela-edge-genericx86-64.gns3a +28 -2
- gns3server/appliances/viptela-smart-genericx86-64.gns3a +27 -1
- gns3server/appliances/viptela-vmanage-genericx86-64.gns3a +32 -4
- gns3server/appliances/vyos.gns3a +95 -98
- gns3server/compute/base_node.py +1 -0
- gns3server/compute/docker/__init__.py +8 -2
- gns3server/compute/docker/docker_vm.py +56 -2
- gns3server/compute/docker/resources/init.sh +5 -2
- gns3server/compute/dynamips/__init__.py +0 -4
- gns3server/compute/dynamips/nodes/router.py +20 -0
- gns3server/compute/notification_manager.py +2 -2
- gns3server/compute/qemu/qemu_vm.py +26 -15
- gns3server/config_samples/gns3_server.conf +13 -3
- gns3server/configs/iou_l2_base_startup-config.txt +1 -1
- gns3server/configs/iou_l3_base_startup-config.txt +1 -1
- gns3server/controller/__init__.py +27 -13
- gns3server/controller/appliance_manager.py +9 -6
- gns3server/controller/export_project.py +27 -23
- gns3server/controller/import_project.py +24 -3
- gns3server/controller/node.py +8 -2
- gns3server/controller/notification.py +4 -4
- gns3server/controller/project.py +96 -8
- gns3server/controller/snapshot.py +3 -8
- gns3server/controller/symbols.py +1 -1
- gns3server/controller/topology.py +31 -2
- gns3server/crash_report.py +1 -1
- gns3server/db/models/templates.py +1 -0
- gns3server/db/tasks.py +1 -1
- gns3server/db_migrations/versions/9a5292aa4389_add_mac_address_field_in_docker_.py +27 -0
- gns3server/schemas/compute/docker_nodes.py +1 -0
- gns3server/schemas/compute/ethernet_switch_nodes.py +1 -1
- gns3server/schemas/config.py +3 -0
- gns3server/schemas/controller/templates/cloud_templates.py +2 -2
- gns3server/schemas/controller/templates/docker_templates.py +4 -3
- gns3server/schemas/controller/templates/dynamips_templates.py +5 -5
- gns3server/schemas/controller/templates/ethernet_hub_templates.py +1 -1
- gns3server/schemas/controller/templates/ethernet_switch_templates.py +2 -2
- gns3server/schemas/controller/templates/iou_templates.py +2 -2
- gns3server/schemas/controller/templates/qemu_templates.py +12 -12
- gns3server/schemas/controller/templates/virtualbox_templates.py +4 -5
- gns3server/schemas/controller/templates/vmware_templates.py +4 -4
- gns3server/schemas/controller/templates/vpcs_templates.py +2 -2
- gns3server/static/web-ui/index.html +3 -3
- gns3server/static/web-ui/{main.f3840f9b1c0240e6.js → main.ed82697b58d803e7.js} +1 -1
- gns3server/utils/__init__.py +32 -0
- gns3server/utils/asyncio/aiozipstream.py +15 -11
- gns3server/utils/hostname.py +53 -0
- gns3server/version.py +1 -1
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/LICENSE +0 -0
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/entry_points.txt +0 -0
- {gns3_server-3.0.0b3.dist-info → gns3_server-3.0.0rc2.dist-info}/top_level.txt +0 -0
gns3server/crash_report.py
CHANGED
|
@@ -58,7 +58,7 @@ class CrashReport:
|
|
|
58
58
|
Report crash to a third party service
|
|
59
59
|
"""
|
|
60
60
|
|
|
61
|
-
DSN = "https://
|
|
61
|
+
DSN = "https://29d15f2b7fde7fbd860843b7ee24dc7f@o19455.ingest.us.sentry.io/38482"
|
|
62
62
|
_instance = None
|
|
63
63
|
|
|
64
64
|
def __init__(self):
|
|
@@ -66,6 +66,7 @@ class DockerTemplate(Template):
|
|
|
66
66
|
template_id = Column(GUID, ForeignKey("templates.template_id", ondelete="CASCADE"), primary_key=True)
|
|
67
67
|
image = Column(String)
|
|
68
68
|
adapters = Column(Integer)
|
|
69
|
+
mac_address = Column(String)
|
|
69
70
|
start_command = Column(String)
|
|
70
71
|
environment = Column(String)
|
|
71
72
|
console_type = Column(String)
|
gns3server/db/tasks.py
CHANGED
|
@@ -77,7 +77,7 @@ async def connect_to_db(app: FastAPI) -> None:
|
|
|
77
77
|
|
|
78
78
|
db_path = os.path.join(Config.instance().config_dir, "gns3_controller.db")
|
|
79
79
|
db_url = os.environ.get("GNS3_DATABASE_URI", f"sqlite+aiosqlite:///{db_path}")
|
|
80
|
-
engine = create_async_engine(db_url, connect_args={"check_same_thread": False}, future=True)
|
|
80
|
+
engine = create_async_engine(db_url, connect_args={"check_same_thread": False, "timeout": 20}, future=True)
|
|
81
81
|
alembic_cfg = config.Config()
|
|
82
82
|
alembic_cfg.set_main_option("script_location", "gns3server:db_migrations")
|
|
83
83
|
#alembic_cfg.set_main_option('sqlalchemy.url', db_url)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""add mac_address field in Docker templates table
|
|
2
|
+
|
|
3
|
+
Revision ID: 9a5292aa4389
|
|
4
|
+
Revises: 7ceeddd9c9a8
|
|
5
|
+
Create Date: 2024-09-18 17:52:53.429522
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = '9a5292aa4389'
|
|
14
|
+
down_revision = '7ceeddd9c9a8'
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
|
|
21
|
+
op.add_column('docker_templates', sa.Column('mac_address', sa.String()))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def downgrade() -> None:
|
|
25
|
+
|
|
26
|
+
op.drop_column('docker_templates', 'mac_address')
|
|
27
|
+
|
|
@@ -39,6 +39,7 @@ class DockerBase(BaseModel):
|
|
|
39
39
|
usage: Optional[str] = Field(None, description="How to use the Docker container")
|
|
40
40
|
start_command: Optional[str] = Field(None, description="Docker CMD entry")
|
|
41
41
|
adapters: Optional[int] = Field(None, ge=0, le=99, description="Number of adapters")
|
|
42
|
+
mac_address: Optional[str] = Field(None, description="Base MAC address", pattern="^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$")
|
|
42
43
|
environment: Optional[str] = Field(None, description="Docker environment variables")
|
|
43
44
|
extra_hosts: Optional[str] = Field(None, description="Docker extra hosts (added to /etc/hosts)")
|
|
44
45
|
extra_volumes: Optional[List[str]] = Field(None, description="Additional directories to make persistent")
|
|
@@ -43,7 +43,7 @@ class EthernetSwitchPort(BaseModel):
|
|
|
43
43
|
port_number: int
|
|
44
44
|
type: EthernetSwitchPortType = Field(..., description="Port type")
|
|
45
45
|
vlan: int = Field(..., ge=1, le=4094, description="VLAN number")
|
|
46
|
-
ethertype: Optional[EthernetSwitchEtherType] = Field(
|
|
46
|
+
ethertype: Optional[EthernetSwitchEtherType] = Field(EthernetSwitchEtherType.ethertype_8021q, description="QinQ Ethertype")
|
|
47
47
|
|
|
48
48
|
@model_validator(mode="after")
|
|
49
49
|
def check_ethertype(self) -> "EthernetSwitchPort":
|
gns3server/schemas/config.py
CHANGED
|
@@ -69,6 +69,7 @@ class QemuSettings(BaseModel):
|
|
|
69
69
|
monitor_host: str = "127.0.0.1"
|
|
70
70
|
enable_hardware_acceleration: bool = True
|
|
71
71
|
require_hardware_acceleration: bool = False
|
|
72
|
+
allow_unsafe_options: bool = False
|
|
72
73
|
model_config = ConfigDict(validate_assignment=True, str_strip_whitespace=True)
|
|
73
74
|
|
|
74
75
|
|
|
@@ -126,6 +127,7 @@ class ServerSettings(BaseModel):
|
|
|
126
127
|
appliances_path: str = "~/GNS3/appliances"
|
|
127
128
|
symbols_path: str = "~/GNS3/symbols"
|
|
128
129
|
configs_path: str = "~/GNS3/configs"
|
|
130
|
+
resources_path: str = None
|
|
129
131
|
default_symbol_theme: BuiltinSymbolTheme = BuiltinSymbolTheme.affinity_square_blue
|
|
130
132
|
allow_raw_images: bool = True
|
|
131
133
|
auto_discover_images: bool = True
|
|
@@ -144,6 +146,7 @@ class ServerSettings(BaseModel):
|
|
|
144
146
|
default_nat_interface: str = None
|
|
145
147
|
allow_remote_console: bool = False
|
|
146
148
|
enable_builtin_templates: bool = True
|
|
149
|
+
install_builtin_appliances: bool = True
|
|
147
150
|
model_config = ConfigDict(validate_assignment=True, str_strip_whitespace=True, use_enum_values=True)
|
|
148
151
|
|
|
149
152
|
@field_validator("additional_images_paths", mode="before")
|
|
@@ -29,13 +29,13 @@ from typing import Optional, Union, List
|
|
|
29
29
|
|
|
30
30
|
class CloudTemplate(TemplateBase):
|
|
31
31
|
|
|
32
|
-
category: Optional[Category] =
|
|
32
|
+
category: Optional[Category] = Category.guest
|
|
33
33
|
default_name_format: Optional[str] = "Cloud{0}"
|
|
34
34
|
symbol: Optional[str] = "cloud"
|
|
35
35
|
ports_mapping: List[Union[EthernetPort, TAPPort, UDPPort]] = Field(default_factory=list)
|
|
36
36
|
remote_console_host: Optional[str] = Field("127.0.0.1", description="Remote console host or IP")
|
|
37
37
|
remote_console_port: Optional[int] = Field(23, gt=0, le=65535, description="Remote console TCP port")
|
|
38
|
-
remote_console_type: Optional[CloudConsoleType] = Field(
|
|
38
|
+
remote_console_type: Optional[CloudConsoleType] = Field(CloudConsoleType.none, description="Remote console type")
|
|
39
39
|
remote_console_http_path: Optional[str] = Field("/", description="Path of the remote web interface")
|
|
40
40
|
|
|
41
41
|
|
|
@@ -24,15 +24,16 @@ from typing import Optional, List
|
|
|
24
24
|
|
|
25
25
|
class DockerTemplate(TemplateBase):
|
|
26
26
|
|
|
27
|
-
category: Optional[Category] =
|
|
27
|
+
category: Optional[Category] = Category.guest
|
|
28
28
|
default_name_format: Optional[str] = "{name}-{0}"
|
|
29
29
|
symbol: Optional[str] = "docker_guest"
|
|
30
30
|
image: str = Field(..., description="Docker image name")
|
|
31
31
|
adapters: Optional[int] = Field(1, ge=0, le=100, description="Number of adapters")
|
|
32
|
+
mac_address: Optional[str] = Field("", description="Base MAC address", pattern="^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$|^$")
|
|
32
33
|
start_command: Optional[str] = Field("", description="Docker CMD entry")
|
|
33
34
|
environment: Optional[str] = Field("", description="Docker environment variables")
|
|
34
|
-
console_type: Optional[ConsoleType] = Field(
|
|
35
|
-
aux_type: Optional[AuxType] = Field(
|
|
35
|
+
console_type: Optional[ConsoleType] = Field(ConsoleType.telnet, description="Console type")
|
|
36
|
+
aux_type: Optional[AuxType] = Field(AuxType.none, description="Auxiliary console type")
|
|
36
37
|
console_auto_start: Optional[bool] = Field(
|
|
37
38
|
False, description="Automatically start the console when the node has started"
|
|
38
39
|
)
|
|
@@ -32,7 +32,7 @@ from enum import Enum
|
|
|
32
32
|
|
|
33
33
|
class DynamipsTemplate(TemplateBase):
|
|
34
34
|
|
|
35
|
-
category: Optional[Category] =
|
|
35
|
+
category: Optional[Category] = Category.router
|
|
36
36
|
default_name_format: Optional[str] = "R{0}"
|
|
37
37
|
symbol: Optional[str] = "router"
|
|
38
38
|
platform: DynamipsPlatform = Field(..., description="Cisco router platform")
|
|
@@ -51,11 +51,11 @@ class DynamipsTemplate(TemplateBase):
|
|
|
51
51
|
disk0: Optional[int] = Field(0, description="Disk0 size in MB")
|
|
52
52
|
disk1: Optional[int] = Field(0, description="Disk1 size in MB")
|
|
53
53
|
auto_delete_disks: Optional[bool] = Field(False, description="Automatically delete nvram and disk files")
|
|
54
|
-
console_type: Optional[DynamipsConsoleType] = Field(
|
|
54
|
+
console_type: Optional[DynamipsConsoleType] = Field(DynamipsConsoleType.telnet, description="Console type")
|
|
55
55
|
console_auto_start: Optional[bool] = Field(
|
|
56
56
|
False, description="Automatically start the console when the node has started"
|
|
57
57
|
)
|
|
58
|
-
aux_type: Optional[DynamipsConsoleType] = Field(
|
|
58
|
+
aux_type: Optional[DynamipsConsoleType] = Field(DynamipsConsoleType.none, description="Auxiliary console type")
|
|
59
59
|
slot0: Optional[DynamipsAdapters] = Field(None, description="Network module slot 0")
|
|
60
60
|
slot1: Optional[DynamipsAdapters] = Field(None, description="Network module slot 1")
|
|
61
61
|
slot2: Optional[DynamipsAdapters] = Field(None, description="Network module slot 2")
|
|
@@ -72,8 +72,8 @@ class C7200DynamipsTemplate(DynamipsTemplate):
|
|
|
72
72
|
|
|
73
73
|
ram: Optional[int] = Field(512, description="Amount of RAM in MB")
|
|
74
74
|
nvram: Optional[int] = Field(512, description="Amount of NVRAM in KB")
|
|
75
|
-
npe: Optional[DynamipsNPE] = Field(
|
|
76
|
-
midplane: Optional[DynamipsMidplane] = Field(
|
|
75
|
+
npe: Optional[DynamipsNPE] = Field(DynamipsNPE.npe_400, description="NPE model")
|
|
76
|
+
midplane: Optional[DynamipsMidplane] = Field(DynamipsMidplane.vxr, description="Midplane model")
|
|
77
77
|
sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
|
|
78
78
|
|
|
79
79
|
|
|
@@ -35,7 +35,7 @@ DEFAULT_PORTS = [
|
|
|
35
35
|
|
|
36
36
|
class EthernetHubTemplate(TemplateBase):
|
|
37
37
|
|
|
38
|
-
category: Optional[Category] =
|
|
38
|
+
category: Optional[Category] = Category.switch
|
|
39
39
|
default_name_format: Optional[str] = "Hub{0}"
|
|
40
40
|
symbol: Optional[str] = "hub"
|
|
41
41
|
ports_mapping: Optional[List[EthernetHubPort]] = Field(DEFAULT_PORTS, description="Ports")
|
|
@@ -45,11 +45,11 @@ class ConsoleType(str, Enum):
|
|
|
45
45
|
|
|
46
46
|
class EthernetSwitchTemplate(TemplateBase):
|
|
47
47
|
|
|
48
|
-
category: Optional[Category] =
|
|
48
|
+
category: Optional[Category] = Category.switch
|
|
49
49
|
default_name_format: Optional[str] = "Switch{0}"
|
|
50
50
|
symbol: Optional[str] = "ethernet_switch"
|
|
51
51
|
ports_mapping: Optional[List[EthernetSwitchPort]] = Field(DEFAULT_PORTS, description="Ports")
|
|
52
|
-
console_type: Optional[ConsoleType] = Field(
|
|
52
|
+
console_type: Optional[ConsoleType] = Field(ConsoleType.none, description="Console type")
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class EthernetSwitchTemplateUpdate(EthernetSwitchTemplate):
|
|
@@ -24,7 +24,7 @@ from typing import Optional
|
|
|
24
24
|
|
|
25
25
|
class IOUTemplate(TemplateBase):
|
|
26
26
|
|
|
27
|
-
category: Optional[Category] =
|
|
27
|
+
category: Optional[Category] = Category.router
|
|
28
28
|
default_name_format: Optional[str] = "IOU{0}"
|
|
29
29
|
symbol: Optional[str] = "multilayer_switch"
|
|
30
30
|
path: str = Field(..., description="Path of IOU executable")
|
|
@@ -36,7 +36,7 @@ class IOUTemplate(TemplateBase):
|
|
|
36
36
|
startup_config: Optional[str] = Field("iou_l3_base_startup-config.txt", description="Startup-config of IOU")
|
|
37
37
|
private_config: Optional[str] = Field("", description="Private-config of IOU")
|
|
38
38
|
l1_keepalives: Optional[bool] = Field(False, description="Always keep up Ethernet interface (does not always work)")
|
|
39
|
-
console_type: Optional[ConsoleType] = Field(
|
|
39
|
+
console_type: Optional[ConsoleType] = Field(ConsoleType.telnet, description="Console type")
|
|
40
40
|
console_auto_start: Optional[bool] = Field(
|
|
41
41
|
False, description="Automatically start the console when the node has started"
|
|
42
42
|
)
|
|
@@ -33,17 +33,17 @@ from typing import Optional, List
|
|
|
33
33
|
|
|
34
34
|
class QemuTemplate(TemplateBase):
|
|
35
35
|
|
|
36
|
-
category: Optional[Category] =
|
|
36
|
+
category: Optional[Category] = Category.guest
|
|
37
37
|
default_name_format: Optional[str] = "{name}-{0}"
|
|
38
38
|
symbol: Optional[str] = "qemu_guest"
|
|
39
39
|
qemu_path: Optional[str] = Field("", description="Qemu executable path")
|
|
40
|
-
platform: Optional[QemuPlatform] = Field(
|
|
40
|
+
platform: Optional[QemuPlatform] = Field(QemuPlatform.x86_64, description="Platform to emulate")
|
|
41
41
|
linked_clone: Optional[bool] = Field(True, description="Whether the VM is a linked clone or not")
|
|
42
42
|
ram: Optional[int] = Field(256, description="Amount of RAM in MB")
|
|
43
43
|
cpus: Optional[int] = Field(1, ge=1, le=255, description="Number of vCPUs")
|
|
44
44
|
maxcpus: Optional[int] = Field(1, ge=1, le=255, description="Maximum number of hotpluggable vCPUs")
|
|
45
45
|
adapters: Optional[int] = Field(1, ge=0, le=275, description="Number of adapters")
|
|
46
|
-
adapter_type: Optional[QemuAdapterType] = Field(
|
|
46
|
+
adapter_type: Optional[QemuAdapterType] = Field(QemuAdapterType.e1000, description="QEMU adapter type")
|
|
47
47
|
mac_address: Optional[str] = Field(
|
|
48
48
|
"", description="QEMU MAC address", pattern="^([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})$|^$"
|
|
49
49
|
)
|
|
@@ -55,20 +55,20 @@ class QemuTemplate(TemplateBase):
|
|
|
55
55
|
0,
|
|
56
56
|
description="Optional port segment size. A port segment is a block of port. For example Ethernet0/0 Ethernet0/1 is the module 0 with a port segment size of 2",
|
|
57
57
|
)
|
|
58
|
-
console_type: Optional[QemuConsoleType] = Field(
|
|
58
|
+
console_type: Optional[QemuConsoleType] = Field(QemuConsoleType.telnet, description="Console type")
|
|
59
59
|
console_auto_start: Optional[bool] = Field(
|
|
60
60
|
False, description="Automatically start the console when the node has started"
|
|
61
61
|
)
|
|
62
|
-
aux_type: Optional[QemuConsoleType] = Field(
|
|
63
|
-
boot_priority: Optional[QemuBootPriority] = Field(
|
|
62
|
+
aux_type: Optional[QemuConsoleType] = Field(QemuConsoleType.none, description="Auxiliary console type")
|
|
63
|
+
boot_priority: Optional[QemuBootPriority] = Field(QemuBootPriority.c, description="QEMU boot priority")
|
|
64
64
|
hda_disk_image: Optional[str] = Field("", description="QEMU hda disk image path")
|
|
65
|
-
hda_disk_interface: Optional[QemuDiskInterfaceType] = Field(
|
|
65
|
+
hda_disk_interface: Optional[QemuDiskInterfaceType] = Field(QemuDiskInterfaceType.none, description="QEMU hda interface")
|
|
66
66
|
hdb_disk_image: Optional[str] = Field("", description="QEMU hdb disk image path")
|
|
67
|
-
hdb_disk_interface: Optional[QemuDiskInterfaceType] = Field(
|
|
67
|
+
hdb_disk_interface: Optional[QemuDiskInterfaceType] = Field(QemuDiskInterfaceType.none, description="QEMU hdb interface")
|
|
68
68
|
hdc_disk_image: Optional[str] = Field("", description="QEMU hdc disk image path")
|
|
69
|
-
hdc_disk_interface: Optional[QemuDiskInterfaceType] = Field(
|
|
69
|
+
hdc_disk_interface: Optional[QemuDiskInterfaceType] = Field(QemuDiskInterfaceType.none, description="QEMU hdc interface")
|
|
70
70
|
hdd_disk_image: Optional[str] = Field("", description="QEMU hdd disk image path")
|
|
71
|
-
hdd_disk_interface: Optional[QemuDiskInterfaceType] = Field(
|
|
71
|
+
hdd_disk_interface: Optional[QemuDiskInterfaceType] = Field(QemuDiskInterfaceType.none, description="QEMU hdd interface")
|
|
72
72
|
cdrom_image: Optional[str] = Field("", description="QEMU cdrom image path")
|
|
73
73
|
initrd: Optional[str] = Field("", description="QEMU initrd path")
|
|
74
74
|
kernel_image: Optional[str] = Field("", description="QEMU kernel image path")
|
|
@@ -82,9 +82,9 @@ class QemuTemplate(TemplateBase):
|
|
|
82
82
|
)
|
|
83
83
|
tpm: Optional[bool] = Field(False, description="Enable Trusted Platform Module (TPM)")
|
|
84
84
|
uefi: Optional[bool] = Field(False, description="Enable UEFI boot mode")
|
|
85
|
-
on_close: Optional[QemuOnCloseAction] = Field(
|
|
85
|
+
on_close: Optional[QemuOnCloseAction] = Field(QemuOnCloseAction.power_off, description="Action to execute on the VM is closed")
|
|
86
86
|
cpu_throttling: Optional[int] = Field(0, ge=0, le=800, description="Percentage of CPU allowed for QEMU")
|
|
87
|
-
process_priority: Optional[QemuProcessPriority] = Field(
|
|
87
|
+
process_priority: Optional[QemuProcessPriority] = Field(QemuProcessPriority.normal, description="Process priority for QEMU")
|
|
88
88
|
options: Optional[str] = Field("", description="Additional QEMU options")
|
|
89
89
|
custom_adapters: Optional[List[CustomAdapter]] = Field(default_factory=list, description="Custom adapters")
|
|
90
90
|
|
|
@@ -28,7 +28,7 @@ from typing import Optional, List
|
|
|
28
28
|
|
|
29
29
|
class VirtualBoxTemplate(TemplateBase):
|
|
30
30
|
|
|
31
|
-
category: Optional[Category] =
|
|
31
|
+
category: Optional[Category] = Category.guest
|
|
32
32
|
default_name_format: Optional[str] = "{name}-{0}"
|
|
33
33
|
symbol: Optional[str] = "vbox_guest"
|
|
34
34
|
vmname: str = Field(..., description="VirtualBox VM name (in VirtualBox itself)")
|
|
@@ -38,8 +38,7 @@ class VirtualBoxTemplate(TemplateBase):
|
|
|
38
38
|
1, ge=0, le=36, description="Number of adapters"
|
|
39
39
|
) # 36 is the maximum given by the ICH9 chipset in VirtualBox
|
|
40
40
|
use_any_adapter: Optional[bool] = Field(False, description="Allow GNS3 to use any VirtualBox adapter")
|
|
41
|
-
adapter_type: Optional[VirtualBoxAdapterType] = Field(
|
|
42
|
-
"Intel PRO/1000 MT Desktop (82540EM)", description="VirtualBox adapter type"
|
|
41
|
+
adapter_type: Optional[VirtualBoxAdapterType] = Field(VirtualBoxAdapterType.intel_pro_1000_mt_desktop, description="VirtualBox adapter type"
|
|
43
42
|
)
|
|
44
43
|
first_port_name: Optional[str] = Field("", description="Optional name of the first networking port example: eth0")
|
|
45
44
|
port_name_format: Optional[str] = Field(
|
|
@@ -51,9 +50,9 @@ class VirtualBoxTemplate(TemplateBase):
|
|
|
51
50
|
)
|
|
52
51
|
headless: Optional[bool] = Field(False, description="Headless mode")
|
|
53
52
|
on_close: Optional[VirtualBoxOnCloseAction] = Field(
|
|
54
|
-
|
|
53
|
+
VirtualBoxOnCloseAction.power_off, description="Action to execute on the VM is closed"
|
|
55
54
|
)
|
|
56
|
-
console_type: Optional[VirtualBoxConsoleType] = Field(
|
|
55
|
+
console_type: Optional[VirtualBoxConsoleType] = Field(VirtualBoxConsoleType.none, description="Console type")
|
|
57
56
|
console_auto_start: Optional[bool] = Field(
|
|
58
57
|
False, description="Automatically start the console when the node has started"
|
|
59
58
|
)
|
|
@@ -29,7 +29,7 @@ from typing import Optional, List
|
|
|
29
29
|
|
|
30
30
|
class VMwareTemplate(TemplateBase):
|
|
31
31
|
|
|
32
|
-
category: Optional[Category] =
|
|
32
|
+
category: Optional[Category] = Category.guest
|
|
33
33
|
default_name_format: Optional[str] = "{name}-{0}"
|
|
34
34
|
symbol: Optional[str] = "vmware_guest"
|
|
35
35
|
vmx_path: str = Field(..., description="Path to the vmx file")
|
|
@@ -45,11 +45,11 @@ class VMwareTemplate(TemplateBase):
|
|
|
45
45
|
adapters: Optional[int] = Field(
|
|
46
46
|
1, ge=0, le=10, description="Number of adapters"
|
|
47
47
|
) # 10 is the maximum adapters support by VMware VMs
|
|
48
|
-
adapter_type: Optional[VMwareAdapterType] = Field(
|
|
48
|
+
adapter_type: Optional[VMwareAdapterType] = Field(VMwareAdapterType.e1000, description="VMware adapter type")
|
|
49
49
|
use_any_adapter: Optional[bool] = Field(False, description="Allow GNS3 to use any VMware adapter")
|
|
50
50
|
headless: Optional[bool] = Field(False, description="Headless mode")
|
|
51
|
-
on_close: Optional[VMwareOnCloseAction] = Field(
|
|
52
|
-
console_type: Optional[VMwareConsoleType] = Field(
|
|
51
|
+
on_close: Optional[VMwareOnCloseAction] = Field(VMwareOnCloseAction.power_off, description="Action to execute on the VM is closed")
|
|
52
|
+
console_type: Optional[VMwareConsoleType] = Field(VMwareConsoleType.none, description="Console type")
|
|
53
53
|
console_auto_start: Optional[bool] = Field(
|
|
54
54
|
False, description="Automatically start the console when the node has started"
|
|
55
55
|
)
|
|
@@ -24,11 +24,11 @@ from typing import Optional
|
|
|
24
24
|
|
|
25
25
|
class VPCSTemplate(TemplateBase):
|
|
26
26
|
|
|
27
|
-
category: Optional[Category] =
|
|
27
|
+
category: Optional[Category] = Category.guest
|
|
28
28
|
default_name_format: Optional[str] = "PC{0}"
|
|
29
29
|
symbol: Optional[str] = "vpcs_guest"
|
|
30
30
|
base_script_file: Optional[str] = Field("vpcs_base_config.txt", description="Script file")
|
|
31
|
-
console_type: Optional[ConsoleType] = Field(
|
|
31
|
+
console_type: Optional[ConsoleType] = Field(ConsoleType.telnet, description="Console type")
|
|
32
32
|
console_auto_start: Optional[bool] = Field(
|
|
33
33
|
False, description="Automatically start the console when the node has started"
|
|
34
34
|
)
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<body class="mat-app-background" oncontextmenu="return false;">
|
|
37
37
|
<app-root></app-root>
|
|
38
38
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
39
|
-
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-
|
|
39
|
+
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-0BT7QQV1W1"></script>
|
|
40
40
|
<script>
|
|
41
41
|
window.dataLayer = window.dataLayer || [];
|
|
42
42
|
function gtag() {
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
}
|
|
45
45
|
gtag('js', new Date());
|
|
46
46
|
|
|
47
|
-
gtag('config', 'G-
|
|
47
|
+
gtag('config', 'G-0BT7QQV1W1');
|
|
48
48
|
</script>
|
|
49
|
-
<script src="runtime.24fa95b7061d7056.js" type="module"></script><script src="polyfills.319c79dd175e50d0.js" type="module"></script><script src="main.
|
|
49
|
+
<script src="runtime.24fa95b7061d7056.js" type="module"></script><script src="polyfills.319c79dd175e50d0.js" type="module"></script><script src="main.ed82697b58d803e7.js" type="module"></script>
|
|
50
50
|
|
|
51
51
|
</body></html>
|