68 Commits

Author SHA1 Message Date
YueGuobin
be62e8c022
feat: keep Docker images on computes consistent with the controller host
Only relying on the image name lets a moved tag (e.g. a newer :latest)
silently serve stale content from a compute that already has an image
under the same name. When creating a Docker node, the controller now
pins the image id (Id from the Docker daemon on the controller host)
into the create payload. A compute holding a different image under the
same tag reports the image as missing, which routes it through the
image sync added by the previous commit and re-aligns the tag.

No new template fields or database changes: the controller host daemon
remains the source of truth and the pin is resolved per creation. When
the image is not available on the controller host the pin is omitted
and behavior is unchanged (the compute pulls from the repository).
2026-09-14 00:55:18 +08:00
YueGuobin
c477812332
feat: sync Docker images from the controller to remote computes
When a Docker node is created on a remote compute whose Docker daemon
does not have the image, the compute now raises ImageMissingError
instead of blindly pulling from the Docker repository. The controller
exports the image from the Docker daemon on its host (docker save
stream) and streams it to the compute which loads it, so locally built
or docker-loaded images work across computes. When the image is not
available on the controller host either, the compute is asked to pull
it from the Docker repository as a fallback.

- add a POST /docker/images/load compute endpoint that streams a
  docker save tar into the Docker daemon
- let Docker.http_query pass raw (non-dict) request bodies through so
  the tar can be streamed to the daemon
- drop the inline pull from DockerVM.create() and the now unused
  DockerVM.pull_image wrapper
2026-09-14 00:36:54 +08:00
YueGuobin
8b3aafbbdc
feat: IOU-style startup-config for IOL Docker nodes
Templates reference a config file with the GNS3_IOL_STARTUP_CONFIG
environment knob; the controller materializes the file content into
startup_config_content on node creation (sent once, knob consumed —
the same pattern as the IOU startup_config mapping). The compute builds
the content into the node's nvram_<app id> at the next start using the
IOU nvram_import utility (IOL and IOU share the nvram container format,
verified against iol-xe 17.18.02): valid config at boot, no setup
dialog, %h hostname substitution, hostname rewrite on rename.

Semantics verified against the runner: IOL boots from NVRAM whenever it
holds a config, so a plain stop/start never re-applies the startup
config and 'write memory' survives restarts; an explicit content edit
(PUT) is re-applied on the next start and wins over the saved config,
like IOU.
2026-09-05 21:54:52 +08:00
YueGuobin
0ca9ccc637
feat: model IOL adapters as 4-port units like the IOU node type
IOL interfaces come in 4-port units (Ethernet0/0-3, Ethernet1/0-3, ...),
addressed like IOU as (adapter_number, port_number 0-3):

- IOLDockerVM builds EthernetAdapter(interfaces=4) per adapter and asks
  the runner for adapters x 4 interfaces (num-eth).
- DockerVM threads port_number through the NIO/capture API (the compute
  routes parsed it from the URL but dropped it); single-port adapters
  keep the historical bridge{N} names and command sequence, multi-port
  adapters get one bridge per port (bridge{a}_{p}).
- The unix-socket NIO wiring addresses sockets flat across adapters:
  adapter x ports-per-adapter + port, so single-port images keep their
  exact socket layout.
- The controller port list for GNS3_IOL_RUNNER docker nodes is generated
  by StandardPortFactory with the IOU naming (Ethernet{segment0}/{port0},
  segment size 4); plain docker nodes keep eth{N}.
2026-09-05 21:54:51 +08:00
YueGuobin
92d4e3d378
nodes: per-node default credentials seeded from the template
Add default_username/default_password as controller-only node properties
(the netmiko_device_type pattern): they are not sent to the compute,
persist with the project topology and can be updated or cleared per
node. Creating a node from a template seeds them from the template
appliance metadata, and the metadata itself is dropped there so it
never leaks into the node properties.
2026-08-21 21:41:42 +08:00
YueGuobin
1c68a52856
fix: address appliance v8 install review findings
- install: resolve the image directory from the version's settings type and
  skip image handling for docker appliances; guard appliance.images
- appliance schema: validate template_properties against template_type,
  align cpu_throttling with the qemu template, add kvm and version idlepc
- conversion: map IOU image to path, kvm disable to accel=tcg, inherit only
  same-type default settings, symbol fallback from the effective category,
  template_properties cannot override structural fields
- allow clearing netmiko_device_type with an empty string
- download the template symbol regardless of the level it is defined at and
  give qemu guests a default symbol
2026-08-21 21:41:42 +08:00
YueGuobin
d64f47afa4
nodes: per-node netmiko_device_type (controller-only)
netmiko_device_type follows the CONTROLLER_ONLY_PROPERTIES pattern
(like console_auto_start): a node created from a template inherits the
template value, PUT /nodes can override it inside a topology, updates
never round-trip to the compute, and the value persists in the project
topology file.
2026-08-21 21:41:35 +08:00
grossmj
4d35477e46
Add/fix tests 2026-02-23 23:27:36 +08:00
grossmj
a7b56739a9
Fixes after merging 2024-09-23 14:08:24 +07:00
grossmj
8ce0cbf7f7
Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/dynamips/nodes/c1700.py
#	gns3server/compute/dynamips/nodes/c2600.py
#	gns3server/compute/dynamips/nodes/c2691.py
#	gns3server/compute/dynamips/nodes/c3600.py
#	gns3server/compute/dynamips/nodes/c3725.py
#	gns3server/compute/dynamips/nodes/c3745.py
#	gns3server/compute/dynamips/nodes/c7200.py
#	gns3server/compute/dynamips/nodes/router.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/node.py
#	gns3server/controller/topology.py
#	gns3server/handlers/api/compute/docker_handler.py
#	gns3server/handlers/api/compute/dynamips_vm_handler.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/schemas/docker.py
#	gns3server/schemas/docker_template.py
#	gns3server/schemas/dynamips_template.py
#	gns3server/schemas/dynamips_vm.py
#	gns3server/schemas/node.py
#	gns3server/schemas/qemu.py
#	gns3server/schemas/qemu_template.py
2024-09-23 13:28:56 +07:00
Jeremy Grossmann
af6f34b2ca
Revert "Backport auxiliary console support for Qemu, Docker and Dynamips nodes" 2024-09-23 13:10:58 +07:00
grossmj
c41c11eb34
Backport auxiliary console support for Qemu, Docker and Dynamips nodes 2024-09-22 18:29:04 +07:00
grossmj
cefab8d362 Rename __json__() to asdict() 2021-04-17 23:34:28 +09:30
grossmj
30ebae207f Use Pydantic to validate the server config file. 2021-04-12 17:02:23 +09:30
grossmj
eb3cb8a41f Migration to FastAPI 2020-10-02 16:07:50 +09:30
grossmj
7043d48f1a Auxiliary console support for Qemu. Ref #2873
Improvements for auxiliary console support for Docker and Dynamips.
2020-07-29 16:23:51 +09:30
grossmj
e4b7e46444 Fix tests for Windows 2020-06-16 01:57:16 -07:00
grossmj
d3ea67da24 Refactor tests
* Use pytest-aiohttp
* Use the async def / await syntax.
* Fix tests to run with Python 3.8
2020-06-16 13:59:03 +09:30
grossmj
44a142e91d Fix tests 2019-05-20 11:02:29 +07:00
grossmj
bae3fb84b9 Download custom appliance symbols from GitHub
Fix symbol cache issue. Ref https://github.com/GNS3/gns3-gui/issues/2671
Fix temporary directory for symbols was not deleted
Fix temporary appliance file was not deleted
2019-03-11 16:55:16 +07:00
grossmj
724eda1f35 Handle locking/unlocking items independently from the layer position. 2019-03-02 16:26:40 +07:00
grossmj
135d56371d Fix tests for project notifications. 2019-02-23 23:20:11 +07:00
grossmj
d7c2e16c21 Use "template" to name what we use to create new nodes. 2018-11-28 16:12:58 +07:00
grossmj
17d070dca7 Early support for symbol themes. 2018-11-23 17:27:10 +07:00
grossmj
98f04365b7 Remove generic controller settings API endpoint. 2018-11-14 16:24:30 +08:00
grossmj
76af98404a Drop Python 3.4 and switch to async / await syntax for asyncio. Fixes #1425 2018-10-15 17:05:49 +07:00
grossmj
7f72b90b0e The server has now 2 notification streams
* A new one for controller related events (compute, appliance templates etc.)
* The existing one for project related events (links, nodes etc.)
2018-08-16 21:31:57 +07:00
grossmj
652d5788c3 Fix tests. 2018-08-09 18:14:38 +07:00
grossmj
adc2f69d5d Fix tests. 2018-04-04 21:51:31 +07:00
grossmj
757c103c03 Possibility to customize port names and adapter types for Qemu, VirtualBox, VMware and Docker. Fixes #2361.
MAC addresses can customized for Qemu as well.
2018-04-02 22:27:12 +07:00
grossmj
5d704aa478 Fix tests. 2018-03-24 18:25:09 +07:00
grossmj
658aa4bae9 Merge 2.1 into 2.2 branch 2018-03-12 13:38:50 +07:00
ziajka
dadf11f69b Fix tests 2017-12-21 09:37:48 +01:00
Julien Duponchelle
e9fef928b0
Fix dynamips node creation error 2017-05-16 10:49:45 +02:00
Julien Duponchelle
2a159c06c5
Fix forwarding properties
Fix #2005, #2002
2017-05-16 10:22:55 +02:00
Julien Duponchelle
e892e5dfab
Manage base configuration on server
Fix #786
2017-02-03 13:19:14 +01:00
Julien Duponchelle
d74769c824
Fix duplicate node names
Fix https://github.com/GNS3/gns3-gui/issues/1796
2017-01-18 18:28:50 +01:00
Julien Duponchelle
58287b3638
Fix wrong short label for ethernet switch, hub & VPCS
Fix https://github.com/GNS3/gns3-gui/issues/1764
2017-01-09 16:48:42 +01:00
Julien Duponchelle
3259ec1220
Close project if one one the compute of the project is down
Fix #836
2016-12-15 21:57:59 +01:00
Julien Duponchelle
875051d05e
Prevent capture on non running node
Fix https://github.com/GNS3/gns3-gui/issues/1656
2016-11-22 16:05:57 +01:00
Julien Duponchelle
a853e87fa5
IOURC is a text box instead of a file path
Fix https://github.com/GNS3/gns3-gui/issues/1662
2016-11-21 18:16:50 +01:00
Julien Duponchelle
3c5cbebfb4
Fix timeout issues when starting VMware or VBox
Fix https://github.com/GNS3/gns3-gui/issues/1632
2016-11-07 17:34:51 +01:00
Julien Duponchelle
1e73962e33
Do not dump iourc_content to .gns3 file
Fix #759
2016-11-03 13:35:44 +01:00
Julien Duponchelle
eabe4eb97e
Improve remote server console host support when binding to 0.0.0.0
Fix https://github.com/GNS3/gns3-gui/issues/1574
2016-10-26 14:43:47 +02:00
Julien Duponchelle
04aec4619f
Fix uploads of large images
Fix https://github.com/GNS3/gns3-gui/issues/1552
2016-10-04 10:56:38 +02:00
Julien Duponchelle
37f972dea1
Fix an issue with old symbols paths 2016-09-15 18:21:39 +02:00
Julien Duponchelle
da5e3d0e54
Dissallow serial to ethernet connection
Fix #678
2016-09-15 14:51:40 +02:00
Julien Duponchelle
2f0e2260ab
Move the generation of the list of ports to the server
Ref #676
2016-09-14 15:21:37 +02:00
Julien Duponchelle
5de27a95f9
Center label when hostname change
Fix #1404
2016-08-17 17:12:23 +02:00
Julien Duponchelle
f82527e253
Compute node size on server
Fix #620
2016-08-17 11:58:19 +02:00