Compare commits

...
2579 Commits
Author SHA1 Message Date
grossmj 7cf25bc0d5 Release v3.1.0a2 2026-05-13 00:34:05 +08:00
grossmj 7bb0a2a863 Bundle web-ui v3.1.0a2 2026-05-13 00:29:25 +08:00
grossmj 748b8a1571 Sync appliances 2026-05-13 00:25:27 +08:00
Jeremy Grossmann c71dfbb6b5 Merge pull request #2729 from yueguobin/feature/troubleshooting-issue-injection
feat: add fault injection system and external skills repository
2026-05-12 22:24:00 +08:00
YueGuobin 30a140a9e3 fix: surface tshark stderr errors to LLM, not just log them 2026-05-12 15:10:27 +08:00
YueGuobin b79fea918d fix: hint LLM about -c behavior when tshark returns empty with -c 2026-05-12 14:54:50 +08:00
YueGuobin 09b0fbcfea fix: update search_fields examples to use existing field names 2026-05-12 14:48:37 +08:00
YueGuobin 73e0de7706 fix: reject multi-keyword search_fields, single keyword only 2026-05-12 14:47:00 +08:00
YueGuobin c357d52fbf fix: document action/query params in PacketAnalysisTool description 2026-05-12 14:36:21 +08:00
YueGuobin 2a34d0ef58 feat: add search_fields action to PacketAnalysisTool for real-time field lookup 2026-05-12 14:33:13 +08:00
YueGuobin 32c3b4cd35 feat: validate tshark -e field names before running analysis 2026-05-12 14:27:16 +08:00
YueGuobin 9c23f9037c fix: document -c behavior caveat in PacketAnalysisTool description 2026-05-12 14:00:58 +08:00
YueGuobinandClaude Opus 4.7 b7a0b611df fix: demote loader-level load logs to DEBUG, info already reported by manager
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 13:52:05 +08:00
YueGuobinandClaude Opus 4.7 89da58fe1b fix: promote skills/prompts load logs to INFO level
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 13:46:36 +08:00
YueGuobin c5af9ce389 fix: load packet analysis protocols during skills initialization
- Add reload_packet_analysis_protocols() call in _ensure_skills_manager()
- PACKET_ANALYSIS_REGISTRY was empty because it was never loaded
2026-05-12 13:41:52 +08:00
YueGuobin 67b3b778b8 feat: add PacketAnalysisSkillsTool
- Register packet_analysis_skills as a LangChain tool for LLM
- LLM can query protocol field definitions before calling packet_analysis
- Follows the same pattern as DeviceSkillsTool and InjectionSkillsTool
2026-05-12 13:37:59 +08:00
YueGuobin 2a38816d3d fix: remove remaining quoted example from tool input docstring 2026-05-12 13:30:18 +08:00
YueGuobin b991125c6c fix: use shlex.split for tshark_args parsing
- Replace str.split() with shlex.split() to handle quoted arguments
- LLM may pass args with or without quotes, both work correctly now
2026-05-12 13:29:31 +08:00
YueGuobin e0c2d64b7c feat: add packet analysis workflow to tool description
- Update PacketAnalysisTool.description with step-by-step workflow
- Instruct LLM to query packet_analysis skills first, then construct tshark_args
2026-05-12 13:13:24 +08:00
YueGuobin 2c5cfdbee8 refactor: remove old PacketCaptureTool, replaced by PacketAnalysisTool
- Delete packet_capture_tools.py (analyze_packets with packet_number)
- PacketAnalysisTool is more flexible and can do everything the old tool could
- Update tool registration to use only PacketAnalysisTool
- Cleaner, more unified packet analysis interface
2026-05-12 10:19:25 +08:00
YueGuobin 84b9742045 feat: add protocol-oriented packet analysis tool
- Add PacketAnalysisTool that accepts user-provided tshark arguments
- LLM constructs tshark commands based on protocol knowledge from skills
- Add PACKET_ANALYSIS_REGISTRY for protocol definitions
- Add load_packet_analysis_protocols() to SkillsLoader
- Add get_packet_analysis_protocol() and list functions to registry
- Register PacketAnalysisTool in teaching and lab automation modes
- Update SkillsManager to reload packet analysis protocols

Related: GNS3-Skills commit 7bc45d2
2026-05-12 09:59:10 +08:00
YueGuobin 6596011799 docs: add roadmap docs for planned features
Close GitHub issues and document as roadmaps instead:
- #2731: user preferences API
- #2732: server settings REST API
- #2733: injection fault tracking
- packet analysis: protocol-oriented analysis architecture
2026-05-12 00:03:07 +08:00
YueGuobin a408148073 feat: require superadmin for /reload/skills endpoint
Only administrators can reload skills from the external repository.
Non-admin users receive 403 Forbidden.
2026-05-11 22:59:28 +08:00
YueGuobinandClaude Opus 4.7 ae1a444677 fix: remove background init timeout and allow skills reload retry
- Remove 5s thread.join() timeout so git clone/pull is not truncated
- Remove _init_complete flag, reset _init_in_progress on failure instead
- Let /reload/skills API retry initialization after network failure
- Raise GIT_HTTP_LOW_SPEED_LIMIT from 1 KB/s to 10 KB/s

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 22:51:57 +08:00
YueGuobinandClaude Sonnet 4.6 27051a89ad deps: add PyYAML and GitPython to ai-requirements.txt
Add missing dependencies for the external skills repository feature:
- PyYAML>=6.0.0: for loading YAML skill files
- GitPython>=3.1.0: for Git operations (clone/pull) on skills repo

These dependencies are required by the SkillsManager and SkillsLoader
classes introduced in commit e68cc17e.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:59:52 +08:00
YueGuobin e68cc17ed5 feat: add fault injection system and external skills repository
## Summary

Add a complete fault injection system for GNS3 Copilot, migrate all
skills from local Python files to an external Git repository with
hot reload support, and restructure Copilot API under /copilot/.

## Key Changes

### Fault Injection
- New troubleshooting_injection mode with InjectionSkillsTool
- 368 fault scenarios across 39 protocol categories
- Context-based filtering (LLM must pass topology protocols)

### External Skills Repository
- SkillsManager: Git clone/pull, version tracking, smart updates
- SkillsLoader: YAML skills + Markdown prompts from external repo
- Hot reload via POST /copilot/reload/skills
- Configurable via gns3_server.conf

### Architecture
- API unified under /copilot/ prefix
- SkillsManager moved from Controller to agent module
- Lazy initialization with startup background preload
- Per-command Git timeout, smart update checks
- Forbidden commands hot-reloadable from external repo
- 32 INFO logs downgraded to DEBUG
2026-05-11 01:24:55 +08:00
Jeremy Grossmann 534bb5eded Merge pull request #2728 from yueguobin/feature/disable-deepseek-thinking-mode
fix: Disable DeepSeek thinking mode to avoid reasoning_content errors
2026-05-09 22:41:27 +08:00
YueGuobinandClaude Sonnet 4.6 156072118f fix: Disable DeepSeek thinking mode to avoid reasoning_content errors
DeepSeek models (deepseek-v4-flash/pro) enable thinking mode by default,
which returns reasoning_content that must be passed back to the API in
subsequent requests. This causes 400 errors in multi-turn conversations
when the reasoning_content is not properly handled.

This commit disables thinking mode by passing extra_body={"thinking": {"type": "disabled"}}
as an explicit parameter to DeepSeek models, preventing the reasoning_content
field from being generated.

Modified:
- create_base_model(): Add extra_body parameter with thinking mode disabled
- create_title_model(): Add extra_body parameter with thinking mode disabled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 22:31:50 +08:00
grossmj 8b3d136a84 Update packages in requirements.txt 2026-05-09 18:41:02 +08:00
grossmj 97bf94e06e Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/compute/iou/iou_vm.py
#	gns3server/crash_report.py
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
#	requirements.txt
#	setup.py
2026-05-09 18:23:00 +08:00
Jeremy Grossmann 32959f1e04 Merge pull request #2724 from yueguobin/fix/import-project-skip-offline-computes
fix: Skip offline compute nodes during project import
2026-05-09 13:59:53 +08:00
YueGuobinandClaude Sonnet 4.6 5c7018283f fix: Skip offline compute nodes during project import
When importing a project, the round-robin logic would attempt to distribute
nodes across all configured compute resources, including offline ones. This
caused import failures when any remote compute was unreachable.

This fix filters the compute list to only include connected computes before
round-robin distribution. If no remote computes are connected, all nodes
are assigned to the local compute.

This matches the approach used in project._get_disconnected_computes() and
prevents the issue where importing a project fails with:
"Cannot connect to compute 'X' with request POST /projects"

Fixes issue introduced in commit 90e3a8d6 (2017) which added round-robin
load balancing without considering offline compute nodes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 13:46:58 +08:00
Jeremy Grossmann ae2fa31c5e Merge pull request #2721 from yueguobin/feature/list-node-files-api
feat: Add API endpoint to list node files with metadata
2026-05-09 00:04:16 +08:00
YueGuobin b4220d55c6 fix: Import status module in project.py
Fix F821 undefined name 'status' error by importing the status
module from fastapi. This resolves build errors when using
status.HTTP_403_FORBIDDEN and status.HTTP_404_NOT_FOUND.
2026-05-08 23:58:43 +08:00
Guobin Yue cd732ab4b5 Merge branch '3.0' into feature/list-node-files-api 2026-05-08 23:51:56 +08:00
Jeremy Grossmann 14c2172f1b Merge pull request #2722 from yueguobin/fix/console-stopping-error
fix: Handle connection errors when stopping node console
2026-05-08 23:43:39 +08:00
YueGuobin 3752b2bac8 fix: Handle connection errors when stopping node console
Add exception handling in stop_wrap_console to gracefully handle
ConnectionResetError, BrokenPipeError, and OSError when waiting
for console writer to close.

This prevents 500 errors when stopping QEMU nodes if the console
connection is reset before the writer finishes closing.

Fixes race condition where QEMU process exits and closes connections
before the console writer cleanup completes.
2026-05-08 23:30:41 +08:00
YueGuobinandClaude Sonnet 4.6 e6df144ae8 refactor: Remove MD5 calculation from node files listing
Remove MD5 checksum calculation from the node files API since
disk image files are dynamic and change frequently. MD5 calculation
was also causing significant performance overhead.

Changes:
- Remove md5sum field from NodeFile schema
- Remove MD5 calculation from list_node_files method
- Improve error handling for timestamp conversion
- Simplify code by removing lambda functions

Performance improvement:
- Response time reduced from ~0.5-1s to ~0.017s (30-60x faster)
- Especially beneficial for large files and multiple files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 23:05:40 +08:00
YueGuobinandClaude Sonnet 4.6 fae7b2eabe fix: Export NodeFile schema to schemas module
Add NodeFile to the schemas __init__.py exports to fix
import error when starting the server.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:58:45 +08:00
YueGuobinandClaude Sonnet 4.6 51a4c73e21 feat: Add detailed metadata to node files listing
Enhance the node files API to include comprehensive file metadata:
- File size in bytes
- File creation time (ISO 8601 format)
- File modification time (ISO 8601 format)
- File extension

Create new NodeFile schema to support these additional fields
while keeping the existing ProjectFile schema for backward compatibility.

This provides users with better information to manage and identify
files in the Web UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:57:19 +08:00
YueGuobinandClaude Sonnet 4.6 5b75d633aa feat: Add API endpoint to list node files
Implement issue #2719 - Add API endpoint to list project files

- Add GET /v3/projects/{project_id}/nodes/{node_id}/files endpoint
- Add list_node_files() method to Project class
- Add security checks to prevent path traversal
- Filter out .ghost temporary files
- Return file paths with MD5 checksums
- Require Node.Audit privilege

This allows users to discover dynamically created files
such as QEMU disk images created via the disk image API.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:52:17 +08:00
grossmj c3d23d7cae Development on 2.2.60.dev1 2026-05-08 20:03:31 +08:00
grossmj a1edf74fcf Merge branch 'master' into 2.2 2026-05-08 19:49:53 +08:00
grossmj 59a95edd3d Release v2.2.59 2026-05-08 19:06:04 +08:00
grossmj e34a7afe79 Sync appliances 2026-05-08 19:03:14 +08:00
Jeremy Grossmann 2dcbe0f1c2 Merge pull request #2717 from GNS3/bugfix/2709
Fix snapshot restore does not work after export/import of project
2026-05-08 18:59:37 +08:00
grossmj b1c8ce8b58 Remove unneeded code 2026-05-08 18:56:56 +08:00
grossmj b304511b5e Fix snapshot restore does not work after export/import of project 2026-05-08 18:47:47 +08:00
grossmj 163d4e0534 Update requirements.txt & python_requires 2026-05-08 17:01:10 +08:00
grossmj 72f64ee60b Warn to use 64-bit IOU images. Fixes #2716
32-bit IOU image support has been removed from the GNS3 VM.
2026-05-08 16:37:06 +08:00
Jeremy Grossmann cd03abb7ed Merge pull request #2669 from arl1984/fix/telnet-proxy-reader-cleanup-2344
Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)
2026-05-08 15:42:51 +08:00
grossmj 6551bf56f8 Tweak and merge changes from 3.0 branch 2026-05-08 15:36:40 +08:00
Jeremy Grossmann e0860555ba Merge pull request #2713 from yueguobin/fix/docker-container-deletion-error-handling
Fix: Improve Docker container deletion error logging
2026-05-07 22:17:23 +08:00
YueGuobinandClaude Sonnet 4.6 822abbe671 Fix: Improve Docker container deletion error logging
When closing a Docker node, if container deletion fails, the error
is silently ignored. This can lead to stale containers remaining on
the system and causing 409 conflicts when reopening projects.

Changes:
- Distinguish between 404 (container already removed, normal) and
  other DockerError (deletion failed, needs attention)
- Log warning when deletion fails with error details
- Add comment explaining stale containers will be cleaned up on
  project open (via automatic 409 conflict resolution)

This improves observability without blocking project close operations.
The root cause of stale containers can now be diagnosed from logs.

Fixes #2708

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 12:45:05 +08:00
Jeremy Grossmann 3928377f80 Merge pull request #2710 from yueguobin/fix/compute-connection-timeout
Fix: Check compute connectivity before open() during project deletion
2026-05-07 11:36:45 +08:00
Jeremy Grossmann 0d88ff87e7 Merge pull request #2712 from yueguobin/fix/compute-reconnection-backoff
Fix: Add exponential backoff to compute reconnection attempts
2026-05-07 11:35:46 +08:00
YueGuobin efe6913d69 Fix: Add exponential backoff to compute reconnection attempts
When a remote compute is unreachable, the controller now uses exponential
backoff for reconnection attempts: 5s, 10s, 20s, 40s, 80s, then caps at
300s (5 minutes). Previously it retried every 5 seconds indefinitely.

User-initiated operations (open project, start node) still trigger an
immediate connection attempt, so recovery is not delayed in practice.

Related: #2704
2026-05-07 11:17:55 +08:00
YueGuobinandClaude Opus 4.6 f1b11e7cae Fix: Check compute connectivity before node creation in open()
When opening a closed project with nodes on an offline remote compute,
open() would block for 120s trying to connect before eventually
failing. Now checks compute connectivity after loading the topology
file but before creating nodes, allowing immediate failure with a
clear error message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 10:48:18 +08:00
YueGuobinandClaude Opus 4.6 30ebde0cb0 Fix: Check compute connectivity before open() during project deletion
Previously the disconnected compute check ran after open(), which would
block for 120s trying to connect to unreachable remote computes before
rejecting the deletion. Now reads the topology file directly to extract
compute IDs and checks connectivity before calling open(), enabling
immediate rejection of deletions involving offline computes.

Also removes the redundant post-open() check since the early check
covers both opened and closed project states.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 09:58:20 +08:00
YueGuobinandClaude Opus 4.6 8ecd449dd8 Fix: Add error logging when closing/deleting projects on computes
Previously errors during close() and delete_on_computes() were silently
swallowed without any logging, making it difficult to diagnose failures
when remote computes are unreachable.

- close(): log warning instead of silent pass
- delete_on_computes(): wrap HTTP DELETE in try/except with warning log

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 09:37:51 +08:00
YueGuobin 4d06b2b7b6 Fix: Skip add_compute for existing computes when opening projects 2026-05-06 13:24:27 +08:00
YueGuobin 0f4b0c567e feat: add AI provider config files to .gitignore
Add deepseek, claude, gemini, and grok settings files to .gitignore to prevent accidental commits of local AI provider configurations.
2026-05-06 13:24:13 +08:00
Jeremy Grossmann 255d1e4057 Merge pull request #2705 from yueguobin/fix/project-deletion-compute-status-check
Fix: Check compute connection status before project deletion
2026-05-06 09:39:41 +08:00
YueGuobin a67cd66b60 Revert "Fix: Handle project deletion errors in autoidlepc"
This reverts commit c92188cad4.
2026-05-06 00:59:05 +08:00
YueGuobin c92188cad4 Fix: Handle project deletion errors in autoidlepc
When deleting the AUTOIDLEPC project in autoidlepc(), if a remote compute
is disconnected, the deletion fails with ControllerForbiddenError due to
our compute connection status check. This causes:
- The project to remain in the controller's memory
- Subsequent autoidlepc calls to fail
- User must restart the server to recover

This fix adds exception handling to ensure the project is always removed
from the controller's memory, even if deletion fails.

Related to #2703
2026-05-06 00:47:24 +08:00
YueGuobinandClaude Sonnet 4.6 9c868911e1 Fix: Use _computes instead of _project_created_on_compute for deletion check
The initial fix used _project_created_on_compute to check for disconnected
computes before deletion, but this set gets reset during project.open(),
causing the check to fail.

Now uses self._computes which is loaded from the topology file and
persists through the open() call.

Related: #2703

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 00:19:55 +08:00
YueGuobinandClaude Sonnet 4.6 4444da9ffa Fix: Check compute connection status before project deletion
This commit addresses issue #2703 where deleting a project with nodes
on remote compute nodes would result in long waits with no feedback
if those computes were unreachable.

Changes:
1. Compute connection status updates on connection failure
   - When a compute fails to connect, update connected=False and last_error
   - Send compute.updated notification to UI so users can see status
   - This allows Web UI to display real-time connection status

2. Project deletion checks compute status before attempting deletion
   - Check all computes used by the project are connected
   - If any compute is disconnected, immediately reject deletion
   - Provide clear error message indicating which computes are offline
   - This prevents long timeouts and gives users immediate feedback

Benefits:
- Immediate feedback instead of 120-second timeouts
- Clear error messages about which computes are disconnected
- Prevents orphaned resources on offline computes
- Improves user experience by avoiding silent waits

Related: #2703

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 00:05:10 +08:00
Jeremy Grossmann ee7c5d6d59 Merge pull request #2693 from cristian-ciobanu/ssh-console-support
feat(compute): add SSH console type support
2026-05-05 19:03:57 +08:00
Jeremy Grossmann 82d630a122 Merge branch '3.0' into ssh-console-support 2026-05-04 17:17:10 +08:00
Jeremy Grossmann 56455d3a27 Merge pull request #2701 from yueguobin/fix/iou-remote-path-validation
fix: convert absolute image paths to relative paths for remote compute nodes
2026-05-04 16:36:23 +08:00
Guobin Yue 069e139d2d Merge branch '3.0' into fix/iou-remote-path-validation 2026-05-04 15:51:30 +08:00
YueGuobin 1f5ba3cada chore: remove internal debug documentation 2026-05-04 15:48:46 +08:00
YueGuobin 38f5e8df76 fix: extend remote compute image path conversion to all node types
Previously only the "path" field was converted to a relative path for remote computes, causing issues with QEMU and VMware nodes that use different image path fields. Now all known image path fields are converted, ensuring consistent behavior across IOU, QEMU, Dynamips, and VMware node types.
2026-05-04 15:39:16 +08:00
Jeremy Grossmann 5f9b469679 Merge pull request #2700 from yueguobin/fix/issue-2680-static-directory
fix: handle directory access for static web-ui routes
2026-05-03 17:56:50 +08:00
YueGuobinandClaude Sonnet 4.6 6ff4f575bb docs: add analysis for issue #2676 remote compute image path validation
Add detailed documentation explaining:
- Problem description and root cause
- Architecture overview (Controller vs Compute)
- Why automatic upload is not triggered
- Affected node types
- Solution implementation
- Testing scenarios

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 17:47:25 +08:00
YueGuobinandClaude Sonnet 4.6 11fb5de84e fix: send relative image path to remote compute nodes
When creating a node on a remote compute, the controller now sends
only the image filename instead of the absolute local path. The remote
compute will search for the image in its own configured images_directories.

If the image is not found, the compute returns ImageMissingError, which
triggers the controller's automatic image upload mechanism.

This fixes issue #2676 where remote computes reject paths from the
controller due to mismatched directory prefixes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 17:44:47 +08:00
YueGuobinandClaude Sonnet 4.6 952ef66a6b fix: handle directory access for static web-ui routes
When accessing /static/web-ui without trailing slash, the request would
fail with "RuntimeError: File at path ... is not a file" because:

1. The route /static/web-ui/{file_path:path} doesn't match paths without
   trailing slash (Starlette's path regex requires the /)
2. The request falls through to StaticFiles mount, which tries to serve
   the directory as a file

This fix:
- Sets html=True on StaticFiles mount to automatically redirect directory
  URLs to trailing slash versions
- Adds os.path.isdir() check to handle empty file_path gracefully

Fixes #2680

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 17:21:03 +08:00
Jeremy Grossmann c45f6d9416 Merge pull request #2699 from yueguobin/fix/template-duplicate-name-validation
Fix duplicate template name validation when updating templates
2026-05-03 12:09:59 +08:00
YueGuobin 1d715e146b fix: add duplicate name validation when updating templates
Fixes #1658

Add validation in the update_template method to check if a template
with the same name already exists before updating. This prevents
users from creating duplicate template names by editing existing
templates.

The check excludes the current template being edited to allow
updating other properties without changing the name.
2026-05-03 11:08:20 +08:00
Jeremy Grossmann c3d202abc9 Merge branch '3.0' into ssh-console-support 2026-05-02 22:10:28 +08:00
Jeremy Grossmann 165209ba24 Merge pull request #2698 from yueguobin/fix/compute-update-password-none-error
fix: avoid AttributeError when password is not provided in compute update
2026-05-02 22:07:34 +08:00
Jeremy Grossmann b87ab8f86f Merge pull request #2696 from yueguobin/fix/rfc1123-error-message
fix: improve hostname validation error messages with allowed characters
2026-05-02 18:30:49 +08:00
YueGuobinandClaude Opus 4.6 a6dcab8110 fix: avoid AttributeError when password is not provided in compute update
When updating a compute without providing a password field,
compute_update.password is None and calling .get_secret_value()
on it causes a 500 Internal Server Error. Only set the password
in update_values when a password is actually provided.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 15:37:46 +08:00
YueGuobinandClaude Opus 4.6 ba220780a9 fix: improve hostname validation error messages with allowed characters
When a hostname validation fails, the error message now includes
the allowed character set to help users provide valid names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-02 13:09:04 +08:00
Cristi e6de7cb60a feat(compute): Fix Dynamips to listen on the internal port when ssh is used for auxiliary console 2026-04-30 23:50:15 +03:00
CristiandCopilot d7c78f5744 feat(compute): Fix ambiguous log message related to the active console transport.
Co-authored-by: Copilot <copilot@github.com>
2026-04-30 18:07:23 +03:00
Cristi 9d451eb652 feat(compute): Updated server host key to use the secure ssh-ed25519 instead of old ssh-rsa algorithm 2026-04-30 17:56:05 +03:00
Cristi cc05eb5850 feat(compute): Fix missing SSH wrapping for auxiliary console 2026-04-30 17:47:54 +03:00
Cristi 8ff1698bfb feat(compute): Added AsyncioSSHServer dedicated tests 2026-04-30 16:35:21 +03:00
Cristi d64eca0418 feat(compute): add SSH console type support 2026-04-30 15:52:47 +03:00
Jeremy Grossmann f0ef65b8e8 Merge pull request #2688 from yueguobin/fix/llm-model-config-error-message
fix: include error details in LLM model config + docs: add troubleshooting guides
2026-04-25 16:30:47 +08:00
Guobin Yue c583462d2d Merge branch '3.0' into fix/llm-model-config-error-message 2026-04-25 16:26:59 +08:00
YueGuobin c688223e1b docs: add troubleshooting guide for WebSocket console authentication failure
Add documentation explaining the common issue where WebSocket console connections to remote compute nodes fail due to credential mismatch. The guide describes the error symptoms, root cause (Controller forwarding its own credentials to Compute), and solution (ensuring matching compute_username and compute_password in Compute's configuration).
2026-04-25 16:08:53 +08:00
YueGuobinandClaude Opus 4.6 d81a7410e2 docs: remove misleading Controller Hostname Unreachable section
This section was misleading - the actual root cause is host=0.0.0.0
causing controller to register as 127.0.0.1, not hostname resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 15:55:37 +08:00
YueGuobinandClaude Opus 4.6 e88b12086a docs: clarify host=0.0.0.0 causes controller to register as 127.0.0.1
Add details about the "No common subnet" error when Controller's host
is set to 0.0.0.0, and how to verify via /v3/version endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 15:54:12 +08:00
YueGuobinandClaude Opus 4.6 f9d1ccc701 docs: add troubleshooting for controller hostname unreachable
Add documentation for the "No common subnet" error when the
controller's hostname in /etc/hosts resolves to an unreachable
or stale IP address.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 15:44:20 +08:00
grossmj 27d4c43ad9 Back on development on 3.1.0.dev2 2026-04-25 13:31:35 +08:00
grossmj c6e2bfa9b6 Release v3.1.0a1 2026-04-25 13:19:19 +08:00
grossmj 7fc5601405 Bundle web-ui v3.1.0a1 2026-04-25 12:58:56 +08:00
YueGuobinandClaude Opus 4.6 517764a7ac fix: include error details in LLM model config failure response
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-25 01:48:45 +08:00
grossmj ee43a5cdf5 Bump version to 3.1.0.dev2 2026-04-24 21:56:37 +08:00
grossmj ccf11d8f8b Sync appliances 2026-04-24 21:55:22 +08:00
Jeremy Grossmann b4f31222d0 Merge pull request #2685 from yueguobin/replace-wireshark-with-gns3server-web-wireshark-setup-in-installation-command
docs: replace 'wireshark' with 'gns3server-web-wireshark-setup' in installation commands
2026-04-24 10:51:53 +08:00
YueGuobinandClaude Opus 4.6 4dab36c08c docs: replace 'wireshark' with 'gns3server-web-wireshark-setup' in installation commands
The CLI entry point was renamed from 'wireshark' to 'gns3server-web-wireshark-setup'
to avoid conflicts with the system wireshark package.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 10:33:41 +08:00
Jeremy Grossmann d59c82892a Merge pull request #2684 from yueguobin/fix/wireshark-cli-name-conflict
fix: rename wireshark CLI to gns3-wireshark to avoid conflict
2026-04-24 00:48:57 +08:00
grossmj 640910ec8e Use gns3server-web-wireshark-setup in docs 2026-04-24 00:48:00 +08:00
grossmj 6fac4c8c8a Merge branch '3.0' into fork/yueguobin/fix/wireshark-cli-name-conflict
# Conflicts:
#	pyproject.toml
2026-04-24 00:42:48 +08:00
YueGuobinandClaude Opus 4.6 0b7c40a14a fix: rename wireshark CLI to gns3-wireshark to avoid conflict
The wireshark CLI entry point creates /usr/bin/wireshark which conflicts
with the system wireshark package on Arch Linux (owned by wireshark-qt),
causing package installation to fail.

Rename to gns3-wireshark to follow the same naming convention as other
GNS3 CLI tools (gns3server, gns3vmnet).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-24 00:04:21 +08:00
grossmj 746cc8531c Create an executable named gns3server-web-wireshark-setup instead of wireshark. Fixes #2683 2026-04-24 00:00:45 +08:00
Jeremy Grossmann 9d0bb4a592 Merge pull request #2682 from yueguobin/fix/packet-capture-https-skip-cert
fix(copilot): add verify=False for HTTPS with self-signed certs
2026-04-23 23:44:25 +08:00
YueGuobinandClaude Opus 4.6 d6d4f7262e fix(copilot): add verify=False for HTTPS with self-signed certs
Add verify=False to requests.get() when capture_url uses HTTPS protocol,
to skip SSL certificate validation. This allows PacketCaptureTool to
work with GNS3 servers using self-signed certificates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 23:20:41 +08:00
Jeremy Grossmann f06b5fff21 Merge pull request #2681 from yueguobin/fix/wireshark-curl-https-skip-cert
fix(web-wireshark): add -k flag to curl for HTTPS with self-signed certs
2026-04-23 23:04:08 +08:00
Guobin Yue b49e6836cc Merge branch '3.0' into fix/wireshark-curl-https-skip-cert 2026-04-23 22:55:26 +08:00
YueGuobinandClaude Opus 4.6 fd6868efce fix(web-wireshark): add -k flag to curl for HTTPS with self-signed certs
Add -k flag to curl command when capture_stream_url uses HTTPS protocol,
to skip SSL certificate validation. This allows Web Wireshark to work
with GNS3 servers using self-signed certificates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 22:52:51 +08:00
grossmj 85bbc74f7d Fix using SSL with remote computes. Fixes https://github.com/GNS3/gns3-gui/issues/3733 2026-04-23 21:59:51 +08:00
Jeremy Grossmann 98477371d2 Merge pull request #2679 from yueguobin/wireshark-alias
feat(web-wireshark): add container IP retrieval and Docker API version compatibility fixes
2026-04-22 23:47:43 +08:00
YueGuobinandClaude Sonnet 4.6 a189a98723 docs(web-wireshark): add Docker API compatibility documentation
- Document API version negotiation mechanism (1.44 with fallback to 1.40)
- Add tested configurations table for Docker 20.10 and 29.3+
- Document container IP retrieval dual-strategy approach
- Explain KeyError bug fix for missing NetworkSettings.Networks field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 23:30:33 +08:00
YueGuobinandClaude Sonnet 4.6 117025a8a2 fix(web-wireshark): improve Docker API version compatibility with fallback mechanism
- Change initial API version from 1.40 to 1.44 to support Docker 29.3+ (API 1.54)
- Add automatic fallback to API 1.40 for older Docker versions (20.10, API 1.41)
- Fixes "client version 1.40 is too old. Minimum supported API version is 1.44" error
- Ensures compatibility across Docker versions 20.10 (API 1.41) to 29.3+ (API 1.54+)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 23:12:56 +08:00
YueGuobin 6c96e7493f feat(web-wireshark): add method to retrieve container IP and refactor websocket endpoint
- Add `get_container_ip` method to WebWiresharkManager for retrieving container IP addresses in wireshark network
- Method uses Docker API as primary approach with container command execution as fallback
- Refactor web_wireshark_websocket endpoint to use new method instead of direct Docker queries
- Improve error handling and logging for container IP retrieval failures
2026-04-22 22:35:50 +08:00
YueGuobin e304b19076 fix: lower Docker minimum API version to 1.40 for broader compatibility
The minimum Docker API version was reduced from 1.44 to 1.40 to support older Docker installations that do not provide API version 1.44, ensuring the web Wireshark agent can connect to a wider range of Docker environments.
2026-04-22 16:08:05 +08:00
YueGuobinandClaude Opus 4.6 2240012402 Rename gns3-wireshark-setup to wireshark for simpler command
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 14:13:19 +08:00
Jeremy Grossmann aac9b25b98 Merge pull request #2677 from yueguobin/add-url-branch-parameters
Add --url and --branch parameters to update-bundled-web-ui.sh
2026-04-21 22:54:01 +08:00
YueGuobinandClaude Opus 4.6 e6939513db Add --url and --branch parameters to update-bundled-web-ui.sh
Support specifying custom GitHub repository URL and branch name
when syncing WebUI with gns3server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 22:24:46 +08:00
grossmj 8387b484cc Sync appliances 2026-04-21 18:15:00 +08:00
Jeremy Grossmann 0ac8fd9ff3 Merge pull request #2675 from GNS3/upgrade-dependencies
Upgrade dependencies
2026-04-21 14:00:04 +08:00
grossmj f0f09e0e2c Upgrade alembic version 2026-04-21 13:25:42 +08:00
grossmj 7d84c33598 Upgrade code dependencies 2026-04-21 13:21:45 +08:00
grossmj 19c0bbbc56 Merge remote-tracking branch 'origin/3.0' into 3.0 2026-04-21 13:16:59 +08:00
grossmj 5d60626175 Bundle dev version of the web-ui 2026-04-21 13:16:36 +08:00
Jeremy Grossmann 8311936bc8 Merge pull request #2674 from yueguobin/docs/api-error-responses
docs: add API error response format documentation
2026-04-21 12:48:44 +08:00
YueGuobinandClaude Opus 4.6 56921e10d2 docs: add API error response format documentation
Document unified error response format across all GNS3 API endpoints,
including HTTP status codes, error types, and client-side error handling
patterns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 12:46:48 +08:00
Jeremy Grossmann 5ee26f5ed7 Merge pull request #2673 from yueguobin/fix/swagger-ui-cve-2018-25031
fix: use local swagger-ui static files to resolve CVE-2018-25031
2026-04-21 00:58:52 +08:00
Guobin Yue 1ea8ab0cf8 Merge branch '3.0' into fix/swagger-ui-cve-2018-25031 2026-04-21 00:54:27 +08:00
YueGuobinandClaude Opus 4.6 46d712723a fix: use local swagger-ui static files to resolve CVE-2018-25031
Replace CDN-hosted swagger-ui-dist@3.30.0 with local static files
from gns3server/static/ to address CVE-2018-25031 vulnerability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 00:43:59 +08:00
Jeremy Grossmann a366007f72 Merge pull request #2672 from yueguobin/fix/update-bundled-web-ui-script
Fix update-bundled-web-ui script for newer Angular CLI
2026-04-21 00:41:49 +08:00
YueGuobinandClaude Opus 4.6 85b8b04d72 fix: update bundled web-ui script for newer Angular CLI
- Remove deprecated --build-optimizer flag
- Update copy path from dist/ to dist/browser/ for new Angular build output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 00:39:08 +08:00
Guobin YueandClaude Opus 4.6 df28036a68 fix(deps): resolve 3 security vulnerabilities (CVE-2025-71176, CVE-2026-40347, CVE-2018-25031) (#2671)
* fix(deps): upgrade pytest to 9.0.3 to fix CVE-2025-71176

CVE-2025-71176: pytest 9.0.2 and earlier versions have a local
security vulnerability due to predictable temporary directory naming.

- pytest: 8.4.2 → 9.0.3
- Python 3.10+ is now required

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(deps): upgrade python-multipart to 0.0.26 to fix CVE-2026-40347

CVE-2026-40347: python-multipart < 0.0.26 has a denial of
service vulnerability when parsing multipart data.

- python-multipart: 0.0.22 → 0.0.26

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(deps): upgrade swagger-ui to 4.1.3 to fix CVE-2018-25031

CVE-2018-25031: swagger-ui < 4.1.3 has a spoofing vulnerability
where remote attackers can display remote OpenAPI definitions
via crafted URLs.

- swagger-ui: 3.30.0 → 4.1.3
- Updated swagger-ui-bundle.js and swagger-ui.css

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(api): change FastAPI version from "v3" to "3.0.0" for Swagger UI 4.1.3 compatibility

Swagger UI 4.x enforces stricter version format validation.
The version "v3" is not accepted by the new validator.

Changed from:
- version="v3"

To:
- version="3.0.0"

This affects both controller and compute API definitions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(deps): upgrade swagger-ui to 5.32.4

Fixes "Unable to render this definition" error when loading OpenAPI 3.0
docs. Swagger UI 3.x had incomplete OpenAPI 3.0 support.

- swagger-ui: 3.19.1 → 5.32.4 (latest)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 00:35:15 +08:00
f07d21c511 feat(web-wireshark): add implementation plan for script-driven (#2666)
* feat(web-wireshark): add implementation plan for script-driven integration

Add comprehensive implementation plan for Web Wireshark integration using script-driven approach. The plan outlines:

- Background and motivation for script-based Web Wireshark integration
- Core workflow from API request to WebSocket proxy connection
- Management script architecture with WebWiresharkManager class
- Docker container configuration and resource management
- Performance analysis and optimization recommendations
- Network setup and management procedures

Key features include:
- JWT token extraction from Authorization header
- Automatic GNS3 server URL detection
- Container lifecycle management per project
- Xpra session isolation per link
- WebSocket proxy integration through gns3server
- Resource monitoring and scaling guidelines

The implementation enables users to start Web Wireshark sessions via POST requests with `wireshark: true` parameter, providing a unified web-based packet capture interface.

* feat(web-wireshark): implement script-driven Web Wireshark integration

Add complete Web Wireshark container integration with script-driven architecture:

- Create manage_wireshark.py script for Docker container management
- Add LinkCapture schema with wireshark boolean field
- Update Link class with wireshark and jwt_token parameters
- Implement WebSocket proxy endpoint for xpra HTML5 client
- Add cleanup logic in Project class for container lifecycle

Key features:
- Script-driven container and xpra session management
- JWT token extraction from Authorization header
- GNS3 URL auto-detection with Controller/Config fallback
- WebSocket proxy for unified access through gns3server
- Proper cleanup on project close/delete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): use aiohttp instead of docker SDK

Replace docker-py SDK with direct Docker HTTP API calls using aiohttp,
following GNS3's existing architecture pattern in gns3server/compute/docker/.

Changes:
- Create DockerHTTPClient class using aiohttp + Unix socket
- Implement all Docker operations as async methods
- Remove dependency on docker Python SDK
- Use Docker API v1.44 via /var/run/docker.sock

Benefits:
- No additional dependencies required
- Consistent with GNS3's async architecture
- Better integration with existing codebase

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): add dynamic Docker API version detection

Implement dynamic Docker API version detection following GNS3's pattern
in gns3server/compute/docker/__init__.py.

Changes:
- Add DOCKER_MINIMUM_API_VERSION and DOCKER_PREFERRED_API_VERSION constants
- Remove hardcoded "v1.44" prefix (now using "1.44" format)
- Add _check_connection() method to detect Docker daemon version
- Dynamically select API version based on daemon capabilities
- Add proper error handling for version mismatches

Behavior:
- Initialize with minimum API version (1.40)
- On first connection, detect Docker daemon API version
- Use preferred API version (1.44) if supported
- Fall back to daemon's minimum API version if needed
- Raise error if daemon version is too old

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): add optional --verbose logging parameter

Remove hardcoded logging.basicConfig() and add --verbose parameter
to control log output, following GNS3's logging pattern.

Changes:
- Remove logging.basicConfig(level=logging.INFO) from module level
- Add --verbose/-v command line parameter
- Configure logging only when --verbose is specified
- Use structured log format with timestamp when verbose

Behavior:
- When called by GNS3: uses GNS3's logging configuration (default)
- When run standalone: no output unless --verbose is specified
- With --verbose: shows detailed logs with timestamps

This prevents the script from interfering with GNS3's logging
configuration while still allowing debug output when needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): fix code quality issues from static analysis

Fix issues identified by flake8 and pylint static analysis:

Import and formatting fixes:
- Remove unused 'time' import
- Fix import order (stdlib before third-party)
- Remove unnecessary f-strings without placeholders
- Split long line to comply with flake8 (max line length: 127)

Code structure improvements:
- Remove unnecessary 'else' after 'return'
- Add 'from e' to exception re-raising for better tracebacks

Code quality metrics:
- pylint score: 8.11/10 → 9.97/10 (+1.86)
- flake8: 0 errors (max line length: 127, per CI/CD standard)
- All critical issues resolved

Note: R0914 (too-many-locals) warning is informational only,
code remains clear and maintainable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): export LinkCapture schema in schemas module

Add LinkCapture to the schemas module exports in __init__.py to fix
the AttributeError when starting the GNS3 server.

Error was:
  AttributeError: module 'gns3server.schemas' has no attribute 'LinkCapture'

This was caused by adding the LinkCapture class to controller/links.py
but forgetting to export it in the schemas __init__.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add --image parameter for custom Docker images

Add optional --image parameter to allow using custom Docker images
for testing, instead of requiring gns3/web-wireshark:latest.

Changes:
- Add --image parameter to start command (default: gns3/web-wireshark:latest)
- Update get_or_create_container() to accept image parameter
- Update start_wireshark_session() to accept and pass image parameter
- Update TEST.md with examples of using custom images

Usage:
  # Using default image
  python3 manage_wireshark.py start --project-id x --link-id y --jwt-token z

  # Using custom image (for testing)
  python3 manage_wireshark.py start --project-id x --link-id y --jwt-token z --image ubuntu:latest

This makes it easier to test the script without having the official
gns3/web-wireshark image available.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add configurable resource limits and increase session capacity

Add configurable resource parameters and increase session support from 10 to 100.

Resource parameters:
- --memory: Memory limit (default: 2g)
- --memory-swap: Memory swap limit (default: same as memory)
- --cpus: CPU cores (default: 1.0)
- --pids-limit: Process limit (default: 1000)

Other improvements:
- Fix CPU quota calculation: 1000000 microseconds = 1.0 CPU core
  (was incorrectly 100000 = 0.1 CPU core)
- Add health check: xpra list command
- Add log configuration: json-file, max-size=10m, max-file=3
- Increase session capacity: 10 → 100 concurrent sessions
- Port range: 12300-12399 (was 12300-12309)
- Display range: :100-:199 (was :100-:109)

This matches the docker run command parameters and provides
better resource management and monitoring capabilities.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): update UDPLink.start_capture() to accept new parameters

Update UDPLink.start_capture() to accept the new wireshark and jwt_token
parameters and pass them to the parent Link class.

This fixes the TypeError when starting capture on UDP links:
  TypeError: UDPLink.start_capture() got an unexpected keyword argument 'wireshark'

The UDPLink class overrides start_capture() but didn't include the new
parameters added for Web Wireshark support.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: add project memory infrastructure and JWT token flow documentation

- Add memory skill for recording project knowledge
- Document JWT token flow in Web Wireshark integration
- Update .gitignore to track skills and memory directories

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): fix Docker API URL format and use docker exec CLI

- Add "v" prefix to Docker API URL (http://docker/v{version}/...)
- Remove unused exec_create/exec_start API methods
- Fix Healthcheck.Test format to ["CMD-SHELL", "command"]
- Use docker exec CLI instead of Docker API for command execution
- This aligns with GNS3 docker_vm pattern

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): improve xpra session management and error handling

- Check and clean up existing sessions before starting new xpra session
- Add verification that xpra session started successfully
- Use docker exec CLI consistently instead of Docker API
- Improve error logging and diagnostics

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add timeout handling and container health checks

- Add REQUEST_TIMEOUT constant for Docker HTTP API requests
- Add asyncio.timeout wrapper for Docker API calls to prevent hanging
- Add _is_container_healthy() to check container responsiveness
- Add _exec_in_container() helper with timeout support
- Improve unhealthy container handling with force remove
- Add detailed logging for container health state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): split monolithic file into modules

Split manage_wireshark.py into:
- docker_client.py: Docker HTTP API client
- manager.py: WebWiresharkManager with session management
- manage_wireshark.py: CLI entry point

This improves code organization and maintainability.
Keep all timeout handling and health check logic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): correct NanoCpus calculation to use nanoseconds

NanoCpus in Docker API requires nanoseconds (1 CPU = 1000000000),
not the previous incorrect multiplier of 100000.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): fix xpra command quoting and session verification

- Add quotes around --xvfb parameter value to preserve spaces
- Fix session verification to check display number instead of session name
  (xpra list shows "LIVE session at :185" not session name)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): run wireshark in background with &

Wireshark with curl pipeline runs continuously, so it must run
in background to avoid blocking. Also reduced timeout since we
don't wait for completion.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add deterministic hash for display/port allocation

Use MD5-based hash instead of Python's hash() which is randomized
across process restarts. This ensures display and port numbers are
stable when the GNS3 server restarts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: extract link_id_to_port to shared utils module

Move deterministic hash functions to gns3server/utils/port_allocator.py
to avoid code duplication and ensure consistent algorithm across
manager.py and links.py.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(links): move import to top of file

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web-wireshark): use correct Config access pattern like gns3-copilot

The Server config is an object with .protocol.value, .host, .port
attributes, not a dict. Fixes URL detection failing and falling back
to 127.0.0.1:3080 which doesn't work from inside containers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add UUID validation utility and use in manage_wireshark

Create gns3server/utils/uuid_validator.py with validate_uuid function
to validate UUID format and catch typos early with clear error messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use argparse.ArgumentTypeError for proper error message display

Previously ValueError was used which only showed 'invalid validate_uuid value'.
Now shows the full helpful message about expected format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add --dpi=96 to xpra start parameters

Set standard DPI for better display scaling in web Wireshark.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update TEST.md with correct project-id format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web-wireshark): hide xpra shutdown menu via XPRA_CLIENT_CAN_SHUTDOWN

Prevents users from accidentally shutting down the xpra server
through the HTML5 client menu.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(memory): add xpra-html5-client configuration reference

Document xpra HTML5 client configuration including:
- URL parameters for toolbar menu control
- default-settings.txt parameters (Features, Connection, Advanced)
- Server-controlled submenu items
- XPRA_CLIENT_CAN_SHUTDOWN environment variable
- Background image customization

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web-wireshark): remove xpra stop cleanup to avoid zombie processes

xpra stop can leave zombie processes and timeout. Instead, let xpra start
reuse the display directly (it will overwrite existing session).

Also added --file-transfer=no, --printing=no, --sound=no to disable
unneeded features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web-wireshark): add fullscreen_button=false to default-settings.txt

Also remove --file-transfer/--printing/--sound from command line since
xpra doesn't support these options. Configure in default-settings.txt instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web-wireshark): update xpra background with GNS3 branding

- Replace default xpra background with GNS3 icon and modern gradient
- Update CSS to use SVG background image with cover sizing
- Change background color to gradient from #021d3a to linear gradient
- Improves visual integration with GNS3 web interface

* style: add GPLv3 headers with copyright to web_wireshark modules

Co-Authored-By: YueGuobin <yueguobin@gmail.com>

* feat(docker): use Alibaba Cloud Debian mirror for faster builds in China

Use mirrors.aliyun.com for Debian packages with correct paths for
both main repo (/debian) and security repo (/debian-security).

Co-Authored-By: YueGuobin <yueguobin@gmail.com>

* feat(web-wireshark): update xpra background styling and echo command

- Replace `echo -e` with `printf` for better POSIX compatibility in Dockerfile
- Update xpra HTML5 client background to use GNS3 icon with light gradient
- Change background color from dark blue to light gray for improved visibility

* fix(web-wireshark): use pkill to stop xpra sessions

Replace 'xpra stop :{display}' with 'pkill -f "xpra.*:{display}"' for more reliable session termination.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): start Wireshark in fullscreen mode

Add --fullscreen flag to Wireshark startup command to prevent window decorations and improve user experience.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): use carrier-grade NAT subnet to avoid conflicts

Change Docker network subnet from 172.28.0.0/16 to 100.64.1.0/24 to avoid conflicts with common private networks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(web-wireshark): update subnet to /22 for 1000+ projects

Change Docker network subnet from 100.64.1.0/24 to 100.64.0.0/22 to support 1000+ projects (1022 available IPs). Update all documentation to reflect the new subnet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): replace CGNAT subnet with configurable private subnet

Replace the CGNAT address block (100.64.0.0/22) with a standard private
subnet (172.31.0.0/22) to avoid network access issues. Many networks and
ISPs block or cannot route CGNAT addresses.

Changes:
- Add WebWiresharkSettings to config schema with configurable subnet
- Read network_subnet from config, default to 172.31.0.0/22
- Add Web Wireshark configuration section to sample config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): comment out dpi setting

Allow xpra to use default DPI settings for better display scaling.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): set DPI in Xvfb to prevent scaling warnings

Add -dpi 96 to Xvfb startup command to match xpra's expected DPI
and avoid "scaling problems" warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): remove custom Xvfb to use default Xorg-dummy

Remove --xvfb parameter to let xpra use the default Xorg-dummy driver,
which properly handles DPI changes when resize-display is enabled and
prevents DPI mismatch warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* revert(web-wireshark): restore Xvfb configuration

Restore the Xvfb display server configuration for xpra sessions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): enhance xpra HTML5 default settings

Update xpra HTML5 configuration to disable additional unused features:
- audio, keyboard, mediasource, aurora, http-stream
- Improve readability using heredoc format instead of printf

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(api): add RBAC authentication to web wireshark WebSocket endpoint

- Add `has_privilege_on_websocket` dependency to enforce Link.Capture privilege
- Include current_user parameter in endpoint for user identification and logging
- Update endpoint documentation to reflect token requirement and privilege
- Add test example WebSocket URL in TEST.md for reference

* refactor(web-wireshark): add generic WebSocket proxy and disable xpra HTML

- Add websocket_to_websocket.py utility for binary WebSocket proxy
- Disable xpra HTML server with --html=no flag
- Update manager return value: url -> ws_url
- Simplify WebSocket proxy implementation in links.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web-wireshark): remove unnecessary sleep delays

Remove 2-second sleep delays after container start and xpra initialization.
Health checks and verification happen immediately, improving startup time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(agent): prevent blocking during project close

- Add 5s timeout for AgentService.checkpointer_conn.close()
- Optimize stop_all_sessions: single command instead of 100 docker exec calls
- Prevents indefinite hang when closing projects

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web-wireshark): return errors to client on startup failure

- Throw ControllerError when Web Wireshark startup fails
- Include detailed error messages from script stderr
- Support both ws_url and url response formats
- Client now receives proper error response instead of success

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web-wireshark): parallelize startup and remove unnecessary waits

- Parallel execution: container info query + xpra start
- Remove xpra list verification (unnecessary)
- Fire-and-forget Wireshark startup (no timeout wait)
- Startup time reduced from ~7s to ~1s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web-wireshark): add stop-container and delete-container commands

- Add stop-container command to stop container on project close
- Add delete-container command to delete container on project delete
- Enables proper container lifecycle management
- Containers are now stopped (not deleted) when project closes
- Containers are deleted when project is deleted

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(project): simplify close flow by removing redundant xpra session cleanup

Since docker stop with timeout=0 already force-kills all processes in the
container, explicitly stopping xpra sessions before stopping the container
is unnecessary. Remove the _cleanup_web_wireshark_xpra_sessions() call
to reduce subprocess overhead and simplify the close flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* perf(docker): force kill containers on stop by default

Change docker stop timeout from 10 seconds to 0 (immediate SIGKILL).
Web Wireshark containers don't need graceful shutdown since they have
no persistent state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web-wireshark): enable WebSocket protocol for xpra connection

- Change xpra bind from --bind-tcp to --bind-ws for WebSocket support
- Enable HTML client with --html=on for xpra WebSocket server
- Pass binary subprotocol when connecting to xpra container

The xpra WebSocket server requires the 'binary' subprotocol during
handshake. Without it, the server returns 403 with message:
"client does not support 'binary' protocol".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web-wireshark): add WebSocket subprotocol negotiation support

Fix WebSocket proxy for xpra container by implementing proper subprotocol
negotiation. The xpra client requires the server to respond with the
negotiated subprotocol (binary) in the WebSocket handshake response.

Changes:
- Modified get_current_active_user_from_websocket to extract client's
  requested subprotocols from Sec-WebSocket-Protocol header
- Updated websocket.accept() call to include negotiated subprotocol
- Enhanced websocket_proxy to support subprotocol parameter
- Improved logging for WebSocket connection debugging

This fixes the issue where xpra clients would immediately disconnect
after connection due to missing subprotocol in server response.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(web-wireshark): remove verbose debug logging

Remove excessive debug logs from WebSocket proxy implementation while
keeping essential logs for troubleshooting:
- Keep: subprotocol negotiation, connection establishment, errors
- Remove: verbose step-by-step debugging information

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web-wireshark): translate Chinese comments and docs to English

- Translate all Chinese comments in project.py, link.py, and links.py to English
- Convert TEST.md and maunal-test.md documentation to English
- Remove obsolete IMPLEMENTATION_PLAN.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore(docker): lock xpra version to 6.4.3 for reproducible builds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore(docker): improve Dockerfile with TZ, no-install-recommends, and labels

- Add TZ=UTC timezone setting
- Use --no-install-recommends to reduce image size
- Add LABEL metadata for maintainer and description

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(docs): rename and consolidate documentation

- Rename TEST.md to WEB_WIRESHARK.md for clearer naming
- Merge maunal-test.md content into main document under "Manual Testing" section
- Remove obsolete gns3_icon_black.svg

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(docker): add xpra-x11 package and remove --no-install-recommends

- Add xpra-x11 package required for seamless mode
- Remove --no-install-recommends to ensure all recommended packages are installed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(api): add capture file download endpoint

Add GET /{link_id}/capture/file endpoint to download PCAP capture files.
Supports downloading while capture is active (streaming).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web_wireshark): improve session cleanup and add known issues

- Add cleanup of existing processes before starting xpra session to prevent
  "another window manager seems to be running" errors
- Stop all associated processes (xpra, wireshark, Xvfb) when stopping sessions
- Document known issues in WEB_WIRESHARK.md including JWT token security,
  duplicate code, and other implementation concerns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web_wireshark): add restart wireshark API endpoint

- Add POST /links/{link_id}/capture/wireshark/restart endpoint
- Add restart command to manage_wireshark.py CLI
- Add _restart_web_wireshark method in link.py controller
- Restart simply calls start_wireshark_session which handles cleanup

This allows users to recover after accidentally closing the Wireshark
window without having to stop and restart the entire capture.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add Web Wireshark business process documentation

Document the Web Wireshark feature including architecture diagrams,
business processes for capture start/stop, container lifecycle,
WebSocket connection flow, and session management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web_wireshark): fix container network access and improve session cleanup

- Fix GNS3 server URL detection to use container gateway IP (172.31.0.1)
  instead of localhost/127.0.0.1/0.0.0.0 which don't work from containers
- Add import socket module for gateway IP conversion
- Move urllib.parse import to file header (code style improvement)
- Add logging for Web Wireshark startup (capture stream URL, display, etc.)
- Fix X lock file cleanup to prevent "Server is already active" errors
- Use exec pkill to reduce zombie processes from docker exec bash
- Add _cleanup_x_lock() method to remove X lock files after stopping sessions
- Update link.py to always log subprocess stderr for debugging

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): avoid zombie pkill processes by using Docker API

Replace pkill commands with Docker API-based process killing to prevent
zombie process accumulation in Web Wireshark containers.

Changes:
- Add DockerHTTPClient.list_processes() method to query container processes
- Rewrite _kill_process_tree() to use Docker API instead of pkill
- Unify all process cleanup to use _kill_process_tree() method
- Add logging for killed processes (count and PIDs)
- Include fallback to pkill if Docker API fails

This prevents the accumulation of zombie pkill processes that occurred
when using bash -c "pkill -9 -f pattern" commands.

Testing: Started and stopped multiple capture sessions, verified no new
pkill zombie processes are created during cleanup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): use docker-init and cleanup socket files

Enable Docker init system (tini) as PID 1 and clean up xpra socket
files when stopping sessions to prevent zombie processes and leftover
sockets.

Changes:
- Add "Init": True to container host_config to use docker-init (tini)
- Extend _cleanup_x_lock() to remove xpra socket files
  * /run/user/1000/xpra/{display}/socket
  * /run/user/1000/xpra/*-{display}
  * /home/gns3/.xpra/*-{display}

Benefits:
- docker-init (tini) automatically reaps orphan processes, eliminating
  zombie process accumulation (tested: 53 zombies -> 0 zombies)
- Socket cleanup prevents xpra list from showing UNKNOWN sessions
- Cleaner container state after stopping sessions

Testing:
- Started and stopped 3 capture sessions
- Verified 0 zombie processes after stopping
- Verified xpra list shows "No xpra sessions found" (no UNKNOWN)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(web_wireshark): add comprehensive CLI script documentation

Add detailed module docstring to manage_wireshark.py explaining:
- Script purpose: CLI tool for manual management, debugging, and testing
- Important note: Use WebWiresharkManager directly for programmatic access
- Usage examples for all commands (start, stop, restart, stop-all, delete)
- Available commands list with descriptions
- Output format specification (JSON to stdout/stderr)
- Help information for getting command-specific usage

This clarifies that the script is intended as a CLI utility, not for
subprocess calls from within GNS3 server code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web_wireshark): use direct API calls instead of subprocess

Replace subprocess calls to manage_wireshark.py with direct API calls
to WebWiresharkManager, eliminating subprocess overhead and JSON parsing.

Changes:
- Add import for WebWiresharkManager
- Refactor _start_web_wireshark() to use direct API call
- Refactor _stop_web_wireshark() to use direct API call
- Refactor _restart_web_wireshark() to use direct API call

Benefits:
- Code reduction: 78 lines (-68%)
- Better performance: No subprocess creation overhead
- Better logging: Manager logs directly to GNS3 logging system
- Simpler error handling: Direct exceptions instead of return codes
- No JSON parsing: Direct Python objects
- Resource cleanup: Added finally blocks to ensure manager.close()

Testing:
- All Web Wireshark operations work correctly
- Logs now appear in GNS3 server logs instead of stderr
- Error handling improved with proper exception propagation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): resolve circular import with delayed imports

Fix circular import error by moving WebWiresharkManager import from
module level to function level (delayed import).

Circular dependency was:
  link.py → WebWiresharkManager → Controller → link.py

Solution:
  - Remove top-level import of WebWiresharkManager
  - Add delayed imports in each method that uses it:
    * _start_web_wireshark()
    * _stop_web_wireshark()
    * _restart_web_wireshark()

This allows the controller module to fully initialize before importing
WebWiresharkManager, breaking the circular dependency.

Error before fix:
  ImportError: cannot import name 'Controller' from partially initialized
  module 'gns3server.controller' (most likely due to a circular import)

Testing:
  - Successfully imports Link module
  - GNS3 server starts without import errors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: move imports to module level and remove Controller dependency

Remove circular dependency between link.py and manager.py by:

1. Remove Controller import from manager.py
   - Manager no longer imports Controller
   - URL detection now relies on Config or default only
   - link.py passes capture_stream_url to manager

2. Move WebWiresharkManager import to module level in link.py
   - No longer need delayed imports since no circular dependency
   - Clean, standard Python import pattern

3. Remove redundant Config import in ensure_network()
   - Config was already imported at module level

Changes:
- manager.py: -24 lines (removed _get_gns3_url_from_controller and redundant import)
- link.py: -30 lines net reduction after moving import to top

Testing:
- All imports work without circular dependency errors
- GNS3 server starts successfully

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(docker_client): use text response for list_processes API

Docker API /containers/{id}/top returns plain text, not JSON.
The generic _request method auto-parses JSON which caused:
  "'dict' object has no attribute 'strip'"

Fix by using session.get() directly with response.text()
instead of the generic _request method.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): use correct capture stream URL endpoint

Remove passing capture_stream_url from link.py to manager.py.
Manager.py auto-detects URL using correct endpoint:
  /v3/projects/{project_id}/links/{link_id}/capture/stream

This endpoint supports JWT authentication, unlike the compute URL
(/v3/compute/...) which requires compute credentials.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): use container-local PIDs for process killing

- Docker API returns host PIDs, not container PIDs - use pgrep inside
  container to get correct PIDs for kill
- Fix list_processes to parse Docker API JSON response correctly
- Remove unnecessary exec prefix in shell commands
- Add logging for debugging process killing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* perf(web_wireshark): optimize process killing with single pgrep call

Replace sequential _kill_process_tree calls with a new _kill_process_tree_batch
method that combines all patterns into a single regex. This reduces docker exec
calls from 8 to 1, improving performance from ~8 seconds to ~0.9 seconds.

Changes:
- Add _kill_process_tree_batch() method with combined regex pattern matching
- Update start_wireshark_session() to use batch cleanup
- Update stop_wireshark_session() to use batch cleanup
- Update stop_all_sessions() to use batch cleanup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): disable HTML5 client to improve xpra startup speed

Change --html=on to --html=off to disable the xpra HTML5 client interface.
This reduces xpra startup time from ~6.4s to ~2.9s (55% improvement) while
keeping the WebSocket server functional for browser connections.

The HTML5 client is not needed as we only require the WebSocket endpoint
for remote display forwarding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): optimize container health check using Docker built-in status

Replace manual docker exec ping with Docker's built-in health check status
to reduce container startup latency by ~1 second.

Changes:
- Use container["Health"]["Status"] instead of manual ping check
- Skip health check for containers with "healthy" or "starting" status
- Only verify containers with "unhealthy" status
- Keep manual health check for newly started containers

This reduces the container verification time from ~1s to near-zero
for healthy running containers while maintaining safety for unhealthy ones.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): get gateway IP from Docker API instead of container exec

Replace slow docker exec method with fast Docker Network API call to get
gateway IP. This reduces gateway detection from ~850ms to ~1ms (1000x faster).

Changes:
- Use docker.get_network() API to get gateway from IPAM config
- Keep container exec methods as fallback if Docker API fails
- Remove container_id requirement (not needed for Docker API method)

The Docker network gateway is shared by all containers in the network,
so querying the network is more efficient than querying each container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web_wireshark): remove unreliable nameserver fallback for gateway detection

Remove the fallback method that reads /etc/resolv.conf nameserver as gateway.
This method is unreliable because:
- nameserver is not necessarily the gateway (could be upstream DNS)
- Many systems use 127.0.0.53 (systemd-resolved) or 127.0.0.1
- Even when not local, it could be public DNS (8.8.8.8, 1.1.1.1)

The current fallback strategy is sufficient:
1. Docker Network API (fast, reliable)
2. /proc/net/route (standard gateway detection)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): use host perspective for process killing (37x faster)

Replace docker exec with host perspective process management for killing
container processes. This reduces process cleanup from ~850ms to ~23ms.

Key optimization:
- Get container init PID using docker inspect (fast)
- Use pgrep -P <init_pid> to find child processes from host perspective
- Kill processes directly using host PID (no docker exec needed)

Performance improvements:
- Process finding: 850ms → 23ms (37x faster)
- Process killing: 850ms → <1ms (850x faster)
- File checking: 850ms → 0.003ms (280,000x faster)

Fallback to docker exec method if host perspective fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): use host perspective for file cleanup (891x faster)

Replace docker exec with direct filesystem access from host perspective
for cleaning up X lock files and xpra sockets. This reduces cleanup time
from ~890ms to ~1ms (891x faster).

Key optimization:
- Access /proc/<container_pid>/root/ directly from host
- Use os.remove() and glob.glob() instead of docker exec rm -f
- Fallback to docker exec if host perspective fails

This complements the earlier optimization for process killing, further
reducing startup time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert "perf(web_wireshark): use host perspective for file cleanup (891x faster)"

* fix(web_wireshark): recursively kill all descendant processes to prevent orphans

Previous implementation only killed direct children of container init using
`pgrep -P <init_pid>`, but xpra spawns child processes (Xvfb, pulseaudio,
ibus-daemon) that become grandchildren and were not being terminated.

This fix walks the entire process tree recursively to find and kill all
descendant processes, ensuring complete cleanup without orphans.

Performance: ~20-40ms (only 10-20ms slower than previous 23ms, but ensures
thorough cleanup).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(web_wireshark): add comprehensive startup/shutdown performance metrics

Add detailed performance characteristics section documenting:
- Startup performance breakdown (before/after optimization)
- Shutdown performance breakdown (before/after optimization)
- First startup vs subsequent startup comparison
- Measured production data
- Key optimization techniques

Performance improvements: 67% faster startup, 78% faster shutdown,
zero orphan processes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): ensure container stops on project close

Remove dependency on _web_wireshark_container_created flag which gets
reset when project is reloaded, causing container to not stop on project close.

Now directly attempts to stop container on every project close. If container
doesn't exist, the script handles it gracefully. This is simpler and more
reliable than maintaining a flag.

Also removed unnecessary _cleanup_web_wireshark_xpra_sessions() call since
stopping the container automatically terminates all xpra sessions inside.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): ensure container deletion on project delete

Remove dependency on _web_wireshark_container_created flag from
_cleanup_web_wireshark_container() to ensure container is deleted
when project is deleted, even if project was reloaded and flag was reset.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(web_wireshark): remove unused _web_wireshark_container_created flag

This flag was set but never read for any conditionals since we changed
the stop/delete methods to directly attempt the operation. It's purely
redundant code that adds confusion.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): skip unnecessary cleanup using fast host perspective check

Add _check_residuals_exist() function that uses host perspective (~20ms)
to check if residual processes or socket files exist before cleanup.

Returns (has_process_residuals, has_socket_residuals) tuple to allow
selective cleanup - if only sockets need cleaning, skip the slower
process tree killing.

For new containers with no residuals, this saves ~3 seconds of
unnecessary docker exec calls.

Socket cleanup always uses docker exec for safety (avoiding accidental
host filesystem deletion from /proc/<pid>/root/ path errors).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(web_wireshark): increase container exec timeout from 5s to 10s

xpra start with Xvfb initialization can take longer than 5 seconds in Docker containers, causing timeout failures. Increasing timeout to 10 seconds to allow sufficient startup time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* perf(web_wireshark): optimize cleanup and document docker exec limitations

- Combine X lock and xpra socket cleanup into single docker exec call
  Reduces exec calls from 2 to 1 per stop operation, improving performance
  when stopping multiple capture sessions.

- Document Docker exec performance limitations with test data showing
  parallel exec is 42% slower than serial due to Docker daemon's
  internal queuing mechanism.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(links): prevent AssertionError in stream_pcap during rapid stop_capture

Fix race condition where stream_pcap checks link.capturing (True) but
link.capture_node becomes None before accessing link.compute.

This happens when stop_capture() is called and rapidly cleans up
_capture_node while WebSocket requests are still processing.

Now check both capturing and capture_node to ensure capture is still active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(links): prevent AssertionError in stream_pcap during rapid stop_capture

Fix race condition where stream_pcap checks link.capturing (True) but
link.capture_node becomes None before accessing link.compute.

This happens when stop_capture() is called and rapidly cleans up
_capture_node while WebSocket requests are still processing.

Now check both capturing and capture_node to ensure capture is still active,
and log at DEBUG level since this is expected behavior during rapid stop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web_wireshark): load container config from settings

- Load memory, cpus, and pids_limit from WebWireshark config section
- Apply config only on container creation (_start_web_wireshark)
- Skip config on restart (_restart_web_wireshark) as container exists

Users can now configure container resources in gns3_server.conf:

[WebWireshark]
memory = 4g
cpus = 2.0
pids_limit = 2000

If not configured, defaults (2g, 1.0, 1000) are used.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(web_wireshark): add container statistics to /v3/statistics endpoint

Add Web Wireshark container monitoring to the statistics API for
better visibility into packet capture sessions.

Changes:
- Create new stats.py module with collect_webwireshark_stats()
  * Collects container info (status, project, active sessions)
  * Gets resource limits (memory, CPU, PIDs) from container config
  * Gets resource usage via docker stats (memory, CPU, PIDs)
  * Properly closes aiohttp connections to avoid leaks

- Update /v3/statistics endpoint to include webwireshark data
  * total_containers: Total number of Web Wireshark containers
  * running_containers: Number of containers currently running
  * active_sessions: Total active capture sessions
  * containers: Array with per-container details

- Update statistics-api.md documentation
  * Change URL from /v1/statistics to /v3/statistics
  * Add webwireshark field descriptions and examples
  * Add dashboard integration for Web Wireshark monitoring

Example response:
{
  "webwireshark": {
    "total_containers": 1,
    "running_containers": 1,
    "active_sessions": 2,
    "containers": [{
      "project_id": "...",
      "project_name": "test",
      "container_id": "6edc9029bac0",
      "status": "running",
      "memory_limit": "4.0 GB",
      "cpu_limit": "4.0",
      "pids_limit": 4000,
      "memory": "535.7MiB / 4GiB",
      "cpu": "0.29%",
      "pids": 124
    }]
  }
}

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(project): use WebWiresharkManager directly instead of subprocess

Replace subprocess calls to manage_wireshark.py with direct
WebWiresharkManager method calls in project.py. This eliminates
unnecessary process overhead and maintains consistent usage pattern
with link.py.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(logging): use %-formatting instead of f-strings in WebWireshark methods

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(web_wireshark): use info level log when container not found

Change log level from warning to info when container doesn't exist
during stop/delete operations, and fix f-string without placeholders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(logging): lower log level for client disconnection

Change log level from warning to debug when client possibly
disconnects, as this is normal behavior when users close
browser tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(linting): resolve ruff warnings and errors

- Remove unused variable proc (fire-and-forget subprocess)
- Remove duplicate nodes property definition
- Remove extraneous f-prefix from f-strings without placeholders
- Change bare except to except Exception
- Remove unused imports (sys, asyncio, json)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web_wireshark): improve error message when Docker image not found

When creating a container fails due to missing image, provide helpful
error message with docker pull command and local build instructions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(schema): add wireshark field to Link schema

Add wireshark boolean field to Link Pydantic schema so it is
included in API responses when Web Wireshark session is active.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(link): add wireshark state tracking

Track whether Web Wireshark is running on a link by adding
_wireshark boolean property, updated on start/stop operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(chat): add session abort functionality

Add ability to abort streaming chat sessions via REST API.

Changes:
- Add abort flag to MessagesState for tracking abort requests
- Add session_id to state for abort event correlation
- Add _abort_flags dict and check/set/clear functions in gns3_copilot.py
- Add abort_handler_node to generate aborted tool messages
- Modify should_continue to route to abort_handler_node when aborting
- Add abort_session() method in AgentService
- Add POST /sessions/{session_id}/abort API endpoint
- Clear abort flag at stream start

When abort is triggered during streaming:
- If LLM has tool_calls pending, abort_handler_node generates
  aborted tool messages to maintain checkpoint consistency
- Prevents "insufficient tool messages" error on resume

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(chat): send tool_end event when stream is aborted

When a stream is aborted during tool execution, yield proper tool_end
events for aborted tools instead of a generic abort event. This maintains
compatibility with the frontend's expected tool_start/tool_end flow.

Changes:
- Add stream_aborted tracking flag
- After stream loop, check abort flag and yield tool_end events
- Add "abort" to ChatResponse type enum (unused but available)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(web_wireshark): add gns3-wireshark-setup command for Docker image setup

Add a new entry point script that allows users to setup the Web
Wireshark Docker image with a single command:

    pip install gns3-server && gns3-wireshark-setup

The script will:
1. Try to pull gns3/web-wireshark:latest from Docker Hub
2. If pull fails, build the image locally using the included Dockerfile
3. Show raw docker pull/build output for full visibility

Files changed:
- Add setup_wireshark_image.py (new entry point script)
- Update pyproject.toml (add gns3-wireshark-setup entry point)
- Update documentation (README.md, WEB_WIRESHARK.md, web-wireshark-business-process.md)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(appliance): add tags field support for appliances and templates

- Add tags field to ApplianceV1_6 and ApplianceV8 schemas
- Add tags propagation from appliance config to template
- Simplify VPCS builtin template tags

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix test in test_link.py

* Fix link.py after failed tests

* feat(copilot): add device skills system for LLM context injection

- Add skills module with registry and DeviceSkillsTool
- Skills organized by vendor/series for easy extensibility
- Support device_type, category (device/protocol/feature), operation (config/diagnosis)
- First implementation: VPCS skill (gns3_vpcs_telnet)
- Skills tool integrated into teaching_assistant and lab_automation modes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(vpcs): change prompt detection log from warning to debug

The "VPCS prompt not clearly detected" message is not an error,
connection works fine. Change to debug level to reduce noise.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(memory): add uBridge permission issue documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(copilot): include link_id in links_summary output

Return link_id in the links_summary method so that the AI can
identify which link to analyze when using the packet capture tool.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(copilot): add packet capture analysis tool

Add PacketCaptureTool that allows AI to analyze packets from an active
GNS3 capture. The tool downloads capture files from the GNS3 server
and runs tshark analysis to help users understand network traffic.

Features:
- Download capture file from /capture/file endpoint
- Run tshark with custom arguments for flexible analysis
- Support analyzing specific packets (e.g., "explain packet #42")
- Support protocol statistics, traffic analysis, and expert info

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(copilot): use shlex.split to properly parse quoted tshark arguments

tshark_args may contain quoted filter expressions like "-Y \"frame.number == 24\"".
Using plain str.split() breaks these quoted arguments, causing tshark warnings
about conflicting display filters. Use shlex.split() to correctly parse quoted
arguments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): simplify PacketCaptureTool to accept only packet_number

Instead of exposing complex tshark arguments to the LLM, the tool now
accepts a simple packet_number parameter and internally constructs the
tshark command with verbose output. This prevents the LLM from generating
incorrect tshark parameters while still providing detailed packet analysis.

Changes:
- Remove tshark_args and max_lines parameters
- Accept only packet_number as input
- Internal command: tshark -r <file> -Y "frame.number == N" -V
- Returns complete packet structure without line limits

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add CC BY-SA 4.0 license headers to documentation files

Add SPDX license headers referencing docs/LICENSE file to all markdown
and HTML documentation files in the docs directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(copilot): add topology planner skill

Add new skill for automatic network lab topology planning:
- IOU as default image, 10.0.0.0/8 IP range, max 10 nodes
- Node naming convention: R/S/PC + number
- 7-step workflow for create/rename/link/start/verify/config
- IP allocation rules and troubleshooting guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(copilot): add node positioning rules to topology planner skill

Add grid-based positioning for GNS3 nodes:
- Minimum 250px distance between nodes
- Grid layout: 4 columns, 300x250px spacing
- Formula: x = -400 + col * 300, y = -200 + row * 250
- Update workflow params_required to include x, y coordinates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): remove unused helper functions from topology planner skill

Delete Python helper functions that cannot be serialized to JSON:
- calculate_node_positions()
- get_position_for_node()
- allocate_subnet()
- allocate_ip()
- TOPOLOGY_CREATION_STEPS (duplicate of workflow in skill dict)

LLM should use formula descriptions in skill to calculate positions/IPs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(copilot): add topology_planner workflow to lab automation prompt

Add device_skills tool to AVAILABLE TOOLS table.
Add TOPOLOGY PLANNING WORKFLOW section explaining:
- How to query topology_planner skill
- Default conventions (IOU, 10.0.0.0/8, naming rules, position formula)
- 7-step workflow for topology creation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(copilot): support name parameter in gns3_create_node tool

- Add optional 'name' field to node creation, allowing direct naming
- Update Node constructor to pass name parameter
- Remove separate rename step (step_3) from topology planner workflow
- Renumber workflow steps: 1-2-3-4-5-6 (skipping old step_3 rename)

This eliminates the need for a separate gns3_update_node_name_tool call
when creating nodes with predefined names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(copilot): update topology workflow to 6 steps

Remove rename step since name can be set directly in create_gns3_node.
Workflow changed from 7 steps to 6 steps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): replace grid positioning with topology-based layout

Redesign node positioning rules to follow classic network topologies:
- Star: hub at center, spokes radiating outward
- Ring: nodes in circular arrangement
- Bus: linear chain of nodes
- Mesh: grid pattern for interconnected nodes
- Hierarchical: three-tier (Core → Distribution → Access)
- Linear P2P: point-to-point WAN links in a line

Remove old grid formula. Update prompt and workflow to reflect new approach.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(copilot): add note about combining topology types

LLM can mix topology types as needed, e.g., star + linear_p2p for WAN segments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): remove language matching rules from prompts

Remove language matching rules that cause inconsistent responses:
- "User writes in Chinese → Respond in Chinese"
- "User writes in English → Respond in English"

These created ambiguity and led to inconsistent language behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): remove Chinese from response template

Replace mixed Chinese/English headers with English only:
- "操作总结 / Operation Summary" → "Operation Summary"
- "详细信息 / Details" → "Details"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor(copilot): remove Chinese mentions from prompts

Remove references to "Chinese" language in title_prompt.py:
- "Generates concise Chinese or English titles" → "Generates concise titles"
- "If the content is predominantly in Chinese, generate a Chinese title" → removed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(copilot): use short_name for link labels and support short port names

- Match ports by both name and short_name for flexibility
- Use short_name (e.g. "e0/0") instead of full name (e.g. "Ethernet0/0")
  for link labels, improving visual clarity in dense topologies

* feat(topology): replace hardcoded interface names with dynamic placeholders

- Update topology planner skill template to use {short_name} placeholder
- Allows dynamic interface name generation based on device type
- Improves template flexibility for different network device configurations

* refactor(topology): use node-pair IP format and hyphenated naming

- Use 10.0.{node_pair}.x format for P2P links (e.g., 10.0.12.x for R-1-R-2)
- Change node naming to hyphenated format: R-1, R-2, SW-1, PC-1
- Use {short_name} as placeholder for port names in output template
- Remove unused IP_SUBNET_POOL constant
- Simplify ip_planning rules to intuitive format description

* fix(web_wireshark): raise minimum Docker API version to 1.44

Docker daemon requires API version 1.44+, so the minimum
supported version should match rather than defaulting to 1.40.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(web_wireshark): call ensure_network in start_wireshark_session

Ensure Docker network exists before creating container, so that
Web Wireshark works when started via API without going through CLI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(agent): improve Docker image setup with network error detection

- Add `is_network_error()` function to detect network-related failures in Docker pull output
- Modify `pull_image()` to capture output and return success status along with output
- Enhance main logic to detect network errors and skip local build when Docker Hub is inaccessible
- Provide helpful suggestions for network issues (Docker mirror, VPN, manual image transfer)
- Improve error messages to differentiate between network failures and other errors

* feat(docs): add Ubuntu 24.04 development setup guide

Add a comprehensive development environment setup guide for Ubuntu 24.04. The guide includes steps to install dependencies via PPA, configure Docker with mirror accelerators for users in mainland China, set up user permissions, and run the server from source with a Python virtual environment. This provides a clear, step-by-step reference for new contributors and developers.

* feat(docs): add pip mirror note for China mainland users

Add a comment in the development setup documentation suggesting the use of the Aliyun PyPI mirror for users in China mainland to improve installation speed and reliability. This helps overcome network restrictions and slow downloads from the default PyPI repository.

* feat(docs): add LVM root partition expansion guide

Add optional section to development setup documentation with instructions for expanding the root partition when using LVM. This helps developers resolve low disk space issues by utilizing unallocated space in the volume group. The guide includes commands to check LVM status, extend the logical volume, and verify the changes.

* feat(docs): add tshark to development setup dependencies

Add tshark to the apt install command in the development setup documentation. Tshark is required for packet capture functionality in GNS3, ensuring the development environment has all necessary tools for network analysis and debugging.

* feat: add GNS3 documentation skill with standardized structure

Add new documentation skill file defining standards for GNS3 technical documentation. The skill establishes a structured approach focusing on architecture diagrams, flow diagrams, and text descriptions while prohibiting code examples and user scenarios. This ensures consistent, high-quality documentation across the GNS3 ecosystem.

* feat(docs): update documentation skill to focus on server technical docs

Update the GNS3 documentation skill to specifically target server technical documentation under the docs/ directory. The revised standard emphasizes high-level understanding over implementation details, using ASCII diagrams for architecture and business processes, API endpoint tables, and measured performance data. Code specifics are intentionally omitted, directing readers to the codebase for implementation details.

* feat(docs): rewrite documentation skill and statistics API doc

- Rewrite gns3-documentation skill to match actual server-side doc style:
  focus on architecture/flow diagrams, API data, skip code details
- Switch diagram standard from ASCII to Mermaid (GitHub native rendering)
- Rewrite statistics-api.md with Mermaid architecture and sequence diagrams,
  add missing webwireshark container fields (memory_limit, cpu_limit, pids_limit),
  remove speculative content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(docs): update VNC WebSocket console documentation with Mermaid diagrams

- Replace ASCII diagrams with Mermaid flowcharts for better visualization
- Clarify connection flow between browser, controller, compute, and VNC server
- Update authentication details and endpoint descriptions
- Add missing documentation for packet capture workflow
- Improve overall readability and maintainability

* docs: add AI disclaimer to documentation files

Add a standardized disclaimer to multiple documentation files indicating that the content has been organized by AI with reference to actual code. The disclaimer warns users that AI can make mistakes and advises verification against the source code when in doubt. This improves transparency about the documentation's origin and encourages careful usage.

* feat(docs): update chat API documentation with new features and clarifications

- Update title from "Design Document" to reflect current implementation status
- Add new features: session abort, copilot modes (teaching_assistant, lab_automation_assistant), session pinning
- Enhance architecture diagram with LangGraph StateGraph details including abort_handler_node, title_generator_node, and conditional edges
- Clarify statistics tracking: add ai_response_counted flag, filter title_generator_node from LLM counts, explain incremental token counting
- Improve documentation accuracy for real-time statistics collection and token calculation methods

* feat(docs): restructure command security documentation with visual workflows

- Replace verbose implementation details with concise architecture overview
- Add Mermaid diagrams to visualize command filtering and multi-line expansion flows
- Simplify configuration instructions and remove redundant examples
- Consolidate file structure and function reference tables for clarity
- Maintain all security principles while improving readability and maintainability

* feat(context): refactor context window management documentation for clarity

- Reorganize documentation with improved structure and visual diagrams
- Add Mermaid diagrams to illustrate architecture and trimming process
- Simplify content while maintaining technical accuracy
- Update token counting and trimming strategy explanations
- Enhance readability with better formatting and component tables

* feat(docs): update LLM model configs documentation

- Change config column type from JSONB to JSON (JSONB on PostgreSQL)
- Update provider table to mark base_url as required with planned optional status
- Add note about base_url being currently required in API schema
- Clarify GET own configs endpoint returns plain array
- Add copilot_mode field to update request schema
- Document update limitations for context_strategy and copilot_mode fields

* feat(docs): add GNS3StartNodeQuickTool and update node creation examples

- Add documentation for new `GNS3StartNodeQuickTool` (`start_gns3_node_quick`) that starts nodes without waiting for boot completion
- Update node creation example to include optional `name` field in template placement
- Clarify dynamic wait time strategy for `GNS3StartNodeTool` and contrast with quick tool
- Update tool file structure to reflect new configuration, display, and packet capture tools
- Fix truncated line in suspend tool documentation

* feat(docs): add comprehensive documentation structure with CC BY-SA 4.0 license

Add initial documentation directory with detailed README.md that outlines:
- Dual license structure (CC BY-SA 4.0 for docs, GPLv3 for code)
- Complete directory structure for features, AI Copilot, and bugs
- Feature documentation covering Controller+Compute setup, Statistics API, VNC WebSocket console, and Web Wireshark
- AI Copilot implemented features including Chat API, LLM model configs, command security, and multi-vendor device support

This provides organized technical documentation for the GNS3 server project with proper licensing and feature coverage.

* docs: update multi-vendor device support documentation

- Simplify vendor support table by removing redundant platform column
- Add VPCS as a simulator in status column
- Improve VPCS driver diagram with Mermaid syntax and detailed components
- Document VPCS-specific Netmiko parameters (fast_cli, global_delay_factor)
- Update VPCS tool usage example with connection options structure
- Remove outdated Nornir configuration approaches, reference current implementation
- Add file reference for VPCS tools location
- Clean up documentation structure for better readability

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: YueGuobin <yueguobin@gmail.com>
Co-authored-by: Jeremy Grossmann <grossmj@gns3.net>
2026-04-20 22:56:55 +08:00
arl1984 de0d050689 Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)
The run() cleanup block was guarded by `except (ConnectionError, OSError):`,
so exits via asyncio.CancelledError or any other exception type skipped
cleanup. Result: `_reader_process` stays pinned to the dead reader and
`_get_reader()` returns None for every subsequent client — the silent-proxy
symptom described in #2344.

Convert the except block to try/finally so cleanup always runs, regardless
of how `_process()` exits. Also:
- catch asyncio.CancelledError + generic Exception (with log.exception) so
  unexpected failures don't swallow the cleanup
- reset `_current_read = None` after cancellation
- use `dict.pop(..., None)` instead of `del` to avoid KeyError races if
  the broadcast loop's timeout handler already removed the entry

Triggering pattern observed in practice: a diagnostic tool opens a console,
sends a few commands, and closes abruptly (e.g. from a test harness or
orchestration script that cancels its Task). If the `_process()` task was
awaiting on one of the `network_read` / `reader_read` futures at the time
of cancellation, the CancelledError propagates up through `run()` and
bypasses the ConnectionError-only except clause. The proxy accepts future
connections (the listen socket is still alive) but never forwards any data
because `_reader_process` never got reset.

Validated against gns3/gns3-server:latest (2.2.56.1) running a 10-scenario
sequential regression batch that previously hung reliably on the 4th
sp_v1 / L3VPN scenario and now completes cleanly across all 10.
2026-04-16 14:46:49 +00:00
grossmj 80cc85e5d5 Fix exception when custom adapters is not set 2026-04-15 14:17:12 +08:00
grossmj 737a174ae5 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/project.py
#	gns3server/crash_report.py
#	gns3server/version.py
2026-04-13 11:45:26 +08:00
Jeremy Grossmann d59709071a Merge pull request #2668 from GNS3/release/v2.2.58.1
Release v2.2.58.1
2026-04-12 21:18:23 +08:00
grossmj ae3ae46151 Development on 2.2.59.dev2 2026-04-12 21:17:17 +08:00
grossmj 58fc6a8478 Release v2.2.58.1 2026-04-12 20:59:20 +08:00
grossmj d9b8d0d1ff Sync appliances 2026-04-12 20:49:56 +08:00
grossmj 2b0b31b402 Merge branch 'master' into 2.2 2026-04-12 20:47:14 +08:00
grossmj 66ce3ec280 Fix bug when custom_adapters is None in port_factory.py 2026-04-12 14:05:56 +08:00
grossmj a040acfaa5 Have optional body in start node API endpoint 2026-04-12 14:04:04 +08:00
grossmj 9c988b34d0 Fix snapshots after merging 2026-04-11 19:54:49 +08:00
grossmj 0d3fad8c8f Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/controller/export_project.py
#	gns3server/controller/project.py
#	gns3server/controller/snapshot.py
#	gns3server/crash_report.py
#	gns3server/schemas/snapshot.py
#	gns3server/static/web-ui/26.34a83d9cee7db39cd0de.js
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.d74d38241f0602d1b3e0.js
#	gns3server/version.py
#	gns3server/web/route.py
#	tests/handlers/api/controller/test_project.py
#	tests/handlers/api/controller/test_snapshot.py
2026-04-11 19:22:05 +08:00
grossmj 4a47151526 Development on 2.2.59.dev1 2026-04-11 18:05:54 +08:00
Jeremy Grossmann adeec10188 Merge pull request #2667 from GNS3/release/v2.2.58
Release v2.2.58
2026-04-11 17:42:38 +08:00
Jeremy Grossmann e747deae88 Merge branch 'master' into release/v2.2.58 2026-04-11 17:37:31 +08:00
Jeremy GrossmannandCopilot Autofix powered by AI 264fffbc6c Potential fix for pull request finding 'CodeQL / Information exposure through an exception'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-04-11 17:34:53 +08:00
grossmj a295d653b8 Release v2.2.58 2026-04-10 20:36:01 +08:00
grossmj c6eec799fb Remove old files 2026-04-10 20:27:46 +08:00
grossmj 8503840307 Bundle web-ui v2.2.58 2026-04-10 20:24:16 +08:00
grossmj c4dbecc1ea Sync appliances 2026-04-10 20:11:16 +08:00
Jeremy Grossmann 3d71967983 Merge pull request #2665 from GNS3/refector-snapshots
Snapshot refactoring
2026-04-10 20:01:45 +08:00
grossmj 161e016594 Remove log message 2026-04-10 19:58:55 +08:00
grossmj 82f795c9ee Add some additional tests 2026-04-10 19:50:42 +08:00
grossmj 2670c68467 Last adjustments for import/export 2026-04-10 18:58:21 +08:00
grossmj 6f7730c455 Update snapshots when duplicating a project 2026-04-09 23:18:55 +08:00
grossmj 274cef6cf5 Add description for snapshots 2026-04-09 20:25:44 +08:00
grossmj fbea9b655d Fix issue when restoring a snapshot of a duplicated project 2026-04-08 22:16:47 +08:00
grossmj 6869f2d71d Snapshot refactoring 2026-04-08 20:02:01 +08:00
Jeremy Grossmann da5a1e9172 Merge pull request #2664 from yueguobin/fix/symbol-cors-headers
Fix/symbol cors headers
2026-04-07 22:27:47 +08:00
YueGuobin 8ab3243c79 fix(symbols): add authentication to symbol raw endpoint
Enable Symbol.Audit privilege requirement for the symbol file download
endpoint. This was previously disabled as a workaround for a web-ui bug.
2026-04-07 20:56:20 +08:00
YueGuobin 8041d2906c fix(symbols): add CORS headers to symbol file responses
FileResponse does not properly include CORS headers when served from
a different origin. This fix manually adds the Access-Control-Allow-Origin
header based on the request origin.

Fixes CORS policy errors when accessing symbol files from frontend
applications running on localhost:4200 or other origins.
2026-04-07 20:22:15 +08:00
Jeremy Grossmann ae8ef84668 Merge pull request #2663 from cristian-ciobanu/project-monitoring
Enhancement: Refresh projects list without restarting the GNS3 server
2026-04-07 18:09:29 +08:00
grossmj 5b04fd0336 Allow to find new project in sub dirs 2026-04-07 18:05:32 +08:00
Jeremy GrossmannandCopilot de8abc0af0 Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-07 17:37:34 +08:00
Jeremy GrossmannandCopilot 725cd0428c Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-07 17:35:33 +08:00
Jeremy Grossmann fdbb7bb70f Merge branch '3.0' into project-monitoring 2026-04-07 15:10:42 +08:00
grossmj e86a05a2ef Fix tests 2026-04-07 15:09:10 +08:00
Jeremy Grossmann 2ce7662c71 Merge branch '3.0' into project-monitoring 2026-04-07 12:58:56 +08:00
Cristi 104f56cb55 Enhancement: Refresh projects list without restarting the GNS3 server 2026-04-07 00:21:56 +03:00
grossmj b4edfdb063 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/appliances/infix.gns3a
#	gns3server/appliances/juniper-vJunos-router.gns3a
#	gns3server/controller/ports/port.py
#	gns3server/crash_report.py
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
2026-04-06 23:36:03 +08:00
Jeremy Grossmann 2e1db7de6f Merge pull request #2662 from UmmmAGoodName/3.0
Fix addressing issue #2005 including tests
2026-04-06 20:10:47 +08:00
grossmj d97aedb625 Fix tests 2026-04-06 20:03:38 +08:00
grossmj b07685666b Regenerate DB migration script 2026-04-06 19:55:11 +08:00
grossmj b1852f7bcf Fix accessing username in authentication.py 2026-04-06 19:37:17 +08:00
UmmmAGoodName 4cf8b79692 Fix addressing issue #2005 including tests 2026-04-05 21:51:52 +02:00
Jeremy Grossmann e871a1aed6 Merge pull request #2661 from GNS3/revert-2660-backport-telnetlib3
Revert "Backport telnetlib3 changes"
2026-04-05 22:02:05 +08:00
Jeremy Grossmann b222fba42c Revert "Backport telnetlib3 changes" 2026-04-05 21:58:21 +08:00
Jeremy Grossmann f9957b1d90 Merge pull request #2660 from GNS3/backport-telnetlib3
Backport telnetlib3 changes
2026-04-05 21:08:43 +08:00
grossmj bc6374f7fc Add keepalive mechanism using the NOP command 2026-04-05 13:30:38 +08:00
Cristi c739a16d70 Improved exception handling and telnet client disconnect 2026-04-05 13:29:35 +08:00
Cristi 7684ce60ce Backport: Re-write current Telnet server implementation using telnetlib3 library 2026-04-05 13:29:25 +08:00
Jeremy Grossmann 1d10bda22e Merge pull request #2659 from GNS3/appliance-v8
Add support for appliance format version 8
2026-04-04 20:14:23 +08:00
grossmj 51eb88ead1 Use get method for registry_version to avoid KeyError 2026-04-04 20:09:31 +08:00
grossmj 630c2d811d Add support for appliance format version 8 2026-04-04 20:04:42 +08:00
grossmj ef546a46f9 Sync appliances 2026-04-04 19:55:13 +08:00
Jeremy Grossmann 9290b37292 Merge pull request #2654 from yueguobin/feature/extended-statistics
Feature/extended statistics
2026-04-03 21:43:50 +08:00
Guobin Yue 2a11ab6ba3 Merge branch '3.0' into feature/extended-statistics 2026-04-03 21:39:38 +08:00
Jeremy Grossmann 55fa7bb10c Merge pull request #2658 from GNS3/convert-db-fields-to-json
Convert database template fields from PickleType to JSON
2026-04-03 21:06:29 +08:00
grossmj 1dc31127d9 Convert database template fields from PickleType to JSON 2026-04-03 20:59:57 +08:00
Jeremy Grossmann d9f12366bc Merge branch '3.0' into feature/extended-statistics 2026-04-01 12:54:54 +08:00
YueGuobinandClaude Opus 4.6 050b7a80ab docs: add Controller + Compute setup guide
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 02:08:18 +08:00
Jeremy Grossmann c9f4f7983b Merge pull request #2645 from cristian-ciobanu/telnetlib3
Enhancement: Re-write current Telnet server implementation using telnetlib3 library
2026-03-31 20:22:59 +08:00
grossmj 0b6f17cf8e Add keepalive mechanism using the NOP command 2026-03-31 18:30:59 +08:00
grossmj 38ebaaa90a Remove requests dependency from dev-requirements.txt 2026-03-31 17:30:41 +08:00
grossmj 9a06830f88 telnetlib3 is a shared dependency with AI Copilot 2026-03-31 17:22:34 +08:00
Jeremy Grossmann bebf070e4d Merge branch '3.0' into telnetlib3 2026-03-31 14:33:35 +08:00
Guobin Yue 02dc2b9a41 Merge branch '3.0' into feature/extended-statistics 2026-03-30 22:48:39 +08:00
Jeremy Grossmann d40e292047 Merge pull request #2655 from yueguobin/fix/device-type-error-message
fix(copilot): improve device_type error message with tested types and…
2026-03-30 14:42:14 +08:00
YueGuobin 4cd74901a5 fix(copilot): improve device_type error message with tested types and config instructions
Add tested device types (cisco_ios_telnet, gns3_huawei_telnet_ce, gns3_ruijie_telnet)
to the error message and include Web UI configuration path.
2026-03-30 14:09:36 +08:00
YueGuobin d64e4e28e3 docs: add future optimization for per-compute node statistics 2026-03-30 00:23:35 +08:00
YueGuobin b379747aeb docs: add statistics API documentation
Document the extended /statistics endpoint with complete
response schema and field descriptions.
2026-03-30 00:09:09 +08:00
YueGuobin 33fdfd65ba feat(statistics): distinguish open vs closed project nodes
Closed project nodes don't have status info in topology JSON.
Add open_project_nodes and closed_project_nodes counts to
help clarify why by_status may be empty.
2026-03-30 00:06:50 +08:00
YueGuobin b4caffe13b fix(statistics): handle closed projects where nodes/links are dicts
Open projects store Node/Link objects, but closed projects store
dictionaries loaded from topology JSON. This fix checks the type
before accessing attributes.
2026-03-29 23:59:17 +08:00
YueGuobin 8b4c3a3517 feat(controller): extend /statistics API with project, node and link stats
Return aggregated statistics:
- computes: per-compute CPU/memory/disk stats (existing)
- projects: total, opened, closed counts
- nodes: total count with breakdown by type and status
- links: total count with capturing count
2026-03-29 23:49:36 +08:00
Jeremy Grossmann 3dbae9585c Merge pull request #2652 from GNS3/fix/2651
Use FastAPI Lifespan Events
2026-03-28 10:02:41 +08:00
grossmj 46f77eb7d5 Remove old add_event_handler 2026-03-28 09:59:29 +08:00
grossmj 01a68fb23a Use FastAPI Lifespan Events 2026-03-28 09:54:22 +08:00
Jeremy Grossmann 89d665f22b Merge pull request #2650 from yueguobin/feature/control-offset
feat(link): add control_offset field to LinkStyle
2026-03-28 08:08:10 +08:00
YueGuobin 7f9416a070 feat(link): add control_offset field to LinkStyle 2026-03-28 02:11:30 +08:00
grossmj b8764b29a5 Upgrade FastAPI to v0.135.2 2026-03-27 10:57:59 +08:00
Jeremy Grossmann 3b261ebbfc Merge pull request #2646 from yueguobin/feature/symbol-delete-api
feat(symbols): add DELETE API for removing custom symbol files
2026-03-27 10:51:51 +08:00
YueGuobin e651ad589b feat(symbols): add DELETE API for removing custom symbol files
- Add DELETE /v3/symbols/{symbol_id:path} endpoint
- Prevent deletion of built-in symbols (:/ prefix or in resource directory)
- Clear symbol size cache after deletion
- Require Symbol.Allocate privilege
2026-03-27 02:28:27 +08:00
Cristi 7f3468dcd3 Improved exception handling and telnet client disconnect 2026-03-24 15:23:00 +02:00
Cristi 83558d4d9f Enhancement: Re-write current Telnet server implementation using telnetlib3 library 2026-03-24 13:23:45 +02:00
Jeremy Grossmann 4701712a86 Merge pull request #2644 from GNS3/release/v2.2.57
Release v2.2.57
2026-03-24 10:10:22 +08:00
grossmj e5ff9e7f00 Development on 2.2.58.dev1 2026-03-24 08:35:49 +08:00
grossmj 7adb0c5226 Release v2.2.57 2026-03-23 09:45:46 +08:00
grossmj 667833dda5 Merge remote-tracking branch 'origin/master' into 2.2 2026-03-23 09:38:13 +08:00
grossmj 646ff00ade Sync appliances 2026-03-23 09:37:15 +08:00
Jeremy Grossmann 77bea35298 Merge pull request #2641 from cristian-ciobanu/3.0
Enhancement Added link type support on the server side
2026-03-20 13:15:03 +08:00
Jeremy Grossmann 53051dd481 Merge pull request #2631 from yueguobin/feature/ai-copilot-bridge
feature/ai-copilot-bridge Branch Summary
2026-03-20 13:05:50 +08:00
YueGuobin 77a38cef03 docs: clarify system scope - baseline config with tool handoff
Clarify the positioning of the template-based system:

Scope (0 → 1):
- Topology provisioning (nodes + links)
- Baseline configuration (IP, routing protocols)
- Management access setup (SSH/HTTPS/NETCONF)
- Basic security configuration

Handoff to Production Tools (1 → N):
- Terraform (Infrastructure as Code)
- REST API (modern device management)
- NETCONF/YANG (standardized configuration)
- Network Controllers (SDN, APIC, etc.)

This clarifies that:
1. The system focuses on rapid environment preparation
2. It complements rather than replaces production tools
3. It's ideal for labs, testing, training, and initial setup
4. Advanced config management is handled by specialized tools
2026-03-20 10:00:23 +08:00
YueGuobin 76c84798dc docs: refactor roadmap - reduce code, add comprehensive diagrams
Major documentation improvements:

Reduced Code Content (~60% reduction):
- Simplified Core Components section with concept-focused descriptions
- Condensed Large-Scale Topology section (kept concepts, removed implementation)
- Streamlined Node Creation Templates (kept workflows, removed tool code)
- Simplified Technical Considerations (kept diagrams, removed code)
- Streamlined Testing Strategy (kept test cases, removed test code)

Added Comprehensive Diagrams:
- System Architecture Overview (4-layer architecture)
- HITL State Transition Diagram (complete workflow with interrupts)
- REST API Endpoints (6 new endpoints with request/response formats)
- SSE Progress Stream (real-time event types)
- Data Flow Diagram (7-step process from user to results)
- Error Handling Flow (4 error types with recovery strategies)
- Template Lifecycle Management (5 stages from DRAFT to ARCHIVED)
- Automatic Layout Strategies (4 layout types with visual examples)
- Auto-Linking Strategies (4 link pattern types with diagrams)
- Security Considerations (3-layer validation approach)
- Error Categories (4 error types with recovery flows)
- Testing Strategy (unit, integration, E2E test scenarios)

Benefits:
- Easier to understand for non-technical stakeholders
- Focus on concepts and workflows rather than implementation
- Visual documentation aids comprehension
- Maintained all critical technical information
- Improved readability and structure
2026-03-20 09:54:58 +08:00
YueGuobin 382b2aefa9 docs: add link creation templates section to roadmap
Add comprehensive link creation templates documentation covering:
- Batch link creation workflow with HITL confirmations
- Link template schema with pattern-based connectivity
- Common topology patterns (Spine-Leaf, Ring, Mesh, Star, Three-tier)
- Intelligent port allocation strategies (round-robin, optimized)
- Performance benchmarks showing 99.9% token savings for large topologies
- Complete workflow example combining all three template systems
2026-03-20 09:44:03 +08:00
YueGuobin 3b4bc93e85 docs: add node creation templates section to roadmap
Added comprehensive node creation template system including:
- Batch node creation workflow (HITL with preview)
- Node template schema (groups, positioning, auto-linking)
- Automatic positioning algorithms (grid, spine-leaf, hierarchical)
- Auto-linking strategies (mesh, paired, linear)
- Batch parallel execution (20-50 concurrent)
- Performance benchmarks for 100-1000+ nodes
- Complete enterprise data center example (724 nodes, 4280 links)

Key benefits:
- 98% token savings for node creation (5000 → 100 tokens for 100 nodes)
- 90% time savings (10 min → 1 min for 100 nodes)
- Auto-linking eliminates manual connection setup
- Combined workflow: Create + configure 724 nodes in ~10 minutes

Updated implementation phases to include Phase 2.5 for node creation templates.
2026-03-20 09:35:45 +08:00
YueGuobin a627d45ca6 docs: add large-scale topology support (1000+ nodes) to roadmap
Added comprehensive section on large-scale topology support including:
- Direct execution mode (skip AI, use rule engine)
- Batch parallel execution (50-100 concurrent)
- Intelligent parameter generation (0 token cost)
- Real-time progress streaming
- Configuration summary generation
- Performance benchmarks for 1000+ nodes
- Multiple addressing schemes (sequential, VLAN-based, hierarchical)

Key benefits:
- 99.5% token savings for 1000 devices (150K → 400 tokens)
- 88% time savings (50 min → 3-5 min)
- Enables rapid provisioning of training labs, CI/CD testing, disaster recovery drills

Updated implementation phases to reflect large-scale support priorities.
2026-03-20 09:26:45 +08:00
YueGuobin 5c42a59413 docs: add template-based configuration roadmap with HITL workflow
Add comprehensive roadmap for implementing Jinja2 template-based
configuration with Human-in-the-Loop confirmations.

Key features:
- Three-step HITL workflow (Template → Parameters → Execute)
- 70-80% token savings for multi-device configurations
- Enhanced safety through human review at each step
- Template reusability across projects

Implementation plan:
- Phase 1: Core MVP (3-5 days)
- Phase 2: UX Enhancement (2-3 days)
- Phase 3: Template Library (2-3 days)
- Phase 4: Advanced Features (3-4 days)
2026-03-20 01:18:56 +08:00
YueGuobin 1378e3b5ec docs: add supported providers list and future enhancements
Add comprehensive documentation for LLM model providers:
- Provider list with default base URLs and requirements
- Examples for different providers (OpenAI, Anthropic, Ollama, Azure)
- Guidelines on when to specify base_url
- Future enhancements section for optional base_url field
2026-03-19 10:12:21 +08:00
YueGuobin 01d24403d3 feat: improve error handling for API configuration errors
Add error_handler utility to detect and format HTML error responses
from misconfigured API base URLs. When the API returns HTML (indicating
configuration issues), users now see a helpful message instead of raw
HTML content.
2026-03-19 00:46:49 +08:00
grossmj c5325fdee4 Install ai-copilot in testing.yml 2026-03-18 16:17:07 +08:00
grossmj 333386ac8b Use status.HTTP_501_NOT_IMPLEMENTED from FastAPI 2026-03-18 16:08:47 +08:00
YueGuobin cd1d28729a feat: make AI Copilot an optional dependency
This change makes AI Copilot features optional to reduce installation
size and support restricted environments.

Changes:
- Split AI dependencies into ai-requirements.txt
- Add ai-copilot optional dependency in pyproject.toml
- Add import protection in gns3server/agent/__init__.py
- Return 501 for AI endpoints when dependencies not installed
- Add gns3server-uninstall-ai-copilot command for cleanup
- Update README with installation and uninstallation instructions

Installation:
- Basic: pip install gns3-server
- With AI: pip install gns3-server[ai-copilot]
- Development: pip install gns3-server[ai-copilot,dev]

Uninstallation:
- gns3server-uninstall-ai-copilot
2026-03-18 15:21:23 +08:00
YueGuobin 0b741dd834 test: simplify class registration assertions in custom netmiko tests
Refactored test assertions for Huawei CE, Ruijie, and VPCS telnet drivers to compare only class names instead of full module paths. This change reduces test brittleness when classes are imported via different module paths while maintaining validation of correct class registration in CLASS_MAPPER and CLASS_MAPPER_BASE.
2026-03-17 22:45:02 +08:00
YueGuobin 55c7d249fb feat(tests): improve class comparison in custom netmiko tests
Refactor test assertions to compare classes by module and name instead of direct object comparison. This ensures tests remain reliable when classes are imported via different paths, preventing false failures due to import variations. Changes applied to Huawei CE, Ruijie, and VPCS telnet driver tests.
2026-03-17 22:33:28 +08:00
YueGuobin e1f25ce63b fix(tests): replace assertIs with assertEqual in custom netmiko tests
Changed test assertions from `assertIs` to `assertEqual` for class mapper comparisons in Huawei CE, Ruijie, and VPCS telnet driver tests. This ensures proper equality checking rather than identity checking, which is more appropriate for class comparisons in these test cases.
2026-03-17 22:06:53 +08:00
YueGuobin 2557614ba8 refactor(llm-configs):
remove unused reserved_jsonb fields

   Remove the three reserved JSONB fields (reserved_jsonb_1, reserved_jsonb_2, reserved_jsonb_3) from the llm_model_configs
   table. These fields were planned for future use but are no longer needed.
2026-03-17 21:43:48 +08:00
Cristi de1b539fb6 Enhancement Added link type support on the server side 2026-03-17 15:29:58 +02:00
YueGuobin a240620443 fix(custom_netmiko): use
assertIs instead of assertEqual for class comparison

   Fix test failures in custom Netmiko driver tests by using assertIs instead
   of assertEqual when comparing class objects registered in CLASS_MAPPER.

   The issue occurred because test files add project root to sys.path, allowing
   the same module to be imported with different paths (e.g., gns3_copilot...
   vs gns3server.agent.gns3_copilot...). assertEqual compares class __module__
   attributes which differ based on import path, while assertIs checks object
   identity which correctly identifies them as the same class.

   Modified files:
   - test_huawei_ce.py
   - test_ruijie_telnet.py
   - test_vpcs_telnet.py
2026-03-17 21:24:39 +08:00
YueGuobin bd06d3a08e feat(vpcs_tools_netmiko): update Nornir import to use core module
Update the import statement for Nornir from `nornir.core.nornir` to `nornir.core` to align with the latest Nornir library structure and avoid potential import errors. This ensures compatibility with updated Nornir versions.
2026-03-17 21:16:15 +08:00
YueGuobin a2a52c8a7d feat(vpcs_tools_netmiko): import Nornir class for type hints
Add import of Nornir class from nornir.core.nornir to support type annotations and improve code clarity in the VPCS tools module.
2026-03-17 16:31:44 +08:00
Jeremy Grossmann 8f325b4127 Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-17 13:41:21 +08:00
grossmj cb18b60c5d Ignore HTTPException received when closing a project 2026-03-17 13:23:19 +08:00
Jeremy Grossmann 0d1341b4e0 Merge pull request #2640 from UmmmAGoodName/Dymamips_fix-3.0
Fixed issue #1605 regarding Cisco slots causing configs to break
2026-03-17 12:54:45 +08:00
grossmj 4f863f3767 Fix typo 2026-03-17 12:51:36 +08:00
grossmj 0aa6566e50 Prevent router to be duplicated when running and add tests 2026-03-17 12:49:38 +08:00
UmmmAGoodName 95bd76a212 Fixed issue #1605 regarding Cisco slots causing configs to break 2026-03-16 19:09:32 +01:00
YueGuobinandClaude Sonnet 4.5 a2c1a913ca docs: add VNC WebSocket console documentation
Add comprehensive documentation for VNC WebSocket console support in GNS3.

Topics covered:
- Architecture and connection flow
- API endpoints (Controller and Compute)
- WebSocket data forwarding implementation
- Supported node types (QEMU and Docker)
- Authentication and authorization
- Configuration examples
- Troubleshooting guide
- Performance considerations
- Security best practices
- Comparison with SPICE

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-17 01:28:52 +08:00
YueGuobinandClaude Sonnet 4.5 64d3c02d42 refactor(compute): remove SPICE WebSocket console support
Remove all SPICE WebSocket-related code due to frontend dependency issues
with spice-html5 library (missing RSAKey/BigInteger implementations).

Changes:
- Remove start_spice_websocket_console() from BaseNode
- Remove SPICE WebSocket endpoints from QEMU and Docker compute APIs
- Remove SPICE WebSocket proxy endpoint from controller API
- Remove WebSocket subprotocol handling from authentication layers
- Remove SPICE documentation

The SPICE console type remains functional for direct connections,
but WebSocket proxy support has been removed.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-17 01:15:26 +08:00
YueGuobin c98f802362 feat(compute): add SPICE WebSocket console support
Add WebSocket-based console support for SPICE protocol, enabling
   browser-based graphical console access with enhanced features
   like clipboard sharing, USB redirection, and audio streaming.

   Changes:
   - Add start_spice_websocket_console() method in BaseNode for SPICE
     WebSocket to TCP bridging with bidirectional binary forwarding
   - Add /console/spice WebSocket endpoints in QEMU and Docker compute APIs
   - Add /console/spice WebSocket proxy endpoint in controller API
   - Add comprehensive API documentation in docs/features/

   Supported console types:
   - spice: Basic SPICE protocol support
   - spice+agent: SPICE with spice-vdagent for enhanced features

   Architecture:
   - Browser WebSocket → Controller (JWT + RBAC) → Compute (Basic Auth)
   - No external websockify processes required
   - Consistent with existing VNC WebSocket implementation
2026-03-16 22:21:25 +08:00
YueGuobinandClaude Sonnet 4.5 ba92b405da feat: add VNC WebSocket console support for Docker and QEMU nodes
Add VNC console WebSocket endpoints for Docker and QEMU nodes:
- Add /console/vnc WebSocket endpoint to compute API (Docker & QEMU)
- Add /console/vnc WebSocket endpoint to controller API
- Implement start_vnc_websocket_console() in BaseNode
- Forward VNC WebSocket traffic between controller and compute layers

The implementation provides bidirectional WebSocket to TCP forwarding
for VNC protocol (RFB) connections, allowing browser-based VNC console
access to containers and VMs.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-16 16:40:00 +08:00
Guobin Yue 09aa12cf94 Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-15 23:13:15 +08:00
YueGuobin ffcfa4ccb1 feat(telnet_server): improve error handling and connection management
- Catch OSError alongside ConnectionError in connection processing to handle more network errors
- Move client_info retrieval inside try block to prevent AttributeError on failed connections
- Replace bare except with specific exceptions (OSError, ConnectionError, asyncio.TimeoutError)
- Improve error logging to include specific exception details and client information
2026-03-15 23:07:06 +08:00
Jeremy Grossmann 6ac4c27bc1 Merge pull request #2639 from yueguobin/fix/telnet-server-connection-race-condition-3.0
Fix/telnet server connection race condition 3.0
2026-03-15 23:01:57 +08:00
Jeremy Grossmann 632b3daab7 Merge pull request #2635 from yueguobin/fix/iou-suspend-405
fix(iou): return 405 error for unsupported suspend operation
2026-03-15 22:47:42 +08:00
grossmj 6e7738a14f Return 405 error for unsupported actions for other node types 2026-03-15 22:38:51 +08:00
YueGuobin b71b323fd4 feat(agent): improve tiktoken initialization and device registration
- Configure tiktoken cache directory to isolate encoding files
- Add logging and timing for tiktoken initialization process
- Make Huawei CE and Ruijie Telnet device registration idempotent
- Add duplicate registration prevention with global flags
- Add logging for device type registration status
- Update .gitignore to exclude tiktoken cache files
2026-03-15 21:25:14 +08:00
YueGuobin 9a01e2194e chore: remove telnet race condition test files and documentation
Remove the bug report documentation and stress test files for the telnet server connection race condition issue.
2026-03-15 13:40:34 +08:00
YueGuobin 4f8daced17 Merge branch 'fix/telnet-server-connection-race-condition-3.0' into feature/ai-copilot-bridge 2026-03-15 13:38:40 +08:00
Guobin Yue 08b579ff83 Merge branch '3.0' into fix/telnet-server-connection-race-condition-3.0 2026-03-15 01:17:30 +08:00
Guobin Yue 9aa3f3b7a0 Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-15 00:37:17 +08:00
YueGuobin 1aced27dc1 feat(docs): add telnet server connection race condition bug report
Add detailed bug report documenting a race condition in the telnet server's broadcast logic. The bug occurs when a client disconnects while the server is iterating through connections to broadcast data, causing an uncaught OSError from getpeername() call.

Key details included:
- Error logs showing OSError: [Errno 107] Transport endpoint is not connected
- Architecture diagram illustrating the telnet proxy server setup
- Root cause analysis showing the race condition timeline
- Problematic code location in telnet_server.py line 305
- Exception hierarchy explanation showing why OSError isn't caught
- Impact assessment and proposed solutions

This documentation will help track and resolve the issue where client disconnections during broadcast cause unhandled exceptions.
2026-03-15 00:19:51 +08:00
YueGuobin cda5fdd94b feat(telnet_server): improve error handling and connection management
- Catch OSError alongside ConnectionError in connection processing to handle more network errors
- Move client_info retrieval inside try block to prevent AttributeError on failed connections
- Replace bare except with specific exceptions (OSError, ConnectionError, asyncio.TimeoutError)
- Improve error logging to include specific exception details and client information
2026-03-15 00:19:51 +08:00
YueGuobin e4faf673af fix(telnet): handle connection race condition during broadcast
Fixes two critical issues in telnet server when clients rapidly
   connect/disconnect during broadcast operations:

   1. **OSError [Errno 107]**: Transport endpoint not connected
      - Root cause: getpeername() called outside try block
      - Fix: Move getpeername() inside try block and catch OSError
      - Expand exception handling to include OSError and TimeoutError

   2. **KeyError**: Double deletion from connections dictionary
      - Root cause: Connection deleted in broadcast loop, then deleted
        again in top-level exception handler
      - Fix: Use dict.pop(key, None) instead of del dict[key]

   **Changes**:
   - Line 216: Add OSError to top-level exception handler
   - Line 227-228: Use pop() to avoid KeyError on double deletion
   - Line 305-316: Move getpeername() inside try block, expand
     exception types, use pop() for safe deletion

   **Impact**:
   - Prevents unhandled exceptions from propagating to asyncio event loop
   - Ensures proper resource cleanup even with race conditions
   - No resource leaks or zombie connections
   - Long-lived clients unaffected by rapid client disconnects

   **Test Script**:
   - Added stress test script to reproduce the issue
   - Supports IOU-L3, VPCS, and generic device types
   - Rapid clients send broadcast-triggering commands (show/run/OSPF)

   **Related**: Fixes bug documented in docs/bugs/telnet-server-connection-race-condition.md
2026-03-15 00:19:51 +08:00
Jeremy Grossmann ad784fbf6f Merge pull request #2637 from UmmmAGoodName/3.0
Minor improvements
2026-03-14 19:10:51 +08:00
Jeremy Grossmann c6be1a28ae Change first() to one_or_none() for image query 2026-03-14 19:06:27 +08:00
YueGuobin 02b20e4ff3 feat(docs): add telnet server connection race condition bug report
Add detailed bug report documenting a race condition in the telnet server's broadcast logic. The bug occurs when a client disconnects while the server is iterating through connections to broadcast data, causing an uncaught OSError from getpeername() call.

Key details included:
- Error logs showing OSError: [Errno 107] Transport endpoint is not connected
- Architecture diagram illustrating the telnet proxy server setup
- Root cause analysis showing the race condition timeline
- Problematic code location in telnet_server.py line 305
- Exception hierarchy explanation showing why OSError isn't caught
- Impact assessment and proposed solutions

This documentation will help track and resolve the issue where client disconnections during broadcast cause unhandled exceptions.
2026-03-14 15:47:36 +08:00
YueGuobin c3b18f4ce2 feat(copilot): add dynamic wait time calculation for node startup
Optimize GNS3StartNodeTool with device-type-aware wait time calculation
   to significantly reduce startup time for fast devices (VPCS, IOU).

   Changes:
   - Add NODE_STARTUP_TIME configuration
     * VPCS: 15s base + 2s per additional node
     * IOU: 25s base + 3s per additional node
     * Other devices: 120s base + 10s per additional node (conservative)

   - Add calculate_startup_time() function
     * Detects device types via node.node_type
     * Uses fast startup time if all nodes are VPCS/IOU
     * Uses conservative time if any slow device present
     * Logs selected strategy and detected types

   - Optimize GNS3StartNodeTool._run() method
     * Retrieve node info (including node_type) before starting
     * Calculate wait time based on detected device types
     * Send start commands after info retrieval
     * Use calculated wait time for progress bar
     * Reuse collected node objects for status retrieval

   Performance improvements:
   - 1 VPCS node: 140s → 15s (89% faster)
   - 5 VPCS nodes: 180s → 23s (87% faster)
   - 1 IOU node: 140s → 25s (82% faster)
   - 5 IOU nodes: 180s → 37s (79% faster)
   - Mixed VPCS/IOU: 180s → 33s (82% faster)

   Documentation:
   - Update node-control-tools.md with dynamic wait time strategy
   - Add device type comparison table
   - Document performance improvements
   - Update changelog

   Code quality:
   - All comments in English
   - flake8 check passed
   - mypy check passed
2026-03-14 15:24:27 +08:00
YueGuobin a946ef2d69 eat(copilot): add dynamic wait time calculation for node startup
Optimize GNS3StartNodeTool with device-type-aware wait time calculation
   to significantly reduce startup time for fast devices (VPCS, IOU).

   Changes:
   - Add NODE_STARTUP_TIME configuration
     * VPCS: 10s base + 2s per additional node
     * IOU: 20s base + 3s per additional node
     * Other devices: 120s base + 10s per additional node (conservative)

   - Add calculate_startup_time() function
     * Detects device types via node.node_type
     * Uses fast startup time if all nodes are VPCS/IOU
     * Uses conservative time if any slow device present
     * Logs selected strategy and detected types

   - Optimize GNS3StartNodeTool._run() method
     * Retrieve node info (including node_type) before starting
     * Calculate wait time based on detected device types
     * Send start commands after info retrieval
     * Use calculated wait time for progress bar
     * Reuse collected node objects for status retrieval

   Performance improvements:
   - 1 VPCS node: 140s → 10s (93% faster)
   - 5 VPCS nodes: 180s → 18s (90% faster)
   - 1 IOU node: 140s → 20s (86% faster)
   - 5 IOU nodes: 180s → 32s (82% faster)
   - Mixed VPCS/IOU: 180s → 28s (84% faster)

   Documentation:
   - Update node-control-tools.md with dynamic wait time strategy
   - Add device type comparison table
   - Document performance improvements
   - Update changelog

   Code quality:
   - All comments in English
   - flake8 check passed
   - mypy check passed
2026-03-14 15:14:28 +08:00
YueGuobin df8338401e feat(copilot): filter built-in utility templates from GNS3TemplateTool
Add filtering logic to exclude built-in utility templates that are not
   useful for network device configuration, making AI focus on actual network
   devices.

   - Add FILTERED_TEMPLATES constant with 6 utility template types
     * atm_switch - ATM switch
     * cloud - Cloud
     * ethernet_hub - Ethernet hub
     * ethernet_switch - Ethernet switch (built-in)
     * frame_relay_switch - Frame Relay switch
     * nat - NAT device

   - Add should_filter_template() function
     * Exact match on template_type field
     * Simple and reliable filtering logic

   - Update GNS3TemplateTool
     * Apply filtering in _run() method
     * Log filtered count for transparency
     * Update tool description

   - Update documentation (node-control-tools.md)
     * Document filtered template types
     * List retained template types
     * Add changelog entry

   - Code quality
     * All comments in English
     * flake8 check passed
     * mypy check passed
2026-03-14 14:54:12 +08:00
YueGuobin e2e2e23cf7 feat(copilot): add VPCS Telnet driver with Netmiko and ANSI code stripping
Implement custom VPCS driver and unified tool architecture:

   - Add VPCSTelnet custom driver (vpcs_telnet.py)
     - No authentication (direct console access like VPCS behavior)
     - Simple prompt pattern matching (PC\d+>)
     - Automatic ANSI escape code stripping for clean output
     - Config mode methods return empty (VPCS has no config modes)

   - Replace vpcs_tools_telnetlib3.py with vpcs_tools_netmiko.py
     - Migrate from telnetlib3 to Netmiko + Nornir architecture
     - Unified tool architecture matching config/display tools
     - Improved code consistency and maintainability

   - Add comprehensive test coverage (test_vpcs_telnet.py)
     - 30 unit tests covering all VPCS driver functionality
     - Tests for ANSI code stripping, telnet_login, send_command
     - Tests for device registration and initialization

   - Update VPCS built-in template (services/templates.py)
     - Add platform:vpcs and device_type:gns3_vpcs_telnet tags
     - Automatic driver selection without manual configuration

   - Update documentation (docs/)
     - multi-vendor-device-support.md: VPCS driver documentation
     - netmiko_devices.md: Add VPCS to supported devices list
     - README.md: Update multi-vendor support description
2026-03-14 14:25:37 +08:00
YueGuobin bbe57f34b9 feat(llm): hide api_key from all API responses and document max_tokens as reserved
Security Enhancement:
   - API keys are now always filtered to null in all LLM config API responses
   - Created LLMModelConfigDataWithoutSecret schema for response validation
   - Added _filter_api_key_from_config() helper in API routes
   - Modified repository to always hide api_key in get_user_effective_configs()
   - Update/create operations still accept and store api_key securely

   Documentation Updates:
   - Updated API key visibility section to reflect new security policy
   - Updated all response examples to show api_key as null
   - Marked max_tokens field as reserved for future use
   - Added "Reserved Fields" section explaining unused fields

   This defense-in-depth approach prevents API keys from being leaked through
   logs, browser devtools, or network monitoring.
2026-03-14 13:12:22 +08:00
YueGuobin a58089cf48 fix(copilot): add exit command warning to prevent session disconnection
Add warnings about 'exit' command in three locations to prevent AI from
   disconnecting Telnet/SSH sessions during command execution:

   - Prompt system rules (lab_automation_assistant_prompt.py)
   - Display tool description (display_tools_nornir.py)
   - Config tool description (config_tools_nornir.py)

   The 'exit' command disconnects the session and causes all subsequent
   commands in the batch to fail. This prevents users from viewing
   command outputs properly.
2026-03-14 00:34:06 +08:00
YueGuobin c76982b29e refactor(copilot): rename Huawei CE driver and add Ruijie tests with format fixes
- Rename huawei_telnet_ce to gns3_huawei_telnet_ce for consistent naming
   - Add comprehensive test suite for RuijieTelnetEnhanced driver (10 tests)
   - Update list_netmiko_telnet_devices.py to include gns3_ruijie_telnet
   - Fix all flake8 format issues (line length, unused imports, variables)
   - Update documentation to reflect device type rename
2026-03-14 00:08:13 +08:00
YueGuobinandClaude Sonnet 4.5 6e88582ff1 docs(gns3-copilot): update documentation for Ruijie driver and new features
- Add gns3_ruijie_telnet to supported devices in netmiko_devices.md
- Document custom RuijieTelnetEnhanced driver with hybrid strategy
  - Preprocessing: auto-insert 'yes' after known interactive commands
  - Fast path: batch send (2-3s for 13 commands)
  - Fallback: one-by-one with real-time prompt detection
- Add AAA/password configuration prohibition documentation
  - System-level enforcement in lab_automation_assistant_prompt
  - Categories: AAA, login passwords, console/VTY auth, encryption
- Document multi-line command handling for banner and similar commands
- Update device_type tag validation with error feedback
- Update multi-vendor support to include Ruijie platform

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-13 23:56:57 +08:00
YueGuobin 4f4ddb6504 feat(ruijie-telnet): enhance interactive command handling with hybrid strategy
Add pre-processing of known interactive commands and implement hybrid send strategy for Ruijie Telnet devices. The new approach:
- Pre-processes configuration commands to automatically insert 'yes' responses after known interactive commands (router-id, erase, delete, format, reload, boot system)
- Implements hybrid strategy: first attempts fast batch send with pre-processed commands, then falls back to one-by-one send with real-time prompt detection if batch fails
- Maintains backward compatibility while improving reliability for interactive configuration scenarios

This improves configuration reliability for Ruijie devices that frequently require confirmation prompts during configuration changes.
2026-03-13 23:51:12 +08:00
YueGuobin ad771e2927 feat: add Ruijie telnet driver support to custom Netmiko tools
- Import and register Ruijie telnet device type in config_tools_nornir.py
- Import and register Ruijie telnet device type in display_tools_nornir.py
- Update custom_netmiko __init__.py to include RuijieTelnetEnhanced driver
- Add Ruijie telnet driver to __all__ exports for proper module exposure
- Extends custom Netmiko support to handle Ruijie devices with interactive prompt handling
2026-03-13 23:33:14 +08:00
YueGuobin 8d9fce1c12 feat(agent): enhance configuration safety and multiline command handling
- Add explicit AAA/password configuration prohibition to safety reminders
- Implement multiline command expansion for banner and similar commands
- Add error handling for devices with missing device_type tags
- Improve logging for configuration errors and multiline expansions
2026-03-13 22:24:36 +08:00
YueGuobin 364ff93783 efactor(copilot): adopt Nornir best
practice for multi-vendor device support

   Refactor Nornir configuration to use host-level connection_options
   instead of dynamic groups, following Nornir's configuration priority
   model (host > group > defaults).

   **Problem:**
   Previous implementation used first device's configuration for all
   devices, causing Cisco devices to use Huawei driver and vice versa.

   **Solution:**
   - Each host now has device-specific connection_options at host level
   - Single generic "network_devices" group for shared settings
   - Host-level config automatically overrides group-level config

   **Changes:**
   - Remove: _get_nornir_groups_config() helper function
   - Remove: _get_nornir_group() helper function
   - Simplify: _initialize_nornir() to use single generic group
   - Update: get_gns3_device_port.py() to return host-level config
   - Reserve: platform field for future NAPALM/scrapli plugin support

   **Benefits:**
   - Cleaner code structure (no dynamic group creation)
   - Follows Nornir best practice ("configuration proximity")
   - Easy to extend with new device types
   - Properly handles mixed-vendor topologies
2026-03-13 09:32:18 +08:00
YueGuobin 44f802ae4f fix: update netmiko platforms after custom device registration
Netmiko's `ssh_dispatcher` calculates platform lists at module import
time. When custom device types (like Huawei CE) are registered
dynamically, these cached lists become stale and do not include the
new platforms.

This change imports `netmiko.ssh_dispatcher` and recalculates the
`platforms`, `platforms_base`, and `telnet_platforms` attributes to
ensure Netmiko recognizes the custom device types.
2026-03-12 23:38:24 +08:00
YueGuobin effea3fb26 feat(copilot): add Netmiko device list generator and simplify Huawei driver
- Add script to generate Markdown documentation of all Netmiko supported
     devices (SSH and Telnet), grouped by platform with source attribution
   - Highlight custom GNS3-Copilot devices with "Custom ✨" marker
   - Auto-generate device list to docs/gns3-copilot/netmiko_devices.md
   - Simplify HuaweiTelnetCE driver: remove redundant aliases
     (huawei_ce, huawei_telnet_ce_telnet), keep only huawei_telnet_ce
   - Update tests to match simplified device registration
2026-03-12 23:03:19 +08:00
YueGuobin 50fa4f6e2a refactor(huawei_ce): disable mypy and refactor driver
Disable mypy type checking for the Huawei CE driver module due to
Netmiko library limitations. Netmiko lacks type stubs (py.typed) and
uses dynamic attributes, which causes unresolved import and attribute
errors in static analysis.

Added a comprehensive comment block at the top of the file explaining
the rationale for disabling mypy to prevent future confusion.

Additionally, performed code cleanup including:
- Reformatted module docstrings and comments for better readability
- Added missing imports (importlib, logging)
- Removed unused typing imports (Optional)
- Refactored variable assignments in send_config_set for clarity
2026-03-12 22:38:21 +08:00
Mr.GIitch 302878b391 Merge branch 'GNS3:3.0' into 3.0 2026-03-12 14:44:43 +01:00
YueGuobin db164e9d41 feat(copilot): add multi-vendor device support with custom Huawei driver
Add comprehensive multi-vendor support for GNS3 network automation,
   including a custom Netmiko driver for Huawei CloudEngine devices.

   Features:
   - Custom HuaweiTelnetCE driver for GNS3 emulation (no authentication)
   - Auto-commit before exit to prevent [Y/N/C] prompts
   - Dynamic device type detection from GNS3 node tags
   - Support for both Cisco IOS and Huawei devices
   - Proper VRP command handling (system-view, return confirmation)

   Implementation:
   - New package: utils/custom_netmiko/
     - huawei_ce.py: Huawei CloudEngine driver
     - tests/test_huawei_ce.py: Unit tests (9/9 passing)
     - README.md: Driver development guide
   - Updated tools for multi-vendor support:
     - display_tools_nornir.py: Dynamic group generation
     - config_tools_nornir.py: Multi-vendor config commands
     - get_gns3_device_port.py: Device port extraction
   - Documentation: multi-vendor-device-support.md

   Limitations:
   - huawei_telnet_ce driver requires devices without authentication
   - For devices with username/password, use standard huawei_telnet driver

   Co-Authored-By: Yue Guobin <yueguobin@outlook.com>"
2026-03-12 16:44:32 +08:00
Guobin Yue ab88bcd57e Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-12 16:12:13 +08:00
grossmj 3abecc8492 Fix IOU tests 2026-03-12 14:18:35 +08:00
grossmj 27ce1a4e25 Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	gns3server/schemas/iou_template.py
#	tests/handlers/api/compute/test_iou.py
#	tests/handlers/api/controller/test_template.py
2026-03-12 14:11:05 +08:00
Jeremy Grossmann 5c63928636 Merge pull request #2634 from GNS3/update-iol-ram-nvram
Deactivate 'use default IOU values' by default and update RAM/NVRAM values
2026-03-12 13:53:04 +08:00
grossmj f41cc24383 Fix for duplicating Qemu nodes 2026-03-12 13:24:30 +08:00
Jeremy Grossmann 9aca6aece3 Merge pull request #2636 from yueguobin/fix/acl-endpoint-paths
fix(acl): correct endpoint paths for users, groups, and roles
2026-03-12 12:31:59 +08:00
UmmmAGoodName afeb6a3196 Minor optimizations to logic 2026-03-11 18:51:32 +01:00
UmmmAGoodName 99e3529c93 Fixed an issue with the server causing errors when uploading large images + Preparation for a smarter check when uploading images 2026-03-11 18:50:43 +01:00
UmmmAGoodName 19503ab4f7 Implementet a smarter node_type system 2026-03-11 18:49:36 +01:00
UmmmAGoodName 4a45a68703 Changed errors to new type, was causing warnings 2026-03-11 18:48:36 +01:00
YueGuobin 75a4585c20 docs: restructure copilot docs and update node tools
Simplify the documentation structure in `README.md` by removing the
`todo/` directory reference and detailed design documents for planned
features. Consolidate future roadmap items into a high-level summary
under "Future Enhancements".

Update `node-control-tools.md` to include documentation for new topology
management tools (create node, create link, get template, rename node)
and reflect updated API imports for `Link` support.
2026-03-12 00:23:00 +08:00
Guobin Yue 085a485503 Merge branch '3.0' into fix/acl-endpoint-paths 2026-03-11 23:34:18 +08:00
YueGuobin f2fd725e07 fix(acl): correct endpoint paths for users, groups, and roles
Fix the path mismatch between /acl/endpoints API and actual routes:
- Users: /users/{id} → /access/users/{id}
- Groups: /groups/{id} → /access/groups/{id}
- Roles: /roles/{id} → /access/roles/{id}

This fixes the error where creating ACE entries fails with:
"Path '/groups/{id}' doesn't match any existing endpoint"

The actual routes are registered under /access/ prefix, but the
endpoints API was returning paths without the prefix.

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-11 23:23:52 +08:00
YueGuobin 5155e10214 feat(deps): update langchain ecosystem and add langsmith SDK
- Upgrade langchain packages to latest versions (langchain 1.2.10, langgraph 1.0.9, etc.)
- Add langsmith SDK for enhanced observability and tracing
- Update Pillow to 12.1.1 for image processing improvements
- Maintain compatibility with existing AI and automation framework
2026-03-11 22:18:31 +08:00
YueGuobin e82bce9e16 feat(docs): add TOSCA-based topology description proposal
Add comprehensive documentation proposing TOSCA (Topology and Orchestration Specification for Cloud Applications) as the standard format for GNS3 network topologies. The document outlines strategic benefits including standardized YAML descriptions, toolchain ecosystem integration, Git-based workflows, and template reuse capabilities. This initiative aims to modernize GNS3 topology management, improve user experience, and align with industry best practices for network automation and orchestration.
2026-03-11 22:13:23 +08:00
YueGuobinandClaude Sonnet 4.5 0056bdd19b fix(iou): return 405 error for unsupported suspend operation
Fixed IOU node suspend API to return proper HTTP 405 Method Not Allowed
error instead of misleading 204 No Content response.

Changes:
- Added HTTPException import to iou_nodes.py
- Fixed suspend_iou_node route from /stop to /suspend (bug fix)
- Changed response from 204 No Content to 405 Method Not Allowed
- Added clear error message: "Suspend is not supported for IOU nodes"

This fix ensures clients receive explicit feedback when attempting to
suspend IOU nodes, which do not support suspend functionality.

Related issue: IOU nodes previously returned 404 when suspend was called
due to incorrect route registration.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-11 15:14:23 +08:00
YueGuobin ad3621db0f feat(gns3-copilot): add node stop and suspend tools for lab automation
- Add GNS3StopNodeTool and GNS3SuspendNodeTool to lab automation assistant mode
- Update tools_v2 __init__.py to export new node control tools
- Document node control tools in README with key features and implementation status
- Update last modified date in documentation

The new tools provide complete node lifecycle control for automated lab workflows, including stopping nodes for shutdown and suspending nodes while preserving state.
2026-03-11 14:44:51 +08:00
YueGuobin 1cd4aeb2a2 feat(schemas): simplify LLM model config descriptions
- Remove redundant "(REQUIRED)" and detailed explanations from context_limit field descriptions
- Shorten copilot_mode descriptions by removing parenthetical details about mode capabilities
- Maintain field formatting consistency across LLMModelConfigData, Create, and Update schemas
2026-03-11 10:17:06 +08:00
YueGuobin 10a827f0c5 feat(api): enhance max_tokens field with robust null handling
- Update LLMModelConfigUpdate schema to accept Union[int, str] for max_tokens
- Add field validator to gracefully handle various null representations:
  - Convert string "null" to null
  - Convert empty strings to null
  - Convert numeric strings to integers
  - Accept proper JSON null values
- Update documentation to reflect new behavior and explain robust null handling
- Prevents validation errors from incorrect null serialization by clients
2026-03-11 10:14:06 +08:00
YueGuobinandClaude Sonnet 4.5 e452f75ac3 docs: reorganize AI Copilot documentation structure
- Add README.md with documentation overview and structure guide
- Move implemented designs to docs/gns3-copilot/implemented/:
  - chat-api.md (from ai-chat-api-design.md)
  - llm-model-configs.md (from llm-model-configs-api.md)
  - command-security.md
  - context-window-management.md
- Add Jinja2 configuration template system design documents:
  - jinja2-config-templates-system.md
  - config-templates-implementation-guide.md
  - ai-prompting-for-config-templates.md
- Remove obsolete documents (acl-web-ui, Chinese RBAC doc)

This reorganization makes it clearer which features are implemented
vs planned, following the established documentation structure.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-10 23:20:24 +08:00
YueGuobin a6c33061c4 delete doc 2026-03-10 22:51:57 +08:00
YueGuobin 578f79cd6b feat(docs): add AI prompting guide for configuration templates
Add comprehensive documentation for AI prompting to generate structured configuration data for Jinja2 templates. The guide includes:

- Core system prompt with critical rules for structured data generation
- Supported vendors and OS types (Cisco, Juniper, Huawei, Arista, Mikrotik)
- Detailed schemas for network features including OSPF, BGP, VLANs, ACLs, and more
- Example prompts and expected structured outputs
- Integration with the configuration renderer system

This documentation ensures AI-generated configurations follow the required structured format for proper template rendering, preventing direct configuration text generation and maintaining consistency across different network device vendors.
2026-03-10 22:38:41 +08:00
grossmj 0624c1b945 Deactivate 'use default IOU values' by default and update RAM/NVRAM values 2026-03-10 20:28:00 +08:00
YueGuobin 2dcdadf5fa docs: add mypy type checking issues todo document
Add comprehensive documentation for mypy static type checking
issues found in gns3_copilot module.

Document includes:
- 35 type errors across 9 files
- Detailed error descriptions and line numbers
- 3-phase fix strategy (High/Medium/Low priority)
- Mypy configuration recommendations
- Resource links for type hints and mypy

Related files:
- chat_sessions_repository.py (8 errors)
- context_manager.py (5 errors)
- agent_service.py (5 errors)
- gns3_topology_reader.py (2 errors)
- message_converters.py (1 error)
- connector_factory.py (1 error)

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:20:42 +08:00
YueGuobin 71802a8064 style: remove unused List import from llm_model_configs.py
Remove unused typing.List import flagged by ruff F401.

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:11:37 +08:00
YueGuobin 5e9ec23a45 style: remove unused imports and fix E712 comparisons in llm_model_configs.py
Remove 5 unused imports flagged by ruff F401:
- sqlalchemy.func, sqlalchemy.or_
- sqlalchemy.ext.asyncio.AsyncSession
- sqlalchemy.orm.selectinload
- json

Fix 4 E712 errors - avoid equality comparisons to True:
- Use models.LLMModelConfig.is_default instead of == True

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:10:19 +08:00
YueGuobin 7d031a6802 style: remove unused imports and variables in project.py
Remove unused import and exception variable flagged by ruff:
- Remove unused 'sys' import (F401)
- Remove unused exception variable 'e' in except clause (F841)

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:08:20 +08:00
YueGuobin c0aec3f979 style: remove unused imports from llm_model_configs.py
Remove 3 unused imports that were flagged by ruff F401:
- fastapi.Response
- fastapi.security.OAuth2PasswordRequestForm
- gns3server.controller.controller_error.ControllerError

Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:07:23 +08:00
YueGuobin 7c3b832bca style: fix E501 line-too-long errors in gns3_copilot
Fix all 423 E501 line length violations across 26 files to comply with
   PEP 8 88-character line limit.

   Changes:
   - Split long f-strings across multiple lines
   - Break long docstring descriptions and parameter lists
   - Split markdown table rows and list examples
   - Break long URL construction f-strings
   - Split long logger messages and comments
   - Add noqa: E501 for SVG strings (cannot be split)

   Modified files:
   - agent/: context_manager.py, gns3_copilot.py, model_factory.py
   - gns3_client/: connector_factory.py, context_helpers.py, custom_gns3fy.py,
                   gns3_project_info.py, gns3_topology_reader.py
   - prompts/: __init__.py, lab_automation_assistant_prompt.py,
               prompt_loader.py, teaching_assistant_prompt.py
   - tools_v2/: __init__.py, config_tools_nornir.py, display_tools_nornir.py,
                gns3_create_link.py, gns3_create_node.py, gns3_get_node_temp.py,
                gns3_start_node.py, gns3_update_node_name.py,
                vpcs_tools_telnetlib3.py
   - utils/: __init__.py, command_filter.py, get_gns3_device_port.py,
             gns3_drawing_utils.py, llm_config_helper.py, message_converters.py,
             parse_tool_content.py, tool_call_stream.py

   All files now pass ruff E501 checks.

   Co-Authored-By: Yue Guobin <yueguobin@outlook.com>
2026-03-10 01:05:17 +08:00
Guobin Yue 25f2d1b56b Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-09 21:50:37 +08:00
YueGuobin 7c2083d227 feat: update .gitignore to track project context and development docs
- Add exception for .claude/development.md to allow tracking development documentation
- Comment out PROJECT_CONTEXT.md exclusion to enable version control of project context file
- Create PROJECT_CONTEXT.md with comprehensive project overview for AI assistant support
- Document project structure, AI copilot data flow, SSE event types, and code standards
- Provide flake8 static analysis guidelines and common error fixes
2026-03-09 21:46:58 +08:00
grossmj 69eafda777 Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2026-03-09 17:12:24 +08:00
grossmj b658f7ff68 Make sure the node shows as stopped when the wrap console cannot be stopped. Ref https://github.com/GNS3/gns3-registry/pull/1010 2026-03-09 17:10:00 +08:00
YueGuobin b936a52f6f docs: add LangGraph Agent and tool output serialization documentation
Added new section in ai-chat-api-design.md explaining:

- LangGraph Agent architecture and main components
- tool_node function and tool output serialization mechanism
- Why serialization happens in tool_node (not agent_service)
- Tool output data flow diagram showing SSE and history paths
- Explanation of JSON format consistency across streaming and storage

This documentation clarifies the fix for single-quotes issue in
conversation history and helps future maintenance.

Co-Authored-By: YueGuobin <yueguobin@outlook.com>
2026-03-09 15:54:44 +08:00
YueGuobin 9b85417a82 fix(copilot): serialize tool output to JSON in ToolMessage for history
Fixed tool output serialization in tool_node function to ensure
ToolMessage.content is always in JSON format, not Python str() representation.

This fixes the issue where conversation history showed tool outputs
with single quotes (Python format) instead of standard JSON.

Changes:
- Added json import to gns3_copilot.py
- Modified tool_node() to serialize observation to JSON before creating ToolMessage
- Ensures both SSE streaming and history storage use consistent JSON format

Root cause: ToolMessage was created with raw dict/list objects, which
LangChain converted to Python str() representation when saving to history.

Co-Authored-By: YueGuobin <yueguobin@outlook.com>
2026-03-09 15:50:36 +08:00
YueGuobin 8babaccd80 feat: add PROJECT_CONTEXT.md to gitignore
Add PROJECT_CONTEXT.md to the .gitignore file to prevent it from being tracked in version control. This file likely contains project-specific context or configuration that should not be committed to the repository.
2026-03-09 15:34:31 +08:00
YueGuobin 0f2d0e2859 fix(copilot): serialize tool output to standard JSON format for frontend parsing
Changed tool output serialization in AgentService._convert_event_to_chunk()
from str() to json.dumps() to ensure structured data (dict/list) is properly
formatted as standard JSON instead of Python string representation.

Changes:
- Added json import to agent_service.py
- Modified on_tool_end event handling to use json.dumps(output, ensure_ascii=False, indent=2)
- Updated ai-chat-api-design.md to document tool_output format

Benefits:
- Frontend can parse tool results with standard JSON.parse()
- Chinese and non-ASCII characters are preserved (not escaped)
- Formatted output (indent=2) improves readability

Co-Authored-By: YueGuobin <yueguobin@outlook.com>
2026-03-09 15:15:50 +08:00
YueGuobin 13a032ea2c chore: update author name and copyright headers
Updated the author name and copyright statements across the
gns3_copilot module. The name has been standardized from
"Guobin Yue" to "Yue Guobin (岳国宾)" to reflect the correct
author attribution including Chinese characters.
2026-03-09 11:46:28 +08:00
Guobin Yue d7e5fe065e Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-08 13:20:27 +08:00
YueGuobin 9ba02e9436 feat(docs): enhance AI chat API documentation with examples and details
- Improve POST /chat endpoint documentation with request/response examples
- Add session ID management flow explanation
- Enhance GET /sessions endpoint with query parameters and response example
- Update GET /sessions/{session_id}/history with detailed response structure
- Format parameters as tables for better readability
- Clarify session ID usage in streaming conversations
2026-03-08 02:27:48 +08:00
YueGuobin fd34ef494f feat: add .claude directory to gitignore for API key security
Add .claude/ directory to .gitignore to prevent accidental
commit of Claude Code settings which may contain sensitive
API keys. This ensures development environment configuration
files with potential credentials are excluded from version
control.
2026-03-07 23:52:16 +08:00
Jeremy Grossmann cd51afb01f Merge pull request #2633 from GNS3/revert-2628-console
Revert "Fix QEMU serial console artifacts by filtering ANSI CPR responses in …"
2026-03-07 22:24:17 +08:00
Jeremy Grossmann 14ffa2c2d6 Revert "Fix QEMU serial console artifacts by filtering ANSI CPR responses in …" 2026-03-07 22:22:16 +08:00
grossmj 73ffb22aa2 Bundle web-ui v3.1.0.dev1 2026-03-07 17:47:44 +08:00
Jeremy Grossmann f81ab0cfbe Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-07 13:00:39 +08:00
Jeremy Grossmann 0cedab1742 Merge pull request #2632 from GNS3/drop-python3.9
Drop support for Python 3.9
2026-03-07 11:19:03 +08:00
Guobin Yue 1cc48c1fb0 Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-07 01:57:08 +08:00
YueGuobin 23b073a7bc docs: add troubleshooting guide for datetime timezone issue
Add comprehensive documentation for handling datetime timezone discrepancies between backend and frontend. The issue arises when backend returns naive datetime strings without timezone suffixes, causing JavaScript to parse them as local time instead of UTC. The guide includes problem description, root cause analysis, three frontend solutions (dayjs UTC parsing, manual 'Z' suffix addition, and global Axios interceptor), backend context, and testing checklist.
2026-03-07 01:42:18 +08:00
grossmj 679c690903 Drop support for Python 3.9 2026-03-06 19:03:53 +08:00
Jeremy Grossmann 09aaf43dd1 Merge pull request #2628 from Raizo62/console
Fix QEMU serial console artifacts by filtering ANSI CPR responses in …
2026-03-06 18:24:34 +08:00
Jeremy Grossmann 5755a48fa3 Merge pull request #2630 from UmmmAGoodName/3.0
Fixed the path traversal check
2026-03-06 18:05:57 +08:00
YueGuobin 3a287de8c1 docs: add ACL Web UI implementation guide for frontend developers
Add comprehensive implementation guide for ACL management feature in GNS3 Web UI. The guide includes:

- Feature overview with core functionality and user flow
- Detailed API endpoint specifications for ACE CRUD operations
- Data structures and relationships
- Frontend implementation guide with component architecture
- UI/UX design recommendations and wireframes
- Common usage scenarios and error handling patterns
- Example code with React components and API service layer

This document serves as a reference for frontend developers implementing ACL management interface, covering everything from API integration to user interface design.
2026-03-06 14:19:19 +08:00
YueGuobin 8660e9c8db feat(docs): add RBAC + ACL implementation guide for GNS3 Server
Add comprehensive documentation for the two-tier permission control system combining RBAC and ACL features. The guide covers system overview, core concepts, data model, permission check flow, usage examples, best practices, and common issues. This documentation is applicable for GNS3 Server v3.0+ and provides implementation details for administrators managing user permissions.
2026-03-06 13:07:15 +08:00
YueGuobin 3d781236c6 delete depreacted dir 2026-03-06 11:08:35 +08:00
YueGuobin 0f61a06557 feat(docs): clarify API key visibility for group configurations
Add detailed section explaining that plaintext API keys for group configurations are never exposed through the application API, even to super admins. This clarifies the security design where group configs are intended for inheritance only, not manual viewing, while maintaining internal decryption for inheritance functionality.
2026-03-06 11:06:18 +08:00
YueGuobin 903e48aecc feat(docs): clarify API key visibility rules and encryption details
Update the LLM model configs API documentation to provide clearer explanations of API key visibility controls and encryption behavior. The changes include:

- Enhanced visibility table with more specific scenarios and encryption states
- Added detailed rules explaining when API keys are visible as plaintext, hidden (null), or shown encrypted
- Clarified super admin capabilities and database-level access
- Updated JSON examples to reflect actual encrypted values and null placeholders
- Added important notes about Fernet encryption, on-the-fly decryption, and group config behavior

These updates provide better transparency about security measures and help users understand what to expect when viewing different types of configurations.
2026-03-06 10:05:17 +08:00
YueGuobin 4941dc13d8 feat(api): enhance /me endpoint with groups, pools, and ACEs
Add comprehensive user context to the `/me` endpoint by including group memberships, accessible resource pools, and access control entries (ACEs). This enables users to view inherited configurations, available resources, and their permissions directly from the API.

Key additions:
- Group membership details with inherited configs
- Resource pool access information
- ACE visibility for permission transparency
- Support for user-selectable group default configurations

The enhancement addresses user needs for better visibility into permissions and accessible resources within the system.
2026-03-06 09:50:34 +08:00
YueGuobin eb7a72f5e2 feat(docs): update copilot_mode value in LLM model configs API example
Changed the example value of `copilot_mode` from "lab_assistant" to "lab_automation_assistant" in the API documentation to reflect the correct mode name used in the system.
2026-03-06 02:00:02 +08:00
YueGuobin 77ef87f468 feat(prompts): rename prompt modules for clarity and consistency
Rename base_prompt.py to teaching_assistant_prompt.py and lab_assistant_prompt.py to lab_automation_assistant_prompt.py to better reflect their purposes. Update all imports and references accordingly to maintain consistency across the codebase. This improves code readability and aligns naming with the actual functionality of each prompt module.
2026-03-06 01:58:54 +08:00
YueGuobin dd3b06bd75 feat(docs): remove reference tool command from model configs API documentation
The `python scripts/show_model_context_limits.py` command was removed from the documentation as it is no longer necessary or relevant for users configuring model context limits. The remaining content still provides clear guidance on calculating context limits in K tokens.
2026-03-06 01:55:46 +08:00
Guobin Yue 87f8f22524 Merge branch '3.0' into feature/ai-copilot-bridge 2026-03-06 01:42:47 +08:00
YueGuobin 216b3d7219 docs: translate AI chat API design document to English
Translate the GNS3 Copilot Agent Chat API design document from Chinese to English to improve accessibility for international contributors and align with project documentation standards. The translation covers all sections including overview, core features, architecture design, API endpoints, and response formats.
2026-03-06 01:14:52 +08:00
YueGuobin 8fa6d6810a feat: add multi-user concurrency control design document
Add comprehensive design document outlining the race condition issue when multiple users simultaneously operate on the same network device via GNS3-Copilot Agent. The document details the problem statement, affected components, and proposes two solutions: device-level mutex lock (recommended) and connection pooling with session isolation. It includes implementation details, API changes, and UI considerations to ensure safe concurrent operations.
2026-03-06 01:08:45 +08:00
YueGuobin af6d87426b feat(agent): add runtime control parameters for agent behavior
Add support for runtime control parameters `max_iterations` and `max_tool_calls` in the chat API to allow users to dynamically adjust agent behavior per request. This addresses current limitations where iteration limits and tool call constraints are hardcoded, providing flexibility for complex tasks and cost control.
2026-03-06 00:54:33 +08:00
YueGuobin c317932f1a feat(security): add forbidden command filtering for device configurations
- Import filter_forbidden_commands utility from command_filter module
- Add _filter_forbidden_commands_from_device_configs method to filter out restricted commands before execution
- Store blocked commands information and log filtered commands for audit purposes
- Update _process_task_results to include blocked commands info in response
- Prevent execution of potentially dangerous commands while maintaining transparency about filtered content
2026-03-06 00:30:17 +08:00
YueGuobin f1b496df49 docs: add troubleshooting guide for force kill residual processes
Add comprehensive documentation for troubleshooting issues caused by using `kill -9` on gns3server processes. The guide explains the root cause where SIGKILL prevents proper cleanup of child processes like dynamips and vpcs, leading to port conflicts and resource allocation errors when restarting. It provides multiple solutions including manual process cleanup, proper shutdown procedures, and preventive measures with example scripts. This documentation helps users resolve common issues with Dynamips VM creation failures, undefined project_id errors, and TCP port warnings.
2026-03-05 23:39:59 +08:00
UmmmAGoodName 6ff4d46838 Fixed the path traversal check 2026-03-05 16:38:55 +01:00
YueGuobin aaba2d6181 docs: update node name from generate_title to title_generator_node
Updated references to the title generation node in both documentation and code:
- Changed node name from `generate_title` to `title_generator_node` in API design documentation
- Updated filtering logic in agent service to exclude `title_generator_node` from LLM call statistics, token counting, and frontend streaming events
- Maintains same functionality while using more descriptive node name for clarity
2026-03-05 23:19:20 +08:00
YueGuobin a7bc68d6e1 feat(docs): reorganize documentation and add orphan tool calls recovery plan
- Move command-security.md and hitl-implementation-plan.md to todo/ directory
- Add new documentation for orphan tool calls recovery with detailed problem analysis and implementation plan
- Document scenarios causing orphan tool calls and propose fix strategy using LangGraph API
2026-03-05 23:07:02 +08:00
YueGuobin b8cb0bdcb0 feat(agent): exclude generate_title node from LLM call and token statistics
Filter out internal LangGraph 'generate_title' node from LLM call counting and token usage tracking to avoid inflating statistics with internal operations. This ensures metrics only reflect user-facing AI interactions.
2026-03-05 23:01:41 +08:00
YueGuobin 511b155da8 feat(ai-chat-api): implement streaming tool calls with incremental parameter accumulation
- Update API documentation to reflect new streaming tool call mechanism
- Add `message_id` optional field to content and tool_call events
- Change tool_call structure from array to single object with incremental updates
- Add `tool_call_id` to tool_start events for better event correlation
- Implement ToolCallStreamAccumulator class to handle parameter accumulation
- Provide frontend example code for handling streaming tool calls
- Maintain backward compatibility with existing session_id tracking
2026-03-05 22:29:01 +08:00
YueGuobin 1de7d00db3 feat(agent): update SSE event schema and handle tool calls from LLM
- Update AI chat API documentation with revised SSE event schema
- Add support for multiple tool calls in `tool_call` events
- Include `session_id` in all event types for better session tracking
- Implement `on_chat_model_end` handler to process LLM tool call decisions
- Update example JSON payloads to reflect new schema structure
2026-03-05 22:03:27 +08:00
YueGuobin 54775faaf4 feat(copilot): rename copilot modes for clarity and add mode-specific tools
- Rename "teaching" mode to "teaching_assistant" for better clarity
- Rename "lab_assistant" mode to "lab_automation_assistant" to reflect expanded capabilities
- Implement mode-specific tool sets: teaching_assistant gets read-only diagnostic tools only, while lab_automation_assistant gets full diagnostic and configuration tools
- Update API documentation examples to reflect new mode names
- Maintain backward compatibility with default tool set initialization
2026-03-05 21:44:36 +08:00
YueGuobin 28f2fe03e6 feat: suppress nornir INFO logs to reduce console verbosity
Set logging level for nornir.core and nornir loggers to WARNING in config_tools_nornir.py and display_tools_nornir.py. This prevents nornir from logging task execution at INFO level to the console, as the logging={"enabled": False} parameter in InitNornir only disables plugin internal logs.
2026-03-05 21:04:46 +08:00
YueGuobin 2485bfec46 docs: add temperature parameter documentation and code formatting improvements
- Added `temperature` parameter to Chat API documentation with implementation notes
- Improved code formatting in context_manager.py with consistent string quotes and line breaks
- Added section on future runtime LLM parameter override capabilities
- Updated API schemas to include temperature parameter (currently unused but reserved for future implementation)
2026-03-05 20:58:14 +08:00
YueGuobin 7f8364fbf5 refactor: move context helpers to separate module for better organization
- Extract context variable management functions from connector_factory.py to new context_helpers.py module
- Update imports in gns3_copilot.py, agent_service.py, and __init__.py to use new module
- Remove inline imports and ensure consistent access to context helpers
- Improves code organization and maintainability by separating concerns
2026-03-05 20:40:16 +08:00
YueGuobin 16559d2ce2 feat(agent): reorganize imports and improve code structure
- Standardize import organization with clear sections (standard library, third-party, local)
- Move sys.path modification to top of imports for better clarity
- Fix circular import issues by reordering imports
- Remove duplicate imports and ensure proper import grouping
- Maintain all existing functionality while improving code readability
2026-03-05 18:06:36 +08:00
YueGuobin 08b5b44a50 feat(copilot): add copilot_mode field to LLM model configs API
- Add `copilot_mode` field to request examples in API documentation
- Update prompt loader to read `copilot_mode` from flattened config structure
- Support both "teaching" and "lab_assistant" modes for different assistant behaviors
2026-03-05 16:41:47 +08:00
YueGuobin a777c36a29 feat(copilot): add copilot_mode field and config command tool
- Add `copilot_mode` field to LLM model configs API with "teaching" (diagnostics only) and "lab_assistant" (full configuration access) modes
- Introduce new `ExecuteMultipleDeviceConfigCommands` tool for executing configuration commands on multiple devices
- Include `tags` field in node data structure for enhanced project management
- Update API documentation examples to reflect new `copilot_mode` field and context limit additions
2026-03-05 16:31:02 +08:00
YueGuobin 8dc8facb13 docs: simplify context window management documentation
Removed extensive implementation details and configuration examples from the context window management documentation. The document now focuses on core permissions and prohibitions for tool usage, providing a clearer and more concise reference for allowed and forbidden actions. This streamlines the documentation to essential guidelines only.
2026-03-05 14:05:58 +08:00
Jeremy Grossmann ea68d8b959 Merge pull request #2629 from GNS3/image-handling
Fix image handling
2026-03-05 12:43:47 +08:00
grossmj 4606613673 Fix image handling 2026-03-05 12:38:28 +08:00
YueGuobin a8044cc1c2 feat: add copyright and author attribution to source files
Add copyright notice and author attribution to multiple Python files in the gns3-copilot module. This ensures proper licensing attribution and clarifies authorship for the project files.
2026-03-05 11:34:00 +08:00
YueGuobin 2779734de4 feat: remove redundant project attribution comments from GNS3-Copilot modules
Removed repetitive "This module is part of the GNS3-Copilot project" and GitHub URL comments from multiple module docstrings. These comments were redundant since the project information is already established in the main package documentation. This cleanup improves code readability and reduces maintenance overhead by eliminating duplicate attribution statements across the codebase.
2026-03-05 11:26:54 +08:00
YueGuobin d12b2df306 feat(docs): update context window management documentation
- Refactor system message structure to combine system prompt and topology info using template variables
- Update token calculation process with merged system message approach
- Clarify priority order for message retention during context window management
- Add detailed token counting implementation using tiktoken library
- Include boundary case handling for system message exceeding budget
- Add SPDX license headers to tool files for proper licensing documentation
2026-03-05 11:23:11 +08:00
YueGuobin ed5fd7d17c feat(agent): inject topology into system prompt via template variable
Refactor context preparation to embed topology information directly into the system prompt using a {{topology_info}} placeholder, replacing the previous approach of appending a separate SystemMessage. This consolidates context into a single system message and simplifies token accounting. The logging is updated to reflect the new token breakdown, showing combined system prompt tokens (base + topology) instead of separate components.
2026-03-05 11:05:51 +08:00
YueGuobin 33df674cbf feat(agent): remove GNS3TopologyTool from available tools list
The GNS3TopologyTool has been removed from the list of available tools for the agent. This change simplifies the toolset by eliminating a tool that is no longer needed or supported in the current workflow.
2026-03-05 10:55:10 +08:00
YueGuobin 7fcdb57615 feat(context-manager): improve context window management with tool token accounting
Enhanced the context window management system to properly account for tool definition tokens when trimming messages. The key changes include:

- Updated `trim_messages_for_context` function to accept `tool_tokens` parameter
- Modified token budget allocation logic to subtract tool tokens before message trimming
- Added detailed documentation explaining the token budget distribution between messages and tool definitions
- Implemented prioritized trimming strategy that preserves system messages and recent conversation history
- Added boundary case handling for scenarios where system messages or tools exceed available budget

The improvements ensure more accurate context window management by accounting for the ~1000-2000 tokens typically consumed by tool definitions that LangChain automatically includes in LLM requests.
2026-03-05 01:50:48 +08:00
YueGuobin f8aa653ef9 feat(context-manager): add tiktoken dependency and improve token counting accuracy
- Add tiktoken as a required dependency for accurate token counting
- Update documentation with installation instructions and token counting strategy
- Improve logging to include tool definition token estimates
- Enhance error handling to fail fast when tiktoken is not available
- Update context manager to use tiktoken's cl100k_base encoding for GPT-4 compatibility
2026-03-05 01:01:34 +08:00
YueGuobin 7368ac098a docs: add context limit and strategy to LLM model configs API
- Add `context_limit` as required field for LLM model configurations
- Add `context_strategy` as optional field with three trimming strategies
- Update API documentation with detailed examples for GPT-4o and Claude 3.5 Sonnet
- Clarify that context limit is specified in K tokens (thousands of tokens)
- Update example payloads to reflect current model versions and new fields
2026-03-05 00:40:46 +08:00
YueGuobin 6a9f745c13 feat(copilot): add HITL confirmation for sensitive operations
- Move AI chat API design document to gns3-copilot directory
- Add comprehensive HITL implementation plan with architecture and workflow
- Introduce human-in-the-loop confirmation for dangerous configuration commands
- Include state management, API endpoints, and frontend integration details
- Provide testing plan and deployment steps for the new feature
2026-03-04 23:53:50 +08:00
YueGuobin 4e28adffb6 feat(copilot): add tool response normalization utility
Add `normalize_tool_response` function to standardize tool output formats for consistent frontend display. The function converts various response types (dict, list, string) into a unified structure with success metrics, detailed data arrays, and metadata. This ensures backward compatibility while providing predictable response formats for UI components.
2026-03-04 23:41:29 +08:00
YueGuobin f64daa96cd feat(agent): streamline conversation flow logic in copilot
- Remove unused `llm_calls` variable and redundant logging in `should_continue`
- Simplify title generation routing by eliminating unnecessary condition checks
- Improve code clarity and maintainability by focusing on essential flow control
2026-03-04 23:34:14 +08:00
YueGuobin 4a017b1a7f feat(chat): add session pinning feature with database migration
- Add `pinned` column to chat_sessions table with default FALSE
- Implement database migration for existing installations using PRAGMA table_info
- Create composite index for pinned + updated_at sorting
- Add pin/unpin API endpoints (PUT/DELETE /sessions/{id}/pin)
- Update session listing to sort by pinned status then updated_at
- Extend ChatSessionsRepository with pin_session method
- Update API documentation to reflect new pinning functionality

The feature allows users to pin important chat sessions to the top of the list. Sessions are sorted with pinned sessions first (by updated_at), followed by regular sessions (by updated_at). Database migration ensures backward compatibility with existing installations.
2026-03-04 23:18:30 +08:00
YueGuobin f688a2d5c0 feat(agent): enhance message handling with ID generation and format conversion
- Add message ID generation for initial HumanMessage creation
- Implement message converters for LangChain/OpenAI format interoperability
- Update documentation with detailed message format specifications
- Refactor AgentService to use centralized message conversion utilities
- Ensure tool_calls format compliance with OpenAI API standards
2026-03-04 23:05:43 +08:00
YueGuobin 6b73f00281 docs: update AI chat API design with detailed statistics collection
Update the AI chat API design documentation to provide comprehensive details about statistics collection during streaming conversations. The documentation now includes:

1. **Enhanced statistics collection logic**:
   - Clarified message_count increments for user messages, AI responses, and tool results
   - Added LLM call tracking via on_chat_model_start events
   - Detailed token counting methodology using LangGraph's usage_metadata

2. **Improved implementation details**:
   - Added specific event handlers for statistics collection
   - Explained LangGraph's cumulative token counting behavior
   - Provided real-world examples of token accumulation

3. **Updated data models**:
   - Enhanced ChatSession model documentation with field descriptions
   - Separated fields into categories (basic, statistics, timestamps, reserved)

4. **Refined architecture documentation**:
   - Added detailed flow for stream_chat method
   - Documented statistics collection mechanism during SSE streaming
   - Explained batch update strategy to reduce database writes

The changes ensure developers understand how conversation statistics are collected, processed, and stored without impacting streaming performance.
2026-03-04 22:33:28 +08:00
YueGuobin 48e2793719 feat(agent): initialize checkpointer before chat session retrieval
Add initialization check for `_checkpointer_conn` in `AgentService` to ensure the checkpointer database connection exists before attempting to retrieve chat sessions. This prevents potential null reference errors when the checkpointer hasn't been initialized yet during agent operations.
2026-03-04 22:09:09 +08:00
YueGuobin 03ab9cdf6c feat(chat-api): refactor design document with concise architecture overview
- Replace detailed implementation plan with high-level architecture design
- Focus on core features: project isolation, streaming responses, session management
- Remove FlowNet-Lab reference and implementation specifics
- Streamline document from 1172 to 483 lines for better maintainability
2026-03-04 21:58:23 +08:00
Raizo62 590eedeb46 Fix QEMU serial console artifacts by filtering ANSI CPR responses in telnet proxy
- filter incoming cursor position report sequences (`ESC[<row>;<col>R`) in `AsyncioTelnetServer`
- prevent stray `;1R;80R` characters on late telnet console attach after VM boot
- keep QEMU serial transport unchanged (`-serial telnet`) for BIOS compatibility
2026-03-04 14:26:52 +01:00
Jeremy Grossmann 2843e05e01 Merge pull request #2627 from GNS3/bugfix/2622
Qemu VMs: only compute MD5 checksums for existing disks
2026-03-04 18:57:52 +08:00
grossmj 8b245c96f8 Qemu VMs: only compute MD5 checksums for existing disks 2026-03-04 18:54:52 +08:00
YueGuobin b6c343c5b8 feat(agent): add GNS3UpdateNodeNameTool to copilot tools
Introduce a new tool for updating node names within the GNS3 copilot agent. This expands the agent's capabilities to include node name modifications alongside existing node and link management operations.
2026-03-04 17:55:16 +08:00
YueGuobin 0648b53a45 feat(gns3_copilot): enhance topology logging with structured details
Improve logging in GNS3 topology reader to provide more structured and informative output. The previous single-line JSON log has been replaced with separate info and debug logs:
- Info log now includes project ID, project name, node count, and link count
- Debug log retains the full topology details for deeper inspection
This makes it easier to monitor topology retrieval in production while keeping detailed data available for debugging.
2026-03-04 17:43:41 +08:00
YueGuobin ef712ad314 feat(copilot): simplify project context handling and remove mode parameter
- Remove `selected_project` tuple from MessagesState as it's no longer needed
- Replace tuple-based project selection with direct `project_id` from config
- Remove unused `mode` parameter from llm_call function
- Update topology retrieval to use project_id directly from configurable settings
- Streamline context messages by removing redundant project info formatting
- Move project_id from metadata to configurable section in agent_service config
2026-03-04 17:40:17 +08:00
grossmj 5b00529666 Copy config files and database from a previous version if it exists 2026-03-04 17:23:10 +08:00
Jeremy Grossmann a20e10f75a Merge pull request #2625 from markparonyan/3.0
feat(compute): option to disable compute authentication
2026-03-04 16:40:58 +08:00
grossmj 7010baccee Add enable_http_auth in gns3_server.conf sample 2026-03-04 16:35:26 +08:00
YueGuobin 4fa29f3bee feat(agent): add GNS3ProjectInfoTool to gns3_client exports
Add GNS3ProjectInfoTool to the __all__ list in gns3_client/__init__.py to make it available for import. This ensures the tool is properly exposed as part of the public API for use in copilot agent modules.
2026-03-04 16:06:13 +08:00
YueGuobin a278a6091c feat(agent): add comprehensive logging to LLM and tool execution nodes
- Add info and debug logging to llm_call node for tracking LLM invocations and configuration
- Add error handling and logging to tool_node for tool execution failures
- Add startup logging to stream_chat method with session details
- Improve observability of agent workflow and debugging capabilities
2026-03-04 15:46:12 +08:00
YueGuobin 1e9cf3fcbb feat(agent): make JWT token optional in GNS3 connector factory
The `get_gns3_connector` function now accepts an optional `jwt_token` parameter. If not provided, the token will be retrieved from context, improving flexibility for scenarios where authentication is handled externally or deferred.
2026-03-04 15:38:50 +08:00
YueGuobin 289ae0cddf feat(agent): remove redundant done message from stream_chat
The `stream_chat` method was yielding a "done" message after streaming all chunks, but this is unnecessary as the streaming completion is already indicated by the end of the stream. Removing this redundant message simplifies the response handling and aligns with typical streaming patterns.
2026-03-04 13:57:03 +08:00
YueGuobin 425ce43bdd feat(chat): add project status checks to chat endpoints
Add project status validation to all chat API endpoints to ensure the project is opened before allowing chat operations. This prevents unauthorized access and ensures chat functionality only works with active projects.

- Check project.status == "opened" in stream_chat, list_sessions, get_history, and delete_session endpoints
- Return HTTP 403 FORBIDDEN with descriptive error message if project is not opened
- Update docstring for stream_chat endpoint to document the requirement
2026-03-04 13:55:09 +08:00
YueGuobin eec4ebe3fd feat(copilot): replace LangGraph config with request-scoped context variables
- Refactor `llm_call` and `generate_title` nodes to retrieve `llm_config` from request-scoped context variable instead of LangGraph config
- Remove `jwt_token` and `llm_config` from LangGraph configurable parameters in `AgentService.stream`
- Add `set_current_llm_config` and `get_current_llm_config` functions to `connector_factory` and export them in `__init__.py`
- Update `tool_node` to no longer extract `jwt_token` from config as it is now handled via context variable
- Improves thread safety and decouples configuration from LangGraph's state management
2026-03-04 13:49:17 +08:00
YueGuobin b05e6a71b4 feat(copilot): refactor JWT token handling and improve metadata tracking
- Move JWT token from state to configurable context for better security and request isolation
- Add user_id parameter to agent service for enhanced metadata tracking
- Update checkpoint directory name from .gns3-copilot to gns3-copilot
- Implement context-aware JWT token management using ContextVar
- Improve tool node to extract JWT token from config instead of state
2026-03-04 13:36:16 +08:00
YueGuobin 5e9aac7514 feat(agent): handle AIMessageChunk content access in copilot streaming
Update agent service to properly access content from AIMessageChunk objects during chat model streaming. Instead of using dictionary get method on the chunk, now use getattr to directly access the content attribute, ensuring compatibility with the AIMessageChunk object structure.
2026-03-04 13:23:07 +08:00
YueGuobin b780bfaf53 feat(agent): refactor LLM configuration handling to use centralized config
- Replace separate user_id and jwt_token parameters with unified llm_config dict
- Simplify model factory to accept llm_config directly instead of fetching from API
- Update llm_call and generate_title nodes to extract llm_config from LangGraph config
- Remove deprecated API fetching logic from model factory
- Maintain backward compatibility for existing tool usage patterns

This change centralizes LLM configuration management, reducing API calls and improving performance by passing configuration directly from the API layer rather than fetching it repeatedly.
2026-03-04 13:13:54 +08:00
YueGuobin 4765e54d7a feat: improve async handling in LLM config retrieval
Refactor get_llm_config to handle various async contexts more robustly. The function now properly checks for running event loops using asyncio.get_running_loop() and handles edge cases when called from thread pools or existing loops. This prevents RuntimeErrors and ensures reliable execution in both sync and async environments.
2026-03-04 12:47:37 +08:00
YueGuobin d8c3a56503 feat(agent): remove environment variable fallback for LLM configuration
Remove support for environment variable fallback in LLM model configuration. The configuration now strictly follows:
1. Provided llm_config dictionary (highest priority)
2. Fetch from llm_model_configs system via connector_factory (requires user_id and jwt_token)

This change ensures consistent configuration management and eliminates the outdated environment variable approach. When no configuration is found, a clear ValueError is raised with appropriate error messages.
2026-03-04 12:45:09 +08:00
YueGuobin 2df05dff6e feat(api): nest chat endpoints under projects and refactor dependencies
- Change chat router prefix from `/chat` to `/projects/{project_id}/chat`
- Add `dep_project` dependency to inject Project instance into endpoints
- Remove manual project validation in `stream_chat` and use dependency instead
- Add placeholder `list_sessions` endpoint for future session listing
- Update `get_history` endpoint to use project dependency and adjust path
- Improve code organization and error handling for project retrieval
2026-03-04 12:43:36 +08:00
YueGuobin 479afc01b0 feat(api): add Query parameter description for chat session listing
Add explicit Query parameter with description to the `list_sessions` endpoint for better API documentation and clarity. The `project_id` parameter now includes a descriptive label indicating it is a GNS3 project ID.
2026-03-04 12:35:38 +08:00
YueGuobin 2fe30c69e6 feat(agent): update config parameter type to RunnableConfig in copilot nodes
- Change config parameter type from dict to RunnableConfig | None in llm_call and generate_title functions
- This improves type safety and aligns with LangChain's RunnableConfig usage
- No functional changes, only type annotations updated for better integration
2026-03-04 12:29:31 +08:00
YueGuobin dde2a00c5b feat(agent): update import paths for gns3_copilot modules
Updated import statements across multiple agent files to use absolute paths starting with `gns3server.agent.gns3_copilot` instead of relative `gns3_copilot` imports. This ensures proper module resolution within the gns3-server package structure and prevents import errors when the agent is executed from different contexts.
2026-03-04 12:27:50 +08:00
YueGuobin 73de248381 feat(copilot): add user-aware LLM calls and project cleanup
- Modified `llm_call` and `generate_title` functions to accept `config` parameter, extracting `user_id` and `jwt_token` for per-user LLM configuration and API authentication
- Updated `create_base_model_with_tools` and `create_title_model` calls to pass user authentication details
- Added `jwt_token` to state for tool usage in GNS3 API calls
- Integrated chat router into controller API routes under `/chat` endpoint
- Implemented `_cleanup_copilot_agent` method in `Project` class to remove AgentService resources upon project closure, preventing resource leaks
- Enhanced error handling in agent cleanup to avoid interrupting project close operations
2026-03-04 12:26:19 +08:00
YueGuobin e1f1bb7d9f feat(api): add AI chat API design document for GNS3 Copilot integration
This commit introduces a comprehensive design document outlining the implementation of AI Chat API for GNS3 Copilot Agent within GNS3 Server. The document provides:

- Overview and background on existing components including GNS3 Copilot Agent, LLM configuration management, and API framework
- Reference implementation details from FlowNet-Lab project
- Architecture design with clear component interactions between frontend clients and backend services
- RESTful API specifications for chat streaming, session management, and history retrieval
- Implementation details covering project-based agent management, SQLite checkpoint storage, and LangGraph integration
- Security considerations and deployment guidelines

The design enables clients to interact with GNS3 Copilot Agent through standardized APIs, supporting real-time chat streaming and persistent conversation sessions per project.
2026-03-04 12:08:47 +08:00
YueGuobin a1466dad0d feat(gns3_copilot): remove GNS3UpdateDrawingTool from client exports
Removed GNS3UpdateDrawingTool import and from __all__ list in gns3_client __init__.py to clean up the public interface and eliminate unused or deprecated components.
2026-03-04 01:17:20 +08:00
YueGuobin d525e5cad0 feat: rename FlowNet-Lab to GNS3-Copilot across codebase
Update all references from FlowNet-Lab to GNS3-Copilot in package names, documentation, and logging. This includes:
- Module and package __init__.py files
- License headers and file descriptions
- Log messages and internal comments
- Remove deprecated tools: GNS3CreateAreaDrawingTool and LinuxTelnetBatchTool

The renaming aligns with the project's new branding while maintaining all existing functionality.
2026-03-04 00:55:29 +08:00
YueGuobin 95b309c7af feat: add GNS3 Copilot AI agent dependencies to requirements
Add comprehensive dependencies for the new GNS3 Copilot AI agent feature. This includes:
- Core AI and automation frameworks (LangChain, LangGraph)
- Multiple model provider integrations (OpenAI, Anthropic, Google, AWS, Ollama, DeepSeek, xAI)
- Network automation tools (Netmiko, Nornir)
- Supporting libraries for telnet, HTTP requests, authentication, and image processing

The dependencies are organized into a dedicated section with clear comments for maintainability.
2026-03-04 00:49:46 +08:00
YueGuobin db9db56e7a feat(agent): enhance LLM config loading with priority system
Refactor model factory to support three configuration sources in priority order:
1. Direct llm_config dictionary parameter
2. Fetch from llm_model_configs system via connector_factory (requires user_id and jwt_token)
3. Environment variables as fallback for backward compatibility

This improves flexibility by allowing runtime configuration while maintaining compatibility with existing environment-based setups.
2026-03-04 00:47:35 +08:00
YueGuobin 15dc1e7ea0 feat(agent): remove checkpoint utilities from public API
Removed checkpoint-related imports and exports from the agent package's __init__.py to clean up the public API. This change reduces unnecessary exposure of internal checkpoint utility functions, focusing the public interface on the core agent_builder functionality.
2026-03-04 00:35:15 +08:00
YueGuobin cabcf4f1cb feat(gns3-copilot): add get_gns3_server_host utility and integrate into Nornir tools
- Add `get_gns3_server_host()` function to `connector_factory.py` for extracting GNS3 server hostname from controller, config, or default URL
- Export new function in `__init__.py` for public API access
- Replace `os.getenv("GNS3_SERVER_HOST", "127.0.0.1")` calls with `get_gns3_server_host()` in Nornir configuration tools (`config_tools_nornir.py`, `display_tools_nornir.py`)
- Ensures consistent host detection across tools using the same priority logic as `get_gns3_connector`
2026-03-04 00:28:52 +08:00
YueGuobin 8917ef39c9 feat: remove environment variable usage for Nornir credentials
Removed GNS3_SERVER_USERNAME and GNS3_SERVER_PASSWORD environment variables from Nornir configuration tools. Credentials are now set to empty strings by default, simplifying configuration and removing dependency on environment variables for authentication.
2026-03-04 00:22:47 +08:00
YueGuobin 983ed32663 feat(copilot): refactor prompts module for GNS3 Copilot
- Rename module description from FlowNet-Lab to GNS3 Copilot
- Replace linux_specialist_prompt and experiment_deploy_prompt imports with base_prompt
- Update __all__ export list to include SYSTEM_PROMPT instead of removed prompts
- Improve module docstring with detailed component descriptions and available prompts
- Maintain dynamic version management and module metadata
2026-03-03 23:31:38 +08:00
YueGuobin 4857cff59c feat(agent): refactor LLM configuration to support new llm_model_configs system
- Remove direct logging of LLM config from gns3_copilot.py
- Update model_factory to accept configuration from llm_model_configs dictionary
- Add fallback to environment variables for backward compatibility
- Centralize configuration loading in _load_llm_config function
2026-03-03 23:26:20 +08:00
YueGuobin 3c54a7d90a feat(gns3-copilot): add factory function to create GNS3 connector with LLM config
Introduce `get_gns3_connector_with_llm_config` as a convenience function that combines the creation of a GNS3 API connector and retrieval of the user's default LLM configuration. This simplifies initialization for operations requiring both GNS3 connectivity and AI model settings, reducing boilerplate code in callers. The function returns a dictionary containing the connector and LLM config, or None on failure.
2026-03-03 23:19:00 +08:00
YueGuobin 46b262a02c feat(agent): add gns3-copilot AI assistant integration module
Integrate the gns3-copilot AI assistant module to provide intelligent
   automation and interaction capabilities for GNS3 network emulation.

   Key components:
   - AI agent framework with LLM integration (supports Qwen vision model)
   - GNS3 client library for project topology management
   - Extensive prompt templates for various network operation scenarios
   - Tool library for node creation, linking, configuration, and management
   - Support for English level assessment (A1-C2) and specialized personas
   - Network drawing and topology visualization tools
   - Linux device automation via Nornir/Telnetlib
   - Window controller for UI interaction

   Features:
   - Multi-modal AI agent with vision capabilities
   - Automated network topology deployment and configuration
   - Interactive node and drawing management
   - File-based project operations (read, write, list)
   - Specialized prompts for different scenarios and skill levels
   - Comprehensive tool set for network device management
2026-03-03 23:08:07 +08:00
YueGuobin 7a2d15cb64 feat: clarify default LLM model config selection logic
Updated documentation and implementation to clearly define the priority order for selecting default LLM model configurations. The logic now explicitly states:
1. User's config marked with `is_default: true` (highest priority)
2. Group's config marked with `is_default: true`
3. First config in the list (user configs come before group configs)

This ensures consistent behavior between the API documentation and the actual implementation in the repository code.
2026-03-03 22:56:21 +08:00
YueGuobin f4723cd083 docs: restructure LLM model configs API documentation for nested config object
Update API documentation to reflect new nested `config` object structure in LLM model configurations endpoints. The response format now encapsulates provider-specific fields (provider, base_url, model, temperature, api_key, max_tokens) within a `config` object, while moving ownership metadata (user_id, group_id, is_default, version, created_at, updated_at) to the top level. This aligns the user-facing endpoints with the group configuration structure and improves API consistency.
2026-03-03 22:47:36 +08:00
YueGuobin 176b39145b docs: update LLM model configs API documentation for group endpoints
- Add note clarifying that GET endpoints for groups return the same structure as user endpoints
- Document LLMModelConfigListResponse schema with default configuration selection logic
- Add comprehensive example for GET group configurations endpoint
- Update endpoint numbering to accommodate new group endpoints
- Ensure consistency between user and group API documentation
2026-03-03 22:39:38 +08:00
YueGuobin 2e4c42fadc feat(api): clarify default LLM model config selection logic
- Update API documentation to explicitly describe default configuration selection logic
- Add fallback behavior in repository to use first config when no default is marked
- Clarify difference between `/default` endpoint and `default_config` field
- Document that `default_config` is never null when configs list is not empty
2026-03-03 22:27:28 +08:00
YueGuobin b06593cf2a feat(docs): add default config endpoints and clarify config inheritance
- Add `/default` endpoints for users and groups to retrieve default LLM model configurations
- Update documentation to clarify that users receive both own and inherited configurations
- Improve response examples to show combined configs with source field
- Add 404 response example for missing default configurations
- Fix optimistic locking documentation formatting
2026-03-03 22:15:17 +08:00
YueGuobin 8fb4bf1117 feat(db): manually set timestamps for SQLite compatibility
Add explicit datetime.utcnow() assignments for created_at and updated_at fields in LLMModelConfigsRepository to ensure proper timestamp handling with SQLite. This addresses issues where SQLite may not automatically populate these timestamp fields during create and update operations. Changes applied to both user and group configuration methods for consistency.
2026-03-03 21:35:26 +08:00
YueGuobin aef337e86f feat(config): load secret files even without main config
When no configuration file is found or readable, the server now still loads secret files. This ensures that secret configurations (like API keys or passwords) are available even if the primary config file is missing, improving robustness and security in environments where secrets are stored separately.
2026-03-03 18:16:37 +08:00
YueGuobin 8e43ad4912 feat(db): replace PostgreSQL-specific JSONB with cross-database JSON type
- Change `JSONB` columns to generic `JSON` in LLMModelConfig model for database compatibility
- Update migration to use `sa.String(32)` for UUID and `sa.JSON()` for config fields
- Remove PostgreSQL dialect imports to support multiple database backends
- Keep existing constraints and indexes with PostgreSQL-specific annotations where needed
2026-03-03 18:03:16 +08:00
YueGuobin 3632641127 feat(db): update migration dependency to correct previous revision
The migration file `20260303_create_llm_model_configs_table.py` had an incorrect `down_revision` reference. Changed from `7ceeddd9c9a8` to `98083573d011` to properly link to the previous migration in the Alembic history. This ensures the migration chain is consistent and rollbacks work as expected.
2026-03-03 17:58:48 +08:00
YueGuobin fc7275878e feat(db): replace deferred unique constraints with partial unique indexes for LLM model configs
Replace deferred UniqueConstraints with partial unique indexes for user and group default configurations in the LLM model configs table. This change improves performance and ensures at most one default config per user/group while maintaining data integrity. The migration script has been updated accordingly to create and drop the new indexes.
2026-03-03 17:57:32 +08:00
YueGuobin d42fff49a5 feat(docs): enhance LLM model configs API documentation with schema updates
- Add `model_type` field to database schema with supported values (text, vision, stt, tts, multimodal, embedding, reranking, other)
- Add `name` field as table-level column for indexing and filtering
- Add reserved JSONB fields for future extensibility
- Update API request/response schemas to include `model_type` and `name` fields
- Add new `LLMModelConfigWithSource` schema for detailed configuration responses
- Update usage examples to reflect new required fields
- Improve database constraints and indexing documentation
2026-03-03 17:54:30 +08:00
YueGuobin b968920a75 feat(docs): add optimistic locking documentation for LLM model configs API
Add comprehensive documentation for optimistic locking implementation in the LLM model configurations API. The update includes:

- Added "Optimistic Locking" feature to the overview section
- Added `version` field to the database schema table
- Updated `LLMModelConfigUpdate` schema to include `expected_version` parameter
- Updated `LLMModelConfigResponse` schema to include `version` field
- Added detailed examples for update operations with optimistic locking
- Included conflict handling workflow and client retry instructions

This documentation ensures users understand how to prevent concurrent modification conflicts when updating LLM model configurations.
2026-03-03 17:39:04 +08:00
YueGuobin 161b7feb01 feat(api): add optimistic locking to LLM model config updates
- Include `version` field in all LLM model config response schemas
- Add `expected_version` parameter to update endpoints for optimistic locking
- Handle concurrent modification errors with HTTP 409 Conflict status
- Update both user and group config endpoints consistently
2026-03-03 16:59:12 +08:00
YueGuobin 9315f06e1f feat(config): add encryption key loading for sensitive data
Add a new method `_load_encryption_key` to initialize encryption for sensitive data such as API keys. This method is called within `_load_secret_files` alongside JWT secret key loading, ensuring encryption is set up during server configuration. The change enhances security by enabling encryption for secrets stored in the server's secrets directory.
2026-03-03 16:46:23 +08:00
YueGuobin 8fad27d904 feat(db): improve database initialization and migration handling
- Add smarter database state detection during initialization to handle new databases, existing databases with new features, and old databases needing migration
- Make migration for llm_model_configs table idempotent to prevent conflicts when table already exists from code
- Add detailed logging for different database initialization scenarios
- Import sqlalchemy module for database inspection capabilities
2026-03-03 16:40:57 +08:00
YueGuobin bbd34f1f67 feat(api): add LLM model configurations endpoint and schemas
- Introduce new API route `/access` for managing LLM model configurations
- Add LLMModelConfig model to database models
- Include comprehensive schemas for LLM model config CRUD operations
- Register new router with tags for LLM Model Configurations
2026-03-03 16:34:48 +08:00
Mark Paronyan c48c89d309 tests(compute): test compute works with disabled auth 2026-03-03 00:30:00 +03:00
Mark Paronyan 8c3aaa78f5 feat(compute): option to disable compute authentication 2026-03-03 00:28:57 +03:00
Jeremy Grossmann d3710e8e9a Merge pull request #2621 from markparonyan/issue-2521
handle None port name to prevent TypeError in short_name method
2026-03-01 12:31:17 +08:00
Mark Paronyan 0da1a6639a tests(controller,port): short_name finishes successfully when port name is None 2026-02-28 21:45:08 +03:00
Mark Paronyan 729eb43115 fix(controller,port): handle None port name to prevent TypeError in short_name method 2026-02-28 21:45:00 +03:00
Jeremy Grossmann dce4a71004 Merge pull request #2619 from yueguobin/fix/docker-container-name-conflict
fix(docker): handle container name conflict automatically
2026-02-28 12:56:24 +08:00
grossmj 151feb369f Development on 3.1.0.dev1 2026-02-28 11:35:46 +08:00
YueGuobin ce90b2b92c fix(docker): handle container name conflict automatically
When a Docker container with the same name already exists (e.g., from a
   previous crashed GNS3 session), Docker returns a 409 Conflict error
   when trying to create a new container with that name. This causes the
   project open operation to fail.

   This fix adds automatic cleanup of stale containers when encountering
   a name conflict:
   - Added DockerHttp409Error exception class
   - Updated http_query to detect 409 status codes
   - Modified create() to remove conflicting containers and retry

   Fixes the issue where opening a project fails with:
   "Docker has returned an error: 409 Conflict. The container name
   '/GNS3.xxx' is already in use by container 'xxx'"
2026-02-27 23:35:11 +08:00
Jeremy Grossmann a0116902a6 Merge pull request #2618 from yueguobin/fix-port-nonename-error
feat(virtualbox): add fallback for VBoxManage executable detection
2026-02-27 00:39:31 +08:00
YueGuobin a343ace637 Revert: restore original port name handling logic 2026-02-27 00:12:30 +08:00
YueGuobin fe73d0e935 Merge branch 'fix-vboxmanage-case-sensitivity' into fix-port-nonename-error 2026-02-26 10:02:43 +08:00
YueGuobin c55fd9e066 feat(virtualbox): add fallback for VBoxManage executable detection
Add an additional fallback check for the VBoxManage executable using the capitalized "VBoxManage" command name. This improves compatibility on systems where the executable may be case-sensitive or installed with a different naming convention, ensuring the VirtualBox manager can locate the necessary binary when the lowercase "vboxmanage" is not found.
2026-02-26 09:57:51 +08:00
YueGuobin cde4bdc114 feat: simplify port name assignment logic
Refactor port name assignment to use `or` operator for fallback values, improving code readability and consistency. Changes applied in `node.py` and `port_factory.py` to handle custom adapter settings more cleanly.
2026-02-25 22:41:22 +08:00
YueGuobin f6777064db feat(ports): add null checks for port name in short name generation
Add conditional checks to ensure `self._name` is not None before performing string operations in the `short_name` property. This prevents potential AttributeError exceptions when port name is undefined, improving robustness and compatibility with edge cases in port configuration.
2026-02-25 22:21:05 +08:00
grossmj 4c6d40fd4b Upgrade httpx_ws 2026-02-25 19:20:18 +08:00
grossmj 4a2c1b7b23 Fix installing pytest-asyncio with Python 3.9 2026-02-25 19:06:56 +08:00
grossmj 47a7324eb5 Fix tests 2026-02-25 19:00:57 +08:00
Jeremy Grossmann 4519130a8c Merge pull request #2614 from yueguobin/3.0
Implement tags for nodes and templates
2026-02-25 00:33:15 +08:00
grossmj ef7c271a9a Development on 3.0.7.dev1 2026-02-24 21:32:36 +08:00
grossmj 4d85e517b4 Development on 2.2.57.dev2 2026-02-24 21:21:03 +08:00
grossmj ddacd956b2 Merge remote-tracking branch 'yueguobin/3.0' into fork/yueguobin/3.0 2026-02-23 23:32:15 +08:00
grossmj 547e68fd2b Remove unneeded rbac_repo in get_templates 2026-02-23 23:31:35 +08:00
Jeremy Grossmann 11e36cb32c Merge branch '3.0' into 3.0 2026-02-23 23:28:47 +08:00
grossmj 4d35477e46 Add/fix tests 2026-02-23 23:27:36 +08:00
grossmj a9525503c6 Set up database schema migration 2026-02-23 23:27:10 +08:00
grossmj bdcb6445c7 Use lists for tags instead of dicts 2026-02-23 23:26:42 +08:00
Jeremy Grossmann c49aa761ab Merge pull request #2617 from GNS3/bugfix/2560
Fix for resizing Qemu VMs disks
2026-02-23 17:18:57 +08:00
Jeremy Grossmann c88ac0c595 Merge branch '3.0' into bugfix/2560 2026-02-23 17:14:38 +08:00
grossmj 8f470fbe55 Update FastAPI dependency to support Python 3.9 2026-02-23 17:14:16 +08:00
grossmj c66e851498 Fix for resizing Qemu VM disks 2026-02-23 17:10:15 +08:00
grossmj a6043f0fc6 Upgrade dependencies 2026-02-23 16:48:26 +08:00
Guobin Yue 66f32cecf2 Merge branch 'GNS3:3.0' into 3.0 2026-02-23 01:37:05 +08:00
YueGuobin c05f667f3d feat(templates): safely access settings dict keys
Use dict.get() method to safely access 'image' and 'path' keys in settings dictionary to avoid KeyError exceptions when these keys are missing. This improves error handling and prevents server crashes when creating templates with incomplete settings.
2026-02-23 01:02:32 +08:00
YueGuobin e27ddf2cdf feat(api): fix ETag handling and JSON serialization in template endpoint
- Use `default=str` in `json.dumps` to handle non-serializable objects
- Return proper HTTP 304 response with ETag header instead of raising exception
- Ensure consistent ETag generation for template caching
2026-02-22 23:43:47 +08:00
YueGuobin a3616e6d33 feat(api): add tag filtering to nodes and templates endpoints
- Add optional `tags` query parameter to `/nodes` and `/templates` endpoints
- Support filtering by tags in format "key:value" with multiple tags ANDed together
- Example: `?tags=vendor:cisco&tags=model:7200` filters nodes/templates with both tags
- Maintain backward compatibility for existing API usage without tags parameter
2026-02-22 22:52:28 +08:00
Jeremy Grossmann 22c6b4b961 Merge pull request #2616 from StupidTreee/feature/project-created-by
Add 'created_by' field to track project creator
2026-02-22 18:33:54 +08:00
grossmj be4b87e8cd Update project schema and fix tests 2026-02-22 18:13:08 +08:00
Felix Schulz 8ab34924b5 Add 'created_by' field to track project creator 2026-02-21 22:15:21 +01:00
Jeremy Grossmann 1958deff09 Merge pull request #2615 from GNS3/bugfix/2532
Fix updating packet filters
2026-02-21 21:45:12 +08:00
grossmj 5e3ca29c58 Fix updating packet filters 2026-02-21 21:42:22 +08:00
grossmj 60abbade27 Revert merged changes from 2.2 introduced by PR #2607 2026-02-21 21:35:12 +08:00
YueGuobinandClaude Sonnet 4.5 56ece7ce88 Add vendor, model and netmiko_device_type fields to templates
Add three new optional fields to the template schema:
- vendor: Device vendor (e.g., Cisco, Juniper, Huawei)
- model: Device model (e.g., ISR4451-X, MX204, NE40E)
- netmiko_device_type: Netmiko device type for automation (e.g., cisco_ios, juniper_junos, huawei)

These fields enable AI/LLM integration to determine the appropriate
Netmiko device type when automating network device configuration.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-20 23:38:00 +08:00
grossmj c5b9f379fe Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	Dockerfile
#	dev-requirements.txt
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/version.py
#	requirements.txt
2026-02-20 16:28:53 +08:00
Jeremy Grossmann 3b95859b79 Merge pull request #2612 from dalearbo/fix/busybox-musl-ldd-check
fix: busybox static link detection on Alpine/musl
2026-02-20 16:01:01 +08:00
Jeremy Grossmann 126a4099e6 Merge pull request #2613 from dalearbo/fix/emit-threadpool-runtime-error
fix: handle RuntimeError in notification_manager emit()
2026-02-20 15:59:01 +08:00
grossmj 47cc827c1f Remove some files not related to PR 2026-02-20 15:56:08 +08:00
grossmj 715b7032bc Fix tests 2026-02-20 15:51:49 +08:00
Jeremy Grossmann bc1729b255 Merge branch '2.2' into fix/busybox-musl-ldd-check 2026-02-20 15:24:54 +08:00
Dale Arbogast 279f05a14a fix: handle RuntimeError in notification_manager emit()
asyncio.get_running_loop() raises RuntimeError when emit() is called
from a thread without an active event loop (e.g. when the disk space
check in project_manager triggers a log.warning notification from a
threadpool worker).

This causes a 500 Internal Server Error on project creation/open when
disk usage is high, instead of the intended warning notification.

Wrap the emit loop in try/except RuntimeError so that notifications
are silently dropped when no event loop is available, rather than
crashing the request.

Fixes #2502
Fixes #2505
2026-02-19 16:49:50 -05:00
Dale Arbogast 3dd4184193 fix: busybox static link detection on Alpine/musl
On musl-based systems (Alpine), ldd returns exit code 0 for static
binaries, unlike glibc which returns 1. This causes install_busybox()
to reject all busybox binaries as "dynamically linked" on Alpine.

Fix by also accepting binaries whose executable name contains "static"
(i.e. busybox-static, busybox.static), which are the first two
candidates checked by the function. The generic "busybox" fallback
still relies on the ldd return code check.
2026-02-19 16:44:01 -05:00
grossmj 013ec341b3 Fix tests 2026-02-16 19:32:47 +08:00
grossmj bfed330ec2 Fix bug when updating compute password to be empty 2026-02-16 19:23:46 +08:00
grossmj 0a118dc9e7 Cancel tasks if controller cannot be started 2026-02-16 19:16:06 +08:00
grossmj 28e7c014c8 Enable parallel compression with zstandard. Fixes #2324 2026-02-16 18:28:11 +08:00
Jeremy Grossmann 2b4a05eedd Merge pull request #2608 from RishikesavanRamesh/patch-1
Add dynamips to Dockerfile dependencies
2026-02-12 21:13:51 +08:00
Jeremy Grossmann 898a9ce208 Merge branch 'master' into patch-1 2026-02-12 21:13:38 +08:00
grossmj 74bc3b5144 Upgrade dependencies 2026-02-11 18:11:16 +08:00
grossmj aabfd08524 Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	dev-requirements.txt
#	gns3server/crash_report.py
#	gns3server/version.py
#	requirements.txt
2026-02-11 17:52:14 +08:00
grossmj dd87ccff4d Upgrade pytest and jsonschema dependencies 2026-02-11 17:38:49 +08:00
grossmj c1f8202d7c Revert "Upgrade python-multipart to v0.0.22. Fixes #2610"
This reverts commit fdcdce7d0d.
2026-02-11 17:14:03 +08:00
grossmj fdcdce7d0d Upgrade python-multipart to v0.0.22. Fixes #2610 2026-02-11 17:07:28 +08:00
Jeremy Grossmann 78c7d36b1c Merge pull request #2606 from GNS3/release/v2.2.56.1
Release v2.2.56.1
2026-02-11 16:52:43 +08:00
grossmj 44d4a426b5 Upgrade sentry-sdk and psutil dependencies 2026-02-11 16:46:21 +08:00
RishikesavanRamesh 3273f7e992 Add dynamips to Dockerfile dependencies 2026-02-06 20:34:44 +05:30
Jeremy Grossmann d2d19b43c2 Merge pull request #2607 from polsson86/update-pci-device-id-computation
Take populated disks into consideration when calculating PCI device ID
2026-02-06 12:45:30 +08:00
Patrik Olsson fe2014854e Take populated disks into consideration when calculating PCI device ID 2026-02-05 15:10:57 +01:00
grossmj 3915918c41 Release v3.0.6 2026-01-28 22:30:36 +08:00
grossmj a72980b2d9 Sync appliances 2026-01-28 22:24:10 +08:00
grossmj 600d3d38da Fix creating Qemu disk image. Fixes #2542 2026-01-28 19:36:22 +08:00
grossmj ebe4fdc5b5 Development on 2.2.57.dev2 2026-01-28 18:44:51 +08:00
grossmj 7f45cc6f47 Disable checking for available disk space. Ref #2548 2026-01-28 18:32:42 +08:00
grossmj 43d7e8a437 Release v2.2.56.1 2026-01-28 17:00:07 +08:00
grossmj 833b5a9ea8 Sync appliances 2026-01-28 16:52:30 +08:00
grossmj 05dda0117f Merge branch 'master' into 2.2 2026-01-28 16:00:14 +08:00
Jeremy Grossmann 6f0dfecc3d Merge pull request #2605 from iskanred/bugfix/2604
Fix telnet keepalive options on macOS
2026-01-28 15:56:13 +08:00
grossmj abaeab6242 Upgrade greenlet and sqlalchemy dependencies 2026-01-26 19:50:42 +08:00
Iskander Nafikov 2414b7a968 Fix telnet keepalive options on macOS 2026-01-26 00:31:03 +08:00
grossmj 1d45df6613 Upgrade dependencies 2026-01-24 21:38:58 +08:00
grossmj 69a695c9e6 Merge branch '2.2' into 3.0
# Conflicts:
#	dev-requirements.txt
#	gns3server/appliances/infix.gns3a
#	gns3server/crash_report.py
#	gns3server/run.py
#	gns3server/utils/asyncio/__init__.py
#	gns3server/version.py
#	requirements.txt
#	setup.py
2026-01-24 19:27:39 +08:00
grossmj 7b20314edb Delete random_query.py 2026-01-24 19:17:55 +08:00
grossmj 193f470eaf Upgrade dependencies 2026-01-24 19:12:58 +08:00
grossmj 4335fd7ce0 Drop Python 3.8 support 2026-01-24 18:51:44 +08:00
grossmj ef2cf277c1 Development on 2.2.57.dev1 2026-01-24 16:53:43 +08:00
Jeremy Grossmann 66db267e27 Merge pull request #2591 from GNS3/release/v2.2.56
Release v2.2.56
2026-01-24 16:49:35 +08:00
grossmj 27fbe37375 Release v2.2.56 2026-01-21 22:15:12 +08:00
grossmj 7b3fd4450e Sync appliances 2026-01-17 18:37:41 +08:00
grossmj 58d1e8f0c5 Set default location of udhcpc in "/etc/network/udhcpc". Fixes #2582 2026-01-17 18:01:42 +08:00
grossmj 8ce690ce78 Upgrade pywin32 to v311 2026-01-17 17:54:27 +08:00
grossmj c676a5bf82 Development on v2.2.56.dev1 2025-12-16 16:46:31 +08:00
grossmj 60c10e7ecc Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	CHANGELOG
#	README.md
#	gns3server/appliances/infix.gns3a
#	gns3server/compute/docker/__init__.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/crash_report.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	setup.py
#	tests/controller/test_project.py
2025-11-29 11:42:02 +10:00
grossmj 37f17209d3 Release v2.2.55 2025-11-19 12:13:56 +10:00
grossmj f24134a8f5 Sync appliances 2025-11-19 12:08:29 +10:00
Jeremy Grossmann 1f2036defd Merge pull request #2575 from GNS3/bugfix/2574
Handle Docker API version requirements
2025-11-17 22:31:41 +10:00
grossmj f2aaf5ab38 Docker API version requirements and process to handle older daemons 2025-11-17 22:26:18 +10:00
Jeremy Grossmann 32f48e555c Merge pull request #2573 from GNS3/bugfix/2541
Python 3.14 compatibility
2025-11-17 11:30:42 +10:00
grossmj 942f021b58 Fix test_config.py 2025-11-17 11:26:06 +10:00
Jeremy Grossmann 4dc321454e Merge pull request #2572 from GNS3/feature/name-of-container-in-docker
Set name of container in Docker
2025-11-17 11:13:47 +10:00
grossmj 3a24318694 Use docker_name property when creating a container 2025-11-17 11:11:11 +10:00
grossmj bae6221991 Set name of container in Docker 2025-11-17 10:59:05 +10:00
grossmj c67ba6da0d Fix config tests 2025-11-17 10:21:12 +10:00
grossmj 4d23ca221f Comment out some tests in test_project.py 2025-11-16 20:52:14 +10:00
grossmj 09eab9529a Fix syntax error in testing.yml 2025-11-16 19:32:19 +10:00
grossmj 3bb23708fc Support for Python 3.14 2025-11-16 19:30:45 +10:00
grossmj 672b3c052b Downgrade aiofiles version 2025-11-16 19:25:12 +10:00
grossmj bfe7b7a735 Upgrade dependencies 2025-11-16 19:16:38 +10:00
Jeremy Grossmann d269a4c125 Merge pull request #2570 from Mytic2330/3.0-patch3
Fixed Connection closed when exporting a running project
2025-11-04 04:07:01 +01:00
Jeremy Grossmann 8ada95b9fd Merge pull request #2569 from Mytic2330/3.0
Fix database pool error and non-ASCII character project export
2025-11-04 04:05:56 +01:00
Bine d5f360c176 Update projects.py 2025-10-18 19:28:15 +02:00
Bine e817228280 Fix non-ASCII characters in project names 2025-10-18 18:10:24 +02:00
BineandUfi 4a059be480 Increase DB engine pool size and max overflow
As described in #2568 when multiple clients connect simultaneously, an excessive number of database pool connections are created. This leads to resource exhaustion and connection management issues.

We have introduced the pool_size and max_overflow parameters to better control the database connection pool.
These parameters ensure the database can handle a sufficient number of concurrent connections without over-allocating resources.

Added pool_size and max_overflow arguments to the database initialization.

This change overrides the default initialization configuration where the temporary fix was applied.

Co-Authored-By: Ufi <86113085+ufiking@users.noreply.github.com>
2025-10-17 22:17:10 +02:00
Jeremy Grossmann 230866890e Merge pull request #2556 from GNS3/bugfix/2543
Enable ip cef in IOU L2 and IOU L3 base configs
2025-09-01 18:59:10 +02:00
grossmj 355cfb7571 Enable ip cef in IOU L2 and IOU L3 base configs 2025-09-01 18:55:36 +02:00
grossmj 8dddfe056e Merge branch 'master' into 2.2 2025-09-01 18:42:02 +02:00
Jeremy Grossmann 9c33827de3 Merge pull request #2555 from GNS3/update-gh-docker-build
Update docker-build.yml
2025-09-01 18:28:04 +02:00
grossmj a34fa53823 Update tags 2025-09-01 18:27:04 +02:00
grossmj 565a76ae27 Only build and push Docker image when releasing a new version 2025-09-01 18:23:52 +02:00
grossmj dc9c3b1c5d Fix pushing Docker image to Docker hub 2025-09-01 18:17:52 +02:00
grossmj a394fb71dc Update method to login to ghcr.io 2025-09-01 17:55:46 +02:00
grossmj 6cbf3baa1b Update docker-build.yml 2025-09-01 17:49:34 +02:00
grossmj 10322135e3 Upgrade sentry-sdk package 2025-08-30 21:51:20 +02:00
grossmj 12d1d04462 Update security issues again in README.md. Fixes #2535 2025-08-29 18:28:14 +02:00
grossmj 8b4c2f5e90 Update security issues in README.md. Fixes #2535 2025-08-29 18:25:57 +02:00
grossmj 1ed549fdb1 Upgrade requests dev dependency 2025-08-29 14:01:19 +02:00
grossmj 845cad35f0 Upgrade pydantic, fastapi & sqlalchemy dependencies 2025-08-29 13:55:00 +02:00
grossmj 31613630cf Update pyproject.toml to support LICENSE file 2025-06-09 22:24:23 +02:00
Jeremy Grossmann aaffc731ee Merge pull request #2538 from Nick1200000/enhancement/docker-build
Add automated Docker build and publish workflow
2025-06-09 22:14:11 +02:00
Nick1200000 5ce55aff02 Resolving the Error 2025-06-08 14:11:01 +05:30
Nick1200000 aa1c0bb557 Resolving the Errors 2025-06-08 13:38:35 +05:30
Nick1200000 25bc2dce57 Resolving the Errors 2025-06-08 13:30:49 +05:30
Nick1200000 7e35d164dc Resolving the Errors 2025-06-08 13:26:40 +05:30
Nick1200000 8666ffaff3 Resolving the Errors 2025-06-08 13:24:38 +05:30
Nick1200000 020f6a123d Docker build CI/CD pipeline 2025-06-07 18:16:47 +05:30
grossmj 232b9c2806 Fix tests 2025-05-25 17:35:45 +02:00
Jeremy Grossmann f260f6e2b4 Merge pull request #2531 from PsyBlade42/docker-vnc-name
use GNS3 node name as vnc Desktop name
2025-05-23 14:26:08 +02:00
Thomas Schmidt a7108e1592 use GNS3 node name as vnc Desktop name
Most VNC clients use the Desktop name in their window title.
Currently this defaults to user@host which means all docker vnc
connections have identical window names of e.g.
  SSVNC: gns3@gns3server

This uses the node name instead.
2025-05-22 13:13:47 +02:00
grossmj 975ca254fd Release v3.0.5 2025-05-14 19:11:44 +02:00
grossmj 89cf5ea8e7 Bundle web-ui v3.0.5 2025-05-14 19:06:42 +02:00
grossmj bfbe2bf885 Sync appliances 2025-05-14 18:55:51 +02:00
grossmj 5c036dfd90 Upgrade uvicorn and pydantic 2025-05-14 18:54:55 +02:00
grossmj 2fbfe5385a Use Ubuntu 24.04 LTS in Dockerfile. Ref #2523 2025-05-14 18:30:43 +02:00
grossmj 2cdaa1cd06 Fix tests 2025-05-14 17:19:18 +02:00
grossmj f2080979a1 Fix tests 2025-05-14 16:56:46 +02:00
grossmj df576f0668 Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/schemas/template.py
2025-05-14 16:42:59 +02:00
grossmj c2c89b0ff3 Add missing 'nat' template type in schema. Fixes #2529 2025-05-13 20:52:44 +02:00
grossmj ef3570dc95 Merge branch 'master' into 2.2 2025-05-13 20:48:59 +02:00
grossmj 2bf3eff143 Remove debug message in tests 2025-05-13 20:47:38 +02:00
Jeremy Grossmann add8c4e8a2 Merge pull request #2526 from emmanuel-ferdman/master
Resolve deprecation warnings of regex library
2025-04-30 14:14:37 +07:00
Jeremy Grossmann 53eac771d6 Merge pull request #2528 from tobiasstein/fix-pci-bridges
Fix adding pci_bridges to qemu vms
2025-04-30 14:09:22 +07:00
grossmj 2b96e54629 Fix tests and require Qemu version >= 2.4 2025-04-30 13:38:52 +07:00
Tobias Stein cdf819f820 Fix adding pci_bridges to qemu vms
* Offset pci_device_id for network devices by 32 (formerly 4)
  to reserve first 32 IDs for non-netdev devices
  * This implies a new pci_bridge for the netdevs and
    the pci_device_ids starting at 0 (using modulo)
  * Fixes a bug in the creation of the qemu command
    when the number of qemu pcie devices (storage_controller, disks, …)
    was greater than 4 and the number of network devices
    saturated the 32 pcie ids of the root bridge
    causing qemu not to start.
2025-04-28 21:07:52 +02:00
Emmanuel Ferdman c05e6f4de4 Resolve deprecation warnings of regex library
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-04-26 00:15:16 -07:00
grossmj d9dcc2738d Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	Dockerfile
#	README.md
#	gns3server/appliances/infix.gns3a
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/gns3vm/virtualbox_gns3_vm.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.9bcf455e62558dedfd48.js
#	gns3server/version.py
2025-04-21 20:13:31 +07:00
grossmj e32576d5ed Development on 2.2.55.dev1 2025-04-21 19:35:13 +07:00
Jeremy Grossmann bd3657d8f3 Merge pull request #2524 from GNS3/release/v2.2.54
Release v2.2.54
2025-04-21 19:30:57 +07:00
grossmj 4418d6bb2b Release v2.2.54 2025-04-21 17:15:22 +07:00
grossmj dbcafdd314 Merge branch 'master' into 2.2 2025-04-21 17:08:59 +07:00
grossmj 4dd1803a70 Bundle web-ui v2.2.54 2025-04-21 16:40:59 +07:00
grossmj 99272fb7e0 Sync appliances 2025-04-21 16:30:32 +07:00
grossmj a24d2e25ed Add new method to find the IP address of a VBox GNS3 VM + allow NAT Network 2025-04-21 16:29:32 +07:00
grossmj a5a663bc99 Remove OVMF_CODE_4M.secboot.fd and associated code 2025-04-18 17:31:31 +07:00
grossmj 2b7eb91694 Add edk2-stable202502 UEFI firmwares and try to first use firmwares from the ovmf package if installed. Fixes #2494 2025-04-18 17:13:29 +07:00
grossmj 684770a220 Prettify TPM error message 2025-04-18 15:25:50 +07:00
grossmj f6546bf1de Fix bug in qemu_stdout message 2025-04-18 15:19:06 +07:00
grossmj 355b97398b Reduce matching error for TPM result 2025-04-18 15:13:41 +07:00
grossmj 6242a0be80 Try to detect swtpm and AppArmor issue. Ref https://github.com/GNS3/gns3-gui/issues/3725 2025-04-18 15:06:49 +07:00
grossmj 18413c923c Development on 2.2.54.dev1 2025-04-18 15:05:34 +07:00
grossmj ffd628902c Fix Docker logs decoding. Ref #2522 2025-04-18 13:58:56 +07:00
grossmj ca34053125 Add delay after starting a Docker container and adding connections in uBridge. Ref #2522 2025-04-18 13:50:20 +07:00
grossmj d06f93e772 Fix TypeError when reading Docker container logs. Ref #2522 2025-04-18 13:47:29 +07:00
grossmj 90cf73e434 Fix tests 2025-04-18 13:38:01 +07:00
grossmj aa8ccf4f82 Allow an image to be uploaded to the controller again even if it is already in the database 2025-04-17 19:07:22 +07:00
grossmj 0826b9c259 Fix controller not reporting an error if invalid options are passed to Qemu command line. Fixes #2517 2025-04-17 19:00:52 +07:00
grossmj 0e8d969cd2 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/docker/__init__.py
#	gns3server/compute/docker/docker_vm.py
#	requirements.txt
2025-04-16 17:53:44 +07:00
grossmj 0e89ff56a8 Replace "Docker hub" by "Docker repository" because it is possible to use different repositories 2025-04-16 17:42:40 +07:00
grossmj ffb5bc7ffd Upgrade aiohttp to v3.11.16 2025-04-16 17:09:09 +07:00
grossmj f00f21c4bd Upgrade dependencies 2025-04-16 17:08:08 +07:00
grossmj 773076c40e Fix unable to add NAT cloud after configuring “allowed_interfaces” in configuration file. Fixes #2508 2025-04-16 16:04:57 +07:00
grossmj 5019167098 Fix interface information API endpoint for Cloud/NAT devices 2025-04-16 15:26:56 +07:00
grossmj f525916195 Merge remote-tracking branch 'origin/3.0' into 3.0 2025-04-16 14:39:59 +07:00
grossmj 2ac3e0b39f Upgrade dependencies 2025-04-16 14:39:36 +07:00
Jeremy Grossmann e532c83538 Merge pull request #2518 from markparonyan/get-link-ifaces
Get iface/udp tunnel from links with Cloud,Nat
2025-03-23 20:10:23 +07:00
Mark Paronyan f21887dbab tests(get_iface): add unittests 2025-03-23 14:28:58 +00:00
Mark Paronyan bab173ee52 feat(get_iface): add type information in response 2025-03-23 14:28:27 +00:00
Mark Paronyan ea2856289a feat: add endpoint to get iface/udp tunnel from links with Cloud,Nat 2025-03-23 13:46:27 +00:00
grossmj 8e6f5d2b57 Merge branch '2.2' into 3.0
# Conflicts:
#	requirements.txt
2025-03-18 21:34:43 +07:00
grossmj 2e9127449c Upgrade Jinja2 to v3.1.6. Fixes #2515 2025-03-18 21:33:31 +07:00
grossmj ee9f974362 Fix packet capture for links connected to a cloud node. Fixes #2513 2025-03-16 21:12:33 +07:00
grossmj c9231d7b83 Upgrade dependencies 2025-03-16 20:26:26 +07:00
Jeremy Grossmann 483719568f Merge pull request #2511 from NAKNAO-nnct/feature/update-dockerfile-ubuntu-2404
Update Dockerfile base image to Ubuntu 24.04
2025-03-08 20:26:12 +07:00
NAKNAO-nnct 018598a300 refactor 2025-03-08 20:22:06 +09:00
NAKNAO-nnct e262a46cfd rm space 2025-03-08 20:19:37 +09:00
NAKNAO-nnct 00bf1c028b Update README to Run Docker Compose 2025-03-08 14:11:42 +09:00
NAKNAO-nnct 21ebb934f4 add compose.yaml 2025-03-08 14:08:42 +09:00
NAKNAO-nnct 2ecd2cfe3b update Ubuntu24.04 2025-03-08 13:59:05 +09:00
Jeremy Grossmann ce4b3091dd Merge pull request #2507 from GNS3/fix-remote-install-script
Improvements for remote-install.sh
2025-03-03 05:55:42 +07:00
grossmj f722816849 Improvements for remote-install.sh
* Use apt-add-repository to install repository
* Add option to not upgrade the system
* Check if Python version is >= 3.9 when installing from ppa-v3 repository
2025-03-02 22:27:53 +07:00
Jeremy Grossmann 4cb38b23eb Merge pull request #2506 from FedericoTorres233/patch-1
Check if remote-install.sh is being run as root
2025-03-02 16:14:33 +08:00
Federico Torres f3e46227d8 fix: check if remote-install.sh is being run as root 2025-03-01 16:56:21 -03:00
grossmj 3ba109c651 Development on 3.0.5.dev1 2025-02-25 22:39:38 +08:00
grossmj 3a1ad8c08b Release v3.0.4 2025-02-25 18:24:26 +08:00
grossmj edc855dcb5 Sync appliances 2025-02-25 17:12:28 +08:00
grossmj 59c2eeb536 Upgrade aiohttp to v3.11.13 2025-02-25 19:01:00 +10:00
grossmj a7f2b1fddc Require minimum 8 characters for passwords 2025-02-23 12:05:19 +10:00
grossmj 1f4071af93 Bundle web-ui v3.0.4 2025-02-23 12:04:22 +10:00
grossmj dbdb4a53c7 Sync appliances 2025-02-22 21:18:41 +10:00
grossmj 2659ab2c35 Upgrade dependencies 2025-02-22 21:10:33 +10:00
grossmj 0c3f6712b4 Fix auto idle-pc for IOS templates 2025-02-22 20:14:13 +10:00
grossmj 9122cab6c1 Update schemas to add constraints for values like ram, nvram etc. 2025-02-04 10:39:55 +10:00
grossmj 2516b1952c Install custom symbols. Fixes #2492 2025-01-29 18:32:04 +10:00
grossmj f2bb785037 Remove txt files in custom symbols 2025-01-29 18:25:06 +10:00
grossmj fc938a069b Sync appliances 2025-01-29 18:24:04 +10:00
grossmj 4fd41991db Fix VMware add ubridge connection. Fixes #2490 2025-01-27 12:12:43 +10:00
grossmj cfc4bb371a Upgrade FastAPI to v0.115.7 2025-01-23 13:32:11 +10:00
grossmj ce59e84e13 Development on 3.0.4 2025-01-23 13:31:32 +10:00
grossmj b5e2bb1561 Release v3.0.3 2025-01-22 19:06:42 +10:00
grossmj 3003ed1465 Bundle web-ui v3.0.3 2025-01-22 18:57:21 +10:00
grossmj 09774a3a56 Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/compute/virtualbox/virtualbox_vm.py
#	gns3server/controller/compute.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.c83939cdfe3af0ec27df.js
#	gns3server/version.py
#	gns3server/web/web_server.py
#	requirements.txt
#	tests/controller/test_compute.py
2025-01-22 18:37:17 +10:00
Jeremy Grossmann 185cd01e19 Merge pull request #2488 from GNS3/release/v2.2.53
Release v2.2.53
2025-01-21 09:47:43 +07:00
grossmj 369fcaa512 Release v2.2.53 2025-01-21 11:52:11 +10:00
grossmj 7b7d3d676f Bundle web-ui v2.2.53 2025-01-21 11:43:11 +10:00
grossmj d1186b2acc Sync appliances 2025-01-21 11:29:28 +10:00
grossmj bd58196817 Add more information when patching .vbox file. Ref https://github.com/GNS3/gns3-gui/issues/3542 2025-01-20 13:22:22 +10:00
Jeremy Grossmann b3a822df8f Merge pull request #2487 from GNS3/upgrade-tests
Refactor tests and upgrade dev package requirements
2025-01-17 16:38:32 +07:00
grossmj ba4e0c945d Refactor tests and upgrade dev package requirements 2025-01-17 19:12:44 +10:00
Jeremy Grossmann f6725a37dd Merge pull request #2486 from GNS3/feature/args-parsing
Refactor command line arguments parsing
2025-01-17 08:26:05 +07:00
grossmj 8e96c4c2e8 Refactor command line arguments parsing 2025-01-17 07:57:42 +07:00
grossmj 035a104957 Fix capture on IOU/IOL links. Fixes #2477 2025-01-11 18:46:55 +07:00
grossmj 54c0b383cb Use Python 3.9 to publish API documentation 2025-01-08 00:03:18 +07:00
grossmj 7c0384a8d4 Development on 3.0.3.dev1 2025-01-07 11:12:02 +07:00
grossmj 469bd692a0 Release v3.0.2 2025-01-03 21:44:00 +07:00
grossmj d34c3a0ac7 Bundle web-ui v3.0.2 2025-01-03 21:40:11 +07:00
Jeremy Grossmann fb3409c1a1 Merge pull request #2474 from GNS3/install-all-images
Support to create templates based on image checksums
2025-01-03 21:38:59 +07:00
grossmj 08693871ae Support to create templates based on image checksums. 2025-01-03 21:35:14 +07:00
Jeremy Grossmann f5ea20347e Merge pull request #2472 from GNS3/builtin-disks-improvements
Improvements for built-in disks
2025-01-03 20:01:06 +07:00
grossmj ac4c5f5985 Improve tests for pruning images 2025-01-03 19:56:41 +07:00
grossmj e17a79e261 Fix tests 2025-01-02 23:17:55 +07:00
grossmj 4758431c76 Improvements for built-in disks
* Checksum is updated in the database for updated disks.
* It is not possible to prune them.
2025-01-02 23:10:51 +07:00
Jeremy Grossmann b472f6dbf8 Merge pull request #2471 from GNS3/watchdog-migration
Watchdog migration
2024-12-31 17:30:24 +07:00
grossmj b39c7541fb Add timeout for waiting watchdog observer thread to complete 2024-12-31 17:24:19 +07:00
grossmj 82779d816f Use watchdog instead of watchfiles to monitor for new images on the file system 2024-12-31 17:19:32 +07:00
grossmj ccc8974d92 Fix tests 2024-12-30 16:14:33 +07:00
grossmj 0090ff3722 Increase timeout to run compute HTTP queries. Fixes #2461 2024-12-30 16:10:04 +07:00
Jeremy Grossmann 96c6805ace Merge pull request #2469 from GNS3/joserfc-migration
Replace python-jose library by joserfc
2024-12-30 16:02:17 +07:00
grossmj efb84b3063 Add back ValidationError 2024-12-30 15:59:01 +07:00
Jeremy Grossmann 0be45c7da2 Merge branch '3.0' into joserfc-migration 2024-12-30 15:52:54 +07:00
Jeremy Grossmann a4222b4d03 Merge pull request #2470 from GNS3/drop-python3.8
Drop Python 3.8
2024-12-30 15:51:23 +07:00
grossmj 5f75fc7573 Add greenlet dependency 2024-12-30 15:45:17 +07:00
grossmj 5269d4386c Drop Python 3.8 2024-12-30 15:36:40 +07:00
grossmj 9d6cea665a Replace python-jose library by joserfc 2024-12-30 15:25:24 +07:00
grossmj 2c727c6bd2 Use 'allow_methods="*"' in aiohttp_cors.ResourceOptions(). Fixes #2459 2024-12-30 11:06:19 +07:00
grossmj 13b0caef4f Upgrade dependencies 2024-12-30 10:49:35 +07:00
grossmj 8b57fbaa0a Downgrade uvicorn to v0.33.0 2024-12-28 18:23:46 +07:00
grossmj d4a9a21af9 Upgrade dependencies 2024-12-28 18:21:18 +07:00
grossmj 8a900588ca Merge branch '2.2' into 3.0 2024-12-28 18:04:25 +07:00
grossmj 8ed1fa6ad5 Merge branch 'master' into 2.2 2024-12-28 18:03:39 +07:00
Jeremy Grossmann a689a55937 Merge pull request #2467 from GNS3/update-remote-install-script
Use iptables to block IOU home call
2024-12-28 18:01:25 +07:00
grossmj 1c0b0ae423 Remove blocking IOU phone home call. 2024-12-28 18:00:22 +07:00
grossmj ad7813d04b Use iptables to block IOU home call 2024-12-28 17:50:59 +07:00
grossmj 654b84cb7b Release v3.0.1 2024-12-27 21:05:24 +07:00
grossmj fc1acc58de Sync appliances 2024-12-27 21:01:23 +07:00
grossmj 07ac4f5834 Bundle web-ui v3.0.1 2024-12-27 21:00:58 +07:00
grossmj 249bf89b7e Allow for upgrading built-in disks 2024-12-26 23:04:47 +07:00
grossmj efc3ff62b5 Fix config parsing when configuring server protocol. Fixes https://github.com/GNS3/gns3-gui/issues/3681 2024-12-26 16:36:52 +07:00
grossmj a521e61efc Update empty Qemu disks with correct MD5 checksums 2024-12-23 22:45:36 +07:00
grossmj 9492fd0671 Fix tests 2024-12-22 22:34:23 +07:00
grossmj 512407939d Increase timeout to run compute HTTP queries. Fixes #3453 2024-12-22 22:29:56 +07:00
Jeremy Grossmann 685bf88005 Merge pull request #2457 from GNS3/update-remote-install-script
Update remote install script
2024-12-22 22:07:33 +07:00
grossmj a1090a3da8 Fallback when cannot use deb822 format 2024-12-22 21:52:18 +07:00
grossmj c8e5b41f39 Add compatibility for earlier Ubuntu versions 2024-12-22 21:29:05 +07:00
grossmj 94b5d3e636 Update remote-install.sh to support a custom repository and the deb822 source format 2024-12-22 20:26:24 +07:00
grossmj d54e6babe2 Release v3.0.0 2024-12-20 18:20:42 +07:00
grossmj a9b7869e04 Bundle web-ui v3.0.0 2024-12-19 19:49:40 +07:00
grossmj 72838a8108 Sync appliances 2024-12-19 19:04:19 +07:00
grossmj 7229707746 Use static favicon for API docs. Ref #3674 2024-12-19 17:25:42 +07:00
Jeremy Grossmann c9694a4e1d Merge pull request #2456 from GNS3/feature/self-hosted-static-files
Configure self-hosting JavaScript and CSS for docs
2024-12-19 17:10:48 +07:00
grossmj a792792128 Remove debug message 2024-12-19 17:09:00 +07:00
grossmj eca502c49c Do not test authentication on docs endpoints 2024-12-19 17:04:00 +07:00
grossmj 0ee73605c0 Configure self-hosting JavaScript and CSS for docs 2024-12-19 16:54:11 +07:00
grossmj 648ae231ef Fix project auto open feature. Fixes #2455 2024-12-18 18:40:31 +07:00
grossmj 0dd53d3178 Bump version to 3.0.0.dev14 2024-12-17 16:51:09 +07:00
grossmj 09d67ec1a8 Bump version to 3.0.0.dev13 2024-12-17 16:32:30 +07:00
grossmj c820a807ad Fix IOU node start 2024-12-17 16:24:42 +07:00
grossmj 014d3f2ad9 Store IOU licence in the secrets directory and disable the check by default 2024-12-17 16:12:17 +07:00
grossmj 5e1b8814b6 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/iou/iou_vm.py
2024-12-17 15:08:45 +07:00
grossmj df56955bf0 Use license instead of licence 2024-12-17 15:01:01 +07:00
grossmj b84bedffec Merge branch '2.2' into 3.0
# Conflicts:
#	tests/utils/test_images.py
2024-12-16 18:31:57 +07:00
grossmj 423d3fd82b Fix tests 2024-12-16 18:30:30 +07:00
grossmj e1b4d74f1e Merge branch '2.2' into 3.0 2024-12-16 18:17:01 +07:00
grossmj 86fbae00e1 Fix issue with iourc_path 2024-12-16 18:16:42 +07:00
grossmj f38efd311a Merge branch '2.2' into 3.0 2024-12-16 18:14:16 +07:00
grossmj 91e9fa1cbc Fix tests 2024-12-16 18:13:51 +07:00
grossmj db067579db Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/iou/iou_vm.py
2024-12-16 18:08:51 +07:00
grossmj 6314dd3c35 Fix: do not use the iourc file if IOU licence check is not enabled 2024-12-16 18:07:02 +07:00
grossmj 4e41aefbdb Require "Project.Audit" permission to duplicate a project and check if "Project.Allocate" permission for the destination. 2024-12-06 14:09:08 +10:00
grossmj bbff6974e6 Fix undefined name 'default_directory' 2024-12-02 14:36:58 +10:00
grossmj c05dcef54f Fix formatting issue 2024-12-02 13:18:12 +10:00
grossmj b7d43b29cd Fix tests after merging 2024-12-02 13:02:08 +10:00
grossmj cbaa563996 Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.9297104511b6616fc55c.js
#	gns3server/utils/images.py
#	gns3server/version.py
#	tests/api/routes/compute/test_dynamips_nodes.py
#	tests/handlers/api/compute/test_qemu.py
#	tests/utils/test_images.py
2024-12-02 12:16:34 +10:00
Jeremy Grossmann e94b55e3bf Merge pull request #2452 from GNS3/release/v2.2.52
release/v2.2.52
2024-12-02 11:36:09 +10:00
grossmj 6c521b5f7a Development on 2.2.53.dev1 2024-12-02 11:33:59 +10:00
grossmj a8014da10b Release v2.2.52 2024-12-02 11:14:23 +10:00
grossmj f6080013e3 Bundle web-ui v2.2.52 2024-12-02 11:09:30 +10:00
grossmj fc54c6e496 Sync appliances 2024-12-02 11:02:47 +10:00
Jeremy Grossmann 04cd107651 Merge pull request #2448 from GNS3/bugfix/3664
Fix listing images
2024-11-28 12:45:37 +10:00
grossmj 19cabdfde6 Use log.debug for some messages in images.py 2024-11-28 12:42:50 +10:00
grossmj af7fbe6bb4 Fix tests 2024-11-27 15:18:49 +10:00
grossmj 3d58b437b4 Remove restrictions based on file extension when listing images and fix ELF header checks 2024-11-27 14:51:34 +10:00
grossmj 83921a45df Fix use project name instead of ID for fast duplication when running local server. Fixes #2446 2024-11-26 12:07:06 +10:00
grossmj b2db8896ea Release v3.0.0rc2 2024-11-20 14:00:49 +10:00
grossmj a22f7ac3d2 Bundle web-ui v3.0.0rc2 2024-11-20 13:51:15 +10:00
grossmj e19af851c1 Sync appliances 2024-11-20 12:39:39 +10:00
grossmj a00f53fbaa Fix error 500 on PUT for cloud, nat, vmware and vpcs nodes. Fixes #2426 2024-11-19 12:21:35 +10:00
Jeremy Grossmann 8db81de153 Merge pull request #2445 from GNS3/bugfix/2426
Fix issue with asyncio.Queue
2024-11-18 14:00:20 +10:00
Jeremy Grossmann fa0d7d7529 Use call_soon_threadsafe() in notification manager 2024-11-18 12:13:41 +10:00
grossmj bd813b0a53 Merge branch '2.2' into 3.0
# Conflicts:
#	requirements.txt
#	setup.py
2024-11-18 11:46:42 +10:00
grossmj b37db57bb9 Fix tests 2024-11-17 15:00:13 +10:00
grossmj 31a2cb998d Fix issue with asyncio.Queue which is not thread safe. 2024-11-17 14:39:22 +10:00
grossmj e83e12b51a Add a duplicated project in the same resource pools as the original project if it is in any 2024-11-17 14:03:47 +10:00
grossmj a7da814b85 Upgrade FastAPI to v0.115.5 2024-11-13 12:10:04 +10:00
Jeremy Grossmann 11c9802268 Merge pull request #2443 from GNS3/feature/upgrade-resource-files
Overwrite user resources when the originals have changed
2024-11-10 18:30:13 +10:00
grossmj a60e0d424d Overwrite user resources when the originals have changed.
Excepting configs and disks which can be customized.
2024-11-09 12:17:06 +10:00
grossmj db1fb29c63 Relax setuptools requirement to allow for easier Debian packaging on Ubuntu Focal & Jammy 2024-11-08 12:46:55 +10:00
Jeremy Grossmann 1a6a729736 Merge pull request #2442 from Xatrekak/master
Fixed issues with installing on Ubuntu 24.04 via remote-install.sh
2024-11-08 10:02:43 +10:00
Dustin 77c356c82c Update remote-install.sh
Fixes for Ubuntu 24.04
2024-11-07 18:15:52 -05:00
Dustin b4819b5500 Update remote-install.sh
Fixing changes for Ubuntu 24.04
2024-11-07 17:44:42 -05:00
grossmj ec9dbd20b8 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/crash_report.py
#	gns3server/version.py
2024-11-07 23:18:42 +10:00
grossmj a5f0dba5cf Development on 2.2.52.dev1 2024-11-07 23:13:31 +10:00
Jeremy Grossmann 11a9451098 Merge pull request #2440 from GNS3/release/v2.2.51
release/v2.2.51
2024-11-07 23:13:03 +10:00
grossmj 754680d8e9 Release v2.2.51 2024-11-07 15:08:27 +10:00
grossmj 05773ce189 Sync appliances 2024-11-07 15:06:06 +10:00
grossmj aeae9deb01 Merge remote-tracking branch 'origin/2.2' into 2.2 2024-11-07 14:53:23 +10:00
grossmj f3749e83ec Catch error when cannot resize Docker container TTY. 2024-11-07 14:52:59 +10:00
Jeremy Grossmann c2db4e8542 Merge pull request #2439 from GNS3/bugfix/2438
Fix disk interface is being overriden when set to none
2024-11-07 14:52:08 +10:00
grossmj 52a7696618 Fix tests 2024-11-07 14:48:57 +10:00
grossmj 7bf17392dd Do not use "ide" if there is a disk image and no interface type has been explicitly configured. 2024-11-07 14:37:26 +10:00
grossmj 2718224dde Increase SQLite timeout. Ref #2422 2024-10-31 21:31:03 +10:00
Jeremy Grossmann 0122070b29 Merge pull request #2435 from GNS3/upgrade-dependencies
Upgrade dependencies
2024-10-31 20:56:30 +10:00
grossmj 345ecb7630 Upgrade dev dependencies 2024-10-31 20:49:12 +10:00
grossmj ae538dd11d Fix test user with wrong creds 2024-10-31 19:31:17 +10:00
grossmj ce4dd17409 Upgrade fastapi and fix tests 2024-10-31 19:23:28 +10:00
grossmj 8c7c17b889 Upgrade dependencies and fix Pydantic warnings 2024-10-31 17:09:52 +10:00
grossmj 1530bdfc2b Disable Python 3.13 testing 2024-10-31 13:53:25 +10:00
grossmj 74d07173c1 Upgrade aiohttp to v3.10.10. Fixes #2411 2024-10-31 13:48:22 +10:00
grossmj ec300d19d4 Replace aiohttp.web.HTTPConflict() 2024-10-31 13:11:01 +10:00
grossmj fb06eb3c0c Remove old debug message 2024-10-31 13:07:09 +10:00
grossmj 7e902726bf Fix issues after merge 2024-10-31 13:06:17 +10:00
grossmj c4fcb43e78 Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	CHANGELOG
#	README.md
#	dev-requirements.txt
#	gns3server/compute/docker/docker_vm.py
#	gns3server/controller/export_project.py
#	gns3server/controller/import_project.py
#	gns3server/controller/project.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.df8c319a3da6fb0e3629.js
#	gns3server/version.py
#	requirements.txt
#	setup.py
#	tests/compute/docker/test_docker_vm.py
#	tests/controller/test_import_project.py
2024-10-31 12:54:35 +10:00
grossmj 753135a80d Merge branch 'master' into 2.2 2024-10-28 17:32:34 +10:00
grossmj c05e1cb8e7 Use @locking when sending uBridge commands. Ref https://github.com/GNS3/gns3-gui/issues/3651 2024-10-28 13:02:04 +10:00
grossmj 48b7e6ca50 Fix run Docker containers with user namespaces enabled. Fixes #2414 2024-10-26 19:03:05 +10:00
grossmj dbe2b8a5fb Python 3.13 support 2024-10-26 18:38:07 +10:00
grossmj 80487eb62d Upgrade dependencies 2024-10-26 18:22:40 +10:00
grossmj 6e66b26b88 Fix errors in init.sh. Fixes #2431 2024-10-22 12:18:28 +10:00
grossmj 9990666076 Development on 2.2.51.dev1 2024-10-21 13:24:14 +10:00
Jeremy Grossmann 97e5a5edc3 Merge pull request #2430 from GNS3/2.2
Release v2.2.50
2024-10-21 13:21:24 +10:00
grossmj 2b5c6ce8fb Release v2.2.50 2024-10-21 12:14:18 +10:00
grossmj 0aac62d03a Bundle web-ui v2.2.50 2024-10-21 12:08:42 +10:00
grossmj 4058abf16e Sync appliances 2024-10-21 11:54:02 +10:00
grossmj 4357410b10 Do not run tests on Windows (temporarily) 2024-10-19 17:13:13 +10:00
grossmj 734365b216 Fix win10pcap installation in tests 2024-10-19 17:04:10 +10:00
grossmj abb7cc2075 Install win10pcap in tests 2024-10-19 17:00:32 +10:00
grossmj c273a78560 Upgrade pytest to v8.3.3 2024-10-19 16:33:54 +10:00
grossmj 718269e5b3 Fix syntax error in testing.yml 2024-10-19 16:23:46 +10:00
grossmj 19fd7d2193 Install Windows dependencies in GH Actions 2024-10-19 16:22:29 +10:00
grossmj e62ffb1b87 Fix testing on Windows with GH Actions 2024-10-19 16:12:06 +10:00
grossmj 42808161bf Replace AppVeyor testing with GH Actions 2024-10-19 16:07:53 +10:00
Jeremy Grossmann 45ee662c56 Merge pull request #2428 from GNS3/bugfix/2427
Symbolic links support for project export/import
2024-10-19 15:54:41 +10:00
grossmj 24bfc205db Symbolic links support for project export/import 2024-10-19 15:49:23 +10:00
grossmj cb46c0fbcc Merge remote-tracking branch 'origin/2.2' into 2.2 2024-10-14 17:48:42 +10:00
grossmj 35256901b5 Add comment to indicate sentry-sdk is optional. Ref https://github.com/GNS3/gns3-server/issues/2423 2024-10-14 17:46:53 +10:00
Jeremy Grossmann 6933c3d938 Merge pull request #2420 from GNS3/bugfix/2419
Fix issues with recent busybox versions
2024-10-01 17:37:44 +07:00
grossmj 8af71ee291 Formatting 2024-10-01 17:35:11 +07:00
grossmj c0be6875c2 Fix issues with recent busybox versions
* `busybox --install` does not exist
* `sleep` does not take float values (e.g. 0.5).
2024-10-01 17:31:29 +07:00
Jeremy Grossmann a1922ef067 Merge pull request #2413 from z5241248/master
Duplicate faster
2024-09-29 19:44:49 +07:00
grossmj cafdb2522b Add / update docstrings 2024-09-29 19:42:06 +07:00
grossmj f7996d5e98 Fix tests 2024-09-27 20:05:06 +07:00
grossmj 996dad2f5c Support to reset MAC addresses for Docker nodes and some adjustments for fast duplication. 2024-09-26 18:41:23 +07:00
Jeremy Grossmann 1332e940fd Merge branch '2.2' into master 2024-09-26 16:26:56 +07:00
grossmj 19bd953d31 Update README.md to change the minimum required Python version. 2024-09-26 16:25:26 +07:00
赵昕彧 3a896b6964 Duplicate faster - 2 2024-09-26 08:26:08 +08:00
grossmj 441f0fb1b5 Merge remote-tracking branch 'z5241248/master' into fork/z5241248/master 2024-09-25 19:45:44 +07:00
grossmj a02b57698a Add missing imports 2024-09-25 19:45:14 +07:00
Jeremy Grossmann 7582107ae5 Merge branch '2.2' into master 2024-09-25 19:41:40 +07:00
赵昕彧 2dbde5df22 Copying project files directly, rather than copying them in an import-export fashion, can make copying projects many times faster 2024-09-25 20:27:46 +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
grossmj 7b5d123ad8 Improve error message when a project cannot be parsed. 2024-09-23 13:23:03 +07:00
Jeremy Grossmann d1a7474ef6 Merge pull request #2418 from GNS3/revert-2417-backport-aux-console-support
Revert "Backport auxiliary console support for Qemu, Docker and Dynamips nodes"
2024-09-23 13:15:34 +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 d3138daa23 Fix Docker tests 2024-09-22 22:12:40 +07:00
grossmj 967c7d066d Delete old code after merging 2024-09-22 22:02:14 +07:00
grossmj 7619080a50 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/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-22 22:01:06 +07:00
Jeremy Grossmann f1294cf267 Merge pull request #2417 from GNS3/backport-aux-console-support
Backport auxiliary console support for Qemu, Docker and Dynamips nodes
2024-09-22 21:44:31 +07:00
grossmj 74782d413f Change method to allocate AUX console for existing Dynamips nodes 2024-09-22 21:41:10 +07:00
grossmj c41c11eb34 Backport auxiliary console support for Qemu, Docker and Dynamips nodes 2024-09-22 18:29:04 +07:00
Jeremy Grossmann 1f09a3e6bc Merge pull request #2416 from GNS3/bugfix/2414
Run Docker containers with user namespaces enabled
2024-09-19 11:01:11 +07:00
grossmj 22f022cc22 Fix for running Docker containers with user namespaces enabled 2024-09-19 10:40:22 +07:00
grossmj 8429494280 Test base MAC address for Docker VMs 2024-09-19 10:19:07 +07:00
grossmj a1666dd247 Fix MAC address support for Docker containers 2024-09-18 18:02:35 +07:00
grossmj 3214f52e9e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/handlers/api/compute/docker_handler.py
#	gns3server/schemas/docker.py
#	gns3server/schemas/docker_template.py
#	tests/compute/docker/test_docker_vm.py
2024-09-18 17:29:06 +07:00
grossmj ddd6235acd Merge branch 'master' into 2.2 2024-09-18 17:14:21 +07:00
Jeremy Grossmann bcc148bbd2 Merge pull request #2415 from GNS3/docker-mac-address
Support for custom MAC addresses in Docker containers
2024-09-18 04:05:18 -06:00
grossmj 3792901dc7 Support for configuring MAC address in Docker containers 2024-09-18 16:30:22 +07:00
赵昕彧 5ffe5fd9b3 Copying project files directly, rather than copying them in an import-export fashion, can make copying projects many times faster 2024-08-23 14:31:21 +08:00
grossmj 9bcf26b943 Release v3.0.0rc1 2024-08-11 11:35:19 -06:00
grossmj b80e1f3a22 Downgrade aiohttp to v3.9.5 2024-08-11 11:22:20 -06:00
grossmj ba13b0b078 Bundle web-ui v3.0.0rc1 2024-08-11 11:09:27 -06:00
grossmj 90c69d95ad Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.99a70a8d013fc974361c.js
#	gns3server/version.py
#	requirements.txt
2024-08-10 18:58:43 -06:00
grossmj 69a5b16bad Upgrade aiohttp to v3.10.3 2024-08-11 01:34:30 +02:00
grossmj 21a5c5d3f2 Development on 2.2.50.dev1 2024-08-06 20:33:54 +02:00
Jeremy Grossmann 225779bc11 Merge pull request #2409 from GNS3/2.2
Release v2.2.49
2024-08-06 20:32:41 +02:00
grossmj b1209155f5 Release v2.2.49 2024-08-06 12:55:15 +02:00
grossmj 7cebb9472a Bundle web-ui v2.2.49 2024-08-06 12:41:06 +02:00
grossmj 00c3b1abc1 Merge remote-tracking branch 'origin/master' into 2.2 2024-08-06 12:37:55 +02:00
grossmj b1c1c0520c Sync appliances 2024-08-06 12:34:07 +02:00
grossmj 2bb26075f0 Forbid -nic and -nicdev in Qemu additional options. Fixes https://github.com/GNS3/gns3-server/issues/2397 2024-08-05 17:51:46 +02:00
grossmj 54e436394f Upgrade packages in requirements.txt 2024-08-03 16:35:17 +02:00
grossmj 9046c60811 Fix tests by downgrading pytest-asyncio 2024-08-03 13:15:36 +02:00
grossmj 24cace8122 Merge remote-tracking branch 'origin/2.2' into 3.0
# Conflicts:
#	dev-requirements.txt
#	requirements.txt
#	setup.py
2024-08-03 12:58:19 +02:00
grossmj 6746ef39be Upgrade development packages 2024-08-03 12:32:43 +02:00
grossmj 8889eaa439 Upgrade jsonschema and sentry-sdk packages 2024-08-03 12:32:06 +02:00
grossmj 95a4c284bc Update IOU base configs to use "no ip domain lookup". Fixes #2404 2024-07-22 19:07:17 +02:00
Jeremy Grossmann 9a3bd2ee0c Merge pull request #2406 from GNS3/feature/convert-invalid-node-names
Convert node hostnames for topologies
2024-07-20 18:01:50 +02:00
grossmj 2416069a6e Update _convert_2.2.0() with correct comments 2024-07-20 17:55:38 +02:00
grossmj eefb3d87b2 Fix tests and add conversion test 2024-07-20 17:47:25 +02:00
grossmj 999f41b03e Convert topologies < 3.0 to have valid node hostnames 2024-07-20 17:22:24 +02:00
grossmj ea339af1e9 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.a1204c9aa64b1cc15d28.js
2024-07-13 17:19:03 +02:00
grossmj 6951137a25 Development on 2.2.49.dev1 2024-07-13 16:32:13 +02:00
Jeremy Grossmann cccbca3d5e Merge pull request #2401 from GNS3/release/v2.2.48.1
Release v2.2.48.1
2024-07-13 14:43:53 +02:00
grossmj 8659439829 Release v2.2.48.1 2024-07-12 18:26:16 +02:00
grossmj 677bc389a5 Bundle web-ui v2.2.48.1 2024-07-11 23:44:24 +02:00
grossmj 3f7f5a3cda Fix to access resources_path and install_builtin_appliances settings 2024-07-09 12:28:39 +02:00
grossmj 59ad5c55ec Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/config_samples/gns3_server.conf
#	gns3server/controller/__init__.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.b65e52314df938ebe652.js
#	gns3server/version.py
2024-07-09 12:14:44 +02:00
grossmj 4a58ede550 Development on 2.2.49.dev1 2024-07-09 00:32:44 +02:00
Jeremy Grossmann 3f5b0bb514 Merge pull request #2395 from GNS3/2.2
Release v2.2.48
2024-07-09 00:30:55 +02:00
grossmj 6e8e0764c1 Release v2.2.48 2024-07-08 18:44:09 +02:00
grossmj eaa18ad624 Bundle web-ui v2.2.48 2024-07-08 18:24:02 +02:00
grossmj 0a32be276e Sync appliances 2024-07-08 18:18:25 +02:00
Jeremy Grossmann 271c958381 Merge pull request #2394 from GNS3/bugfix/2226
New path settings for the server config
2024-07-08 18:16:27 +02:00
grossmj ca1d99b112 Add 'install_builtin_appliances' and 'resources_path' settings in the server config 2024-07-08 18:06:33 +02:00
grossmj 6b14abc06f Add allow_unsafe_options for Qemu settings 2024-07-07 19:08:12 +02:00
grossmj 6ed18c561f Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/config_samples/gns3_server.conf
#	gns3server/controller/export_project.py
#	gns3server/controller/project.py
#	gns3server/controller/snapshot.py
#	gns3server/handlers/api/controller/project_handler.py
#	tests/controller/test_export_project.py
#	tests/controller/test_import_project.py
#	tests/controller/test_snapshot.py
2024-07-07 19:04:50 +02:00
Jeremy Grossmann 90dce03da2 Merge pull request #2392 from GNS3/bugfix/2385
Forbid unsafe Qemu additional options
2024-07-06 17:18:59 +02:00
Jeremy Grossmann b48bd92da3 Merge pull request #2393 from GNS3/feature/keep-compute-ids
Option to keep the compute IDs unchanged when exporting a project
2024-07-06 17:12:38 +02:00
grossmj d54c9db8c3 Option to keep the compute IDs unchanged when exporting a project 2024-07-06 17:08:16 +02:00
grossmj b194e48649 Forbid unsafe Qemu additional options 2024-07-06 12:24:22 +02:00
Jeremy Grossmann 29f848d833 Merge pull request #2391 from GNS3/bugfix/2388
Fix issues with invalid snapshot filenames
2024-07-05 12:49:59 +02:00
grossmj 08154e43aa Fix error when snapshot exists with an underscore in the name 2024-07-05 12:04:53 +02:00
grossmj 45a0644371 Upgrade request and sqlalchemy packages 2024-07-03 19:05:05 +02:00
grossmj 3a4ffb8786 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/utils/__init__.py
#	requirements.txt
2024-07-03 19:00:44 +02:00
grossmj 84efc55d02 Upgrade sentry-sdk, psutil and aiofiles packages 2024-07-03 18:53:14 +02:00
grossmj fec0220b55 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2024-07-01 18:53:21 +02:00
Jeremy Grossmann a58fb320ac Merge pull request #2387 from GNS3/bugfix/3588
Fix check to test if IPv6 is enabled on host
2024-06-17 16:54:20 +02:00
grossmj 39057bd781 Fix check for IPv6 enabled on host 2024-06-17 16:41:40 +02:00
grossmj 0f3b96f134 Development on 2.2.48.dev1 2024-05-23 12:19:15 +07:00
grossmj df210386dd Development on 3.0.0.dev14 2024-05-19 20:57:11 +07:00
grossmj 3e512e650a Release v3.0.0b3 2024-05-19 17:23:16 +07:00
grossmj e50e2c90bd Bundle web-ui v3.0.0b3 2024-05-19 17:16:52 +07:00
grossmj c1f9f1111d Sync appliances 2024-05-19 17:13:07 +07:00
grossmj 8c1dbf0084 Fix to allow duplicating IOS routers 2024-05-19 00:33:55 +07:00
grossmj 6f2b12c218 Fix to allow changing the auxiliary console for IOS router nodes. 2024-05-18 23:43:50 +07:00
grossmj 4b1068e02f Replace deprecated method datetime.utcnow() 2024-05-18 23:33:26 +07:00
grossmj d56acc5844 Upgrade FastAPI to v0.111.0 2024-05-18 23:31:22 +07:00
grossmj d477eb8366 Fix reset console for non running IOU devices 2024-05-18 23:30:58 +07:00
Jeremy Grossmann 35f94b0c73 Merge pull request #2382 from GNS3/update-ga-workflows
Update GitHub Action workflows
2024-05-17 12:22:43 +07:00
grossmj b82b9a64e6 Rename codeql.yml back to codeql-analysis.yml 2024-05-17 12:19:38 +07:00
grossmj 901652aaeb Update GitHub Action workflows 2024-05-17 12:14:47 +07:00
grossmj 990dabb7e4 Do not allow to create a builtin template using the API. 2024-05-17 00:05:25 +07:00
grossmj 3ab74b8094 Development on 3.0.0.dev13 2024-05-16 19:18:53 +07:00
grossmj 5cd540d94d Remove old files 2024-05-16 17:57:51 +07:00
grossmj d3860ba84b Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	dev-requirements.txt
#	gns3server/compute/qemu/__init__.py
#	gns3server/compute/vmware/__init__.py
#	gns3server/controller/snapshot.py
#	gns3server/crash_report.py
#	gns3server/handlers/api/compute/atm_switch_handler.py
#	gns3server/run.py
#	gns3server/static/web-ui/26.77d4bfd104f37c42e028.js
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/runtime.415291667f70565cd8ef.js
#	gns3server/utils/__init__.py
#	gns3server/utils/images.py
#	gns3server/utils/interfaces.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	pytest.ini
#	requirements.txt
#	scripts/update-bundled-web-ui.sh
#	setup.py
#	tests/api/routes/compute/test_dynamips_nodes.py
#	tests/compute/builtin/nodes/test_cloud.py
#	tests/compute/docker/test_docker.py
#	tests/compute/docker/test_docker_vm.py
#	tests/compute/dynamips/test_dynamips_manager.py
#	tests/compute/dynamips/test_dynamips_router.py
#	tests/compute/iou/test_iou_vm.py
#	tests/compute/qemu/test_qcow2.py
#	tests/compute/qemu/test_qemu_manager.py
#	tests/compute/qemu/test_qemu_vm.py
#	tests/compute/test_base_node.py
#	tests/compute/test_manager.py
#	tests/compute/test_project.py
#	tests/compute/traceng/test_traceng_vm.py
#	tests/compute/virtualbox/test_virtualbox_manager.py
#	tests/compute/virtualbox/test_virtualbox_vm.py
#	tests/compute/vmware/test_vmware_manager.py
#	tests/compute/vmware/test_vmware_vm.py
#	tests/compute/vpcs/test_vpcs_vm.py
#	tests/conftest.py
#	tests/controller/gns3vm/test_remote_gns3_vm.py
#	tests/controller/gns3vm/test_virtualbox_gns3_vm.py
#	tests/controller/gns3vm/test_vmware_gns3_vm.py
#	tests/controller/test_export_project.py
#	tests/controller/test_gns3vm.py
#	tests/controller/test_import_project.py
#	tests/test_config.py
#	tests/utils/test_asyncio.py
#	tests/utils/test_images.py
#	tests/web/test_response.py
2024-05-16 17:53:39 +07:00
grossmj 3e133eda44 Bundle web-ui v3.0.0b3 2024-05-16 17:30:12 +07:00
grossmj e01256980c Sync appliances 2024-05-16 17:27:38 +07:00
grossmj aabfe9eadc Use cryptography backend for python-jose. Ref #2372 2024-05-16 15:01:05 +07:00
Jeremy Grossmann 6c9a3b634b Merge pull request #2381 from GNS3/release/v2.2.47
Release v2.2.47
2024-05-15 17:06:53 +07:00
grossmj 0561aba927 Release v2.2.47 2024-05-15 12:14:48 +07:00
grossmj 86a78f53cb Fix update-bundled-web-ui.sh script 2024-05-15 12:05:43 +07:00
grossmj f0bc74ff6e Bundle web-ui v2.2.47 2024-05-15 12:04:34 +07:00
grossmj f81128f717 Bundle web-ui v2.2.47 2024-05-15 11:55:47 +07:00
grossmj 9ce505cad3 Sync appliances 2024-05-15 11:43:04 +07:00
grossmj 314e01d2b4 Ensure Python >= 3.8 is used in pyproject.toml 2024-05-12 16:44:09 +07:00
Jeremy Grossmann 6b8635f7d5 Merge pull request #2380 from GNS3/drop-python3.7
Drop Python 3.7
2024-05-09 19:10:04 +07:00
grossmj 388ffe9f00 Change sentry-sdk version 2024-05-09 19:03:08 +07:00
grossmj d01129a3cf Upgrade aiohttp, sentry-sdk and truststore 2024-05-09 18:58:37 +07:00
grossmj 535ea0ad9f Upgrade jsonschema and aiohttp 2024-05-09 18:37:40 +07:00
grossmj ccb5de6df1 Drop Python 3.7 2024-05-09 18:23:58 +07:00
Jeremy Grossmann cdcfc652db Merge pull request #2379 from GNS3/fix-warnings-in-tests
Fix warnings in tests
2024-05-09 18:13:13 +07:00
grossmj 7030dadbcb Remove dev requirements for Python 3.6 2024-05-09 18:04:19 +07:00
grossmj 46a9fdb61d Remove event_loop 2024-05-09 17:53:02 +07:00
grossmj 9958b876cf Do not run Docker VM tests on Windows 2024-05-09 17:36:58 +07:00
grossmj 259d3a0155 Fix cannot import UTC 2024-05-09 17:23:32 +07:00
grossmj 33499be425 Fix warnings in tests 2024-05-09 17:11:12 +07:00
grossmj 3fd44f5260 Do not wait for the server to close when shutting down. 2024-05-09 16:37:45 +07:00
grossmj c076275bd0 Fix test create image with not supported characters by filesystem. Fixes #2375 2024-05-09 16:01:55 +07:00
grossmj 081447ba2e Fix tests. Ref #2376 2024-05-09 15:37:42 +07:00
grossmj 3df7af12e1 Allow listing x86_64 IOU images. Fixes #2376 2024-05-09 15:21:05 +07:00
grossmj d9e4ce5639 Upgrade Jinja2 to version 3.1.4. Fixes #2378 2024-05-08 18:08:00 +07:00
grossmj 689d476b71 Fix tests 2024-04-28 18:03:06 +07:00
grossmj f1701e3f09 Upgrade fastapi and platformdirs 2024-04-27 23:21:58 +07:00
grossmj 38df4bea2e Do not return an error if an image has already been uploaded 2024-04-26 19:02:50 +07:00
grossmj 35b75f0f7f Fix link capture for ATM switch. Fixes https://github.com/GNS3/gns3-gui/issues/3570 2024-04-23 18:35:36 +07:00
grossmj 2609849507 Fix tests after updating error message when busybox is not installed. 2024-04-23 18:00:37 +07:00
grossmj 448b94f701 Add more details to error message when busybox is not installed. Fixes https://github.com/GNS3/gns3-gui/issues/3569 2024-04-23 17:54:06 +07:00
grossmj 18002a7580 Fix invalid escape sequences 2024-04-23 16:52:28 +07:00
grossmj 644e659729 Use NAT symbol for builtin NAT template 2024-04-22 19:11:58 +07:00
grossmj 1c37e8bd32 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/symbol_themes.py
#	gns3server/controller/template_manager.py
2024-04-22 19:08:45 +07:00
Jeremy Grossmann 1414bdcadf Merge pull request #2369 from GNS3/feature/nat-symbols
NAT symbols
2024-04-22 19:00:19 +07:00
grossmj b6e68ba1a8 Add NAT symbols 2024-04-22 18:51:29 +07:00
Jeremy Grossmann 19142d97bb Merge pull request #2366 from GNS3/bugfix/block-iou-call
Block IOU phone home call using IPtable
2024-04-20 15:53:39 +07:00
grossmj faf7e09ebb Only use iptable to block xml.cisco.com on Ubuntu Focal. 2024-04-20 15:45:28 +07:00
grossmj 84f7337cb1 Release v3.0.0b2 2024-04-07 18:52:24 +07:00
grossmj e11621467b Remove old files 2024-04-07 18:28:00 +07:00
grossmj 123123d767 Bundle web-ui v3.0.0b2 2024-04-07 18:23:59 +07:00
grossmj b3bdeb611e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2024-04-07 12:44:01 +07:00
grossmj 7a229e33f9 Sync appliances 2024-04-07 12:43:15 +07:00
grossmj 4959a51ce7 Block IOU phone home call using IPtable 2024-04-06 13:04:20 +07:00
grossmj 5b1ba5a57c Fix cannot stop Docker VM while console connection is still active. 2024-04-04 22:57:33 +07:00
grossmj bc1a8c99d1 Fix cannot stop Docker VM while console connection is still active. 2024-04-04 22:17:21 +07:00
Jeremy Grossmann ae64f15386 Merge pull request #2365 from GNS3/feature/custom-qemu-path
Support for custom Qemu paths
2024-04-03 21:24:13 +07:00
grossmj 123b5d0800 Support for custom Qemu path in templates and nodes 2024-04-03 21:16:40 +07:00
Jeremy Grossmann e1d3ee12b9 Merge pull request #2364 from GNS3/bugfix/3572
Fix CPUs limitation for Docker containers does not allow fractional values
2024-04-03 17:37:07 +07:00
grossmj 998898a471 Fix CPU fractional values for Docker VMs. 2024-04-03 17:15:10 +07:00
grossmj 9b66d939d2 Support for cooperative signal handling of uvicorn v0.29.0 2024-04-03 15:58:10 +07:00
grossmj fd60bda2c2 Downgrade pytest-asyncio to v0.21.1 2024-04-02 13:28:18 +07:00
grossmj c5f4e25756 Upgrade uvicorn, fastapi and sqlalchemy packages 2024-04-02 13:18:22 +07:00
grossmj 16bad6e0b5 Downgrade httpx_ws to v0.4.2 2024-03-24 18:37:31 +01:00
grossmj 8e661df981 Upgrade dev packages 2024-03-24 18:31:56 +01:00
grossmj 31c7fe88f1 Remove websocket.close() 2024-03-16 16:00:27 +01:00
Jeremy Grossmann 03b491f7b1 Merge pull request #2362 from GNS3/feature/use-bcrypt
Use bcrypt direcrtly instead of passlib
2024-03-08 01:33:41 +08:00
grossmj fa41d9ba75 Use bcrypt directly instead of passlib 2024-03-07 18:17:17 +01:00
grossmj a80aed5420 Development on 2.2.47.dev1 2024-03-05 01:07:16 +08:00
grossmj e9827653ae Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/version.py
#	tests/compute/docker/test_docker_vm.py
2024-03-05 01:05:46 +08:00
grossmj 9da8d1ec0f Upgrade uvicorn, fastapi, python-multipart, sqlalchemy, aiosqlite and email-validator dependencies 2024-03-05 01:03:59 +08:00
grossmj a53fd2e8b1 Upgrade sentry-sdk to version 1.40.6 2024-03-05 00:45:26 +08:00
Jeremy Grossmann 5bab4131e1 Merge pull request #2361 from GNS3/release/v2.2.46
Release v2.2.46
2024-02-26 17:51:46 +08:00
grossmj e8a7e80456 Release v2.2.46 2024-02-26 16:55:12 +08:00
grossmj ab05784c33 Sync appliances 2024-02-26 16:45:37 +08:00
grossmj 6983e686ca Bundle web-ui v2.2.46 2024-02-26 16:42:46 +08:00
grossmj 3631202ce5 Merge remote-tracking branch 'origin/2.2' into 2.2 2024-02-26 16:36:21 +08:00
grossmj 8d8a3247c4 Bundle web-ui v2.2.46 2024-02-26 16:35:47 +08:00
Jeremy Grossmann d100a132d6 Merge pull request #2360 from GNS3/bugfix/3555
Fix export project
2024-02-26 16:27:39 +08:00
Jeremy Grossmann 52638a9a8d Merge branch '2.2' into bugfix/3555 2024-02-26 16:22:15 +08:00
grossmj 9a5af82a28 Save empty directories when exporting a project 2024-02-24 19:02:16 +08:00
Jeremy Grossmann 14a618766d Merge pull request #2359 from GNS3/bugfix/2357
Fix Docker VM hasn't access to all resources
2024-02-22 19:37:55 +08:00
grossmj 0137688ba7 Test busybox is installed 2024-02-22 13:05:48 +08:00
grossmj 84db3b9996 Fix not all Docker resources are copied to a writable location 2024-02-22 12:59:44 +08:00
grossmj 800920e3df Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	gns3server/compute/docker/__init__.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/run.py
#	requirements.txt
#	setup.py
#	tests/compute/docker/test_docker_vm.py
2024-02-21 12:24:30 +08:00
grossmj 14917580ac Downgrade to alembic v1.12.1 2024-02-15 18:42:05 +08:00
grossmj 4c65426e97 Revert "Downgrade platformdirs to v4.0.0"
This reverts commit fd85e49220.
2024-02-15 15:22:28 +08:00
grossmj fd85e49220 Downgrade platformdirs to v4.0.0 2024-02-15 15:17:25 +08:00
Jeremy Grossmann 0a08031d85 Merge pull request #2355 from GNS3/refactor/busybox
Install Docker resources in writable location
2024-02-14 16:18:25 +08:00
grossmj 1a53c9aabf Backport from v3: install Docker resources in a writable location at runtime. 2024-02-14 16:13:45 +08:00
grossmj 1f5085608c Use Docker API v1.24 to get version. 2024-02-14 15:40:19 +08:00
Jeremy Grossmann 16f72b4d3d Merge pull request #2347 from SpikefishSolutions/DeadTelnetConsoleFix
Address the telnet console death bug.
2024-02-09 20:33:16 +11:00
grossmj 3ced41633f Upgrade dependencies 2024-02-09 17:07:35 +11:00
Jeremy Grossmann 4fa10be5aa Merge pull request #2353 from GNS3/feature/drop-python-3.6
Drop Python 3.6 support
2024-02-09 17:01:40 +11:00
grossmj f050fc7e00 Change runtime checks for Python version 2024-02-09 16:49:58 +11:00
grossmj c93aafc9af Fix aiohttp dependency for Python 3.7 2024-02-09 16:45:46 +11:00
grossmj 93520b4d6c Do not test with Python 3.6 2024-02-09 16:34:44 +11:00
grossmj 1fb0260ae6 Drop support for Python 3.6 2024-02-09 16:28:23 +11:00
grossmj 91fd543321 Upgrade dependencies 2024-02-09 16:15:19 +11:00
John Fleming 763ef24108 Address the telnet console bug. Add wait_for for drain() call. If we're stuck on drain then the buffer isn't getting emptied. 5 seconds after drain() blocks, exception will be thrown and client will be removed from connection table and will no longer be a problem. 2024-02-02 22:09:31 -05:00
grossmj 17aabd6cda Merge branch 'master' into 2.2 2024-01-28 20:04:19 +11:00
grossmj d94adf4c8f Merge remote-tracking branch 'origin/master' 2024-01-28 19:56:40 +11:00
Jeremy Grossmann 4dd9cf2da2 Merge pull request #2340 from spikefishjohn/patch-3
Update telnet_server.py
2024-01-28 19:56:26 +11:00
grossmj d6f8069739 Remove files from 2.2 doc 2024-01-28 13:03:06 +11:00
grossmj 0037f31553 Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	docs/api/notifications/link.updated.json
#	docs/api/notifications/log.warning.json
#	docs/api/v2/compute/ethernet_switch/projectsprojectidethernetswitchnodes.rst
#	docs/api/v2/compute/ethernet_switch/projectsprojectidethernetswitchnodesnodeid.rst
#	docs/api/v2/compute/iou/projectsprojectidiounodes.rst
#	docs/api/v2/compute/project/projects.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodes.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodesnodeid.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodesnodeidstart.rst
#	docs/api/v2/controller/link/projectsprojectidlinks.rst
#	docs/api/v2/controller/link/projectsprojectidlinkslinkid.rst
#	docs/api/v2/controller/link/projectsprojectidlinkslinkidstartcapture.rst
#	docs/api/v2/controller/project/projects.rst
#	docs/api/v2/controller/project/projectsprojectidduplicate.rst
#	docs/controller_notifications.rst
#	docs/curl.rst
#	docs/gns3_file.json
#	docs/project_notifications.rst
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/project.py
#	gns3server/crash_report.py
#	gns3server/schemas/ethernet_hub.py
#	gns3server/schemas/ethernet_switch.py
#	gns3server/static/web-ui/3rdpartylicenses.txt
#	gns3server/static/web-ui/index.html
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	requirements.txt
#	tests/controller/test_project.py
#	tests/controller/test_topology.py
#	tests/handlers/api/controller/test_project.py
2024-01-28 12:30:43 +11:00
grossmj e2a3d391d8 Merge remote-tracking branch 'origin/2.2' into 2.2 2024-01-28 12:14:28 +11:00
John Fleming 6c5f54fe57 Update telnet_server.py
Maybe use the correct object name this time for the socket objects.
2024-01-28 12:14:07 +11:00
John Fleming 082fbee1bd Update telnet_server.py
Set tcp keepalive timers to 60 seconds. Seems to default to 2 hours on ubuntu 22. Most firewalls will age out an idle tcp session at 1 hour.

Will not address telnet console failing after a tcp session has failed (TimeoutError).
2024-01-28 12:14:07 +11:00
Xatrekak 6d97feaced Fixed updating system and GNS3. 2024-01-28 12:14:01 +11:00
Dustin 8d35089661 Update welcome.py
Fixed an issue where the shell option in dialog failed to drop you back to bash.
2024-01-28 12:13:55 +11:00
Dustin 6455f62447 Update remote-install.sh
Removed an extra slash at the end when setting the user home directory. This was causing unexpected behavior for other scrips as ~ was aliased to /opt/gns3/ instead of the expected  /opt/gns3.

This caused an extra / to appear in commands unexpectedly.
2024-01-28 12:13:55 +11:00
grossmj 2fb3b1ebab Use Python 3.8 to publish API doc 2024-01-28 12:13:46 +11:00
grossmj 58399a9fa8 Upgrade sentry-sdk, psutil and distro dependencies 2024-01-28 12:13:12 +11:00
grossmj 907b305ecf Development on 2.2.46.dev1 2024-01-28 12:13:12 +11:00
grossmj 57f92db124 Release v2.2.45 2024-01-28 12:13:12 +11:00
grossmj 0f6f943a83 Bundle web-ui v2.2.45 2024-01-28 12:13:12 +11:00
grossmj 2cb76b2274 Remove old web-ui files 2024-01-28 12:13:11 +11:00
grossmj 2d2db52a8b Bundle web-ui v2.2.45 2024-01-28 12:13:11 +11:00
grossmj a8d0818e07 Sync appliances 2024-01-28 12:13:11 +11:00
grossmj f7eb2492d9 Fix mouse offset issues with VNC in Qemu. Fixes #2335 2024-01-28 12:13:11 +11:00
grossmj 218522b08c Fix issues when generating docs 2024-01-28 12:13:10 +11:00
grossmj 470f13f448 Update readthedocs.yml to use Python 3.12 2024-01-28 12:13:10 +11:00
grossmj 317aa669ac Update readthedocs.yml 2024-01-28 12:13:10 +11:00
grossmj 8d160ad5ed Update documentation 2024-01-28 12:13:10 +11:00
grossmj e3493870b2 Add project.created, project.opened and project.deleted controller notification stream.
Move project.updated and project.closed from project notification to controller notification stream.
2024-01-28 12:13:09 +11:00
grossmj d466c85385 Do not stop searching for Qemu binaries if one binary cannot be executed. Ref #2306 2024-01-28 12:13:09 +11:00
grossmj 35d4391fc0 Fix Ethernet switch and Ethernet hub port validations. Fixes #2334 2024-01-28 12:13:09 +11:00
grossmj eea0ab69bd Bundle dev version of the web-ui 2024-01-28 12:13:09 +11:00
grossmj 22ade94118 Update CORS policy 2024-01-28 12:13:08 +11:00
grossmj 08ee40548f Add custom executable paths on Windows 2024-01-28 12:13:08 +11:00
grossmj 7f05a06766 Upgrade sentry-sdk and aiohttp 2024-01-28 12:13:08 +11:00
grossmj 9fd2f58ef7 Development in 2.2.45.dev3 2024-01-28 12:13:08 +11:00
grossmj b9b802ebab Release v2.2.44.1 2024-01-28 12:13:08 +11:00
grossmj 1d86e322e9 Do not compute checksums on macOS 2024-01-28 12:13:07 +11:00
grossmj 8eb5f10971 Add multiprocessing.set_start_method() 2024-01-28 12:13:07 +11:00
grossmj cc4783ab98 Bump version to v2.2.45.dev2 2024-01-28 12:13:07 +11:00
grossmj 19792f328d Have freeze support for macOS as well 2024-01-28 12:13:07 +11:00
grossmj 596d1274a3 Catch exceptions when computing image checksums. Ref https://github.com/GNS3/gns3-server/issues/2228 2024-01-28 12:13:07 +11:00
grossmj 2f765747b8 Add freeze_support() for multiprocessing 2024-01-28 12:13:06 +11:00
grossmj 4fe57b6a15 Development on 2.2.45.dev1 2024-01-28 12:13:06 +11:00
grossmj 1177626a53 Release v2.2.44 2024-01-28 12:13:06 +11:00
grossmj c4cc346864 Sync appliances 2024-01-28 12:13:06 +11:00
grossmj 8915dfffa5 Bundle web-ui v2.2.44 2024-01-28 12:13:05 +11:00
grossmj ff027ebd17 Upgrade sentry-sdk 2024-01-28 12:13:05 +11:00
grossmj 27d5ac537f Non-blocking checksums computation when server starts. Fixes #2228 2024-01-28 12:13:05 +11:00
grossmj fe246cd413 Fix timeout issue when creating Qemu disk image. Fixes https://github.com/GNS3/gns3-server/issues/2313 2024-01-28 12:13:05 +11:00
grossmj 2bbb560b8e Support for web socket console over HTTPS 2024-01-28 12:13:04 +11:00
grossmj 1624c7d6ad Add back script create_cert.sh 2024-01-28 12:13:04 +11:00
grossmj 2a3bb81076 Bundle web-ui 2024-01-28 12:13:04 +11:00
grossmj e0a0dd83d7 Use Python 3.8 in appveyor.yml 2024-01-28 12:13:04 +11:00
grossmj 16ea395618 Upgrade sentry-sdk, psutil and distro dependencies 2024-01-27 17:04:02 +11:00
Jeremy Grossmann 9dd8da4f6e Merge pull request #2340 from spikefishjohn/patch-3
Update telnet_server.py
2024-01-26 17:55:11 +11:00
John Fleming 54abf85523 Update telnet_server.py
Maybe use the correct object name this time for the socket objects.
2024-01-25 01:41:57 -05:00
Jeremy Grossmann 385fffec56 Merge pull request #2339 from spikefishjohn/patch-2
Update telnet_server.py
2024-01-24 11:53:59 +11:00
John Fleming ac86717bc0 Update telnet_server.py
Set tcp keepalive timers to 60 seconds. Seems to default to 2 hours on ubuntu 22. Most firewalls will age out an idle tcp session at 1 hour.

Will not address telnet console failing after a tcp session has failed (TimeoutError).
2024-01-23 13:15:17 -05:00
grossmj 7b7af33920 Development on 2.2.46.dev1 2024-01-14 23:45:35 +11:00
Jeremy Grossmann 85fd3ef4a4 Merge pull request #2338 from GNS3/2.2
Release v2.2.45
2024-01-14 22:02:14 +11:00
grossmj fbd8f6ce28 Release v2.2.45 2024-01-12 21:38:26 +11:00
grossmj 195da24910 Bundle web-ui v2.2.45 2024-01-12 21:34:11 +11:00
grossmj b4c7609aeb Remove old web-ui files 2024-01-12 21:29:04 +11:00
grossmj cd9c4c84b6 Bundle web-ui v2.2.45 2024-01-12 21:21:18 +11:00
grossmj 2566de0f5a Sync appliances 2024-01-12 21:13:52 +11:00
grossmj 6a069d0af6 Fix mouse offset issues with VNC in Qemu. Fixes #2335 2024-01-12 16:18:32 +11:00
grossmj 2789b3802a Fix issues when generating docs 2024-01-12 16:14:01 +11:00
grossmj 9e1a1337d4 Update readthedocs.yml to use Python 3.12 2024-01-12 15:27:41 +11:00
Jeremy Grossmann 466eb8128e Merge pull request #2336 from GNS3/fix/2319
Refactor project notifications
2024-01-12 13:38:51 +11:00
grossmj e41227b5bd Update readthedocs.yml 2024-01-12 13:32:15 +11:00
grossmj 78a3b8e824 Update documentation 2024-01-12 13:21:34 +11:00
grossmj 4c149e1614 Add project.created, project.opened and project.deleted controller notification stream.
Move project.updated and project.closed from project notification to controller notification stream.
2024-01-12 13:16:55 +11:00
grossmj 473fa98eda Do not stop searching for Qemu binaries if one binary cannot be executed. Ref #2306 2024-01-11 23:11:56 +11:00
grossmj 13d9afd8bc Fix Ethernet switch and Ethernet hub port validations. Fixes #2334 2024-01-11 22:40:38 +11:00
grossmj b4edbbbaa7 Bundle dev version of the web-ui 2023-12-07 12:34:52 +10:00
grossmj 02e19800fb Update CORS policy 2023-12-06 22:33:55 +10:00
grossmj bc1016474e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
2023-12-05 22:15:50 +10:00
grossmj 24bb0ca419 Add custom executable paths on Windows 2023-12-05 21:24:40 +10:00
grossmj 42f668ffc4 Development on 3.0.0.dev12 2023-11-27 11:33:22 +10:00
grossmj 646f0fd837 Release v3.0.0b1 2023-11-27 11:13:39 +10:00
grossmj 3d383b25f0 Bundle web-ui v3.0.0b1 2023-11-27 11:10:37 +10:00
grossmj 8d28178e56 Upgrade sentry-sdk to v1.37.1 2023-11-27 11:05:20 +10:00
grossmj 0d63bf5128 Upgrade aiohttp to v3.9.1 2023-11-27 10:49:45 +10:00
grossmj 37f720ac73 Fix bug when listing endpoints for opened project 2023-11-23 15:38:42 +10:00
grossmj 9509d3a713 Make images executable after importing a project 2023-11-23 11:30:46 +10:00
grossmj 061ee1491d Disable IOS hostname check for Dynamips ghost instances 2023-11-22 18:47:05 +10:00
grossmj c8245e81be Upgrade sentry-sdk 2023-11-22 12:44:56 +10:00
grossmj ff7e10fa7f Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/crash_report.py
#	gns3server/main.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	requirements.txt
2023-11-22 12:42:04 +10:00
grossmj 6c5f75bf43 Upgrade sentry-sdk and aiohttp 2023-11-22 10:32:50 +10:00
grossmj 24d958d9ec Release v3.0.0a6 2023-11-15 12:07:48 +10:00
grossmj 48dab4af61 Bundle web-ui v3.0.0a6 2023-11-15 12:03:04 +10:00
grossmj 67be4259ff Fix tests 2023-11-15 11:57:14 +10:00
grossmj 4e9bc190a4 Upgrade to aiohttp v3.9.0rc0 2023-11-15 11:47:48 +10:00
grossmj 261dd1d6d5 Upgrade dependencies 2023-11-15 10:30:15 +10:00
Jeremy Grossmann e80e80a080 Merge pull request #2326 from GNS3/fix/2325
Install Docker resources in writable location
2023-11-13 11:28:56 +10:00
grossmj 09ff807055 Install Docker resources in writable location 2023-11-13 11:23:26 +10:00
grossmj 303cbf3642 Fix tests 2023-11-12 18:11:41 +10:00
grossmj e367b3a148 Default compute username is "gns3" 2023-11-12 18:02:19 +10:00
grossmj 7afdcbb3d3 Development in 2.2.45.dev3 2023-11-07 19:11:57 +10:00
Jeremy Grossmann de27a57a00 Merge pull request #2322 from GNS3/release-v2.2.44.1
Release v2.2.44.1
2023-11-07 18:35:29 +10:00
grossmj c88f76b740 Release v2.2.44.1 2023-11-07 14:59:28 +10:00
grossmj b81cc14cef Do not compute checksums on macOS 2023-11-07 14:30:39 +10:00
grossmj aa133c3b8a Add multiprocessing.set_start_method() 2023-11-07 13:33:43 +10:00
grossmj 7449064ea2 Bump version to v2.2.45.dev2 2023-11-07 12:21:39 +10:00
grossmj db315e3c3c Have freeze support for macOS as well 2023-11-07 11:17:48 +10:00
grossmj c437482e85 Catch exceptions when computing image checksums. Ref https://github.com/GNS3/gns3-server/issues/2228 2023-11-07 11:08:47 +10:00
Jeremy Grossmann 46d9ada6d8 Merge pull request #2321 from Xatrekak/master
Fixed updating system and GNS3 via welcome.py.
2023-11-07 10:49:00 +10:00
grossmj aac6fbfc31 Add freeze_support() for multiprocessing 2023-11-07 10:42:53 +10:00
Xatrekak 76bd5921c5 Fixed updating system and GNS3. 2023-11-06 19:02:29 -05:00
grossmj 8a208dbf04 Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	gns3server/compute/qemu/__init__.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.383fdade2fd9dbccffbc.js
#	gns3server/version.py
#	gns3server/web/web_server.py
#	requirements.txt
2023-11-06 17:09:34 +10:00
Jeremy Grossmann af3a618306 Merge pull request #2316 from GNS3/release-v2.2.44
Release v2.2.44
2023-11-06 17:05:54 +10:00
grossmj 3c4b5db1ca Development on 2.2.45.dev1 2023-11-06 17:00:17 +10:00
grossmj 5c8abdc6fd Release v2.2.44 2023-11-06 16:02:23 +10:00
grossmj f80f41b5b3 Sync appliances 2023-11-06 15:58:21 +10:00
grossmj 503373a6e9 Bundle web-ui v2.2.44 2023-11-06 15:53:51 +10:00
grossmj 8236c85b5f Upgrade sentry-sdk 2023-11-06 15:44:30 +10:00
Jeremy Grossmann 531499bbfb Merge pull request #2314 from Xatrekak/master
[Fix] an issue where the shell option in dialog failed to drop you back to bash.
2023-11-06 13:01:35 +10:00
grossmj ae825b0080 Non-blocking checksums computation when server starts. Fixes #2228 2023-11-06 12:32:23 +10:00
Dustin 7ad3afbdef Update welcome.py
Fixed an issue where the shell option in dialog failed to drop you back to bash.
2023-11-05 13:35:06 -05:00
grossmj 191feed669 Fix timeout issue when creating Qemu disk image. Fixes https://github.com/GNS3/gns3-server/issues/2313 2023-11-05 15:41:46 +10:00
grossmj cd785e0d17 Fix broken link to Web UI in 3.0 branch. Fixes #2312 2023-11-03 20:56:31 +10:00
grossmj e1bd4638c8 Fix sample config: VMware section declared twice. Fixes #2311 2023-11-03 20:46:36 +10:00
grossmj 61dede72f9 Fix ws console and packet capture over SSL 2023-11-03 15:35:49 +10:00
grossmj 13630179b2 Merge branch '2.2' into 3.0
# Conflicts:
#	appveyor.yml
#	gns3server/compute/project_manager.py
#	gns3server/handlers/api/controller/node_handler.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.febf2f1259a67875a3e3.js
2023-11-03 14:56:55 +10:00
grossmj 3b22bcfe96 Support for web socket console over HTTPS 2023-11-03 14:40:40 +10:00
grossmj 0f07b9e019 Add back script create_cert.sh 2023-11-03 12:31:34 +10:00
grossmj 8676a3dccf Bundle web-ui 2023-11-02 17:40:47 +10:00
grossmj b0dbf59ac4 Use Python 3.8 in appveyor.yml 2023-10-31 14:48:08 +10:00
Jeremy Grossmann 0e18762b36 Merge pull request #2308 from Xatrekak/master
Update remote-install.sh
2023-10-31 09:19:55 +10:00
Dustin cbc7e59d3f Update remote-install.sh
Removed an extra slash at the end when setting the user home directory. This was causing unexpected behavior for other scrips as ~ was aliased to /opt/gns3/ instead of the expected  /opt/gns3.

This caused an extra / to appear in commands unexpectedly.
2023-10-30 11:00:45 -04:00
Jeremy Grossmann 14fd165f2a Merge pull request #2307 from GNS3/fix/3521
Allow disabling hardware virtualization check
2023-10-30 15:03:50 +10:00
grossmj 7c49a9160c Allow disabling hardware virtualization check 2023-10-30 14:57:11 +10:00
Jeremy Grossmann 5a6e945db2 Merge pull request #2304 from GNS3/upgrade-python-api-doc
Upgrade to Python 3.8 for API doc publishing
2023-10-27 14:46:52 +10:00
grossmj 86c0b90951 Use Python 3.8 to publish API doc 2023-10-27 14:42:22 +10:00
grossmj 23b1c7a989 Development on 3.0.0.dev10 2023-10-27 14:12:23 +10:00
grossmj 399e925f2e Release v3.0.0a5 2023-10-27 13:38:14 +10:00
grossmj ac11c984cb Bundle web-ui v3.0.0a5 2023-10-27 13:32:31 +10:00
grossmj 0e8e4fd2f7 Merge branch '2.2' into 3.0 2023-10-27 13:28:32 +10:00
grossmj ed99a98fe1 Sync appliances 2023-10-27 13:20:15 +10:00
Jeremy Grossmann 19edc193f9 Merge pull request #2303 from GNS3/fix/1484
Fix L2IOU "failed code signing checks"
2023-10-26 15:13:12 +10:00
grossmj 3f50319990 Fix L2IOU "failed code signing checks" when IOU base file name is >= 63 characters 2023-10-26 15:05:10 +10:00
grossmj fb6d29aeff Python 3.12 support 2023-10-24 18:37:13 +10:00
grossmj 5475eedce7 Add igb Qemu adapter 2023-10-24 18:33:26 +10:00
grossmj d680bbbc77 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/schemas/qemu_template.py
#	requirements.txt
#	tests/compute/qemu/test_qemu_vm.py
#	tests/handlers/api/compute/test_qemu.py
2023-10-24 18:31:51 +10:00
Jeremy Grossmann 248737c34b Merge pull request #2296 from ventaquil/feature/add-qemu-igb-nic
Add Qemu IGB network device
2023-10-24 17:23:00 +10:00
Jeremy Grossmann 240708112c Merge branch '2.2' into feature/add-qemu-igb-nic 2023-10-24 17:14:27 +10:00
grossmj c759c4e3f6 Upgrade to actions/checkout@v3 and actions/setup-python@v3 2023-10-23 16:17:31 +10:00
grossmj 34ee75e1f1 Fix tests running on Python 3.12 2023-10-23 16:12:12 +10:00
grossmj 4af5edbc03 Install aiohttp 3.9.0b0 when running on Python 3.12 2023-10-23 15:21:06 +10:00
grossmj 0d15f40930 Change "ip cef" to "no ip cef" in IOU default configs. Fixes #2298 2023-10-23 15:16:49 +10:00
Jeremy Grossmann f3ad97c398 Merge pull request #2300 from GNS3/fix/1468
Fix compute authentication for websocket endpoints
2023-10-22 16:03:21 +10:00
Jeremy Grossmann a55e1cbc99 Update dev-requirements.txt 2023-10-22 15:47:21 +10:00
Jeremy Grossmann 9c369a2597 Merge branch '3.0' into fix/1468 2023-10-22 15:44:25 +10:00
Jeremy Grossmann 4dcb0dce57 Merge pull request #2301 from GNS3/drop-python-3.7
Drop Pyhton 3.7 support (end-of-life)
2023-10-22 15:43:26 +10:00
grossmj 0f0412158d Drop support for Python 3.7 and upgrade dependencies 2023-10-22 15:37:00 +10:00
grossmj 2f3689588e Fix httpx-ws dependency on Python 3.7 2023-10-22 12:53:47 +10:00
grossmj 44c066ac68 Fix compute authentication for websocket endpoints 2023-10-22 12:44:39 +10:00
grossmj ffc49ea954 Development on 3.0.0.dev9 2023-10-18 20:15:11 +10:00
grossmj d610c933fb Release v3.0.0a4 2023-10-18 19:01:13 +10:00
grossmj 8f35b871d5 Downgrade watchfiles to v0.20.0 2023-10-18 18:35:02 +10:00
grossmj 29c9d2c2e9 Revert "Temporary support for Python 3.12"
This reverts commit 9911b5199b.
2023-10-18 18:31:44 +10:00
grossmj 5ad7761337 Upgrade FastAPI, watchfiles and platformdirs dependencies 2023-10-18 18:01:59 +10:00
grossmj 9911b5199b Temporary support for Python 3.12 2023-10-18 17:58:24 +10:00
grossmj edcc69f617 Remove old web-ui files 2023-10-18 17:58:11 +10:00
grossmj fe8b61373c Bundle web-ui v3.0.0a4 2023-10-18 17:51:41 +10:00
grossmj 87960f1ff0 Merge branch '2.2' into 3.0
# Conflicts:
#	README.md
2023-10-18 17:48:09 +10:00
grossmj 3b0d89be5a Merge branch 'master' into 2.2 2023-10-18 17:46:51 +10:00
grossmj 5ff3043fb4 Sync appliances 2023-10-18 17:45:17 +10:00
grossmj 47d3f3f349 Do not enforce Compute.Audit and Template.Audit privileges due to current web-ui limitations 2023-10-18 15:51:43 +10:00
grossmj 109feeb647 Revert to aiohttp v3.8.6 2023-10-18 15:00:42 +10:00
grossmj 56839413fa Remove testing with Python 3.6 (not supported) 2023-10-18 14:58:19 +10:00
grossmj 18012dc18a Upgrade aiohttp and sqlalchemy dependencies 2023-10-18 14:56:19 +10:00
grossmj 46c02ad2f3 Merge branch '2.2' into 3.0
# Conflicts:
#	requirements.txt
2023-10-18 14:54:39 +10:00
grossmj 08ac80e451 Upgrade sentry and psutil dependencies 2023-10-18 14:53:25 +10:00
grossmj 6ca15cbcff Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	requirements.txt
#	setup.py
2023-10-18 14:49:49 +10:00
grossmj 722512d851 Remove model validator. Fixes https://github.com/GNS3/gns3-gui/issues/3522
Default port name and port segment size are already set in the code when a new node is created.
2023-10-15 11:16:05 +10:00
Konrad Goławski 737664a3d4 Add Qemu IGB network device 2023-10-12 11:35:53 +02:00
grossmj 29f4b238b0 Add Python 3.12 support. Fixes https://github.com/GNS3/gns3-server/issues/2273 2023-10-09 16:54:47 +10:00
Jeremy Grossmann b6127af067 Merge pull request #2294 from GNS3/list-items-closed-project
[API] Allow listing items from a closed project
2023-10-09 13:28:58 +10:00
grossmj 5092bd2fdf List elements when a project is closed 2023-10-09 13:16:12 +10:00
grossmj a27db6b4eb Fix deleting resource from resource pool. Ref #2293 2023-09-28 18:38:38 +10:00
grossmj 66b66cc3e1 Bump version to 3.0.0.dev8 2023-09-25 21:38:20 +10:00
Jeremy Grossmann 7215b150dd Merge pull request #2292 from GNS3/fix/3422
Support to create empty disk images on the controller
2023-09-25 21:29:24 +10:00
grossmj 674381f1be Fix tests 2023-09-25 21:08:23 +10:00
grossmj 1ae6d13022 Support to create empty disk images on the controller 2023-09-25 17:51:14 +10:00
Jeremy Grossmann 6886f1f566 Merge pull request #2290 from GNS3/fix/2147
Fix issue when using importlib.resources.files()
2023-09-23 20:54:57 +10:00
grossmj 999a47f747 Fix issue with importlib.resources.files() and Python 3.9 2023-09-23 20:44:00 +10:00
grossmj c1507b4155 Upgrade sqlalchemy 2023-09-23 15:56:42 +10:00
grossmj d9214a3c67 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/virtualbox/__init__.py
#	gns3server/controller/gns3vm/virtualbox_gns3_vm.py
#	gns3server/crash_report.py
#	gns3server/version.py
#	requirements.txt
2023-09-23 15:54:54 +10:00
grossmj f675f24ba7 Revert "Install importlib-resources only with Python < '3.9'. Ref #2147"
This reverts commit dc1eed42da.
2023-09-23 14:48:04 +10:00
grossmj dc1eed42da Install importlib-resources only with Python < '3.9'. Ref #2147 2023-09-23 14:35:50 +10:00
Jeremy Grossmann 2c5a9ef9b7 Merge pull request #2288 from Quanterm/master
Update README.md
2023-09-21 11:44:36 +10:00
Vieta e75d151611 Update README.md
The release cycle of NixOs is around every half of the year. 
On the unstable channel you have the latest gns3-server version. 
Do not worry to use unstable because it mostly just the latest stable version. You can also do overlays to keep your other systems pkgs on the regular release version.
2023-09-20 11:41:05 +00:00
Jeremy Grossmann d87cff7fd5 Merge pull request #2287 from munahaf/Inappropriate_Logic-5node.py11635999804432162276.diff
Update a test expression to remove a logical short circuit
2023-09-20 14:31:04 +07:00
Jeremy Grossmann ffb58a4ed2 Merge branch 'master' into Inappropriate_Logic-5node.py11635999804432162276.diff 2023-09-20 14:17:58 +07:00
munahaf 4d7b3fb9d6 Comment: Updated a test expression to remove a logical short circuit. 2023-09-20 06:51:41 +00:00
grossmj 94abdfc9f0 Development on 2.2.44.dev1 2023-09-19 21:08:24 +07:00
Jeremy Grossmann 6f345bb1ec Merge pull request #2286 from GNS3/release-v2.2.43
Release v2.2.43
2023-09-19 21:04:52 +07:00
grossmj 89ec458f5c Release v2.2.43 2023-09-19 20:16:52 +07:00
grossmj 80bc1a726b Sync appliances 2023-09-19 20:12:32 +07:00
grossmj 6265d3d55f Upgrade sentry-sdk and truststore 2023-09-19 20:07:57 +07:00
grossmj a96a82821c Merge branch 'master' into 2.2 2023-09-19 20:04:15 +07:00
grossmj ad47ffbe29 Force English output for VBoxManage. Fixes #2266 2023-09-19 18:14:05 +07:00
Jeremy Grossmann eca1243fc0 Merge pull request #2285 from Orange-OpenSource/3.0
rbac fix: cannot add multiple time same privilege to a role
2023-09-18 18:41:01 +07:00
Sylvain MATHIEU OBS 0d834ee2a0 rbac fix: cannot add multiple time same privilege to a role 2023-09-18 13:34:46 +02:00
Jeremy Grossmann e1c5c05492 Merge pull request #2280 from GNS3/resource-pools
Resource pools support
2023-09-14 22:47:02 +07:00
grossmj 7534718a1c Remove privileges endpoint from roles 2023-09-14 22:41:08 +07:00
Jeremy Grossmann 63c1defd9a Merge branch '3.0' into resource-pools 2023-09-14 22:38:52 +07:00
grossmj 1f90bb14b6 Require users to be logged in for privilege API endpoints 2023-09-14 22:36:21 +07:00
Jeremy Grossmann ae00dd422f Merge pull request #2283 from Orange-OpenSource/3.0
API: add endpoint to expose availables privileges to web UI
2023-09-13 22:51:05 +07:00
Sylvain MATHIEU OBS 10eeefc1f5 API: add endpoint to expose availables privileges to web UI 2023-09-12 15:24:54 +02:00
grossmj 702fea89fb Automatically add vboxnet and DHCP server if not present for VirtualBox GNS3 VM. Ref #2266 2023-09-12 16:14:44 +07:00
grossmj a95dda0d1d Complete resource pool support for projects 2023-09-11 18:15:03 +07:00
grossmj d53ef175f8 DB and API for resource pools 2023-09-07 17:31:11 +07:00
grossmj f7d287242f Upgrade platformdirs 2023-09-07 16:32:04 +07:00
grossmj c11b3c3911 Fix tests after merge 2023-09-06 23:42:50 +07:00
grossmj 1ec056c1a6 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/controller/__init__.py
#	gns3server/controller/appliance_manager.py
#	gns3server/web/route.py
#	requirements.txt
#	tests/compute/docker/test_docker_vm.py
2023-09-06 23:30:00 +07:00
Jeremy Grossmann 285b19d97f Merge pull request #2272 from GNS3/fix/2271
Correctly install built-in appliances
2023-09-06 23:16:34 +07:00
grossmj 709aa46074 Fix issue with controller config saved before checking current version with previous one 2023-09-06 16:48:24 +07:00
grossmj 0c12849d0d Use controller vars file to store version and appliance etag 2023-09-06 16:28:46 +07:00
grossmj 8aa9d1aae6 Upgrade dependencies and fix user group tests 2023-09-03 17:58:51 +07:00
grossmj 66047b3431 Fix OAuth2PasswordBearer token URL 2023-09-03 17:31:05 +07:00
Jeremy Grossmann 71d06abaf4 Merge pull request #2278 from GNS3/update-publish-api-doc
Update publish api doc with GitHub Actions
2023-09-03 17:00:13 +07:00
grossmj 05ef9f2a7c No need for dev dependencies 2023-09-03 16:59:48 +07:00
grossmj 476658b829 Update publish-api-documentation.yml 2023-09-03 16:52:30 +07:00
grossmj 6ec97a704f Put user, groups, roles and ACL under /access 2023-09-02 19:10:02 +07:00
grossmj a358369606 Move notifications under controller router 2023-09-02 18:57:53 +07:00
grossmj 5155aea923 Upgrade dependencies 2023-09-02 18:49:16 +07:00
Jeremy Grossmann b0c4fc17ad Merge pull request #2275 from GNS3/rbac-new-implementation
New RBAC implementation
2023-09-02 18:47:35 +07:00
grossmj e72b07bf5c Prepare resource pools table for future development 2023-09-02 18:42:40 +07:00
grossmj 170f476733 Add more built-in roles 2023-09-02 18:15:00 +07:00
grossmj 0077fd98aa Add required privileges to all endpoints 2023-09-02 17:54:24 +07:00
grossmj f3a4ad49f4 Check for group ACEs to find user privileges 2023-08-28 18:14:34 +10:00
grossmj 3e0592520b Handle ACE propagate and allowed 2023-08-28 12:06:01 +10:00
Jeremy Grossmann d3d0cc039d Merge pull request #2277 from GNS3/fix/2276
Prevent X11 socket file to be modified by Docker container
2023-08-27 19:53:50 +10:00
grossmj c2783d355f Fix test_create_vnc test 2023-08-27 18:41:25 +10:00
grossmj d6e1ee5dbb Prevent X11 socket file to be modified by Docker container 2023-08-27 18:30:37 +10:00
grossmj 57197c3d1c Comment unused code 2023-08-27 18:23:10 +10:00
grossmj 60ce1172e0 Use an ACL table to check for privileges 2023-08-27 18:20:42 +10:00
grossmj 6bd855b3c5 New database schema for better RBAC 2023-08-21 21:32:23 +10:00
grossmj 74cb3be910 Merge remote-tracking branch 'origin/3.0' into 3.0 2023-08-19 12:29:53 +10:00
grossmj 425ad845fc Speed up tests 2023-08-19 12:29:25 +10:00
grossmj 1ce0c13fc9 Better mocking in Docker tests 2023-08-18 12:20:54 +10:00
grossmj e9e2dc2ca7 Fix validation issues and improve exceptions logs 2023-08-17 17:36:50 +10:00
Jeremy Grossmann e61ada69bb Merge pull request #2274 from lethedata/openwrt-18.06.5-18.06.2-hashfix
Hash Update openwrt.gns3a
2023-08-17 10:00:14 +10:00
Echo Nar a6b0f32b57 Hash Update openwrt.gns3a
Update hashes for openwrt-18.06.5 and openwrt-18.06.2 based hashes from download links.
2023-08-16 18:37:55 -05:00
grossmj a69feb3682 Use an older version of platformdirs 2023-08-12 19:15:29 +10:00
grossmj 090d1c8c84 Only use platformdirs with Python >= '3.7' 2023-08-12 19:04:14 +10:00
grossmj df2f96828e Use the user data dir to store built-in appliances 2023-08-12 18:48:43 +10:00
grossmj 6a614fbd78 Downgrade jsonschema 2023-08-12 17:51:24 +10:00
grossmj 2d7438446c Upgrade dependencies 2023-08-12 17:47:48 +10:00
grossmj 77d4eabadc Catch ConnectionResetError exception when client disconnects 2023-08-12 17:31:58 +10:00
grossmj ca48efa5be Upgrade SQLAlchemy to v2.0.18 and fix async_timeout warning 2023-08-11 22:52:29 +10:00
grossmj b0657b39ef Upgrade dependencies 2023-08-11 18:54:05 +10:00
grossmj cefa459721 Fix command line issue with certfile and certkey 2023-08-11 18:34:16 +10:00
grossmj 66dd8bdadb Merge branch '2.2' into 3.0 2023-08-11 18:14:16 +10:00
grossmj bbb0a407e0 Upgrade to PyQt 5.15.9 and pywin32 2023-08-11 18:13:41 +10:00
Jeremy Grossmann 96ce5eac8d Merge pull request #2270 from GNS3/packaging-migration
Packaging migration
2023-08-11 18:09:31 +10:00
grossmj 2f2aabeb5a Fix tests when running Python 3.7 2023-08-11 17:58:00 +10:00
grossmj d9eb61efc4 Fix tests with asyncio_patch 2023-08-11 17:37:11 +10:00
grossmj 1fd8444d22 Add tests for install_busybox() 2023-08-11 17:32:05 +10:00
grossmj f3b6825e40 Test if busybox is not dynamically linked 2023-08-11 14:10:25 +10:00
grossmj 719458764f Fix tests 2023-08-10 23:23:11 +10:00
grossmj 483db91851 Use dev for optional development dependencies 2023-08-10 23:16:57 +10:00
grossmj f3d43aeb39 Fix testing.yml 2023-08-10 22:52:35 +10:00
grossmj 1cb433c5bc New packaging relying only pyproject.toml 2023-08-10 22:44:37 +10:00
grossmj 17f71f970e Add truststore inject_into_ssl 2023-08-10 15:01:49 +10:00
grossmj fe90d2b146 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/controller/appliance_manager.py
#	gns3server/crash_report.py
#	gns3server/run.py
#	gns3server/static/web-ui/index.html
#	gns3server/utils/images.py
#	gns3server/version.py
#	requirements.txt
#	scripts/update-bundled-web-ui.sh
2023-08-10 15:00:22 +10:00
grossmj 35e1519073 Development on v2.2.43.dev1 2023-08-09 22:15:15 +10:00
Jeremy Grossmann 9f5aece8b6 Merge pull request #2267 from GNS3/release-v2.2.42
Release v2.2.42
2023-08-09 22:09:29 +10:00
grossmj 08139ebdd1 Release v2.2.42 2023-08-09 21:11:57 +10:00
grossmj cd87ac4474 Bundle web-ui v2.2.42 2023-08-09 21:03:40 +10:00
grossmj 77744cc31d Handle API version key in VirtualBox 7. Fixes #2266 2023-08-09 20:51:53 +10:00
grossmj df9d642a56 Sync appliances 2023-08-08 19:07:04 +10:00
grossmj fad28c766a Enable system certificate store later in the code and bump version to 2.2.42.dev4 2023-08-08 17:22:27 +10:00
grossmj 21d9d968c4 Revert "Use truststore in appliance_manager.py instead"
This reverts commit a2628042e8.
2023-08-07 20:44:37 +10:00
grossmj 945a2c98cd Revert "Use finer-grained control for truststore"
This reverts commit 5e1792ff4d.
2023-08-07 20:44:33 +10:00
grossmj 5e1792ff4d Use finer-grained control for truststore 2023-08-07 19:15:14 +10:00
grossmj a2628042e8 Use truststore in appliance_manager.py instead 2023-08-07 19:04:55 +10:00
grossmj e616b09028 Use truststore 2023-08-07 18:40:03 +10:00
grossmj 958865e919 Upgrade dependencies 2023-08-06 20:39:27 +10:00
grossmj 7f595b089b Use certifi to get SSL root certificates 2023-08-06 20:37:10 +10:00
grossmj a76d7576c6 Bump version to 2.2.42.dev3 2023-08-06 18:14:21 +10:00
grossmj 533c4544ea Use certifi on Windows and macOS 2023-08-06 18:09:56 +10:00
Jeremy Grossmann 04a302a389 Merge pull request #2265 from GNS3/use-bundled-cacert
Use bundled cacert file for frozen app
2023-08-05 22:37:06 +10:00
grossmj 5da742394e Use bundled cacert file on Windows and macOS 2023-08-05 22:21:08 +10:00
grossmj 962c5eed8e Add log message for comparing controller version with config version. Ref https://github.com/GNS3/gns3-gui/issues/3486 2023-08-05 20:24:11 +10:00
grossmj f4dab1482f Bump version to 2.2.42.dev2 2023-08-05 20:16:30 +10:00
grossmj 05d594f3cf Upgrade FastAPI version to 0.101.0 2023-08-05 20:13:30 +10:00
Jeremy Grossmann d44f6eb2f1 Merge pull request #2262 from GNS3/fix/2257
Support for Pydantic v2
2023-08-04 18:27:18 +10:00
grossmj 9c456532d0 Pydantic v2 migration 2023-08-04 18:20:06 +10:00
grossmj 7ef9b7600c Use DEFAULT_BUFFER_SIZE for md5sum 2023-08-03 12:09:24 +10:00
grossmj 11f51b3809 Allow connection to ws console over IPv6 2023-08-02 18:29:01 +10:00
grossmj 1d59afa9fb Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/crash_report.py
#	gns3server/handlers/api/controller/node_handler.py
#	gns3server/utils/images.py
2023-08-02 18:26:50 +10:00
grossmj c51d71a4fa Fix version check when installing appliances. Ref https://github.com/GNS3/gns3-gui/issues/3486 2023-08-02 17:58:53 +10:00
grossmj af83adfdf6 Add debug message when calculating MD5 checksum 2023-08-02 17:41:51 +10:00
grossmj 658bfb7624 Allow connection to ws console over IPv6. Fixes https://github.com/GNS3/gns3-web-ui/issues/1400 2023-08-02 15:28:32 +10:00
grossmj 88a1cef21f Revert "Support for Python 3.12"
This reverts commit 1ced862c08.
2023-07-30 17:50:25 +10:00
grossmj 1ced862c08 Support for Python 3.12 2023-07-30 17:48:30 +10:00
grossmj 6097166055 Remove import urllib3 and let sentry_sdk import and patch it. Fixes https://github.com/GNS3/gns3-gui/issues/3498 2023-07-30 17:42:52 +10:00
grossmj 46b8ee3279 Downgrade sqlalchemy 2023-07-23 12:56:30 +10:00
grossmj d82a07600b Downgrade uvicorn 2023-07-23 12:50:29 +10:00
grossmj 2991899d50 Upgrade dependencies 2023-07-23 12:47:34 +10:00
grossmj 9238c52f97 Merge branch '2.2' into 3.0 2023-07-23 12:36:35 +10:00
grossmj 38ee79c15f Merge remote-tracking branch 'origin/master' into 2.2 2023-07-23 12:35:46 +10:00
grossmj 3f691b60c9 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/crash_report.py
#	gns3server/schemas/qemu.py
#	gns3server/schemas/qemu_template.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.1379a5647e8bc6d3e401.js
#	gns3server/version.py
#	tests/compute/qemu/test_qemu_vm.py
2023-07-13 10:09:26 +10:00
grossmj a6ca7c4e36 Development on 2.2.42.dev1 2023-07-12 18:26:26 +10:00
Jeremy Grossmann b76d2c2150 Merge pull request #2258 from GNS3/release-v2.2.41
Release v2.2.41
2023-07-12 18:24:40 +10:00
grossmj d2a0632ec4 Release v2.2.41 2023-07-12 17:07:39 +10:00
grossmj fde5f5cbe2 Merge remote-tracking branch 'origin/master' into 2.2 2023-07-12 17:04:12 +10:00
grossmj 7dc5628845 Bundle web-ui v2.2.41 2023-07-12 16:31:54 +10:00
grossmj 723b519e8f Sync appliance files 2023-07-12 16:20:29 +10:00
grossmj 9c653f7dbf Bump version to 2.2.41.dev3 2023-07-12 13:26:22 +10:00
grossmj c226b2a9ef Catch urllib3 exceptions when sending crash report. Ref https://github.com/GNS3/gns3-gui/issues/3483 2023-07-06 17:16:05 +10:00
Jeremy Grossmann c5c4e1ad56 Merge pull request #2255 from GNS3/fix/2243
Only add speed/duplex params when using Qemu >= v2.12
2023-07-06 16:43:54 +10:00
grossmj 8e2989d747 Fix issue with tests and Qemu version on Windows 2023-07-06 16:36:36 +10:00
grossmj c181df6935 Only fetch Qemu version once when starting Qemu + only add speed/duplex for virtio-net-pci with Qemu version >= 2.12 2023-07-06 16:29:55 +10:00
Jeremy Grossmann 24c03406e7 Merge pull request #2253 from GNS3/uefi-boot-mode
Bundle recent OVMF firmware and improve UEFI boot mode
2023-07-04 13:38:47 +10:00
grossmj 6c8c5c1787 Ignore uefi test on Windows 2023-07-04 13:31:21 +10:00
grossmj f541c03b94 Fix uefi test on Windows 2023-07-04 13:22:18 +10:00
grossmj 0a14a08d54 Use recent OVMF firmware (stable-202305) and use flash drives to configure Qemu command line 2023-07-04 13:06:34 +10:00
grossmj 9357ac6035 Add builtin field in Appliance model 2023-07-03 21:02:17 +10:00
grossmj 785eff869d Fix issue with appliance API returning unset data 2023-07-03 18:55:19 +10:00
grossmj 24db2a039d Upgrade FastAPI to v0.99.1 2023-07-03 17:12:46 +10:00
grossmj bfb317a302 Upgrade dependencies 2023-06-30 17:47:55 +10:00
Jeremy Grossmann 29b4e89d21 Merge pull request #2252 from Raizo62/rights_empty8G.qcow2
- remove executable permissions to empty8G.qcow2
2023-06-28 19:55:56 +09:30
Raizo62 bbb68cb148 - remove the useless executable permissions to the file gns3server/disks/empty8G.qcow2
https://github.com/GNS3/gns3-gui/issues/3491
2023-06-28 08:30:13 +02:00
grossmj 427bbc40b9 Fix websocket authentication after upgrade to FastAPI 0.97.0 + tests 2023-06-24 14:55:43 +09:30
grossmj 4b791d4924 Fix websocket compute notifications after upgrade to FastAPI 0.97.0 2023-06-23 23:26:08 +09:30
Jeremy Grossmann 6f132a2e09 Merge pull request #2248 from GNS3/backport-uefi-boot-mode
Backport UEFI boot mode support for Qemu VMs
2023-06-23 11:31:52 +09:30
grossmj d5cfb85de5 Backport UEFI boot mode support for Qemu VMs 2023-06-23 11:18:25 +09:30
Jeremy Grossmann d366d77ff7 Merge pull request #2247 from GNS3/dynamic-compute-allocation
Allow computes to be dynamically or manually allocated
2023-06-21 22:41:56 +09:30
grossmj 21049d73a5 Allow computes to be dynamically or manually allocated 2023-06-21 22:28:09 +09:30
Jeremy Grossmann c290d75eec Merge pull request #2246 from GNS3/add-uefi-boot-mode
Add UEFI boot mode option for Qemu VMs
2023-06-21 18:12:31 +09:30
grossmj 40c265152b Add UEFI boot mode option for Qemu VMs 2023-06-21 17:56:34 +09:30
grossmj e5eeab662e Check if server config file is readable 2023-06-20 21:26:21 +09:30
grossmj a7a946c067 Upgrade dev dependencies 2023-06-20 16:17:13 +09:30
grossmj b762d1e60d Upgrade dependencies 2023-06-20 16:13:35 +09:30
grossmj 1ff23348d3 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/compute/docker/__init__.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/compute.py
#	gns3server/controller/gns3vm/virtualbox_gns3_vm.py
#	gns3server/controller/node.py
#	gns3server/controller/project.py
#	gns3server/crash_report.py
#	gns3server/handlers/api/controller/template_handler.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.8448c96e4facbe79a613.js
#	gns3server/version.py
#	tests/compute/iou/test_iou_vm.py
#	tests/compute/qemu/test_qemu_vm.py
#	tests/handlers/api/controller/test_template.py
2023-06-20 16:06:53 +09:30
grossmj 3dbc714f37 Developement on v2.2.41.dev2 2023-06-10 21:40:39 +09:30
Jeremy Grossmann 682af449f8 Merge pull request #2240 from GNS3/release-v2.2.40.1
Release v2.2.40.1
2023-06-10 21:36:51 +09:30
grossmj 60f1d76eab Release v2.2.40.1 2023-06-10 20:06:40 +09:30
grossmj 16b619066a Merge branch 'master' into 2.2 2023-06-10 17:22:33 +09:30
grossmj d44038305f Add missing web-ui files. Fixes #2239 2023-06-10 15:50:28 +09:30
grossmj 3641742930 Development on v2.2.41.dev1 2023-06-06 12:43:20 +09:30
Jeremy Grossmann 4bf7838543 Merge pull request #2238 from GNS3/release-v2.2.40
Release v2.2.40
2023-06-06 12:41:40 +09:30
Jeremy Grossmann 998fe6d8a4 Merge branch 'master' into release-v2.2.40 2023-06-06 12:28:30 +09:30
grossmj aa79f4cb25 Release v2.2.40 2023-06-06 10:23:42 +09:30
grossmj 2602602193 Merge branch 'master' into 2.2 2023-06-06 10:20:07 +09:30
grossmj 8d969349c8 Bundle web-ui v2.2.40 2023-06-06 10:18:18 +09:30
grossmj bf67fec242 Sync appliances 2023-06-06 10:07:50 +09:30
Jeremy Grossmann a070a72f66 Merge pull request #2235 from Raizo62/virtio-net-pci
qemu : with "virtio-net-pci", fix the speed and duplex
2023-06-03 21:03:04 +09:30
grossmj 71d1aefb65 Test Qemu command with virtio-net-pci adapter 2023-06-03 20:57:23 +09:30
Raizo62 0b6436d2cb qemu : with network adapter_type equal to "virtio-net-pci", fix the speed to 10000 and duplex to full.
The values are actually fake.
	(https://github.com/GNS3/gns3-gui/issues/3476)
2023-06-03 11:48:55 +02:00
Jeremy Grossmann 77f5044aec Merge pull request #2234 from GNS3/fix-tests
Fix tests
2023-06-02 20:32:25 +09:30
Jeremy Grossmann 088ae699de Merge pull request #2223 from GNS3/fix/2214
Use proc.communicate() when checking for subprocess output
2023-06-02 20:29:40 +09:30
grossmj 21dc2a8dbc Fix tests 2023-06-02 20:25:33 +09:30
Jeremy Grossmann aae7bf9865 Merge pull request #2231 from GNS3/fix/3452
Fix Docker + VNC issues
2023-06-02 20:24:55 +09:30
grossmj 4338afab7f Fix tests 2023-06-02 20:16:06 +09:30
Jeremy Grossmann ef62eba4e8 Merge pull request #2233
Fix unexpected indent
2023-06-02 20:08:55 +09:30
grossmj cc4ead40e2 Fix unexpected indent 2023-06-02 20:08:21 +09:30
Jeremy Grossmann 67943c4727 Merge pull request #2232 from Mlastawi/master
Parse name for request to node creation from template
2023-06-02 18:16:29 +09:30
Mlastawi 045c0c4c14 Add missing comma 2023-06-02 10:38:42 +02:00
Maciej Łastawiecki a0943b0b5a Parse name for request to node creation from template 2023-06-02 09:39:08 +02:00
grossmj 84c886b058 Remove left over Xvfb related code 2023-05-31 21:33:39 +09:30
grossmj e59b5fb95b Remove Xvfb + x11vnc support 2023-05-31 21:28:06 +09:30
Jeremy Grossmann cc4d6759e3 Merge pull request #2229 from GNS3/fix/3472
Fix support for the GNS3 VM on macOS with VirtualBox 7
2023-05-31 20:46:39 +09:30
grossmj e45467af57 Use the correct VirtualBox host-only type 2023-05-31 20:39:25 +09:30
grossmj c6d6fcfe66 Search for correct VirtualBox network type 2023-05-31 20:19:13 +09:30
grossmj 73bcd019cc Require a Host-Only Network to start the VirtualBox GNS3 VM on macOS with VirtualBox 7 2023-05-30 21:22:57 +09:30
grossmj 2361e138ec Properly catch aiohttp client exception. Ref #2228 2023-05-30 16:17:12 +09:30
grossmj 0f02cff5f2 Catch ConnectionResetError when waiting for the wrap console 2023-05-25 18:29:19 +08:00
grossmj 72af145a23 Fix open IPv6 address for HTTP consoles on controller. Fixes https://github.com/GNS3/gns3-gui/issues/3448 2023-05-22 19:42:01 +08:00
grossmj 8cc0244c5a Upgrade dependencies 2023-05-22 15:21:57 +08:00
grossmj b3dfb87622 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.96be36058f5df0ca7e7f.js
#	gns3server/utils/images.py
#	gns3server/version.py
#	requirements.txt
#	tests/compute/docker/test_docker_vm.py
#	tests/controller/test_controller.py
2023-05-22 15:11:17 +08:00
grossmj d03e7ac9c5 Fix tests 2023-05-14 14:20:45 +08:00
grossmj af2fc8c111 Use proc.communicate() when checking for subprocess output
As recommended in https://docs.python.org/3/library/asyncio-subprocess.html#asyncio.subprocess.Process.stderr
2023-05-14 13:58:50 +08:00
Jeremy Grossmann 25c03b7823 Merge pull request #2220 from GNS3/release-v2.2.39
Release v2.2.39
2023-05-08 20:27:28 +08:00
grossmj b4bfb24a80 Development on v2.2.40.dev1 2023-05-08 20:26:40 +08:00
grossmj d6ea546ff7 Release v2.2.39 2023-05-08 19:17:02 +08:00
grossmj 68f9c55f3d Install web-ui v2.2.39 2023-05-08 19:10:22 +08:00
Jeremy Grossmann 9868c28bc6 Merge pull request #2219 from GNS3/install-qemu-empty-disks
Install empty Qemu disks
2023-05-08 16:58:26 +08:00
grossmj f3f7921525 Add generic function to install resource files 2023-05-07 21:57:44 +08:00
grossmj 65cc12c850 Sync appliance files 2023-05-05 22:46:42 +08:00
grossmj 161f62d083 Install empty Qemu disks on first start 2023-05-05 22:40:58 +08:00
grossmj af2b5c3448 Upgrade dependencies 2023-04-30 23:17:01 -10:00
grossmj 1591ca114d Upgrade dependencies 2023-04-23 05:33:12 -10:00
grossmj d6141d4652 Fix checking for ":" in project dir on Windows for Docker containers 2023-03-23 22:17:29 -10:00
grossmj 8bf5eb2754 Upgrade sentry-sdk 2023-03-23 21:41:50 -10:00
Jeremy Grossmann ce220e5ae4 Merge pull request #2211 from eantowne/master
remote-install.sh: added variable declaration
2023-03-24 03:03:12 +08:00
eantowne 791ce6a56e Added declaration for in remote-install.sh to resolve 'unary operator operator expected' error 2023-03-23 07:59:20 -04:00
Jeremy Grossmann 66157a335d Merge pull request #2207 from GNS3/pyproject-migration
Support for pyproject.toml
2023-03-21 18:00:13 +08:00
grossmj 513bc0fb16 Do not use setup.py directly 2023-03-21 18:56:00 +10:00
grossmj ffe35b6559 Migrate to pyproject.toml 2023-03-21 17:41:01 +10:00
grossmj f08ce9d3f1 Check for colon in project name. Fixes #2203 2023-03-19 18:26:26 +10:00
Jeremy Grossmann 2bb71838ac Merge pull request #2204 from GNS3/fix/2203
Allow ':' in project name when using Docker containers
2023-03-19 16:00:04 +08:00
grossmj f347e21100 Fix Docker tests 2023-03-19 17:56:07 +10:00
grossmj 3fb138b9a1 Allow ':' in project name when Docker containers are used 2023-03-19 17:29:29 +10:00
grossmj 9de847fc45 Upgrade Fastapi to v0.95.0 2023-03-19 11:18:58 +10:00
grossmj ea550508f6 Fix uvicorn dependency version 2023-03-17 17:48:14 +10:00
grossmj 267c4cbbbb Merge branch '2.2' into 3.0
# Conflicts:
#	README.md
#	gns3server/compute/base_node.py
#	gns3server/compute/dynamips/__init__.py
#	gns3server/compute/dynamips/hypervisor.py
#	gns3server/compute/qemu/__init__.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/__init__.py
#	gns3server/crash_report.py
#	gns3server/handlers/api/controller/node_handler.py
#	gns3server/schemas/qemu_template.py
#	gns3server/static/web-ui/index.html
#	gns3server/static/web-ui/main.11410ae4eaf4d4c08cd0.js
#	gns3server/version.py
#	requirements.txt
2023-03-17 17:44:32 +10:00
grossmj c33a13fd45 Upgrade dependencies 2023-03-17 16:23:48 +10:00
grossmj ceb8208002 Upgrade distro and aiohttp dependencies 2023-03-01 18:03:28 +10:00
grossmj 42767eff56 Development on 2.2.39.dev1 2023-02-28 17:09:39 +10:00
Jeremy Grossmann 0406083991 Merge pull request #2192 from GNS3/2.2
Release v2.2.38
2023-02-28 14:41:03 +08:00
grossmj 91dba66800 Release v2.2.38 2023-02-28 15:35:17 +10:00
grossmj 69b741a01e Sync appliance files 2023-02-28 15:31:02 +10:00
grossmj 8903ab8a47 Bundle web-ui v2.2.38 2023-02-28 15:29:17 +10:00
grossmj 4d62c6943b Merge branch 'master' into 2.2 2023-02-28 15:07:48 +10:00
grossmj 2a66f67b5f Merge remote-tracking branch 'origin/2.2' into 2.2 2023-02-27 22:59:08 +10:00
grossmj 8ef59c7832 Fix c7200_i0_log.txt is created in the current directory. Fixes #2191 2023-02-27 22:58:52 +10:00
Jeremy Grossmann cbdab1f0d7 Merge pull request #2190 from GNS3/check_tpm
Check swtpm version and start it before qemu
2023-02-26 18:59:08 +08:00
grossmj 7968ee7ff2 Check swtpm version and start swtpm before qemu 2023-02-26 20:51:24 +10:00
Jeremy Grossmann be557abba9 Merge pull request #2185 from Xatrekak/master
Update remote-install.sh and add welcome.py
2023-02-19 13:02:54 +08:00
Jeremy Grossmann 3040e87a7d Merge pull request #2189 from GNS3/fix/2188
Fix broken websocket console with Python 3.11
2023-02-18 15:44:06 +08:00
grossmj 1f85abb036 Fix broken websocket console with Python 3.11 2023-02-18 15:32:57 +08:00
grossmj d867e1f1c1 Fix tests 2023-02-17 21:25:19 +08:00
grossmj 1490e458b6 Upgrade fastapi to v0.92.0. Fixes #2186 2023-02-17 18:52:18 +08:00
grossmj 30c85703c8 Attempt to fix "cannot reopen console". Ref #2182 2023-02-13 19:32:44 +08:00
Xatrekak 4bdd405bc5 Merge branch 'final_stacked_merge'
This updates the script to assume that welcome.py has been merged into the GNS3 master repo
2023-02-12 18:46:38 -05:00
Xatrekak 229168367b Merge branch 'remote_install_changes'
Changes to remote-install to make it compatible with the latest versions of ubuntu server. Also adds an option to install the welcome dialog from gns3vm
2023-02-12 18:44:12 -05:00
Xatrekak e257fb425e This commit is stacked and assumes welcome.py has already been merged into the GNS3 master repo 2023-02-12 18:30:01 -05:00
Xatrekak fac224ac48 Updated to latest welcome.py commit. Raw cache still bugged 2023-02-12 17:26:53 -05:00
Xatrekak 62c2ca9be1 Added Web UI to Dialog 2023-02-12 17:20:25 -05:00
Xatrekak f98a60fc74 added an OS update to end when using welcome option 2023-02-12 14:42:53 -05:00
Xatrekak 42a5f1956e Changed mechanism used to set gns3 user password that works on all shells. 2023-02-12 14:21:01 -05:00
Xatrekak 13df828ca7 switched to a direct link to the latest commit instead of the branch alias to bypass github raw caching issues. 2023-02-12 13:12:20 -05:00
Dustin 19a8d1caed Update welcome.py 2023-02-12 12:59:06 -05:00
Xatrekak 290df5290a fixed transcription 2023-02-12 02:48:17 -05:00
Xatrekak fbe10360c2 Finished gns3 user setup 2023-02-12 02:44:15 -05:00
Xatrekak ac042b02c4 changes self.d to self.display so it would be more intuitive. 2023-02-12 02:30:28 -05:00
Xatrekak e44999f588 Refactored welcome.py to use a class so its functions would be callable by remote-install.sh. This ensure the setup uses the same IP address that will be displayed by Dialog. 2023-02-12 02:07:18 -05:00
Xatrekak 952b4e7249 fixed some shell bugs 2023-02-11 23:24:23 -05:00
Xatrekak 3b0336bd7e fixed typo 2023-02-11 22:23:45 -05:00
Xatrekak 7689b7841f switched to modifed welcome by and full path to it 2023-02-11 21:00:37 -05:00
Xatrekak bf5970b904 Update install and welcome to support running it 2023-02-11 19:57:54 -05:00
Xatrekak 2eca92e34d The legacy get_ip function no longer worked on new versions of ubuntu LTS. 2023-02-11 18:05:03 -05:00
Xatrekak 70d3f991ed Add welcome.py script from GNS3vm 2023-02-11 17:57:12 -05:00
Jeremy Grossmann 77b6ef1a1b Merge pull request #2179 from GNS3/vmware-virtualbox-deprecated
Mark VMware and VirtualBox support as deprecated
2023-02-06 06:26:28 +05:45
grossmj aaa6ca9445 Mark VMware and VirtualBox support as deprecated 2023-02-05 10:09:55 +08:00
Jeremy Grossmann 2b6bec1b93 Merge pull request #2178 from GNS3/fix/2177
Fix Qemu binary not set when adding appliance from template
2023-02-04 10:12:30 +05:45
grossmj 0f49911432 Fix Qemu binary not set when adding appliance from template 2023-02-04 12:18:52 +08:00
grossmj 9c158848bd Make port name for custom adapters optional. Fixes https://github.com/GNS3/gns3-web-ui/issues/1430 2023-02-01 16:19:39 +08:00
grossmj 3a6ff9b44f Add long description content type in setup.py 2023-02-01 09:56:02 +08:00
grossmj 83cb8693e6 Automatically add new issues to GNS3 project 2023-01-31 09:31:52 +08:00
grossmj e5ecdd270d Development 2.2.38.dev1 2023-01-25 18:36:39 +08:00
grossmj 260ac44e87 Release v2.2.37 2023-01-25 15:06:12 +08:00
grossmj 1fa4632b55 Merge branch 'master' into 2.2 2023-01-25 14:44:54 +08:00
grossmj a0cf711634 Bump version to 2.2.37.dev3 2023-01-25 14:13:07 +08:00
grossmj b83645c531 Add web-ui v2.2.37 2023-01-24 15:06:21 +08:00
grossmj a7daae1c6a Sync appliances 2023-01-24 14:57:58 +08:00
grossmj a7d19fd89a Fix StreamWriter doesn't have the wait_closed() method in Python3.6. Fixes #2170 2023-01-20 13:14:57 +08:00
grossmj 3c2ae5363c Install built-in appliances when no previous version has been detected. Fixes #2168 2023-01-17 13:39:01 +08:00
grossmj 24d1aeee32 Bump version to 2.2.37.dev2 2023-01-17 13:30:09 +08:00
grossmj 8d56b7b18c Fix sync_appliances.sh 2023-01-17 13:11:56 +08:00
grossmj 90d7478679 Sync appliances 2023-01-17 13:11:18 +08:00
grossmj fb4c04ac41 Update documentation to install gns3-server. Fixes #2124 2023-01-17 09:45:14 +08:00
Jeremy Grossmann dc1b98a1d0 Merge pull request #2166 from GNS3/fix/2165
Find Dynamips version before hypervisor is started
2023-01-17 07:15:33 +05:45
grossmj c57b0cbb53 Find Dynamips version before hypervisor launch and do not require Dynamips v0.2.23 2023-01-16 18:04:46 +08:00
grossmj ab1f9a4385 Handle Alembic CommandError exceptions 2023-01-13 12:52:31 +08:00
Jeremy Grossmann ce3bf9930c Merge pull request #2160 from GNS3/db-migrations
Support for database schema migrations
2023-01-11 08:21:44 +05:45
grossmj a033080418 Support for database schema migrations using alembic 2023-01-11 10:15:04 +08:00
grossmj af9b883c08 Fix and adjustments after merge 2023-01-10 12:09:36 +08:00
grossmj f09594ae4c Merge branch '2.2' into 3.0
# Conflicts:
#	README.md
#	README.rst
#	tests/handlers/api/compute/test_nat.py
2023-01-10 11:52:58 +08:00
grossmj 5a3b502024 Fix NIO update UDP test 2023-01-10 11:39:18 +08:00
grossmj 997e0ad6ee Fix more tests 2023-01-10 11:22:12 +08:00
grossmj eb3fc1bb3a Fix more tests 2023-01-10 11:09:27 +08:00
grossmj e9c95ff299 Fix tests 2023-01-10 10:07:26 +08:00
grossmj 78c301653f Convert README to Markdown 2023-01-10 08:23:06 +08:00
grossmj 2a392ef991 Merge branch '2.2' into 3.0 2023-01-06 20:09:41 +08:00
grossmj 535f89e29e Give udhcpc executable right. Fixes #2159 2023-01-06 20:09:17 +08:00
grossmj 72e3d8f0c1 Fix tests after merge 2023-01-05 12:57:00 +08:00
grossmj 27d9063e56 Merge 2.2 2023-01-05 12:38:00 +08:00
grossmj f8f5d7ec07 Development on 2.2.37.dev1 2023-01-05 09:13:30 +08:00
grossmj d0141c351b Merge branch '2.2' 2023-01-05 09:12:11 +08:00
grossmj 8e2992fbc7 Release v2.2.36 2023-01-04 19:46:30 +08:00
grossmj 8986f10506 Install web-ui v2.2.36 2023-01-04 19:05:24 +08:00
grossmj 10f3adcb60 Sync appliance files 2023-01-04 18:28:14 +08:00
grossmj 5459543eb5 Fix issue when detecting Dynamips version (version is not set until after Dynamips has started) 2023-01-04 18:21:17 +08:00
grossmj e15c36f05c Merge remote-tracking branch 'origin/2.2' into 2.2 2023-01-04 15:12:26 +08:00
grossmj da7c7d16e4 Fix starting Dynamips on Windows 2023-01-04 15:12:09 +08:00
Jeremy Grossmann 8d69f7f792 Merge pull request #2157 from GNS3/qemu-tpm-support
Trusted Platform Module (TPM) support for Qemu VMs
2023-01-04 10:55:52 +05:45
grossmj 297ada529c Prevent TPM to run on Windows 2023-01-04 12:57:48 +08:00
grossmj ae200d9add Add Trusted Platform Module (TPM) support for Qemu VMs 2023-01-04 12:13:19 +08:00
Jeremy Grossmann eb1b70456f Merge pull request #2155 from GNS3/fix/2143
Binding address for console
2023-01-04 07:00:33 +05:45
grossmj 9132002b80 Fix typos 2023-01-04 09:08:40 +08:00
grossmj 771a9a5ddb Require Dynamips 0.2.23 and bind Dynamips hypervisor on 127.0.0.1 2023-01-02 15:26:59 +08:00
Jeremy Grossmann 04ba3b6549 Merge pull request #2154 from GNS3/fix/2069
Use a stock BusyBox for the Docker integration
2023-01-01 16:18:37 +05:45
grossmj 8f9800f444 Update README.rst about static busybox 2023-01-01 18:24:42 +08:00
Jeremy Grossmann 90c971ed74 Merge pull request #2152 from GNS3/fix/2151
Install built-in appliance files at the first start of a newer version of the server
2023-01-01 15:40:48 +05:45
grossmj d2ad9dc5e2 Delete the built-in appliance directory before installing updated files 2023-01-01 17:49:00 +08:00
grossmj e5c8ae4bde Use a stock BusyBox for the Docker integration 2023-01-01 17:04:48 +08:00
grossmj 5bccf4841d Overwrite built-in appliance files when starting a more recent version of the server 2023-01-01 15:57:41 +08:00
grossmj b3a6b9173b Fix reset console. Fixes #1619 2022-12-31 09:43:17 +08:00
grossmj 2d6b260188 Revert "Install importlib-resources==1.3 with Python < 3.9"
This reverts commit 343022c63b.
2022-12-30 21:13:59 +08:00
grossmj c814245426 Revert "Change importlib-resources dependency to v1.4.0"
This reverts commit d787f38c21.
2022-12-30 21:13:49 +08:00
grossmj d787f38c21 Change importlib-resources dependency to v1.4.0 2022-12-30 21:09:54 +08:00
grossmj 343022c63b Install importlib-resources==1.3 with Python < 3.9 2022-12-30 21:05:18 +08:00
grossmj 1148dbc48e Fix issue when calling reset_console with running VPCS and Qemu nodes. Ref #1619 2022-12-30 20:54:37 +08:00
grossmj 85679aaa94 Try importlib-resources for Python 3.9 2022-12-30 11:44:29 +08:00
grossmj 5bcc247881 Make gns3server.appliances a package 2022-12-30 11:37:34 +08:00
grossmj b8d595928b Try to fix tests 2022-12-30 10:35:29 +08:00
grossmj 3804249d89 Fix tests 2022-12-30 10:01:43 +08:00
grossmj c56a8ef8f7 Only use importlib_resources for Python < 3.9. Fixes #2147 2022-12-30 09:15:40 +08:00
grossmj 076e85ddb3 Update sentry-sdk dependency 2022-12-28 15:13:26 +08:00
grossmj 2550fb3495 Support when the user field defined in Docker container is an ID. Fixes #2134 2022-12-28 11:05:22 +08:00
grossmj f837912ebc Development on 3.0.0.dev7 2022-12-28 08:29:26 +08:00
grossmj 830cc108d0 Release v3.0.0a3 2022-12-27 15:22:16 +08:00
grossmj 36ffe2bb59 Sync appliances 2022-12-27 13:40:07 +08:00
grossmj f8739eb5e1 Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	gns3server/crash_report.py
#	gns3server/version.py
#	requirements.txt
2022-12-27 13:28:11 +08:00
grossmj 5bc030688e Sync web-ui v3.0.0a3 2022-12-27 13:17:12 +08:00
grossmj 9f75a49e0a Fix syntax error in .whitesource 2022-12-27 12:27:26 +08:00
grossmj 7f440f43d8 Add more base branches for Mend to scan 2022-12-27 12:25:49 +08:00
grossmj 3e29ae4276 Add config option to change the server name. Ref #2149 2022-12-27 10:05:13 +08:00
Jeremy Grossmann 91b50eb5f2 Merge pull request #2146 from GNS3/fix/2126
Improve image discovery process
2022-12-26 10:23:57 +05:45
grossmj c6e31d98db Option to disable image discovery and do not scan parent directory 2022-12-26 12:32:40 +08:00
grossmj 9a7b3bed25 Allow raw images by default. Fixes https://github.com/GNS3/gns3-server/issues/2097 2022-12-26 11:28:51 +08:00
grossmj 8ad7b3f613 Fix bug when creating Dynamips router with chassis setting 2022-12-24 18:03:00 +08:00
Jeremy Grossmann 00691390eb Merge pull request #2145 from GNS3/fix/2144
Stricter checks to create/update an Ethernet switch and add tests
2022-12-24 06:16:18 +05:45
grossmj 17e0b2e259 Stricter checks to create/update an Ethernet switch and add tests 2022-12-24 08:20:51 +08:00
grossmj 5666b43ee0 Fix schema for removing WICs from Cisco routers. Fixes #3392 2022-12-22 20:02:28 +08:00
grossmj 84f256dd88 Downgrade to flake8 v5.0.4 2022-12-22 09:46:11 +08:00
grossmj 1bbecf1ceb Update dependencies 2022-12-22 09:42:14 +08:00
grossmj 72a4d0df4e Update GH actions checkout and setup-python 2022-12-22 09:35:45 +08:00
grossmj 93449c942f Fix tests 2022-12-22 09:24:17 +08:00
grossmj 649173b293 Merge remote-tracking branch 'origin/master' 2022-12-21 17:14:00 +08:00
grossmj 1c183e660f Downgrade Ubuntu to 20.04 to fix missing Python 3.6 2022-12-21 17:12:09 +08:00
Jeremy Grossmann 634e6a3549 Update SECURITY.md 2022-12-20 21:28:46 +08:00
grossmj a91ed34f43 Downgrade Ubuntu to 20.04 to fix missing Python 3.6 2022-12-18 14:24:50 +08:00
grossmj 5209009df9 Upgrade dependencies 2022-12-18 14:14:56 +08:00
grossmj 5ba526e175 Development on v2.2.36.dev2 2022-11-11 00:36:47 +08:00
grossmj d17c243b13 Release v2.2.35.1 2022-11-10 22:21:13 +08:00
grossmj 9e4ae6bc24 Sync appliance files 2022-11-10 22:10:21 +08:00
grossmj 4b410cfa42 Merge branch 'master' into 2.2 2022-11-10 22:06:09 +08:00
grossmj b9e415b6fe Push missing file for Web-Ui v2.2.35 2022-11-10 13:09:10 +08:00
grossmj d2d327cc76 Re-release Web-Ui v2.2.35 2022-11-10 12:38:33 +08:00
grossmj 7643185fa2 Add missing importlib_resources 2022-11-09 23:14:38 +08:00
grossmj 263febecbc Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	CHANGELOG
#	appveyor.yml
#	dev-requirements.txt
#	gns3server/compute/base_node.py
#	gns3server/controller/__init__.py
#	gns3server/controller/appliance_manager.py
#	gns3server/crash_report.py
#	gns3server/static/web-ui/index.html
#	gns3server/utils/get_resource.py
#	gns3server/version.py
#	gns3server/web/route.py
#	requirements.txt
#	tests/handlers/api/compute/test_qemu.py
#	win-requirements.txt
2022-11-09 20:30:28 +08:00
grossmj 0a046e43d7 Development on 2.2.36.dev1 2022-11-09 20:02:20 +08:00
grossmj a7036d14d5 Merge branch '2.2' 2022-11-09 20:00:48 +08:00
grossmj 1aca7dbe04 Release v2.2.35 2022-11-08 23:40:25 +08:00
grossmj 338128ca3e Upgrade pywin32 to v305 2022-11-08 23:39:10 +08:00
grossmj e165cc48e3 Use Visual Studio 2022 in appveyor.yml 2022-11-08 23:09:23 +08:00
grossmj c80a55b18c Install appliances and configs without importlib_resources for Windows only 2022-11-08 23:07:45 +08:00
grossmj 284a4b62fb Fix copying appliances and configs when app is frozen 2022-11-08 22:50:59 +08:00
grossmj d33fefa183 Merge branch 'master' into 2.2 2022-11-08 19:29:39 +08:00
grossmj dfb48c884b Release web-ui v2.2.35 2022-11-08 19:29:21 +08:00
grossmj 18ba60d1a3 Downgrade psutil to v5.9.2 2022-11-08 19:18:07 +08:00
grossmj 521132726e Upgrade psutil to v5.9.4 2022-11-08 18:49:31 +08:00
grossmj f80aca7633 Sync appliance files 2022-11-08 18:40:27 +08:00
grossmj 84914ecfa4 Add debug messages to fix VMnet interface list refresh. Ref https://github.com/GNS3/gns3-gui/issues/3381 2022-11-08 12:54:47 +08:00
grossmj 5696d1ccb7 Fix issues with VMnet interface on macOS >= 11.0. Ref #3381 2022-11-07 23:59:33 +08:00
grossmj 18b0863ba8 Merge remote-tracking branch 'origin/2.2' into 2.2
# Conflicts:
#	requirements.txt
2022-11-07 21:50:59 +08:00
grossmj ece47dc279 Upgrade dependencies 2022-11-07 21:48:45 +08:00
Jeremy Grossmann 6e1d49d8ca Merge pull request #2133 from GNS3/use-importlib-resources
Migrate to importlib_resources
2022-11-07 21:24:35 +08:00
grossmj 2e550d839e Fix tests 2022-11-07 20:33:02 +08:00
grossmj a4b24eaceb Use importlib_resources instead of pkg_resources and install built-in appliances in config dir. 2022-11-07 20:12:03 +08:00
grossmj f04702d607 Fix console vnc don't use configured ports in some case. Fixes #2111 2022-11-06 19:36:31 +08:00
grossmj 6f11df6189 Add missing VMware settings in gns3_server.conf 2022-11-06 19:30:24 +08:00
grossmj 9cf2e4f5a6 Make version PEP 440 compliant 2022-11-06 17:51:31 +08:00
Jeremy Grossmann 9316876f97 Merge pull request #2123 from blueneekone/patch-1
Update gns3.service.systemd
2022-11-04 23:01:57 +08:00
grossmj f3b8f43689 Fix creating asyncio task in Python 3.6 2022-10-30 22:21:28 +08:00
grossmj 2d74d1ad94 Fix tests for Python 3.11 2022-10-30 22:07:44 +08:00
grossmj ec50cc7c0d Support for Python 3.11 2022-10-30 19:04:54 +08:00
grossmj f8ee3b3d50 Upgrade pywin32 to v304 2022-10-19 18:31:17 +08:00
grossmj bbf9c04d20 Upgrade pywin32 to v304 2022-10-19 18:30:28 +08:00
Jeremy Grossmann 67e42f9353 Merge pull request #2128 from GNS3/fix/3393
Update requirements.txt
2022-10-18 22:31:56 +08:00
Jeremy Grossmann 31a490211b Merge branch '2.2' into fix/3393 2022-10-18 22:31:04 +08:00
grossmj c7df8331ed Upgrade to Visual Studio 2022 in appveyor.yml 2022-10-18 21:47:10 +08:00
grossmj de1654a50f Upgrade pip and setuptools in appveyor.yml 2022-10-18 21:40:08 +08:00
grossmj a6959de1f8 Upgrade pytest. Fixes #2130 2022-10-18 21:14:53 +08:00
grossmj 8cfedce468 Use jsonschema v3.2.0 for Python 3.6 2022-10-12 22:13:34 +08:00
grossmj 77dd772314 Allow for more dependency versions at patch level 2022-10-12 22:07:37 +08:00
grossmj 9ff302592c Upgrade to aiohttp 3.8.3 2022-10-12 21:40:23 +08:00
grossmj 6b3d4feab8 Replace deprecated distro.linux_distribution() call 2022-10-11 23:28:11 +08:00
grossmj 78b2b93540 Update dev-requirements.txt 2022-10-11 23:23:15 +08:00
grossmj 0303e21059 Update requirements.txt 2022-10-11 23:01:24 +08:00
grossmj e20d1adb0e Downgrade aiohttp to v3.8.1 2022-10-10 16:30:28 +08:00
grossmj e5bee8ff52 Downgrade Jinja2 to support Python 3.6 2022-10-10 15:52:36 +08:00
grossmj 58471ea7f4 Downgrade aiofiles to support Python 3.6 2022-10-10 15:50:35 +08:00
grossmj 9fb0ba5a71 Upgrade dependencies 2022-10-10 14:29:04 +08:00
Evan Waechtler 3d738e83f5 Update gns3.service.systemd
In reference to bug #1918, the gns3.service.systemd file references ExecPath /usr/bin/gns3server which needs to be changed to /usr/local/bin/gns3server for the daemon/service to run without failure.

Please see the change I made to the service above.
2022-10-02 23:25:58 -06:00
grossmj 19de2732f2 Upgrade to FastAPI 0.85.0 and check embedded web-ui index.html can be found. 2022-09-29 15:11:15 +02:00
grossmj 40c22e389e Merge branch 'master' into 2.2 2022-09-29 14:56:35 +02:00
Jeremy Grossmann 0419c081fe Merge pull request #2083 from a60814billy/fix/binding-on-wrong-interface-in-windows
fix: binding to wrong interface in windows
2022-09-28 17:36:31 +02:00
grossmj dced70a565 Merge branch 'master' into 2.2 2022-09-27 11:55:53 +02:00
grossmj 9a7222b83e Upgrade FastAPI to v0.84.0 2022-09-14 21:09:29 +02:00
grossmj b0e646b97d Fix some issues with HTTP notification streams 2022-09-13 22:10:01 +02:00
grossmj e8973b9c44 Development on 3.0.0dev5 2022-09-07 01:16:14 +02:00
grossmj 317e2b164c Release v3.0.0a2 2022-09-07 01:05:41 +02:00
grossmj 8976a751fa Add web-ui v3.0.0a2 2022-09-07 00:57:08 +02:00
grossmj bcac7874c1 Upgrade FastAPI to v0.82.0 2022-09-04 22:09:48 +02:00
Jeremy Grossmann 0f4c98c7e4 Merge pull request #2110 from GNS3/locked-project
API endpoint to get the locked status of a project
2022-09-03 23:13:06 +02:00
grossmj 2976e220dc Return a boolean directly from API endpoint for project locked status 2022-09-03 23:08:13 +02:00
grossmj 27debfff8d API endpoint to get the locked status of a project 2022-09-03 22:58:44 +02:00
Jeremy Grossmann 3014bd0216 Merge pull request #2108 from GNS3/project-lock-unlock
Global project lock and unlock
2022-08-30 22:54:47 +02:00
grossmj ca3bf592d6 Global project lock and unlock 2022-08-30 22:49:47 +02:00
grossmj 43e60c31c7 Remove empty files after merge 2022-08-30 12:21:05 +02:00
grossmj 426c16e296 Merge branch '2.2' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	CHANGELOG
#	appveyor.yml
#	dev-requirements.txt
#	gns3server/controller/compute.py
#	gns3server/crash_report.py
#	gns3server/version.py
#	gns3server/web/route.py
#	pytest.ini
#	requirements.txt
#	tests/compute/dynamips/test_dynamips_router.py
#	tests/compute/test_base_node.py
#	tests/compute/vmware/test_vmware_manager.py
#	tests/compute/vmware/test_vmware_vm.py
#	tests/controller/gns3vm/test_virtualbox_gns3_vm.py
2022-08-30 11:53:12 +02:00
grossmj 0d0a06799d Development on 2.2.35dev1 2022-08-29 11:14:44 +02:00
grossmj eeae27ae0d Merge branch '2.2' 2022-08-29 11:11:29 +02:00
grossmj 8d4df08150 Release v2.2.34 2022-08-28 23:28:12 +02:00
grossmj fd1d8d9d86 Update appliance files 2022-08-28 22:51:26 +02:00
grossmj 4ddce880ea Merge remote-tracking branch 'origin/2.2' into 2.2 2022-08-28 22:32:49 +02:00
grossmj e0209a0491 Downgrade Jinja2 to v3.0.3 2022-08-28 22:32:42 +02:00
grossmj 829eb42c7f Revert "Downgrade Jinja2 to v3.0.3"
This reverts commit ad3d73a7f1.
2022-08-28 22:31:28 +02:00
grossmj ad3d73a7f1 Downgrade Jinja2 to v3.0.3 2022-08-28 22:30:47 +02:00
Jeremy Grossmann e96d8ae497 Merge pull request #2089 from SpikefishSolutions/spikefishjohn-patch-3
Update compute.py
2022-08-28 22:09:44 +02:00
grossmj d996a87246 Require name for custom adapters. Fixes #2098 2022-08-28 17:33:33 +02:00
grossmj b58a54ae7c Allow empty adapter slots for Dynamips templates. Ref https://github.com/GNS3/gns3-gui/issues/3373 2022-08-28 17:05:28 +02:00
grossmj 129f0a631c Use original $PATH in init.sh for Docker containers. Ref #2069 2022-08-28 12:06:56 +02:00
grossmj ad1f1cdb96 Merge remote-tracking branch 'origin/2.2' into 2.2 2022-08-28 00:03:03 +02:00
grossmj ab6c6535c6 Upgrade Sentry dependency 2022-08-28 00:02:54 +02:00
Jeremy Grossmann 3444615253 Merge pull request #2101 from GNS3/upgrade-dev-dependencies
Upgrade dev dependencies
2022-08-28 00:01:53 +02:00
grossmj 028f977823 Revert "Don't install nmap"
This reverts commit b6cf3aabca.
2022-08-28 00:01:26 +02:00
grossmj b6cf3aabca Don't install nmap 2022-08-27 23:55:42 +02:00
grossmj 6546407e5d Upgrade to Python 3.7 for Windows tests 2022-08-27 23:52:59 +02:00
grossmj 46b022f726 Restore missing loop 2022-08-27 23:45:30 +02:00
grossmj 8f296e54f4 Add back loop 2022-08-27 23:41:52 +02:00
grossmj fc7d5be736 Use pytest-asyncio auto mode 2022-08-27 21:10:17 +02:00
grossmj 600c18f04b Remove pytest.ini from tests dir 2022-08-27 21:00:31 +02:00
grossmj 852de03d43 Install latest dev dependencies for Python >= 3.7 2022-08-27 20:40:35 +02:00
grossmj 470e6cb901 Add pytest-asyncio 0.19.0 2022-08-27 19:41:46 +02:00
grossmj e8273fb19e Downgrade to pytest-aiohttp v0.3.0 2022-08-27 19:39:02 +02:00
grossmj 4b3d6572d4 Downgrade to pytest v7.0.1 (last version to support 2022-08-27 19:35:36 +02:00
grossmj fad3df453d Run tests on 2.2 branch 2022-08-27 19:31:24 +02:00
grossmj d1c8f33fc5 Upgrade dev dependencies and fix issues after upgrading to pytest-aiohttp v1.0.4 2022-08-27 19:16:02 +02:00
grossmj 94c617ef1c Upgrade dependencies 2022-08-26 21:41:49 +02:00
Jeremy Grossmann c4b10ac4da Merge pull request #2099 from GNS3/strict-pytest-asyncio
Support for pytest-asyncio strict mode
2022-08-24 21:11:55 +02:00
grossmj 86c44cd6e7 Upgrade dev dependencies and fix tests to support pytest-asyncio strict mode 2022-08-24 21:03:16 +02:00
grossmj 2e91eac1eb Upgrade dependencies 2022-08-23 22:12:01 +02:00
Jeremy Grossmann 3634cc8307 Merge pull request #2094 from mm1ke/master
gns3.service.openrc: make openrc script posix compliant
2022-08-08 19:29:30 +02:00
Michael Mair-Keimberger 3b108563a0 gns3.service.openrc: make openrc script posix compliant 2022-08-08 19:23:29 +02:00
grossmj 6fa3f85b83 Custom adapters should not be in node (compute) properties returned to clients. Fixes https://github.com/GNS3/gns3-gui/issues/3366 2022-08-06 12:37:05 +02:00
grossmj 3948637a46 Fix typo in requirements.txt 2022-08-06 12:21:27 +02:00
grossmj 93b71f806e Development on v3.0.0dev4 2022-08-04 12:29:49 +02:00
grossmj 3ddbd0de64 Release v3.0.0a1 2022-08-04 11:38:17 +02:00
grossmj 541e9702bf Bundle gns3-web-ui v3.0.0a1 2022-08-04 11:12:42 +02:00
grossmj f4b44e072d Merge remote-tracking branch 'origin/3.0' into 3.0 2022-08-04 11:08:13 +02:00
grossmj 64c6000470 Update appliance files 2022-08-04 11:08:00 +02:00
grossmj 33087a6c21 Do not use build-optimizer when bundling web-ui. Ref https://github.com/GNS3/gns3-web-ui/issues/1366 2022-08-04 11:04:33 +02:00
grossmj 8670377e3b Do not use build-optimizer when bundling web-ui. Ref https://github.com/GNS3/gns3-web-ui/issues/1366 2022-07-31 12:39:42 +02:00
grossmj 31ae70894e Fix enum use in schemas 2022-07-26 23:17:39 +02:00
Jeremy Grossmann bd9af3fe90 Merge pull request #2091 from GNS3/use-themed-symbols
Let the controller allocate symbols
2022-07-25 20:45:04 +02:00
grossmj 6d0c375323 Use default symbol theme if none is provided when loading appliances 2022-07-25 20:39:03 +02:00
grossmj 72eb13d941 Allow default symbol theme to be configured 2022-07-25 20:22:12 +02:00
grossmj bfbac2e93a Use generic symbol names 2022-07-25 12:33:40 +02:00
grossmj b7f4a4cbda Fix VMware VM addition 2022-07-25 11:10:01 +02:00
grossmj e693edc7c1 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2022-07-23 12:55:03 +02:00
grossmj 5824f0797a Update web-ui bundled script to use master-3.0 2022-07-23 12:18:50 +02:00
grossmj 725942157e Optionally allow Qemu raw images 2022-07-22 12:39:52 +02:00
Jeremy Grossmann d08a052f94 Merge pull request #2086 from GNS3/iou-user-loader-libraries
Support user defined loader/libraries to run IOU
2022-07-20 17:03:18 +02:00
Jeremy Grossmann da626d334f Merge branch '3.0' into iou-user-loader-libraries 2022-07-20 16:44:48 +02:00
grossmj 7f5ad8e225 Ignore image detection for IOU user libraries in image directory 2022-07-20 16:39:24 +02:00
grossmj 037c659f9b Don't show optional token param in API docs 2022-07-20 00:29:42 +02:00
John Fleming 7277d526e3 Update compute.py
Remove check for open project. Without this check a remote can be rebooted and will be usable once the main server polls it again. Without this the main server would need to open a project that already uses the remote server or restart the main server's gns3 process.
2022-07-18 18:43:57 -04:00
grossmj d022b211dc Fix check for 32-bit in ELF header 2022-07-17 23:55:34 +02:00
Jeremy Grossmann 5d4645b2c1 Merge pull request #2087 from GNS3/enhancement/2076
Checks for valid hostname on server side for Dynamips, IOU, Qemu and Docker nodes
2022-07-17 11:59:09 +02:00
grossmj 80f5ca0c3f Checks for valid hostname on server side for Dynamips, IOU, Qemu and Docker nodes 2022-07-17 11:51:29 +02:00
grossmj 86368a1177 Sync appliance files 2022-07-17 00:04:55 +02:00
grossmj e9f4fad0bd Merge remote-tracking branch 'origin/3.0' into 3.0 2022-07-16 12:11:41 +02:00
grossmj b2ba561c0d Only check files (not directories) when looking for new images on file system. 2022-07-16 12:11:26 +02:00
Jeremy Grossmann 83ea96c08d Merge pull request #2085 from GNS3/remove-explicit-204-responses
Remove explicit Response for endpoints returning HTTP 204 status code
2022-07-16 12:07:36 +02:00
grossmj f5e1956dfa Support user defined loader/libraries to run IOU 2022-07-16 11:38:51 +02:00
grossmj 9462bca124 Remove explicit Response for VPCS endpoints returning HTTP 204 status code 2022-07-16 00:14:31 +02:00
grossmj fc6aeb715a Remove explicit Response for endpoints returning HTTP 204 status code 2022-07-16 00:12:18 +02:00
grossmj 5b478fc331 Upgrade dependencies 2022-07-15 11:32:18 +02:00
grossmj 4a1da00601 Make 'vendor_url' and 'maintainer_email' optional for template validation. 2022-07-12 11:55:18 +02:00
Jeremy Grossmann 56734b171b Merge pull request #2084 from GNS3/token-as-a-param
Allow JWT token to be passed as a URL param
2022-07-11 14:27:37 +02:00
grossmj f4b67f2e59 Allow auth token to be passed as a URL param 2022-07-11 14:19:47 +02:00
BoHong Li 790bf4521d fix: use exact match to find interface in windows to avoid get wrong interface 2022-07-06 14:22:11 +08:00
Jeremy Grossmann dd6ca38035 Merge pull request #2082 from GNS3/import-project
Project importation
2022-07-05 23:08:15 +02:00
grossmj 149d086fd8 Reactivate project importation 2022-07-05 23:01:44 +02:00
grossmj 9e5ca50302 Bump version to v2.2.34dev2 2022-06-23 10:55:19 +02:00
grossmj c5f441e1d3 Remove wrong reset_console() method 2022-06-21 17:22:47 +02:00
grossmj 410f062721 Fix config option to disable built-in templates. 2022-06-21 17:17:44 +02:00
grossmj d8b928f1c1 Fix tests. 2022-06-21 16:52:25 +02:00
grossmj d303d13045 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/compute/iou/iou_vm.py
#	gns3server/controller/template_manager.py
#	gns3server/handlers/api/compute/docker_handler.py
#	gns3server/handlers/api/compute/dynamips_vm_handler.py
#	gns3server/handlers/api/compute/iou_handler.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/handlers/api/compute/virtualbox_handler.py
#	gns3server/handlers/api/compute/vmware_handler.py
#	gns3server/handlers/api/compute/vpcs_handler.py
#	gns3server/handlers/api/controller/node_handler.py
#	gns3server/version.py
#	requirements.txt
#	tests/controller/test_controller.py
#	tests/controller/test_project.py
#	tests/handlers/api/controller/test_node.py
2022-06-21 16:45:25 +02:00
grossmj 35ec8bed6e Back to development on v2.2.34dev2 2022-06-21 11:52:58 +02:00
grossmj 0433065b8b Revert "Development on v2.2.34dev2"
This reverts commit 7c5a5a9001.
2022-06-21 11:51:01 +02:00
grossmj 7c5a5a9001 Development on v2.2.34dev2 2022-06-21 11:38:09 +02:00
grossmj 1b32ef7854 Release v2.2.33.1 2022-06-21 10:48:02 +02:00
grossmj f5b1920f8c Add missing web-ui file 2022-06-21 10:24:19 +02:00
grossmj 4341db0ff3 Development on v2.2.34dev1 2022-06-20 21:47:42 +02:00
grossmj 162a8baf7b Release v2.2.33 2022-06-20 20:53:21 +02:00
grossmj 4280655b3a Merge branch 'master' into 2.2 2022-06-20 20:49:51 +02:00
grossmj d47e546fce Release web-ui v2.2.33 2022-06-20 20:37:51 +02:00
grossmj 2b4d623f13 Upgrade sentry-sdk and psutil 2022-06-20 20:05:34 +02:00
grossmj 3c901a84bf Sync appliance files. 2022-06-20 20:02:04 +02:00
grossmj ec3c36d6da Fix Docker tests 2022-06-19 21:18:54 +02:00
grossmj 908911e764 Remove parameter "Name" not useful to create a Docker container 2022-06-18 19:41:20 +02:00
grossmj bdd703a0dc Support to reset all console connections. Ref https://github.com/GNS3/gns3-server/issues/1619 2022-06-15 15:30:44 +02:00
Jeremy Grossmann 4acc457674 Merge pull request #2073 from GNS3/disable-builtin-templates
Config setting to disable builtin templates
2022-06-15 15:08:21 +02:00
grossmj 67bf14776f Config option to disable built-in templates 2022-06-15 14:48:52 +02:00
grossmj 2eb64200a4 Add spaces before hostname for Docker network config. Ref #2039 2022-06-12 19:32:34 +08:00
grossmj 988ca7574c Add hostname entry to sample network config for Docker nodes. Fixes #2039 2022-06-08 01:07:31 +08:00
grossmj 527d4bb3ea Run Xtigervnc with MIT-SHM extension disabled for Docker VNC console support. Fixes #2071 2022-06-08 00:05:24 +08:00
grossmj 7d49b80e6b Add controller endpoints to get VirtualBox VMs, VMware VMs and Docker images 2022-06-07 00:38:59 +08:00
Jeremy Grossmann 3b7dfe5929 Merge pull request #2055 from GNS3/remove-qemu-binaries-requirement
Remove Qemu binary requirement
2022-06-06 14:51:07 +08:00
grossmj 30f7c0ce74 Fix issues when discovering images 2022-06-03 15:35:33 +07:00
Jeremy Grossmann 466aaf5c13 Merge pull request #2070 from GNS3/project-export-zstd
zstandard compression support for project export
2022-06-03 11:31:25 +07:00
grossmj c98a10dcfd Do not tweak zstd compression params 2022-06-03 11:26:26 +07:00
grossmj 162af5bb7a Checks for compression levels + tests 2022-06-01 20:26:59 +07:00
grossmj 015e17338c HTTP middleware create issues when streaming project archive 2022-06-01 15:31:59 +07:00
grossmj 940d22f2aa Add missing zstandard dependency 2022-05-31 18:12:32 +07:00
grossmj 8a964390f8 Add zstandard compression support for project export 2022-05-31 18:08:34 +07:00
grossmj 37c7bc4956 Add missing response() method in ComputeConflictError 2022-05-27 16:03:54 +07:00
grossmj 85cdd7d9a5 Fix reading response embedded in ComputeConflictError 2022-05-27 15:58:14 +07:00
grossmj 944a72254c Revert "Sync dev version of web-ui v3"
This reverts commit a9d58e337f.
2022-05-27 14:00:18 +07:00
grossmj a9d58e337f Sync dev version of web-ui v3 2022-05-26 19:37:23 +07:00
grossmj 2d4e9fdd64 Upgrade dependencies 2022-05-26 19:21:37 +07:00
Jeremy Grossmann 1e4075ec37 Merge pull request #2066 from wowpetr/add-openrc-init
Add OpenRC init script
2022-05-26 19:02:23 +07:00
Petr Losev 9d8ddea577 Added OpenRC init script 2022-05-16 07:06:29 +03:00
grossmj df50b46952 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/version.py
#	requirements.txt
2022-04-27 22:23:05 +07:00
grossmj bccfb64958 Development on 2.2.33dev1 2022-04-27 19:51:24 +07:00
grossmj 99813b3cfa Release v2.2.32 2022-04-27 18:47:20 +07:00
grossmj 1837850894 Docker: load custom interface files from /etc/network/interfaces (commented by default). Ref #2052 2022-04-27 18:37:09 +07:00
grossmj fe037a5f1c Merge branch 'master' into 2.2 2022-04-27 18:25:31 +07:00
grossmj b03ec6e3fe Release web Ui 2.2.32 with correct version displayed 2022-04-27 18:24:36 +07:00
grossmj 732c5deeff Revert "Release web UI 2.2.32"
This reverts commit db1443dd08.
2022-04-27 18:19:44 +07:00
grossmj db1443dd08 Release web UI 2.2.32 2022-04-27 18:11:26 +07:00
grossmj 54e638f3ea Update appliance files 2022-04-27 17:26:36 +07:00
grossmj 89c67790ae Make sure that the temporary image file is removed after uploading an image 2022-04-27 16:00:02 +07:00
grossmj cd096ac6e6 Backward compatibility for --log argument 2022-04-27 14:15:29 +07:00
grossmj f5c20b2549 Require Python >= 3.7 2022-04-26 19:11:37 +07:00
grossmj 890dbd9f77 Create /etc/network/interfaces.d in Docker container. Fixes #2052 2022-04-20 22:59:51 +07:00
grossmj 460fe5ed95 Prettify Docker '/etc/network/interfaces' file. Ref #2040 2022-04-20 19:29:56 +07:00
grossmj 653539d2b0 Use public DSNs for Sentry 2022-04-20 18:41:18 +07:00
grossmj 56b5c1d237 Fix VMware Fusion VM does not start on macOS >= 11. Fixes #2027 2022-04-20 18:26:45 +07:00
grossmj f21d5062fc Upgrade some packages 2022-04-20 17:38:54 +07:00
grossmj 2535e5508d Remove Qemu binary requirement 2022-04-19 18:21:39 +07:00
Jeremy Grossmann 2ee9232ac5 Merge pull request #2053 from GNS3/image-md5sum-management
New images detection and checksum handling
2022-04-18 17:22:08 +07:00
grossmj 8b5558ba94 Fix merge error 2022-04-18 17:18:30 +07:00
Jeremy Grossmann b94f01fe4e Merge branch '3.0' into image-md5sum-management 2022-04-18 17:15:21 +07:00
grossmj 3106c8a6a2 Do not cache to md5sum file in some situations 2022-04-18 17:13:52 +07:00
grossmj 34233e48d9 Upgrade FastAPI to version 0.75.2 2022-04-18 13:25:29 +07:00
grossmj 010d7aa49f Upgrade SQLAlchemy version and dispose of db engine 2022-04-17 17:32:44 +07:00
grossmj e6c8144210 Detect new images added to the default image directory.
* Images can be present before the server starts or while it is running
* Images are recorded in the database
2022-04-17 16:58:20 +07:00
Jeremy Grossmann 6af1f2afaa Merge pull request #2049 from GNS3/qemu-disk-images
New implementation to create/resize Qemu disk images
2022-04-14 17:15:55 +07:00
grossmj e50bed5bee Support delete Qemu disk image from API
Return the real disk image name in the 'hdx_disk_image_backed' property for Qemu VMs
2022-04-14 17:01:54 +07:00
grossmj a1c76ec4f2 Fix ComputeConflictError import 2022-04-07 16:34:48 +08:00
grossmj fda2a37b98 Handle creating Qemu disk images and resizing 2022-04-07 16:21:47 +08:00
grossmj 888c773dc0 Finish to clean up local setting usage. Ref #1460 2022-03-31 12:05:47 +08:00
Jeremy Grossmann 2cddb2c05a Merge pull request #2047 from GNS3/local-server-param-refactoring
"Local" command line parameter only for one purpose
2022-03-30 18:51:27 +08:00
grossmj 900d4f79ee "Local" command line parameter is only for stopping
a server that has been started by the desktop GUI
2022-03-30 18:38:34 +08:00
grossmj ce6d1e10d8 Include conf file in MANIFEST.in Ref #2044 2022-03-28 14:45:29 +10:30
grossmj a0fcb18395 Use Python 3.7 to publish API documentation 2022-03-28 11:27:53 +10:30
Jeremy Grossmann 611193b25a Merge pull request #2042 from kaivogelgesang/master
Fix typo
2022-03-23 17:43:48 +10:00
Kai Vogelgesang 73dff4b9c6 Fix typo 2022-03-23 08:38:14 +01:00
grossmj 8975f63e2f Fix AsyncSession handling after breaking changes in FastAPI 0.74.0
See https://github.com/tiangolo/fastapi/releases/tag/0.74.0 for details.
2022-03-20 16:25:48 +10:00
grossmj 9b39bfb845 Detect image type instead of requesting it from user 2022-03-20 16:20:17 +10:00
grossmj 2a5a4b5f77 Use README.md in setup.py 2022-03-16 11:22:28 +10:00
grossmj db739775d0 Drop Python 3.6 support and require Python >= 3.7 2022-03-14 15:13:26 +10:30
grossmj 3edfa53e9e Update README.md 2022-03-14 14:46:29 +10:30
Jeremy Grossmann 4b4f19c415 Create SECURITY.md 2022-03-14 14:27:32 +10:30
Jeremy Grossmann 70e36be4fd Create codeql-analysis.yml 2022-03-14 14:21:50 +10:30
grossmj e897ab6163 Uvicorn version 0.17.6 does not support Python 3.6 2022-03-13 15:46:38 +10:30
grossmj 0a10b41418 Convert README to markdown 2022-03-13 15:44:26 +10:30
grossmj f8a83e7ff9 Merge branch '2.2' into 3.0
# Conflicts:
#	dev-requirements.txt
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/version.py
#	requirements.txt
2022-03-13 14:50:02 +10:30
grossmj 1a535371b6 Upgrade dependencies 2022-03-12 16:23:17 +10:30
grossmj 53f89a7fe5 Development on 2.2.32dev1 2022-02-26 20:39:26 +10:30
grossmj 22c16e3608 Release v2.2.31 2022-02-26 18:22:29 +10:30
grossmj bb26ef2c3d Development on 2.2.31dev1 2022-02-25 15:59:40 +10:30
grossmj 59e4e694e5 Install setuptools v59.6.0 when using Python 3.6 2022-02-25 15:50:45 +10:30
grossmj 74018fae7b Release v2.2.30 2022-02-25 14:52:27 +10:30
grossmj f963e63d16 Merge branch 'master' into 2.2 2022-02-25 14:45:47 +10:30
grossmj 7490be6d5e Support GNS3 variables in Docker environment variables. Fixes #2033 2022-02-23 14:33:30 +10:30
piotrpekala7 fa96c1845c Release web UI 2.2.30 2022-02-16 01:08:59 +01:00
grossmj 4891dc9eee Set setuptools to v60.6.0 2022-02-06 21:02:43 +10:30
grossmj f7cc4e9574 Upgrade dependencies 2022-02-06 17:35:52 +10:30
Jeremy Grossmann 5e4870b008 Merge pull request #2025 from GNS3/drop-windows-support
Drop Windows support
2022-01-19 22:03:06 +10:00
grossmj 74c675d5b0 Drop Windows support 2022-01-19 22:28:36 +10:30
grossmj 4fb0cd9321 Remove unused code 2022-01-18 19:55:36 +10:30
Jeremy Grossmann 4121aa31ac Merge pull request #2024 from SpikefishSolutions/master
Update qemu_vm.py linked node error
2022-01-18 08:16:00 +10:00
John Fleming 7dcc80ff39 Merge pull request #1 from SpikefishSolutions/spikefishjohn-patch-1
qemu_vm.py Linked node test.
2022-01-17 14:38:02 -05:00
John Fleming 511ac73d4f qemu_vm.py Linked node test.
Include project name in error. This should help identify which project the none linked node is located in.
2022-01-17 14:19:49 -05:00
grossmj 63b2b205ab Upgrade FastAPI to version 0.72.0 2022-01-17 18:53:27 +10:30
grossmj 841d3028d6 Upgrade dependencies 2022-01-16 21:31:12 +10:30
grossmj 03f8ea9a6e Fix dead link in README.rst Fixes #2022 2022-01-15 18:49:24 +10:30
grossmj f9312764ba Merge branch 'master' into 3.0
# Conflicts:
#	gns3server/version.py
2022-01-11 22:42:25 +10:30
grossmj 6544f2e8e4 Development on 2.2.30dev1 2022-01-08 22:53:27 +10:30
grossmj aff06572d4 Release v2.2.29 2022-01-08 22:15:15 +10:30
grossmj 35781e9b39 Sync appliance files 2022-01-08 22:11:32 +10:30
grossmj 3251badfa5 Merge branch 'master' into 2.2 2022-01-08 22:02:37 +10:30
piotrpekala7 9559741d1f Release web UI 2.2.29 2022-01-07 21:03:19 +01:00
Jeremy Grossmann 04287a7100 Merge pull request #2018 from tournemire/patch-1
Add NixOS in list of distributions with a package
2022-01-06 21:02:53 +10:00
deltadelta 31352f9a4c Add NixOS in list of distributions with a package 2022-01-06 11:57:00 +01:00
grossmj 10fdd8fcf4 Add connect endpoint for computes
Param to connect to compute after creation
Report compute unauthorized HTTP errors to client
2021-12-24 13:05:39 +10:30
grossmj 36cf43475d Replace CORS origins by origin regex 2021-12-19 18:10:15 +10:30
grossmj d1d36ce254 Change default config settings 2021-12-17 12:26:02 +10:30
grossmj c5a6cd8d33 Update Docker image for tests 2021-12-17 12:20:46 +10:30
grossmj f5301e5f14 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2021-12-16 12:35:11 +10:30
grossmj ef36b340b0 Development on 2.2.29dev1 2021-12-15 21:38:06 +10:30
grossmj bbcc28bbfc Release v2.2.28 2021-12-15 13:54:14 +10:30
grossmj d96d11746e Merge branch 'master' into 2.2
# Conflicts:
#	init/gns3.service.systemd
2021-12-15 13:36:04 +10:30
grossmj 87c1df1639 Fix compute Docker test. Fixes #2003 2021-12-15 13:30:38 +10:30
grossmj b400ae240d Sync appliance files 2021-12-15 13:23:48 +10:30
grossmj ff64f86289 Fix calls to static methods in server.py 2021-12-15 13:08:18 +10:30
piotrpekala7 466584f074 Release web UI 2.2.28 2021-12-13 23:49:42 +01:00
grossmj ab4d964d69 Do not require the local server param to open a .gns3 file. Fixes https://github.com/GNS3/gns3-gui/issues/2421 Ref #1460 2021-12-10 15:52:57 +10:30
grossmj 16fcf6141e Fix tests 2021-12-08 00:43:54 +10:30
grossmj 05d2579907 Do not automatically install appliance after uploading image 2021-12-08 00:01:25 +10:30
grossmj 01a9e83f08 Ignore OSError when closing websocket 2021-12-08 00:00:54 +10:30
grossmj af9860f965 Fix compute Docker test 2021-12-02 22:15:23 +10:30
grossmj 296446189f Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/appliances/Simulator.gns3a
#	gns3server/compute/docker/__init__.py
#	gns3server/compute/docker/docker_vm.py
#	gns3server/version.py
2021-12-02 19:57:04 +10:30
grossmj 5797de8f2d Fix tests 2021-12-02 19:14:55 +10:30
grossmj 8bae921587 Fix packet capture 2021-12-02 18:07:09 +10:30
grossmj 928966ea5f Upgrade dependencies 2021-11-24 17:48:58 +10:30
grossmj 25466a9958 Allow empty compute_id. Ref #1657 2021-11-24 17:25:55 +10:30
Jeremy Grossmann 8995ed37a4 Merge pull request #1990 from GNS3/scalability
Scalability and option to use templates across all computes
2021-11-24 16:38:41 +10:30
grossmj 0d25727ca6 Simpler Systemd service file. Ref #1996 2021-11-20 16:18:09 +10:30
Jeremy Grossmann 488146e802 Merge pull request #1999 from GNS3/compute-authentication
Secure controller to compute communication
2021-11-18 18:48:04 +10:30
grossmj 38388f7ae5 Secure controller to compute communication using HTTP basic authentication 2021-11-18 18:37:10 +10:30
grossmj 8d5d480077 Development on 2.2.28dev1 2021-11-13 16:31:21 +10:30
grossmj 950b43a9cf Merge branch '2.2' 2021-11-13 16:29:40 +10:30
grossmj 2469468c5d Release v2.2.27 2021-11-12 15:33:53 +10:30
Jeremy Grossmann 0d19a742d0 Merge pull request #1997 from jak-sdk/issue-1996
update /var/run -> /run to meet FHS spec & Systemd best practices
2021-11-12 15:26:16 +10:30
grossmj 02a19b230f Sync appliance files 2021-11-12 15:12:15 +10:30
grossmj c077a15137 Merge branch 'master' into 2.2 2021-11-12 14:46:30 +10:30
piotrpekala7 ce08b8914f Release web UI 2.2.27 fixed version 2021-11-10 00:14:25 +01:00
piotrpekala7 f7b7b1e59f Release web UI 2.2.27 2021-11-08 18:13:12 +01:00
jak 6b9511b36a update /var/run -> /run to meet FHS spec & Systemd best practices 2021-11-06 10:00:06 +00:00
grossmj b1a62dfdc2 Fix unhandled KeyError exception when starting Docker container. Ref #1991 2021-11-04 16:59:35 +10:30
Jeremy Grossmann 55e50dae4b Merge pull request #1992 from GNS3/secure-websocket-endpoints
Secure websocket endpoints
2021-11-01 17:10:41 +10:30
grossmj 717a400a11 Fix tests 2021-11-01 17:05:27 +10:30
grossmj 741fc4a557 Secure websocket endpoints 2021-11-01 16:45:14 +10:30
grossmj 7ce5e19a6e Fix issue when updating a template 2021-10-23 16:23:19 +10:30
grossmj 6165778576 Allocate compute when compute_id is unset 2021-10-22 22:03:51 +10:30
grossmj 45738f262b Downgrade to fastapi 0.68.2 because of BrokenResourceError exception
Ref https://github.com/tiangolo/fastapi/issues/4041
2021-10-22 16:16:34 +10:30
Jeremy Grossmann f2d940497b Merge pull request #1989 from GNS3/controller-ip-from-compute
Return the current controller hostname/IP from any compute
2021-10-21 21:54:52 +10:30
grossmj 442a23836e Fix version output test 2021-10-21 21:48:53 +10:30
grossmj bb15b13a9d Return the current controller hostname/IP from any compute 2021-10-21 21:38:36 +10:30
grossmj dddfe7c531 Upgrade dependencies 2021-10-20 16:03:28 +10:30
Jeremy Grossmann 16ac9358df Merge pull request #1986 from GNS3/remove-qemu-legacy-networking
Remove Qemu legacy networking support
2021-10-20 15:44:31 +10:30
Jeremy Grossmann 52d4804e03 Merge pull request #1985 from GNS3/appliances-refactoring
Appliance management refactoring
2021-10-20 15:43:09 +10:30
grossmj eab4c8c770 Remove Qemu legacy networking support 2021-10-19 15:32:27 +10:30
grossmj a31e5615a4 Add a custom version to an appliance 2021-10-19 15:15:10 +10:30
grossmj be473aaaf7 Remove from __future__ import annotations 2021-10-18 22:16:57 +10:30
grossmj 88d98cf02e Fix tests and workaround issue with flake8 2021-10-18 22:12:10 +10:30
grossmj 01da25a7c7 Fix appliance validation with Pydantic 2021-10-18 21:53:29 +10:30
grossmj 13ff7df9fa Validate appliance files with Pydantic 2021-10-18 21:46:50 +10:30
grossmj 04934691df Appliance management refactoring:
* Install an appliance based on selected version
* Each template have unique name and version
* Allow to download an appliance file
2021-10-18 18:04:30 +10:30
grossmj 8a643cf4a4 Sync appliance files 2021-10-18 16:17:27 +10:30
grossmj 48745b5996 Update README.rst for Docker support. Ref #1908 2021-10-18 14:04:31 +10:30
grossmj 7563e4ef29 Update appliance files 2021-10-17 15:09:49 +10:30
Jeremy Grossmann 9ac6bd1e59 Merge pull request #1908 from GNS3/busybox-docker
Use a stock BusyBox for the Docker Integration
2021-10-16 19:47:24 +10:30
Jeremy Grossmann 7d626c3be8 Merge pull request #1911 from GNS3/image-management-refactoring
Images management refactoring
2021-10-10 17:40:10 +10:30
grossmj bc36d95060 Finalize image management refactoring and auto install appliance if possible 2021-10-10 17:35:11 +10:30
grossmj 0b200def88 Merge branch 'master' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	Dockerfile
#	gns3server/version.py
2021-10-09 12:16:50 +10:30
grossmj 1067e60284 Development on 2.2.27dev1 2021-10-08 21:49:11 +10:30
grossmj 6cb8b9a75e Release v2.2.26 2021-10-08 21:02:04 +10:30
grossmj 7009459b0c Merge branch 'master' into 2.2 2021-10-08 20:14:09 +10:30
grossmj 03c94c0bc5 Sync appliance files. 2021-10-08 20:13:32 +10:30
grossmj 568df7e476 Fix running tests with Python 3.10
https://github.com/actions/setup-python/issues/249#issuecomment-934299359
2021-10-07 15:11:53 +10:30
grossmj d485a857a2 Fix running tests with Python 3.10
https://github.com/actions/setup-python/issues/249#issuecomment-934299359
2021-10-07 15:07:36 +10:30
grossmj b59b6816c3 Upgrade dependencies and test using Python 3.10 2021-10-07 14:59:53 +10:30
piotrpekala7 482b46d343 Release web UI 2.2.26 2021-10-06 17:53:00 +02:00
grossmj 94ee197a6e Tests with Python 3.10 2021-10-06 20:27:57 +10:30
grossmj b683659d21 Sqlite doesn't allow BigInteger to be used as an primary key with autoincrement 2021-09-23 11:05:03 +09:30
grossmj faddc5a6b1 Upgrade dependencies 2021-09-23 10:39:27 +09:30
Jeremy Grossmann c386b2d046 Merge pull request #1978 from SDN-Projects/optimization/pip-no-cache-dir
chore : use --no-cache-dir flag to pip in dockerfiles to save space
2021-09-23 09:58:04 +09:30
Pratik Raj de2d72248e chore : use --no-cache-dir flag to pip in dockerfiles to save space
using --no-cache-dir flag in pip install ,make sure downloaded packages
by pip don't cached on system . This is a best practice which make sure
to fetch from repo instead of using local cached one . Further , in case
of Docker Containers , by restricting caching , we can reduce image size.
In term of stats , it depends upon the number of python packages
multiplied by their respective size . e.g for heavy packages with a lot
of dependencies it reduce a lot by don't caching pip packages.

Further , more detail information can be found at

https://medium.com/sciforce/strategies-of-docker-images-optimization-2ca9cc5719b6

Signed-off-by: Pratik Raj <rajpratik71@gmail.com>
2021-09-22 15:17:21 +05:30
grossmj 5ece48500c Sort symbols by theme. Fixes https://github.com/GNS3/gns3-gui/issues/3230 2021-09-20 20:09:58 +09:30
grossmj 5eb5658a74 Fix memory percentage left warning. Fixes #1966 2021-09-20 18:08:02 +09:30
grossmj 3286348a95 Update affinity symbols. Fixes https://github.com/GNS3/gns3-gui/issues/3232 2021-09-20 17:46:19 +09:30
Jeremy Grossmann 395852f203 Merge pull request #1970 from hb9cwp/patch-1
Fix wrong comment for default admin password in config file
2021-09-20 17:17:53 +09:30
Jeremy Grossmann 488a3d0d39 Update gns3_server.conf 2021-09-20 17:09:46 +09:30
grossmj d8bceaad5d Merge branch '3.0' into image-management-refactoring
# Conflicts:
#	gns3server/api/routes/controller/permissions.py
2021-09-20 17:06:46 +09:30
grossmj 5807dd068e Revert "No need to add permissions when the super admin creates templates or projects"
This reverts commit 3d1c3303f9.
2021-09-20 10:36:56 +09:30
grossmj 3d1c3303f9 No need to add permissions when the super admin creates templates or projects 2021-09-18 12:49:54 +09:30
grossmj c8ed96d91b Add isolate and unisolate endpoints. Ref https://github.com/GNS3/gns3-gui/issues/3190 2021-09-15 18:04:43 +09:30
grossmj 898af32cd1 Package websockets 10.0 requires Python >= 3.7 2021-09-15 17:11:24 +09:30
grossmj 0b4dbf27e0 Upgrade dependencies 2021-09-15 17:04:39 +09:30
grossmj 541a906f49 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/node.py
#	gns3server/handlers/api/compute/server_handler.py
#	gns3server/version.py
2021-09-15 16:59:56 +09:30
grossmj 67661616cf Development on v2.2.26dev1 2021-09-14 21:13:04 +09:30
grossmj 6beab9433b Release v2.2.25 2021-09-14 19:20:10 +09:30
grossmj e59e051961 Merge branch 'master' into 2.2 2021-09-14 18:42:39 +09:30
piotrpekala7 6b3f703f94 Release web UI 2.2.25 2021-09-14 10:35:10 +02:00
grossmj d44a6756c1 Sync appliance files 2021-09-12 18:13:21 +09:30
grossmj cdc4cf796b Bump version to 3.0.0dev3 2021-09-11 22:18:01 +09:30
Jeremy Grossmann 4916567ff6 Merge pull request #1971 from hb9cwp/patch-2
REST API example needs additional parameter
2021-09-09 23:03:15 -07:00
Rolf Sommerhalder 6e88d4816f REST API example needs additional parameter
While try this example with GNS3 branch 3.0 on Ubuntu 20.04 LTS, the API call 
```$ curl http://172.17.46.114:3080/v3/users/authenticate -d '{"username": "admin", "password": "admin"}' ```  fails with ```{"detail":[{"loc":["body"],"msg":"value is not a valid dict","type":"type_error.dict"}]}```.

The additional parameter appended to curl fixes this ```{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTYzMTI4NTc4NX0.kT1dAN4v1vHMTBJO2UaI2I7yAFhnSpBU9iqmdDuwtAQ","token_type":"bearer"} ```
Found after googling for the error above in 
FastAPI 0.65.2 POST request fails with "value is not a valid dict" when using the Requests library; 0.65.1 works (with a caveat) #3373
https://github.com/tiangolo/fastapi/issues/3373#issuecomment-886745123
2021-09-09 17:08:26 +02:00
grossmj 6d10d92af2 Fix images_path -> symbols_path 2021-09-09 16:58:42 +09:30
grossmj a8aeb63c91 No need to find the mountpoint first for disk usage. 2021-09-09 16:58:02 +09:30
grossmj 986010446a Remove empty files after merge 2021-09-09 16:55:00 +09:30
grossmj 43ca53a089 Fix tests 2021-09-09 16:54:16 +09:30
grossmj a324459152 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/handlers/api/compute/server_handler.py
#	gns3server/utils/path.py
#	gns3server/version.py
#	requirements.txt
#	tests/compute/qemu/test_qemu_vm.py
#	tests/compute/test_manager.py
2021-09-09 16:36:17 +09:30
Rolf Sommerhalder 6805a61729 Remove duplicate configuration lines 2021-09-09 08:17:58 +02:00
grossmj 6f1feed265 Fix issue preventing to use custom nested symbols. Fixes #1969 2021-09-08 15:13:51 +09:30
Jeremy Grossmann e026c1e91f Merge pull request #1967 from GNS3/affinity-symbols
Update affinity symbols
2021-09-07 19:30:53 -07:00
grossmj 40e565d968 Add comment for svgo 2021-09-08 11:33:04 +09:30
grossmj 5162ef2e22 Updated affinity symbols 2021-09-08 01:08:01 +09:30
grossmj 1923c37092 Shell script to update affinity symbols 2021-09-08 01:05:56 +09:30
grossmj 611570a863 Fix qemu-img rebase code to support Qemu 6.1. Ref https://github.com/GNS3/gns3-server/pull/1962 2021-09-05 22:18:46 +09:30
grossmj 99d7d0c769 Merge branch 'master' into 2.2
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
2021-09-05 21:53:36 +09:30
Jeremy Grossmann e42b8cb97c Merge pull request #1963 from GNS3/run-with-qemu-6.1
Qemu 6.1 support
2021-09-05 05:15:23 -07:00
grossmj ed336da304 Qemu 6.1 support
Handle the deprecated use of backing file without explicit backing format issue.
2021-09-05 18:34:37 +09:30
Jeremy Grossmann bcf34d0ec8 Merge pull request #1962 from candlerb/candlerb/1955
Reinstate qemu-img rebase
2021-09-04 22:28:52 -07:00
Brian Candler 21e9f38437 Reinstate qemu-img rebase
This allows importing portable projects with images and/or snapshots,
regression introduced by #1927.

Fixes #1955
2021-09-04 12:34:22 +01:00
grossmj f1ecb02160 Small db tables adjustments 2021-09-04 15:23:25 +09:30
grossmj fdc3774fff Add index for "name" field in role table 2021-09-03 15:21:41 +09:30
grossmj a55c9a5c6a Return disk usage for partition that contains the default project directory. Fixes #1947 2021-09-03 12:04:10 +09:30
Jeremy Grossmann 041d2bd2d6 Merge pull request #1953 from GNS3/revert-1951-disk-usage-all-partitions
Revert "List disk usage for all mount points"
2021-09-02 05:29:53 -07:00
Jeremy Grossmann 51c6f3fa31 Revert "List disk usage for all mount points" 2021-09-02 21:59:09 +09:30
Jeremy Grossmann 83cbcac01b Merge pull request #1951 from GNS3/disk-usage-all-partitions
List disk usage for all mount points
2021-09-01 23:21:19 -07:00
grossmj b1224ce9f6 Update schema description for disk_usage_percent. 2021-09-02 15:48:13 +09:30
grossmj a2367d3c04 List disk usage for all mount points. 2021-09-02 15:43:38 +09:30
grossmj 45e0cbeca2 Merge branch 'master' into 2.2 2021-09-02 14:44:39 +09:30
grossmj 1eaabd6b25 Merge remote-tracking branch 'origin/master' 2021-09-01 19:31:46 +09:30
grossmj 4eb8491cfa Fix tests. Fixes #1950 2021-09-01 19:31:37 +09:30
grossmj d606553e20 Allow images to be stored in subdirs and used by templates. 2021-08-30 16:53:41 +09:30
Jeremy Grossmann b843f94068 Merge pull request #1880 from hrnciar/setuptools
Explicitly require setuptools, utils/get_resource.py imports pkg_resources
2021-08-29 22:06:35 -07:00
Jeremy Grossmann f71e7aac9f Merge branch 'master' into setuptools 2021-08-29 22:01:30 -07:00
grossmj 75bb06563a Fix tests 2021-08-30 13:04:24 +09:30
grossmj afdda427d2 Merge branch 'master' into 3.0
# Conflicts:
#	.github/workflows/testing.yml
#	gns3server/compute/builtin/nodes/nat.py
#	gns3server/compute/qemu/__init__.py
#	gns3server/controller/link.py
#	gns3server/utils/asyncio/embed_shell.py
#	gns3server/utils/asyncio/raw_command_server.py
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
#	gns3server/web/web_server.py
2021-08-29 19:23:51 +09:30
grossmj 945e3e3e8e Development on 2.2.25dev1 2021-08-25 21:23:19 +09:30
grossmj 59a89c5f88 Release v2.2.24 2021-08-25 20:31:25 +09:30
grossmj 78c2ded2aa Merge branch 'master' into 2.2 2021-08-25 20:08:26 +09:30
piotrpekala7 6ba40bd5fb Release web UI 2.2.24 2021-08-25 11:57:52 +02:00
grossmj 6005e89181 Fix issue when searching for image with relative path. Fixes #1925 2021-08-25 17:23:21 +09:30
grossmj 27bcb60580 Sync appliance files. 2021-08-24 21:21:18 +09:30
grossmj 93711fe060 Update dependencies 2021-08-24 21:12:27 +09:30
grossmj 363fdb7d10 Fix wrong error when NAT interface is not allowed. Fixes #1943 2021-08-24 20:40:06 +09:30
grossmj 92150fba71 Fix incorrect Qemu binary selected when importing template. Fixes https://github.com/GNS3/gns3-gui/issues/3216 2021-08-24 17:26:06 +09:30
grossmj c4c71cc838 Fix error when updating a link style. Fixes https://github.com/GNS3/gns3-gui/issues/2461 2021-08-24 11:35:33 +09:30
grossmj 332fa47b50 Option to prune images when deleting template. 2021-08-23 10:27:10 +09:30
grossmj bf9a3aee20 Associate images when creating or updating a template. 2021-08-22 15:16:02 +09:30
grossmj 4d9e4e1059 Add prune images endpoint.
Use many-to-many relationship between images and templates.
2021-08-20 15:58:41 +09:30
grossmj 8f30b466e0 Merge remote-tracking branch 'origin/3.0' into 3.0 2021-08-19 14:48:29 +09:30
grossmj 07d4892faf Check if user has the right to add a permission 2021-08-19 14:47:48 +09:30
Jeremy Grossmann 1a5fb1abcc Only use the necessary HTTP methods for default permissions 2021-08-17 23:47:32 +09:30
grossmj 4c6135fe88 Add /permissions/prune to delete orphaned permissions 2021-08-17 21:55:59 +09:30
grossmj 9df586d5d5 Check a permission matches an existing route before it is allowed to be created. 2021-08-17 16:14:15 +09:30
grossmj 8aada49414 Some fixes for early support for Python3.10
The loop parameter has been removed from most of asyncio‘s high-level API following deprecation in Python 3.8.
2021-08-15 15:25:33 +09:30
grossmj 496170b4e5 Early support for Python3.10 Fixes #1940 2021-08-15 15:09:48 +09:30
grossmj 183033dad8 Upgrade unicorn dependency to version 0.15.0 2021-08-15 14:54:35 +09:30
grossmj 75c934f30a Bump version to 3.0.0dev3 2021-08-12 16:05:19 +09:30
grossmj cfaafedb09 Merge branch '3.0' into busybox-docker 2021-08-11 18:36:30 +09:30
grossmj d0a9425392 Remove busybox and copy system busybox in setup.py 2021-08-11 17:27:47 +09:30
grossmj 078c42f185 Save image size + start to automatic template creation based on image checksum. 2021-08-11 16:58:23 +09:30
grossmj a970d4c4d8 Upgrade dependencies 2021-08-10 23:08:14 +09:30
Jeremy Grossmann f13b4e89b7 Merge branch '3.0' into image-management-refactoring 2021-08-10 05:46:22 -07:00
grossmj ce55ec73a4 Fix exception with endpoints returning HTTP status code 204. Fixes #1891 2021-08-10 21:53:21 +09:30
grossmj 36b9f8bdfd Fix tests 2021-08-10 15:58:13 +09:30
grossmj 3ae7783360 Fix "-machine accel=tcg" check 2021-08-10 15:41:05 +09:30
grossmj c5c95979c2 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/compute/qemu/utils/qcow2.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/handlers/api/controller/server_handler.py
#	gns3server/version.py
2021-08-10 15:38:49 +09:30
Jeremy Grossmann 731152c75a Merge pull request #1938 from GNS3/dependabot/pip/pywin32-301
Bump pywin32 from 300 to 301
2021-08-09 17:59:35 -07:00
dependabot[bot] 2897325f36 Bump pywin32 from 300 to 301
Bumps [pywin32](https://github.com/mhammond/pywin32) from 300 to 301.
- [Release notes](https://github.com/mhammond/pywin32/releases)
- [Changelog](https://github.com/mhammond/pywin32/blob/master/CHANGES.txt)
- [Commits](https://github.com/mhammond/pywin32/commits)

---
updated-dependencies:
- dependency-name: pywin32
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-09 20:45:46 +00:00
grossmj 6dd0f4d4d3 Allow logged in user to change some of its data. Administrators can lock users using the is_active field. 2021-08-09 16:36:18 +09:30
grossmj 8c0899d086 Development on 2.2.24dev1 2021-08-05 21:16:10 +09:30
grossmj d5c73f4ba4 Release v2.2.23 2021-08-05 15:58:54 +09:30
grossmj 77487e4fc3 Merge branch 'master' into 2.2 2021-08-05 15:54:16 +09:30
grossmj 754f55b01b Sync appliance files. 2021-08-05 15:53:12 +09:30
Jeremy Grossmann b68f7a78a7 Merge pull request #1927 from candlerb/candlerb/1921
Support cloning of encrypted qcow2 base image files
2021-08-04 23:19:23 -07:00
piotrpekala7 6c36beb97f Release web UI 2.2.23 2021-08-04 10:59:50 +02:00
Jeremy Grossmann c231ae77e5 Merge pull request #1935 from rarylson/detect-kms-support
Update `remote-install.sh` with flag for KMS support and fix hostname inconsistencies
2021-08-01 15:28:42 -07:00
Rarylson Freitas e5a76fcf44 Fix hostname inconsistencies during script execution
When `--with-iou` and `--with-openvpn` are both enabled, hostname
were updated in `/etc/hostname` but not on the running system (only
changed after reboot). So the old hostname were used in MOTD and
client OpenVPN config URL.
2021-08-01 17:49:27 -03:00
Rarylson Freitas d926a713b9 Add option --without-kvm
Some cloud providers (example, AWS EC2 for non-metal instances) do not
support nested virtualization, as well as some hypervisors (example,
VirtualBox prior to 6.x, Hyper-V on AMD). Option `--without-kvm` can
be used to disable hardware acceleration in these scenarios. Otherwise,
user will receive error when trying to start Qemu-based devices.

Commit also: replace `enable_kvm` and `require_kvm` with newer config
options (`enable_hardware_acceleration` and
`require_hardware_acceleration`); and do some code refactors.

One can argue that, instead of prividing option `--without-kvm`, we
should check if system supports KVM and enable/disable hardware
acceleration accordingly. However, there is the case when the
hypervisor supports nested virtualization, but feature is just disabled.
The chosen approach for this case is to keep KVM enabled and let user
known (user will eventually receive an error) so user can fix it.
Otherwise, user might never know and suffer from performance
degradation.
2021-08-01 17:47:28 -03:00
grossmj 1a24ebfc19 Add a reload server endpoint. Fixes #1926 2021-08-01 16:20:30 +09:30
Jeremy Grossmann 6cf268ca93 Merge pull request #1934 from GNS3/handle_no-kvm_deprecated
Handle -no-kvm param deprecated in Qemu >= v5.2
2021-07-27 17:37:41 +09:30
Jeremy Grossmann 214bef9d06 Merge pull request #1932 from GNS3/mac-address-generation
Change how to generate random MAC addresses
2021-07-27 16:51:29 +09:30
grossmj 4646ce684f Handle -no-kvm param deprecated in Qemu >= v5.2 2021-07-27 16:34:51 +09:30
Jeremy Grossmann d2534d6fa0 Merge pull request #1933 from akrpic77/ak-fix-binary-websocket
Fix binary websocket access to the console
2021-07-26 20:42:54 +09:30
Andrej Krpič 3b7dc21ef0 Fix binary websocket access to the console
telnet_writer.write is not an async method - drain() is.
Remove async keyword so the call is the same as for the text websocket.
2021-07-26 12:58:35 +02:00
grossmj 0ecea8ffbb Change how to generate random MAC addresses 2021-07-25 16:03:54 +09:30
Jeremy Grossmann 6741d6d7a9 Merge pull request #1930 from mm1ke/fix_tests-gwaqIATV
setup.py: prevent installing tests directory
2021-07-13 08:20:13 +08:00
Michael Mair-Keimberger feace0c7dc setup.py: prevent installing tests directory 2021-07-12 19:04:30 +02:00
Brian Candler 1ee3e14bd3 Support cloning of encrypted qcow2 base image files
Fixes #1921
2021-07-09 10:53:02 +01:00
grossmj 1f0ceb6f74 Symbols endpoints (except upload) don't require authentication. 2021-06-16 20:22:49 +09:30
grossmj c13f5c6627 Update to the udhcpc wrapper script. Ref #1890 2021-06-14 19:28:40 +09:30
grossmj cdedd53339 Fix VMware VM support on Linux and Windows. Fixes #1919 2021-06-14 13:16:11 +09:30
grossmj 91a6384a59 Upgrade dependencies. Fixes #1917 2021-06-12 15:30:26 +09:30
grossmj 229a04e2fa Fix link style merge 2021-06-12 15:26:35 +09:30
Jeremy Grossmann e78b5fa6d6 Fix typo 2021-06-12 15:20:55 +09:30
grossmj 6ec028ea4e Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/builtin/nodes/cloud.py
#	gns3server/compute/vmware/vmware_vm.py
#	gns3server/controller/link.py
#	gns3server/controller/snapshot.py
#	gns3server/handlers/api/compute/dynamips_vm_handler.py
#	gns3server/handlers/api/compute/iou_handler.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/handlers/api/controller/link_handler.py
#	gns3server/schemas/link.py
#	gns3server/utils/path.py
#	gns3server/version.py
#	requirements.txt
2021-06-12 14:36:32 +09:30
grossmj 3524e22761 Development on 2.2.23dev1 2021-06-10 16:20:09 +09:30
grossmj 10daab21a3 Release v2.2.22 2021-06-10 15:41:58 +09:30
grossmj 22eb6f7d8c Sync appliance files. 2021-06-10 12:42:43 +09:30
grossmj d556c08def Revert "Skip test"
This reverts commit 8acb2fe3
2021-06-08 12:27:20 +09:30
grossmj 8acb2fe37e Skip test 2021-06-08 12:18:27 +09:30
Jeremy Grossmann 94acf60aef Merge pull request #1913 from GNS3/vmware-bigsur
Fix VMware VM support on macOS BigSur
2021-06-07 19:38:19 -07:00
grossmj c892cf371b Fix VMware support on macOS BigSur 2021-06-08 11:56:33 +09:30
grossmj bfd30f3547 Sync appliance files. 2021-06-07 15:01:45 +09:30
grossmj 095a022033 Fix tests. Ref https://github.com/GNS3/gns3-gui/issues/2461 2021-06-07 14:23:52 +09:30
grossmj 4e34ab8e4f Link style support. Fixes https://github.com/GNS3/gns3-gui/issues/2461 2021-06-07 14:08:21 +09:30
grossmj 8825831106 Upgrade dependencies 2021-06-07 13:46:06 +09:30
grossmj 5da5cbd6d8 Merge branch 'master' into 2.2 2021-06-07 13:34:25 +09:30
grossmj 515bd50261 Start refactoring for images management 2021-06-06 16:52:47 +09:30
piotrpekala7 08f540f417 Release web UI 2.2.22 2021-06-05 10:32:12 +02:00
Jeremy Grossmann 1db1a892b4 Merge pull request #1910 from fabaff/patch-1
Set py-cpuinfo to 8.0.0
2021-06-04 04:49:26 -07:00
Fabian Affolter 7ff72879dd Set py-cpuinfo to 8.0.0 2021-06-04 13:36:21 +02:00
Jeremy Grossmann 48d0c6b183 Merge pull request #1905 from candlerb/candlerb/1904
Preserve auto_start/auto_open/auto_close when restoring snapshot
2021-06-04 02:06:38 -07:00
grossmj f64b5cd9b6 Allow controller to be reloaded using the API. Fixes #1743 2021-06-04 17:01:07 +09:30
grossmj 6a726d0344 Fix formatting issue. 2021-06-03 19:32:00 +09:30
grossmj dc914eb0f9 Fix tests. 2021-06-03 19:11:11 +09:30
grossmj 9b0e3a77ed Use a stock BusyBox for the Docker Integration 2021-06-03 18:38:08 +09:30
grossmj 8be015cd86 Move "/{project_id}/templates/{template_id}" endpoint. 2021-06-03 18:18:34 +09:30
grossmj 6fb6a27859 Add last login info for users. 2021-06-03 16:57:16 +09:30
grossmj 4e33d29af8 Change RBAC field names from builtin to is_builtin 2021-06-03 16:24:38 +09:30
Jeremy Grossmann 4dd3bc6a98 Merge pull request #1906 from GNS3/rbac
RBAC support
2021-06-02 23:16:07 -07:00
grossmj d65b49acaa Add user permissions + RBAC tests. 2021-06-03 15:40:12 +09:30
grossmj 36a27c0c19 Force refresh of updated_at value for RBAC db models. 2021-06-01 16:12:06 +09:30
grossmj a6d2f48df1 Merge remote-tracking branch 'origin/3.0' into rbac 2021-06-01 16:11:22 +09:30
grossmj 0113ca6673 Force refresh of updated_at value in db models. 2021-06-01 16:09:29 +09:30
grossmj 74d820fd0a Use synchronize_session="fetch" when updating values. 2021-06-01 15:55:50 +09:30
grossmj e9b9884ee3 Merge remote-tracking branch 'origin/3.0' into rbac 2021-06-01 15:50:14 +09:30
grossmj a6c2a3e47f Use synchronize_session="fetch" when updating values. 2021-06-01 13:02:03 +09:30
grossmj 91b0534182 Upgrade dependencies 2021-06-01 12:56:51 +09:30
grossmj 2e2e31337a Add description for user permission. 2021-06-01 12:55:16 +09:30
grossmj fbc47598d9 Basic functional RBAC support. 2021-05-27 17:28:44 +09:30
grossmj 6d4da98b8e Base API and tables for RBAC support. 2021-05-25 18:34:59 +09:30
Brian Candler c051367d4b Preserve auto_start/auto_open/auto_close when restoring snapshot
Fixes #1904
2021-05-24 17:31:04 +01:00
grossmj eb0f8c6174 Save/restore appliances Etag. 2021-05-17 00:37:15 +09:30
grossmj f416d64042 Allow to set the initial super admin username / password in server config file. Ref #1857 2021-05-16 20:01:05 +09:30
grossmj fffbb08a8e Catch SQLAlchemyError exception. 2021-05-16 18:37:17 +09:30
Jeremy Grossmann 150526b1ff Update setup.py
Fixes #1897
2021-05-16 17:44:13 +09:30
grossmj d759564e20 Require authentication for get_user_memberships endpoint. 2021-05-16 17:06:23 +09:30
grossmj 971e86d254 Fix uBridge errors for cloud nodes not visible in logs. Fixes #1895 2021-05-16 14:59:02 +09:30
grossmj 6847e19847 Change method to prevent forbidden directory traversal. Fixes #1894 2021-05-16 14:44:38 +09:30
grossmj 2bf16f1e5f Change method to prevent forbidden directory traversal. Ref #1894 2021-05-16 14:29:56 +09:30
grossmj f3d81fa450 Clean files and catch file path escape. Ref #1894 2021-05-15 22:35:44 +09:30
grossmj 09ac7fd7fb Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_manager.py
#	gns3server/handlers/api/compute/dynamips_vm_handler.py
#	gns3server/handlers/api/compute/iou_handler.py
#	gns3server/handlers/api/compute/project_handler.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/handlers/api/controller/node_handler.py
#	gns3server/handlers/api/controller/project_handler.py
#	gns3server/handlers/index_handler.py
#	tests/handlers/api/compute/test_project.py
#	tests/handlers/api/compute/test_qemu.py
#	tests/handlers/api/controller/test_node.py
#	tests/handlers/api/controller/test_project.py
2021-05-15 20:46:34 +09:30
Jeremy Grossmann 3a479d7ea6 Merge pull request #1900 from GNS3/prevent-directory-traversal
Prevent directory traversal
2021-05-15 04:09:04 -07:00
grossmj e86d8f96ca Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/version.py
2021-05-15 20:12:21 +09:30
grossmj 9a6978902d Fix tests. 2021-05-15 19:43:36 +09:30
grossmj 6294ad9e76 Prevent directory traversal 2021-05-15 17:35:32 +09:30
grossmj 8810249d36 Add user groups support. 2021-05-15 15:10:02 +09:30
grossmj 2c938b2c19 Development on 2.2.22dev1 2021-05-10 23:44:40 +09:30
grossmj 03b7d9191b Release v2.2.21 2021-05-10 22:42:46 +09:30
grossmj 87c87ca3cb Sync appliance files. 2021-05-10 22:39:03 +09:30
grossmj dfba40fee2 Merge branch 'master' into 2.2 2021-05-10 22:34:59 +09:30
grossmj 956b9056c1 Fix issues with latest version of sqlalchemy 2021-05-08 15:37:51 +09:30
grossmj 4727708c85 Upgrade dependencies 2021-05-08 14:32:26 +09:30
grossmj 0a77f0035b Add delete cascade on foreign keys for appliance table 2021-05-06 17:25:32 +09:30
grossmj 10164e262d Enable SQL foreign key support for SQLite 2021-05-06 17:21:45 +09:30
grossmj a1f3f6472a Upgrade dependencies 2021-05-06 16:56:07 +09:30
grossmj 912fb2ed29 Fix add node from template. Fixes https://github.com/GNS3/gns3-web-ui/issues/1122 2021-05-06 16:22:16 +09:30
grossmj 60701b63ac Update README to use python virtual env 2021-05-06 15:56:26 +09:30
piotrpekala7 f576bedfaf Release web UI 2.2.21 2021-04-30 14:01:53 +02:00
grossmj a795e0d7c1 Add missing CORS origins. 2021-04-28 21:20:05 +09:30
grossmj d8968cbee8 Merge remote-tracking branch 'origin/3.0' into 3.0 2021-04-28 15:57:39 +09:30
grossmj ad7d8e2e7d Fix tests. 2021-04-28 15:56:11 +09:30
grossmj 41ba215e32 Show topology path when check topology schema fails. 2021-04-27 22:48:55 -07:00
grossmj b1b3338e3c Fix bug when binding on address already in use. 2021-04-28 15:13:31 +09:30
grossmj edb20482c7 Fix bug when no server config file is present. 2021-04-28 14:44:34 +09:30
grossmj 7b3351bba6 Upgrade dependencies. 2021-04-28 14:43:52 +09:30
grossmj d3ace8ff17 Fix user delete endpoint. 2021-04-26 16:21:16 +09:30
grossmj 49be4146d6 Protect controlle notification endpoints. Ref #1888
(WebSocket endpoint is not secured, it takes an optional token).
2021-04-26 16:18:18 +09:30
grossmj a02aede1b0 Use uuid5 to create new compute_id. Fixes #1641 #1887 2021-04-21 13:47:32 +09:30
grossmj dff1ec9bc6 Fix /users/me endpoint. 2021-04-20 19:54:55 +09:30
grossmj 0465cb87f6 Protect the API and add alternative authentication endpoint. 2021-04-20 11:59:02 +09:30
grossmj e28452f09a Secure users API and handle manual password recovery. 2021-04-19 09:40:04 +09:30
grossmj c03226e368 Add default super admin account in controller db. 2021-04-18 17:39:47 +09:30
grossmj 9404c00411 Complete type annotations for API endpoints. 2021-04-18 15:40:38 +09:30
grossmj cefab8d362 Rename __json__() to asdict() 2021-04-17 23:34:28 +09:30
grossmj 44074ff7c9 Some cleaning. 2021-04-17 18:36:32 +09:30
grossmj bad3ef7003 Detect the app is exiting and avoid reconnecting to computes. 2021-04-17 18:33:20 +09:30
grossmj 6b8ce8219c Fix tests. 2021-04-15 18:30:22 +09:30
grossmj 9c850e0f2b Move schemas between compute and controller subpackages 2021-04-15 18:12:08 +09:30
grossmj c59fc375f2 Remove traceng code. 2021-04-13 19:03:23 +09:30
Jeremy Grossmann fbd5e12e7b Update GitHub Actions badge 2021-04-13 18:53:39 +09:30
grossmj c021e21309 Use black with -l 120 param. 2021-04-13 18:46:50 +09:30
grossmj f928738bd5 Use pyupgrade with --py36-plus param. 2021-04-13 18:37:58 +09:30
grossmj a9eb035b7d Move error responses to API routers. 2021-04-13 16:19:56 +09:30
grossmj 6b0d0de1bc Wait for local compute to be started.
Don't reconnect to local compute when server is being stopped.
2021-04-13 15:41:59 +09:30
grossmj 71725aade6 Rename ssl and auth configuration file settings.
Add enable SSL config validator.
Strict configuration file validation: any error will prevent the server to start.
Core server logic moved to a Server class.
2021-04-12 23:26:42 +09:30
grossmj 1b5a5de4bc Generate new config for each test. Fixes tests. 2021-04-12 19:37:59 +09:30
grossmj 30ebae207f Use Pydantic to validate the server config file. 2021-04-12 17:02:23 +09:30
grossmj 478119b40d Comment out problematic test 2021-04-10 13:13:28 +09:30
grossmj fa4c9a91ca Add symbol dimensions endpoint and SSL support for packet capture with remote HTTPS server. 2021-04-10 13:01:23 +09:30
grossmj 802959f9ab Merge branch 'master' into 3.0
# Conflicts:
#	dev-requirements.txt
#	gns3server/controller/__init__.py
#	gns3server/controller/appliance_manager.py
#	gns3server/controller/compute.py
#	gns3server/controller/topology.py
#	gns3server/handlers/api/compute/ethernet_switch_handler.py
#	gns3server/handlers/api/controller/link_handler.py
#	gns3server/handlers/api/controller/symbol_handler.py
#	gns3server/version.py
#	requirements.txt
#	tests/controller/test_export_project.py
#	tests/handlers/api/compute/test_qemu.py
#	tests/web/test_response.py
#	win-requirements.txt
2021-04-10 12:46:40 +09:30
grossmj 4e61cc811e Improvements for get symbol dimensions endpoint. Ref #1885 2021-04-10 12:28:50 +09:30
Jeremy Grossmann c9c6a5a762 Merge pull request #1885 from GNS3/Create-endpoint-in-symbols-handler-to-get-symbol-dimensions
Create endpoint in symbols handler to get symbol dimensions #1884
2021-04-09 04:59:57 -07:00
grossmj e797ad1b9f Development on 2.2.21dev1 2021-04-09 13:50:20 +09:30
grossmj a50141fcbf Release v2.2.20 2021-04-09 12:14:38 +09:30
grossmj 852151f836 Merge branch 'master' into 2.2 2021-04-09 12:06:01 +09:30
grossmj e5807e5a8c Sync appliance files. 2021-04-09 12:04:20 +09:30
grossmj 87a26d5da0 Fix tests and comment problematic ones that rely on AsyncioMagicMock 2021-04-09 11:57:29 +09:30
piotrpekala7 30cbfe2154 Update picture.py 2021-04-08 23:29:46 +02:00
piotrpekala7 4bbf7c2ed2 Update symbol_handler.py 2021-04-08 21:27:05 +02:00
piotrpekala7 7a8c1e8f5d Release web UI 2.2.20 2021-04-08 13:30:59 +02:00
grossmj 7bb5202bdb Sync appliance files. 2021-04-07 20:58:55 +09:30
grossmj 082206a7db Fix packet capture with HTTPS remote server. Fixes #1882 2021-04-07 12:40:15 +09:30
grossmj 360a819e91 Set PyQt5 version to 5.15.2 on Windows 2021-04-06 22:12:34 +09:30
grossmj adbef787c3 Fix typo 2021-04-06 18:21:59 +09:30
grossmj 685963b85d Sync appliance files and remove old ones after sync with online repo. Fixes #1876 2021-04-06 17:38:11 +09:30
grossmj 31a1fdba68 Update setup.py for Python 3.9 2021-04-06 15:56:46 +09:30
grossmj e614ed79f4 Upgrade dependencies 2021-04-06 13:57:00 +09:30
grossmj 170e83e589 Fix tests and update requirements 2021-04-05 17:43:35 +09:30
grossmj 5217dbf3a3 Fix tests 2021-04-05 14:39:50 +09:30
grossmj 566e326b57 Save computes to database 2021-04-05 14:21:41 +09:30
grossmj e607793e74 Generate a new list in template schema defaults. 2021-04-02 17:45:16 +10:30
grossmj 3b30d51972 Sync appliance files. 2021-04-02 17:43:38 +10:30
grossmj c1784b7684 Workaround to run tests with Python 3.6 2021-04-01 08:49:32 +10:30
Tomas Hrnciar bb47cc87e7 Explicitly require setuptools, utils/get_resource.py imports pkg_resources 2021-03-31 11:58:49 +02:00
grossmj b8e81ad9bc Upgrade dependencies 2021-03-31 16:01:11 +10:30
grossmj 91920e5a5b Fix issue with tests + some cleaning. 2021-03-31 09:58:52 +10:30
grossmj fd844c309e Revert "Install contextvars for python_version < "3.7""
This reverts commit f9127e19
2021-03-28 21:33:16 +10:30
grossmj f9127e199e Install contextvars for python_version < "3.7" 2021-03-28 21:25:13 +10:30
grossmj 0fea3f969e Use aiosqlite and add service for templates 2021-03-28 21:17:29 +10:30
grossmj d730c591b3 Refactor template management to use database. 2021-03-28 11:15:08 +10:30
grossmj b417bc4dec Revert "Upgrade to sqlalchemy version 1.4.2"
This reverts commit 9defc3c4

Ref https://github.com/talkpython/web-applications-with-fastapi-course/issues/4
2021-03-24 14:55:00 +10:30
grossmj 9defc3c4e8 Upgrade to sqlalchemy version 1.4.2 2021-03-24 14:42:30 +10:30
grossmj 6120736c91 Fix export for missing files 2021-03-24 13:16:00 +10:30
grossmj 7542b28793 Revert "Fix tests"
This reverts commit 4d0cb32b
2021-03-24 13:05:50 +10:30
grossmj 4d0cb32bd0 Fix tests 2021-03-24 12:39:22 +10:30
grossmj 055a78bade Fix issue when trying to export temporary Dynamips files. 2021-03-24 12:06:10 +10:30
grossmj fad52ea2fc Development on 2.2.20dev1 2021-03-05 16:48:09 +10:30
grossmj d8054c7cb4 Release v2.2.19 2021-03-05 14:51:03 +10:30
grossmj 91570f475f Launch projects marked for auto open after SIGHUP is received 2021-03-05 14:47:20 +10:30
grossmj 42cda3af2b Sync appliance files. 2021-03-05 14:46:20 +10:30
grossmj e6be6bc958 Merge branch 'master' into 2.2 2021-03-02 17:18:24 +10:30
grossmj b7f8fb283b Sync appliance files. 2021-03-02 17:09:28 +10:30
piotrpekala7 72d5b5e7cc Release web UI 2.2.19 2021-03-02 00:31:54 +01:00
grossmj 8cce0eedee Fix console type error when creating Ethernet switch node. Fixes #1873 2021-03-01 13:55:52 +10:30
grossmj 11c53c128e Sync Juniper vSRX appliance file. 2021-02-24 14:28:12 +10:30
grossmj 17b56ac7cb Sync appliance files. 2021-02-24 14:08:13 +10:30
grossmj 62b1fa8dc4 Upgrae to uvicorn 0.13.3. Fixes #1840 2021-02-18 18:32:53 +10:30
grossmj c17a86e814 Add missing async 2021-02-18 18:14:35 +10:30
grossmj aca7344212 Upgrade Jinja to version 2.11.3. Fixes #1865 2021-02-17 17:23:04 +10:30
grossmj 1add223891 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/handlers/api/controller/server_handler.py
#	gns3server/schemas/project.py
#	gns3server/schemas/qemu.py
#	gns3server/schemas/qemu_template.py
#	gns3server/version.py
#	tests/handlers/api/compute/test_qemu.py
2021-02-16 21:11:40 +10:30
grossmj 3c5bbe04dc Development on 2.2.19dev1 2021-02-16 20:44:58 +10:30
grossmj c213cae500 Release v2.2.18 2021-02-16 19:09:46 +10:30
grossmj 1043be02a6 Merge branch 'master' into 2.2
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
2021-02-16 19:02:12 +10:30
grossmj 56c25727b6 SIGHUP: remove projects with an empty project directory. 2021-02-16 17:00:59 +10:30
grossmj 0b854ffceb Bump version to 2.2.18dev2 2021-02-16 16:35:26 +10:30
piotrpekala7 366e904698 Release web UI 2.2.18 2021-02-15 23:55:14 +01:00
grossmj 16c84e23a9 Catch OSError exception in psutil. Fixes https://github.com/GNS3/gns3-gui/issues/3127 2021-02-15 15:57:24 +10:30
grossmj 64f172fe20 Expose 'auto_open' and 'auto_start' properties in API when creating project. Fixes https://github.com/GNS3/gns3-gui/issues/3119 2021-02-15 15:16:19 +10:30
Jeremy Grossmann bb0206d7d2 Add mtools package information. Ref https://github.com/GNS3/gns3-gui/issues/3076 2021-02-14 14:55:37 +10:30
grossmj 9de61cd671 Fix warning: 'ide-drive' is deprecated when using recent version of Qemu. Fixes https://github.com/GNS3/gns3-gui/issues/3101 2021-02-14 14:39:02 +10:30
grossmj 9e6ccc3f61 Fix bug when starting of vpcs stopped with "quit". Fixes https://github.com/GNS3/gns3-gui/issues/3110 2021-02-14 13:50:10 +10:30
grossmj 4c339eade1 Fix WinError 0 handling 2021-01-27 21:47:14 +10:30
grossmj 128e494134 Stop uBridge if VPCS node has been terminated. Ref https://github.com/GNS3/gns3-gui/issues/3110 2021-01-27 21:03:19 +10:30
Jeremy Grossmann 0e6b97b27b Merge pull request #1856 from BrentBaccala/master
Allow cloned QEMU disk images to be resized before the node starts
2021-01-10 16:57:10 +10:00
Brent Baccala 235a127111 Allow cloned QEMU disk images to be resized before the node starts,
by cloning the disk image in response to a resize request instead
of waiting until the node starts.
2020-12-30 15:36:38 -05:00
Jeremy Grossmann bb51146e80 Merge pull request #1852 from joyme123/update-python-version
fix(readme): update python version from 3.5.3 to 3.6
2020-12-23 14:39:08 +10:30
Pengfei Jiang e6944276a6 fix(readme): update python version from 3.5.3 to 3.6 2020-12-23 11:33:20 +08:00
grossmj 58c1b01439 Add default JWT secret key and fix tests. 2020-12-18 16:51:54 +10:30
grossmj bde706d19a Generate JWT secret key if none is configured in the config file.
Change location of the database.
2020-12-16 18:24:21 +10:30
Jeremy Grossmann 704858fd8d Merge pull request #1847 from b-ehlers/QemuConfig
Add Qemu config disk
2020-12-14 14:22:25 +10:30
grossmj 509e762cda Fix slow tests. 2020-12-07 18:53:40 +10:30
grossmj 6aefb5d32b Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/base_node.py
#	gns3server/version.py
#	gns3server/web/web_server.py
2020-12-07 18:00:33 +10:30
grossmj 62d9ecf2aa Do not build on Windows and add missing packages for Python 3.6 2020-12-07 17:03:34 +10:30
grossmj d47dcb0d6f User authentication with tests. 2020-12-07 16:52:36 +10:30
grossmj 87ede50827 Development on 2.2.18dev1 2020-12-04 18:10:11 +10:30
grossmj 24fe67f82b Release v2.2.17 2020-12-04 16:26:56 +10:30
grossmj 18c878429f Merge branch 'master' into 2.2 2020-12-04 16:22:04 +10:30
grossmj 6c3a070733 Close and remove projects deleted from disks after SIGHUP signal is received. 2020-12-04 16:17:28 +10:30
piotrpekala7 a157ef5a8a Release web UI 2.2.17 2020-12-04 02:59:13 +01:00
grossmj 5244ae6d4c New config file options to configure the VNC console port range. 2020-12-03 18:04:42 +10:30
grossmj bf7cf862af Refactor tests and start work on database integration. 2020-12-02 18:39:08 +10:30
grossmj ae55c0ec9c Fix tests. 2020-11-19 15:27:33 +10:30
grossmj c043830e3f Move endpoints to routes & preparations to use a database. 2020-11-19 15:21:03 +10:30
Jeremy Grossmann db47615d43 Merge pull request #1843 from tirkarthi/fix-asyncio-all-tasks-2.2
Use asyncio.all_tasks instead of deprecated method for Python 3.9 compatibility
2020-11-17 20:05:13 +10:30
Karthikeyan Singaravelan 603683e2c5 Use asyncio.all_tasks instead of deprecated method for Python 3.9 compatibility. 2020-11-17 06:30:47 +00:00
grossmj d58407c735 Fix tests. 2020-11-13 15:32:25 +10:30
grossmj 95ea1fa636 Providing the path to create a project is now deprecated. 2020-11-13 15:17:54 +10:30
grossmj 7837081eba Fix running tests with Python 3.9 2020-11-11 17:38:06 +10:30
grossmj acc5c7ebfa Update package versions.
Do not use Path in schemas (causes issues with empty paths).
Change how notifications are handled.
Run tests with Python 3.9
2020-11-11 17:18:41 +10:30
grossmj bf19da1dc2 Upgrade packages to latest versions 2020-11-08 21:35:54 +10:30
Bernhard Ehlers e45bc5aec1 Fix mcopy error messages 2020-11-05 15:00:44 +01:00
grossmj e13c84bada Fix tests 2020-11-05 18:47:59 +10:30
grossmj 841b013223 SSL support. 2020-11-05 18:24:50 +10:30
grossmj a5d89b428a Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/controller/__init__.py
#	gns3server/controller/compute.py
#	gns3server/schemas/gns3vm.py
#	gns3server/utils/application_id.py
#	gns3server/version.py
#	gns3server/web/web_server.py
2020-11-05 17:15:25 +10:30
grossmj a3ee1d9ee6 Development on 2.2.17dev1 2020-11-05 16:59:58 +10:30
grossmj 0e95e7e023 Release v2.2.16 2020-11-05 15:38:19 +10:30
grossmj 1748250179 Sync appliance files. 2020-11-05 15:30:21 +10:30
grossmj c8ea22c651 Merge branch 'master' into 2.2 2020-11-05 15:05:05 +10:30
grossmj d16cb5ef89 Option to allocate or not the vCPUs and RAM settings for the GNS3 VM. Fixes https://github.com/GNS3/gns3-gui/issues/3069 2020-11-05 11:13:57 +10:30
piotrpekala7 004acdc271 Release web UI 2.2.16 2020-11-04 12:51:25 +01:00
grossmj e182f53d69 Fix wrong defaults for images_path, configs_path, appliances_path. Fixes #1829 2020-11-04 12:30:23 +10:30
grossmj 7314b41d8f Fix tests. 2020-11-02 22:45:01 +10:30
grossmj aef8f0dff3 Use EnvironmentFile for Systemd service. Ref https://github.com/GNS3/gns3-gui/issues/3048 2020-11-02 18:23:41 +10:30
grossmj e2d444928d Add back script to create a self-signed SSL certificate. 2020-11-02 18:09:14 +10:30
grossmj 5a7b5e4e08 Make sure all HTTP exceptions return JSON with a "message" field instead of "detail" 2020-11-02 18:08:25 +10:30
grossmj 30d6f1fa2a Make Swagger Ui the default for API documentation 2020-11-02 12:47:59 +10:30
grossmj 359f9a7384 Move to version 3 of the REST API.
Rename packet capture endpoints.
2020-11-02 12:05:32 +10:30
grossmj eeaf10b418 Put all schemas in the same module. 2020-10-31 16:02:21 +10:30
grossmj 81439c750a Use pydantic for data validation (instead of jsonschema)
Fix/improve various pydantic shema models.
2020-10-31 15:07:12 +10:30
grossmj b6a021dabd Fix SSL support for controller and local compute. Fixes #1826 2020-10-27 23:25:19 +10:30
grossmj 5dab0c2587 Prevent WIC to be added/removed while Dynamips router is running. Fixes https://github.com/GNS3/gns3-gui/issues/3082 2020-10-27 20:08:01 +10:30
grossmj 5d1fdceb98 Fix bug with application id allocation for IOU nodes. Fixes #3079 2020-10-27 19:41:24 +10:30
grossmj d6a65883ee Merge branch 'master' into 3.0 2020-10-24 17:08:19 +10:30
grossmj 5743d47327 Set ident for merge. 2020-10-24 17:04:42 +10:30
grossmj ca69b01d11 Use origin/3.0 for merge into gh-pages branch. 2020-10-24 17:02:44 +10:30
grossmj b2fb2442c8 Change tag for index routes. 2020-10-24 17:00:43 +10:30
grossmj dd785b61cf Work directly on gh-pages branch to generate the API documentation. 2020-10-24 16:59:55 +10:30
grossmj f3a7eba796 Merge branch 'master' into 3.0 2020-10-24 16:49:28 +10:30
grossmj 0f154e5f29 Fix invalid syntax for git merge 2020-10-24 16:45:53 +10:30
grossmj b2d81609be Publish API documentation 2020-10-24 16:32:09 +10:30
grossmj ee6c70e243 Publish API documentation 2020-10-24 16:16:29 +10:30
grossmj f9c4c82da6 Fix merge issues on gh-pages branch, second try. 2020-10-24 16:12:17 +10:30
grossmj 3a136a46a1 Fix merge issues on gh-pages branch 2020-10-24 16:07:48 +10:30
grossmj 34f05e92d5 Merge branch 'master' into 3.0 2020-10-24 15:53:44 +10:30
grossmj a6a35e7c43 Fix publish_api_documentation.yml 2020-10-24 15:42:44 +10:30
grossmj d316ee33df Capitalize openapi tags. 2020-10-24 15:35:53 +10:30
grossmj ec61faa035 Merge branch 'master' into 3.0
# Conflicts:
#	.github/workflows/publish_api_documentation.yml
2020-10-24 15:25:55 +10:30
grossmj 163a867f00 Only automatically build API documentation for 3.0 branch and v3.* tags 2020-10-24 15:24:32 +10:30
grossmj d2b7c9bcbf Do not build API documentation on schedule. 2020-10-24 13:38:32 +10:30
grossmj fb8df1cc6b Fetch all history for all tags and branches in publish_api_documentation.yml 2020-10-24 13:13:19 +10:30
grossmj d063b3e39d Manual trigger API documentation publishing using workflow_dispatch 2020-10-24 13:08:10 +10:30
grossmj e6bf17185e Manual trigger API documentation publishing using workflow_dispatch 2020-10-24 12:52:32 +10:30
grossmj 83fbd1f627 Fix GitHub Actions error: A branch or tag with the name '3' could not be found. 2020-10-24 12:16:05 +10:30
grossmj 1aa6fe8535 Add publish_api_documentation.yml to master branch for scheduled event to work. 2020-10-23 23:03:50 +10:30
grossmj 5bb6ba73f2 Fix syntax error in publish_api_documentation.yml 2020-10-23 23:01:03 +10:30
grossmj e568de0aa9 actions/checkout@v2 to checkout 3.0 branch. 2020-10-23 22:57:09 +10:30
grossmj 3f57f5285d Publish API documentation on gh-pages branch 2020-10-23 22:48:50 +10:30
grossmj b23422e782 Fix publish_api_documentation.yml 2020-10-23 22:29:59 +10:30
grossmj b7ade95c24 Merge remote-tracking branch 'origin/3.0' into 3.0 2020-10-23 21:03:35 +10:30
grossmj e39493f8bd Only publish documentation once a day or on tags. 2020-10-23 21:03:28 +10:30
github-actions 7d72b5e8b9 Publish API documentation 2020-10-23 09:13:49 +00:00
grossmj 98467181de Merge remote-tracking branch 'origin/3.0' into 3.0 2020-10-23 19:42:44 +10:30
grossmj 80d14a98fb Some cleaning in compute.py 2020-10-23 19:42:21 +10:30
github-actions 3a55337d3f Publish API documentation 2020-10-23 08:52:41 +00:00
grossmj b04f9cb6ea Add git add to publish_api_documentation.yml 2020-10-23 19:21:50 +10:30
grossmj da2d4de89f Fix call to publish_api_documentation.py 2020-10-23 19:17:31 +10:30
grossmj 80ca9100b9 Use Python 3.6 to generate the API documentation 2020-10-23 19:14:14 +10:30
grossmj 4cf054061d Remove tests_require from setup.py 2020-10-23 19:10:33 +10:30
grossmj 791d8ac366 Install the GNS3 server in publish_api_documentation.yml 2020-10-23 19:07:30 +10:30
grossmj 10542aef91 Merge remote-tracking branch 'origin/3.0' into 3.0 2020-10-23 19:03:47 +10:30
grossmj 2793f6f9d8 Automate API documentation publishing. 2020-10-23 19:03:19 +10:30
Jeremy Grossmann 407f6efa78 Create CNAME 2020-10-23 18:49:37 +10:30
grossmj 3185ebaa3d Publish API documentation generated by FastAPI. 2020-10-23 18:01:58 +10:30
grossmj 087bbd1a0b Fix tests. 2020-10-22 20:37:34 +10:30
grossmj a08ddce033 Revert compute.py 2020-10-22 20:05:37 +10:30
grossmj 97a91f1899 Overwrite uvicorn loggers. 2020-10-22 19:56:53 +10:30
grossmj 13da8aa8f5 Do not automatically connect to local compute. 2020-10-22 16:47:11 +10:30
grossmj a92c47b310 Add HTTP client to reuse the aiohttp session where needed.
Remove unnecessary aiohttp exceptions.
2020-10-22 16:19:44 +10:30
grossmj 36c8920cd1 Warn not to use the private compute API. Fixes #1593. 2020-10-20 16:27:00 +10:30
grossmj f895b66fca Run tests on Ubuntu only for now. 2020-10-20 11:57:32 +10:30
grossmj f4210108ce Do not run tests on macOS for now. 2020-10-20 11:10:42 +10:30
grossmj c0cab1c3ca Install Windows dependencies to run tests 2020-10-20 11:05:12 +10:30
grossmj 8b415b0b3c Fix testing on Windows. 2020-10-20 10:55:32 +10:30
grossmj a9a5d4e665 Fix syntax error in testing.yml 2020-10-20 10:52:26 +10:30
grossmj 554404e6e7 Try to run tests for Windows and macOS. 2020-10-20 10:50:46 +10:30
grossmj 0500b28aea Fix changing to ProactorEventLoop in tests. 2020-10-20 00:57:06 +10:30
grossmj bd4bf53084 Use ProactorEventLoop with pytest-asyncio 2020-10-20 00:46:46 +10:30
grossmj 25494ca098 Fix project import to work with FastAPI. 2020-10-19 22:39:30 +10:30
grossmj 5653a8afb6 Need another job to run tests on macOS and Windows. 2020-10-19 19:27:57 +10:30
grossmj 596ee9b66d Test compute notifications and run tests on macOS and Windows. 2020-10-19 19:25:32 +10:30
grossmj 6af8c8933e Fix tests. 2020-10-19 18:47:25 +10:30
grossmj b8e8e5cba7 Fix status code 204 must not have a response body. 2020-10-19 18:42:27 +10:30
grossmj 993e6a80e4 Add missing requests package to run tests. 2020-10-19 18:40:01 +10:30
grossmj 5d71ee25ee Fix syntax error. 2020-10-19 18:34:27 +10:30
grossmj af30361f72 Enable GitHub Actions for 3.0 branch 2020-10-19 18:31:38 +10:30
grossmj f20e16074f Fix Docker dev server script. 2020-10-19 18:28:01 +10:30
grossmj be6d4771d0 Migrate PCAP streaming code to work with FastAPI. 2020-10-19 15:55:29 +10:30
grossmj bd8565b2b9 Refactor WebSocket console code to work with FastAPI.
Fix endpoint routes.
2020-10-19 15:00:41 +10:30
Bernhard Ehlers de2b9caeeb Use HDD disk image as startup QEMU config disk 2020-10-19 03:19:22 +02:00
grossmj 5341ccdbd6 Use dependencies and group common HTTP responses in endpoints. 2020-10-14 10:49:29 +10:30
grossmj 58c5965905 Fix tests. 2020-10-13 11:46:18 +10:30
grossmj 46f4e7ef6e Fix update property call for Qemu VMs. 2020-10-12 18:07:00 +10:30
grossmj 0746949207 Merge branch '2.2' into 3.0
# Conflicts:
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/handlers/api/compute/qemu_handler.py
#	gns3server/handlers/api/controller/symbol_handler.py
#	gns3server/version.py
#	tests/compute/qemu/test_qemu_vm.py
#	tests/endpoints/compute/test_qemu_nodes.py
#	tests/endpoints/controller/test_nodes.py
2020-10-12 18:04:49 +10:30
grossmj 362701f5aa Allow commas in image paths and VM name for Qemu VMs. Fixes https://github.com/GNS3/gns3-gui/issues/3065 2020-10-11 14:02:22 +10:30
grossmj 91244456f5 Handle comma in disk path for Qemu VMs. Fixes https://github.com/GNS3/gns3-gui/issues/3065 2020-10-08 22:09:03 +10:30
grossmj 88ab528977 Development on 2.2.16dev1 2020-10-07 16:30:03 +10:30
grossmj 7d031e71a0 Release v2.2.15 2020-10-07 15:29:52 +10:30
grossmj c46c095fcb Sync appliance files. 2020-10-07 15:24:15 +10:30
grossmj e592b95639 Revert "Add info log to show where custom symbols are searched from."
This reverts commit 593e3795
2020-10-07 15:20:28 +10:30
grossmj 593e379523 Add info log to show where custom symbols are searched from. 2020-10-07 15:19:09 +10:30
grossmj d451d3125e Fix symbol retrieval issue. Ref #1824 2020-10-07 11:48:11 +10:30
grossmj e014d36ad2 Skip tests not working on Windows. 2020-10-06 17:40:36 +10:30
grossmj c248764efb Fixes update() missing 2 required positional arguments: 'name' and 'value'. Fixes #1821 #1825 2020-10-06 17:08:51 +10:30
grossmj 0259696872 Fix Hyper-V based GNS3 VM WMI issue. Fixes #1822 2020-10-06 16:42:50 +10:30
grossmj 165ba4d8d5 Merge branch 'master' into 2.2 2020-10-06 12:30:08 +10:30
piotrpekala7 8049ab8b64 Release 2020.4.0-beta.1 2020-10-05 15:42:19 +02:00
grossmj eb3cb8a41f Migration to FastAPI 2020-10-02 16:07:50 +09:30
grossmj 2857cab94e Development on 2.2.15dev1 2020-09-15 06:49:11 +09:30
grossmj 326841cd9e Release v2.2.14 2020-09-15 05:52:47 +09:30
grossmj dacc5ef9cd Merge branch 'master' into 2.2 2020-09-15 05:28:00 +09:30
piotrpekala7 dd1e4f655e Release 2020.3.0-beta.4 2020-09-14 18:35:17 +02:00
grossmj bf4550bf78 Fix tests. Ref https://github.com/GNS3/gns3-gui/issues/3047 2020-09-13 23:23:08 +09:30
grossmj 399f1c082e Add '-smp sockets=1' by default for Qemu VMs. Ref https://github.com/GNS3/gns3-gui/issues/3047 2020-09-13 23:16:52 +09:30
grossmj 919abdc052 Sync appliance files. 2020-09-12 23:08:38 +09:30
grossmj 992cd7fc6c Implement full restart if user reload a Qemu VM which has been updated. Fixes https://github.com/GNS3/gns3-gui/issues/3038 2020-09-12 23:07:39 +09:30
grossmj 90ecefd455 Development on 2.2.14dev1 2020-09-05 04:26:16 +09:30
grossmj b4c7823696 Release v2.2.13 2020-09-04 23:13:28 +09:30
grossmj ffde704251 Merge branch 'master' into 2.2 2020-09-04 23:10:09 +09:30
piotrpekala7 8c00cd0a84 Release 2020.3.0-beta.3 2020-09-04 12:54:48 +02:00
grossmj 2bf625e000 Fix issue when resuming Qemu VM. Fixes https://github.com/GNS3/gns3-gui/issues/3027 2020-09-04 18:02:21 +09:30
grossmj 5305117a75 Sync appliance files. 2020-09-04 01:59:45 +09:30
grossmj 4843084158 Prioritize the config disk over HD-D for Qemu VMs.
Fixes https://github.com/GNS3/gns3-gui/issues/3036

(cherry picked from commit c12b675691)
2020-08-18 10:54:11 +09:30
grossmj c12b675691 Prioritize the config disk over HD-D for Qemu VMs.
Fixes https://github.com/GNS3/gns3-gui/issues/3036
2020-08-18 10:54:11 +09:30
Jeremy Grossmann 01db2d2a86 Create config disk property false by default for Qemu templates
Ref https://github.com/GNS3/gns3-gui/issues/3035

(cherry picked from commit a2e884e315)
2020-08-17 12:45:57 +09:30
Jeremy Grossmann a2e884e315 Create config disk property false by default for Qemu templates
Ref https://github.com/GNS3/gns3-gui/issues/3035
2020-08-17 12:45:57 +09:30
Jeremy Grossmann fa26555d00 Merge pull request #1801 from GNS3/qemu-config-disk
QEMU config disk - enable QEMU config import/export
2020-08-15 16:35:20 +08:00
grossmj f2ddef855f Fix tests.
(cherry picked from commit 620d93634e)
2020-08-15 16:35:31 +09:30
grossmj 620d93634e Fix tests. 2020-08-15 16:35:31 +09:30
grossmj ec02150fd2 Set default disk interface type to "none".
Fail-safe: use "ide" if an image is set but no interface type is configured.
Use the HDA disk interface type if none has been configured for HDD.

(cherry picked from commit 464fd804ce)
2020-08-15 16:14:16 +09:30
grossmj 464fd804ce Set default disk interface type to "none".
Fail-safe: use "ide" if an image is set but no interface type is configured.
Use the HDA disk interface type if none has been configured for HDD.
2020-08-15 16:14:16 +09:30
grossmj a56b816c1a Add explicit option to automatically create or not the config disk. Off by default.
(cherry picked from commit 56aba96a5f)
2020-08-14 17:57:24 +09:30
grossmj 56aba96a5f Add explicit option to automatically create or not the config disk. Off by default. 2020-08-14 17:57:24 +09:30
grossmj 9d3f7c79a2 Fix more tests
(cherry picked from commit 546982d1ea)
2020-08-13 17:18:45 +09:30
grossmj 546982d1ea Fix more tests 2020-08-13 17:18:45 +09:30
grossmj c684c554bf Fix tests
(cherry picked from commit 2ba6eac113)
2020-08-13 17:10:31 +09:30
grossmj 2ba6eac113 Fix tests 2020-08-13 17:10:31 +09:30
grossmj cad7431069 Bump version to 2.3.0dev2 2020-08-13 01:49:25 +09:30
grossmj 9890126453 Merge branch '2.2' into 2.3
# Conflicts:
#	gns3server/notification_queue.py
#	gns3server/version.py
2020-08-13 01:48:26 +09:30
Jeremy Grossmann 94b27590a7 Merge pull request #1804 from GNS3/aux-console-refactoring
Auxiliary console support
2020-08-12 15:58:32 +08:00
grossmj 97e731a7d9 Development on 2.2.13dev1 2020-08-07 21:12:46 +09:30
grossmj 2c08166510 Release v2.2.12 2020-08-07 19:27:32 +09:30
grossmj 940f004752 Sync appliance files 2020-08-07 19:24:01 +09:30
grossmj f083649021 Merge branch 'master' into 2.2 2020-08-07 19:03:50 +09:30
piotrpekala7 aeb82de78a Release 2020.3.0-beta.2 2020-08-07 09:57:52 +02:00
grossmj 6761ae3445 Catch exception when psutil returns OSError 2020-08-06 13:37:27 +09:30
grossmj 855a95de49 Fix tests. Fixes #1796 2020-07-30 14:58:22 +09:30
grossmj 3c1a1eb4ef Fix tests. 2020-07-29 16:32:45 +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
Jeremy Grossmann d022259561 Downgrade psutil to version 5.6.7 2020-07-28 21:03:41 +09:30
Jeremy Grossmann 380e7a8a7f Downgrade psutil to version 5.6.7 2020-07-28 21:03:24 +09:30
grossmj 65c8bb6754 Fix AUX console not allocated for Dynamips IOS routers. 2020-07-27 18:42:36 +09:30
grossmj 12732aaf83 Disallow to rename a running node. Fixes https://github.com/GNS3/gns3-gui/issues/2499 2020-07-27 15:06:17 +09:30
grossmj 831ee5f468 Support to reset all console connections. Ref https://github.com/GNS3/gns3-server/issues/1619 2020-07-26 18:27:18 +09:30
grossmj f97d346c34 Support to reset links. Fixes https://github.com/GNS3/gns3-server/issues/1620 2020-07-24 21:48:49 +09:30
grossmj cbcdaabcce Fix tests. Ref #1674 2020-07-24 15:22:11 +09:30
grossmj 01b2c72767 Add maxcpus property for Qemu VMs. Ref #1674 2020-07-24 15:15:41 +09:30
grossmj 89b5629cf5 Upgrade to psutil version 5.7.2 2020-07-21 15:49:57 +09:30
grossmj 47bb2edbfa Upgrade to psutil version 5.7.2 2020-07-21 15:49:06 +09:30
Bernhard Ehlers 068c31038f QEMU config disk - improve error handling 2020-07-19 17:56:49 +09:30
Bernhard Ehlers 2bbee15b18 QEMU config disk - notification of import/export errors 2020-07-19 17:56:49 +09:30
Bernhard Ehlers 50c49cfedb QEMU config disk - notification of import/export errors 2020-07-19 17:56:49 +09:30
Bernhard Ehlers b672900406 QEMU config disk - use disk interface of HD-D, fallback is HD-A 2020-07-19 17:56:49 +09:30
Bernhard Ehlers 2e0fba925b QEMU config disk - add missing config disk to image directory 2020-07-19 17:56:49 +09:30
Bernhard Ehlers 450c6cddc7 QEMU config disk - get rid of mtoolsrc 2020-07-19 17:56:48 +09:30
Bernhard Ehlers 5c44268476 QEMU config disk - preserve file timestamp on zip unpack 2020-07-19 17:56:48 +09:30
Bernhard Ehlers b69965791d QEMU config disk - initial implementation. Ref #2958 2020-07-19 17:56:48 +09:30
grossmj a9e9ff071d Read folder structure correctly for custom symbols. Fixes https://github.com/GNS3/gns3-gui/issues/2856 2020-07-19 17:46:49 +09:30
grossmj 3dc4ea46d6 Add total RAM, CPUs and disk size to servers summary as well as disk usage in percent. Fixes https://github.com/GNS3/gns3-server/issues/1532 2020-07-19 14:16:07 +09:30
Jeremy Grossmann 00a6765405 Merge pull request #1800 from GNS3/docker-resource-constraints
Resource constraints for Docker VMs.
2020-07-18 19:39:01 +08:00
grossmj d1c29c8bb7 Resource constraints for Docker VMs. 2020-07-18 21:03:55 +09:30
grossmj 0afce89c0b Fix exception when exporting debug data. Fixes #1684 2020-07-18 17:30:18 +09:30
grossmj e4978004d0 Update IOUtools. Ref #1627 2020-07-17 21:37:25 +09:30
grossmj 7471b31b0c Fix tests. 2020-07-17 15:34:00 +09:30
grossmj 05ed9836e4 Fix tests. 2020-07-17 15:33:30 +09:30
grossmj 37c7202aa0 Use parent directory as working directory for project duplication and snapshots. Fixes https://github.com/GNS3/gns3-gui/issues/2909 2020-07-17 15:11:14 +09:30
grossmj 0390fef74d Use parent directory as working directory for project duplication and snapshots. Fixes https://github.com/GNS3/gns3-gui/issues/2909 2020-07-17 15:09:43 +09:30
grossmj dff035d957 Support for "usage" for "Cloud" nodes. Fixes https://github.com/GNS3/gns3-gui/issues/2887
Allow "usage" for all builtin nodes (not exposed in Ui).
2020-07-15 19:15:51 +09:30
grossmj d11897c1ec Bump version to 2.3.0dev1 2020-07-11 11:41:51 +09:30
grossmj 99128e7713 Fix Key Error "vendor_id" is missing when configuring GNS3 VM with VirtualBox. Fixes https://github.com/GNS3/gns3-gui/issues/3018 2020-07-10 17:44:38 +09:30
grossmj c40651b53e Development on 2.2.12dev1 2020-07-09 21:37:03 +09:30
grossmj c4d2422fe2 Release v2.2.11 2020-07-09 20:37:10 +09:30
grossmj f08f7702d1 Sync appliance files. 2020-07-09 20:26:41 +09:30
grossmj b787cb3ace Merge branch 'master' into 2.2 2020-07-09 20:23:20 +09:30
grossmj 62130c116a Fix crash when project sets 'auto_open' option and a remote GNS3 VM is used. Fixes https://github.com/GNS3/gns3-gui/issues/3014 2020-07-09 20:13:21 +09:30
grossmj 1cbed45f16 Fix Dynamips ghost image support when project contains a space. Fixes #3015 2020-07-08 20:32:58 +09:30
piotrpekala7 29b31d72e9 Release 2020.3.0-beta.1 2020-07-07 14:05:24 +02:00
Bernhard Ehlers 9acb2ceda1 QEMU config disk - improve error handling
(cherry picked from commit 068c31038f)
2020-07-03 11:31:17 +02:00
grossmj ea17cc2565 Fix issue when cannot skip slots for Dynamips routers. Fixes https://github.com/GNS3/gns3-gui/issues/3000 2020-06-29 20:00:30 +09:30
grossmj 850c30f958 Merge branch 'master' into 2.2
# Conflicts:
#	tests/handlers/api/compute/test_dynamips.py
#	tests/handlers/api/compute/test_qemu.py
2020-06-29 18:44:46 +09:30
grossmj 27da8458e8 Allow tests to be run by root. Fixes #1784 2020-06-29 18:43:35 +09:30
Bernhard Ehlers 053828f3e8 QEMU config disk - init config disk in base class
(cherry picked from commit 2bbee15b18)
2020-06-28 16:35:39 +02:00
Bernhard Ehlers f747b3a880 QEMU config disk - notification of import/export errors
(cherry picked from commit 50c49cfedb)
2020-06-28 09:21:57 +02:00
grossmj 8bd3e2346b Add Snyk badges. 2020-06-27 18:27:04 +09:30
grossmj 74fc4fc75c Merge branch 'master' into 2.2 2020-06-26 21:30:27 +09:30
grossmj d0487b92c5 Remove pyup and pep8 script. 2020-06-26 19:20:40 +09:30
grossmj 7924963276 Remove tox and update dependencies 2020-06-26 19:08:21 +09:30
grossmj d7083541b0 Remove Travis CI support and add GitHub Actions badge 2020-06-26 18:55:52 +09:30
grossmj af22fb8e98 Comment unused code that causes issue with flake8 2020-06-26 18:47:31 +09:30
grossmj 03c4643a0f Merge remote-tracking branch 'origin/master' 2020-06-26 18:35:49 +09:30
grossmj 4ba7131451 Add flake8 in dev-requirements.txt 2020-06-26 18:35:25 +09:30
Jeremy Grossmann 3af71d8976 Set up GitHub Action for running tests 2020-06-26 18:31:58 +09:30
Jeremy Grossmann f361b9cb3e Merge pull request #1790 from GNS3/whitesource/configure
Configure WhiteSource for GitHub.com
2020-06-26 09:04:09 +08:00
whitesource-for-github-com[bot] 12d3ba391f Add .whitesource configuration file 2020-06-26 01:01:48 +00:00
Jeremy Grossmann 88ee9ae8b9 Merge pull request #1788 from GNS3/snyk-fix-4af38289923e34d863acdf00d9e8d3b3
[Snyk] Security upgrade psutil from 5.6.6 to 5.6.7
2020-06-24 21:08:26 +08:00
snyk-bot 9665378f44 fix: requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-PSUTIL-483082
2020-06-24 13:06:58 +00:00
grossmj fd411e7855 Update classifiers in setup.py 2020-06-24 12:40:31 +09:30
grossmj 7fd8fde020 Some fixes for tests. Ref #1784 2020-06-19 19:05:23 +09:30
grossmj 51b76b1e30 Development on 2.2.11dev1 2020-06-18 19:06:00 +09:30
grossmj 9a9e54c523 Release v2.2.10 2020-06-18 12:29:33 +09:30
grossmj 13a6b4fe55 Merge branch 'master' into 2.2 2020-06-18 12:23:10 +09:30
grossmj 3b4f4bfeda Sync appliances. 2020-06-18 12:20:42 +09:30
grossmj a018c8e1a8 Add pytest-aiohttp to tests_require in setup.py 2020-06-18 12:04:15 +09:30
grossmj 79b93defbd Don't require hardware acceleration. Fixes #1780 2020-06-18 11:26:14 +09:30
Bernhard Ehlers 750590d0db QEMU config disk - use disk interface of HD-D, fallback is HD-A
(cherry picked from commit b672900406)
2020-06-17 17:06:55 +02:00
piotrpekala7 72bef07f2b Release 2020.2.0-beta.5 2020-06-17 15:58:43 +02:00
Jeremy Grossmann 3344cfb98a Merge pull request #1782 from GNS3/test-refactoring
Refactor tests
2020-06-17 11:13:13 +08:00
grossmj 9d141baf22 Comment capsys tests 2020-06-16 21:27:49 +09:30
grossmj 1a4c2ed069 Try to fix capsys issue with Python 3.8 (third try) 2020-06-16 21:19:51 +09:30
grossmj 7fb554135f Try to fix capsys issue with Python 3.8 (second try) 2020-06-16 21:11:29 +09:30
grossmj 241caa1ec7 Try to fix capsys issue with Python 3.8 2020-06-16 20:56:10 +09:30
grossmj d33584a2e4 More specific fix for Windows 2020-06-16 19:16:58 +09:30
grossmj 438b1c056c Remove '\n' from for version strings for test_parse_arguments test. 2020-06-16 19:16:05 +09:30
grossmj ef23e74e9c Another fix for test_gns3vm.py 2020-06-16 19:09:49 +09:30
grossmj 9ab8599e1e Fix other issues with tests. 2020-06-16 19:03:42 +09:30
grossmj d9ab29a9e0 Another fix for test_gns3vm.py 2020-06-16 18:52:07 +09:30
grossmj 09e9382df1 Do not try to use ProactorEventLoop() on non Windows platforms. 2020-06-16 18:45:11 +09:30
grossmj 8976384a56 Fix test_gns3vm.py 2020-06-16 18:37:32 +09:30
grossmj e4b7e46444 Fix tests for Windows 2020-06-16 01:57:16 -07:00
grossmj 1d4c3a164d Use the ProactorEventLoop on Windows. 2020-06-16 14:08:17 +09:30
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 f498ab06b4 Wait longer for x11 socket file to be created. Ref #1761 2020-06-10 20:37:13 +09:30
grossmj 3940f013d4 Allow Hyper-V to run on AMD when Windows 10 build 19640 or later is detected. Fixes #1777 2020-06-10 15:21:58 +09:30
grossmj e1dab0dff4 Show error message if IPv6 is not enabled when using SPICE console. Fixes #1772 2020-06-09 15:06:41 +09:30
grossmj c6da24f267 Move jsonschema 2.6.0 requirement in build repository.
https://github.com/GNS3/gns3-server/issues/1751
https://github.com/GNS3/gns3-gui/issues/2849

This is to avoid the following error:

```
ERROR: Double requirement given: jsonschema==2.6.0 (from -r gns3-gui\win-requirements.txt (line 4)) (already in jsonschema==3.2.0 (from -r gns3-gui\requirements.txt (line 1)), name='jsonschema')
```
2020-06-07 13:07:16 +09:30
grossmj 1f149769f2 Only use jsonschema 2.6.0 on Windows and macOS.
https://github.com/GNS3/gns3-server/issues/1751
https://github.com/GNS3/gns3-gui/issues/2849
2020-06-07 12:55:22 +09:30
grossmj ee70a6a27d Disable default integrations for sentry sdk. 2020-06-06 15:37:17 +09:30
grossmj 297d1a0aae Remove unused bytes2human function 2020-06-05 13:10:01 +09:30
grossmj 05e8fd3ff5 Development on 2.2.10dev1 2020-06-04 21:06:30 +09:30
grossmj c0c8151480 Release v2.2.9 2020-06-04 18:39:27 +09:30
grossmj ad7277c938 Merge branch 'master' into 2.2 2020-06-04 12:21:52 +09:30
Jeremy Grossmann 0c2e4d2de9 Merge pull request #1768 from GNS3/replicate-network-connection-state
Support to activate/deactive network connection state replication in Qemu
2020-06-04 10:49:47 +08:00
grossmj 1264680b51 Sync appliances. 2020-06-04 12:18:16 +09:30
piotrpekala7 a9697e925c Release 2020.2.0-beta.4 2020-06-03 19:15:56 +02:00
Jeremy Grossmann 16a0e1c308 Merge pull request #1771 from eknoes/patch-1
Fix link for appliance JSON schema
2020-06-03 19:48:07 +08:00
eknoes f53d6f1b66 Fix link for appliance JSON schema 2020-06-03 13:46:48 +02:00
grossmj 58a19af9ac Support to activate/deactive network connection state replication in Qemu. 2020-06-02 18:45:22 +09:30
grossmj a796f1e42e Possible fix for problem connecting to the GNS3 VM. Ref https://github.com/GNS3/gns3-gui/issues/2969 #1760 2020-06-01 19:40:53 +09:30
Jeremy Grossmann 6e4187741c Merge pull request #1764 from GNS3/reset-mac-addresses
Option to reset MAC addresses when exporting or duplicating a project
2020-05-27 10:53:24 +08:00
grossmj 8eefaa3f32 Option to reset or not all MAC addresses when exporting or duplicating a project. 2020-05-27 12:14:47 +09:30
grossmj 5575657318 Fix tests. Ref #1754 2020-05-26 21:40:41 +09:30
grossmj 69b816e21e Fix bug when changing properties for closed project. Fixes #1754 2020-05-26 18:34:20 +09:30
grossmj 5c3bd589b9 Fix issues with crash reporting & bump version to 2.2.9dev2. Ref https://github.com/GNS3/gns3-server/issues/1758 2020-05-21 18:19:19 +09:30
grossmj 1a20cbeefd Lock listing VMs. Ref #1755 2020-05-20 19:33:56 +09:30
grossmj da85d7b827 Try to fix error when listing Hyper-V VMs. Ref #1755 2020-05-20 19:19:04 +09:30
grossmj 7002b026fc Catch VirtualBox errors when listing VMs. Fixes #1759 2020-05-20 18:42:50 +09:30
grossmj 00f8a27404 Merge branch 'master' into 2.2
# Conflicts:
#	requirements.txt
2020-05-19 16:16:19 +09:30
grossmj 5b59a09e8d Deprecate running with Python 3.5 2020-05-19 16:14:58 +09:30
grossmj 16ca0fd915 aiocontextvars is only necessary for Python < 3.7 2020-05-19 16:04:14 +09:30
grossmj c63aad8eca Replace Raven by Sentry SDK. Fixes https://github.com/GNS3/gns3-server/issues/1758 2020-05-19 15:48:53 +09:30
grossmj 54bab7445c Require setuptools>=17.1 in setup.py. Ref https://github.com/GNS3/gns3-server/issues/1751
This is to support environmental markers.
https://github.com/pypa/setuptools/blob/master/CHANGES.rst#171
2020-05-08 12:34:57 +09:30
grossmj 32a8bc54a1 Development on 2.2.9dev1 2020-05-07 23:10:19 +09:30
grossmj dadbacd8a4 Release v2.2.8 2020-05-07 18:10:57 +09:30
grossmj 9032fd2a5c Merge branch 'master' into 2.2 2020-05-07 12:51:46 +09:30
piotrpekala7 eb0d4439a0 Release 2020.2.0-beta.3 2020-05-07 00:02:33 +02:00
grossmj 91a1c5db49 Redirection to the bundled web-ui in the root handler 2020-05-06 16:31:18 +09:30
grossmj 0a77233631 Fix root handler for web-ui 2020-05-06 15:38:16 +09:30
grossmj 8df8b73c8f Merge branch 'master' into 2.2 2020-05-06 11:59:00 +09:30
piotrpekala7 6968ae9295 Release 2020.2.0-beta.2 2020-05-05 23:39:24 +02:00
grossmj 1c9a43d071 Update appliance files. 2020-05-05 14:29:43 +09:30
grossmj a4bc696a5f Fix tests 2020-05-05 13:19:51 +09:30
grossmj 10645a412b Default port set to 80 for server running in the GNS3 VM. Fixes #1737 2020-05-05 12:40:50 +09:30
grossmj 1b008fb516 Sync appliance files. 2020-05-01 19:21:43 +09:30
grossmj 45d135911f Fix tests. 2020-04-30 20:36:12 +09:30
grossmj 3626bd5adb Make the Web UI the default page. Ref https://github.com/GNS3/gns3-server/issues/1737 2020-04-30 17:27:06 +09:30
grossmj 6c322bbdde Fix tests. 2020-04-30 15:49:06 +09:30
grossmj 02c0fa26e1 Support controller reloading for templates, appliances and projects. Ref #1743 2020-04-30 15:30:50 +09:30
Jeremy Grossmann 99a238a0dc Update README Ref #1719 2020-04-29 14:57:15 +09:30
grossmj 7b61724213 Remove unused variable. Ref #1744 2020-04-28 17:55:00 +09:30
grossmj 72c6f5b484 Return exit status 1 if server fails to start. Fixes #1744 2020-04-28 14:39:28 +09:30
grossmj 8536af33da Fix tests. 2020-04-28 13:49:05 +09:30
grossmj 4ddd45f788 Merge branch 'master' into 2.2 2020-04-28 13:14:53 +09:30
Jeremy Grossmann 53b1809dc3 Merge pull request #1742 from fadlytabrani/patch-1
Add clipboard support for TigerVnc
2020-04-27 20:34:41 -07:00
grossmj dd11d38338 Fix tests. 2020-04-27 22:48:42 +09:30
grossmj c0adc88592 Use Environmental Markers to force jsonschema version. Fixes https://github.com/GNS3/gns3-gui/issues/2849
Version 3.2.0 with Python >= 3.8
Version 2.6.0 with Python < 3.8
2020-04-27 12:54:17 +09:30
grossmj 2c9afbb217 Merge remote-tracking branch 'origin/2.2' into 2.2 2020-04-27 12:43:28 +09:30
grossmj 770841b3ee Use Environmental Markers to force jsonschema version 2.6.0 on Windows/macOS. Ref https://github.com/GNS3/gns3-gui/issues/2849 2020-04-27 12:43:07 +09:30
Jeremy Grossmann 896e99d046 Merge pull request #1745 from b-ehlers/2.2
Implement a minimum interval between cpu_percent() calls. Fixes #1738
2020-04-19 21:16:06 -07:00
Bernhard Ehlers 10bb259248 Implement a minimum interval between cpu_percent() calls. Fixes #1738 2020-04-19 20:42:46 +02:00
Bernhard Ehlers 4ab100b716 Revert "Implement a minimum interval between psutil calls. Fixes #2262"
This reverts commit 3a09bd43dc.
2020-04-19 20:06:47 +02:00
Bernhard Ehlers 347035a99b QEMU config disk - add missing config disk to image directory
(cherry picked from commit 2e0fba925b)
2020-04-16 11:07:56 +02:00
Bernhard Ehlers 0db0f6256b QEMU config disk - get rid of mtoolsrc
(cherry picked from commit 450c6cddc7)
2020-04-15 20:50:59 +02:00
fadlytabrani 6fd60452c4 Add clipboard support for TigerVnc
There's currently no clipboard support for servers running on TigerVnc. TigerVnc clipboard support is provided by vncconfig that needs to be spawned for every display socket. The code changes above provides that functionality
2020-04-16 00:14:20 +10:00
Jeremy Grossmann a2d57f7c37 Merge pull request #1741 from candlerb/candlerb/snasphot
Correct typo "Snasphot"
2020-04-15 02:53:01 -07:00
Jeremy Grossmann fb153e3c71 Merge pull request #1740 from candlerb/candlerb/1739
Sort snapshots by (created_at, name)
2020-04-15 02:51:55 -07:00
Brian Candler 69986b0d0f Correct typo "Snasphot" 2020-04-15 09:46:45 +01:00
Brian Candler 06a6a0a332 Sort snapshots by (created_at, name)
Fixes #1739
2020-04-15 09:41:50 +01:00
grossmj 2606c2d9a7 Merge branch '2.3'
# Conflicts:
#	gns3server/version.py
2020-04-08 19:39:35 +09:30
grossmj 57067a99fa Development on 2.2.8dev1 2020-04-08 01:26:42 +09:30
grossmj 087cba3903 Release v2.2.7 2020-04-08 00:03:13 +09:30
grossmj 0a5995b11c Merge branch 'master' into 2.2 2020-04-07 23:58:50 +09:30
piotrpekala7 4f3fd65377 Release 2020.2.0-beta.1 2020-04-07 16:11:44 +02:00
Bernhard Ehlers 99d9728360 QEMU config disk - preserve file timestamp on zip unpack
(cherry picked from commit 5c44268476)
2020-04-07 14:11:00 +02:00
Bernhard Ehlers 6a1eef0627 QEMU config disk - initial implementation. Ref #2958
(cherry picked from commit b69965791d)
2020-04-06 12:56:00 +02:00
grossmj 42eaf97e9f Fix uBrigde error popups when Docker image has stopped. Fixes https://github.com/GNS3/gns3-gui/issues/2957 2020-04-06 13:52:04 +09:30
grossmj 55a5ce77ba Remove debug message 2020-04-06 11:51:59 +09:30
Jeremy Grossmann 0922159686 Merge pull request #1731 from torstehu/fix-literal-warning
fix warning that you are explicitly comparing literals
2020-04-02 19:35:30 -07:00
Torstein Husebø f9ab4ffb96 fix warning that you are explicitly comparing literals 2020-04-02 21:26:23 +02:00
Jeremy Grossmann 241937b80b Merge pull request #1715 from GNS3/websocket-console
Support for WebSocket consoles
2020-03-27 21:44:25 -07:00
grossmj b179ca88a7 Merge branch 'master' into 2.3
# Conflicts:
#	gns3server/version.py
2020-03-28 13:43:50 +10:30
grossmj 4bed19f20a Release v2.2.6 2020-03-26 12:37:59 +10:30
grossmj 4bc1e5e02e Merge branch 'master' into 2.2 2020-03-26 12:15:16 +10:30
grossmj d5b6fda270 Remove --local when starting Docker dev server. 2020-03-26 12:06:05 +10:30
piotrpekala7 720f52655e Release 2020.1.0-alpha.1 2020-03-25 00:43:14 +01:00
piotrpekala7 4df10d1427 Release 2019.2.0-alpha.11 2020-03-25 00:26:02 +01:00
grossmj aa83fcc7d1 Monitor ubrige processes. 2020-03-20 21:30:05 +10:30
grossmj afbbf7a524 Add Xvnc command to the VNC servers list. Fixes #172 2020-03-19 19:06:51 +10:30
grossmj b24bb42a66 Allow controller to reconnect to compute if communication is lost. Ref #1634 2020-03-19 18:02:01 +10:30
grossmj aa1b621c10 Improvement of support for docker USER directive. Fixes #1727. 2020-03-19 17:50:27 +10:30
grossmj 6aed064a86 Fix cannot delete Dynamips router the content of the "usage" field. Fixes https://github.com/GNS3/gns3-gui/issues/2947 2020-03-16 16:38:23 +10:30
grossmj 615cffd9ac Prevent locked drawings to be deleted. Fixes https://github.com/GNS3/gns3-gui/issues/2948 2020-03-16 16:30:08 +10:30
grossmj 868c39acfe Fix issues with empty project variables. Fixes https://github.com/GNS3/gns3-gui/issues/2941 2020-03-14 17:22:43 +10:30
grossmj 392678e757 Upgrade psutil to version 5.6.6 due to CVE-2019-18874
https://github.com/advisories/GHSA-qfc5-mcwq-26q8
2020-03-14 15:47:12 +10:30
grossmj a62168fde0 Return array for controller statistics endpoint 2020-03-10 17:48:14 +10:30
grossmj 3df348ac2a Server statistics implementation 2020-03-10 17:48:03 +10:30
grossmj d9c264ce77 Sync appliances. 2020-03-06 12:05:19 +10:30
grossmj 6eb62ad179 Remove 'format=raw' from the Qemu options of the disk interfaces. Ref #1699 2020-02-24 20:06:45 +08:00
Jeremy Grossmann 966e644c51 Merge pull request #1718 from GNS3/iou-application-id
Allocate application IDs for IOU nodes on the controller. Fixes #557
2020-02-10 15:27:50 +08:00
grossmj c5412bf970 Allocate application IDs for IOU nodes on the controller.
An application ID is used by IOU to generate its interface Mac addresses. They must be unique across all opened projects sharing the same computes to avoid Mac address collisions.
2020-02-10 15:20:49 +08:00
grossmj 6cb87ef25d Sync appliance files. 2020-02-04 16:48:11 +08:00
grossmj 3484a7dd3d Unprotected access for websocket consoles.
Ref https://github.com/GNS3/gns3-gui/issues/2883#issuecomment-580677552
2020-01-31 18:30:26 +08:00
grossmj c313475f68 Support for WebSocket consoles 2020-01-31 17:31:27 +08:00
grossmj e90262eb95 Require VirtualBox >= 6.0 on AMD and >= 6.1 on Intel processors (for GNS3 VM only). Fixes #1610 2020-01-26 18:23:17 +08:00
Jeremy Grossmann f7a6a0d466 Merge pull request #1714 from GNS3/qemu-changes
Recent Qemu versions support. Ref #1699
2020-01-25 16:05:03 +07:00
grossmj 92ac250bc7 Add nvme disk interface and fix scsi disk interface for Qemu VMs. 2020-01-25 16:22:34 +08:00
grossmj 667d50aa4a Disallow using "legacy networking mode" with Qemu >= 2.9.0 2020-01-24 19:06:24 +08:00
grossmj d796f8d112 Add latest Qemu nic models. 2020-01-24 19:05:46 +08:00
grossmj fb4ece5c67 Attempt to fix error when loading wmi module. Fixes #1712 2020-01-23 19:04:17 +08:00
grossmj ab4b391a02 Handle "aborted" state for VirtualBox VMs. Fixes #1702 2020-01-23 18:00:33 +08:00
grossmj dcdaffa056 Change how Hyper-V VMs are found. Ref #1612 2020-01-21 18:03:07 +08:00
Jeremy Grossmann 39d44c8480 Merge pull request #1713 from GNS3/server-statistics
Server statistics implementation. Ref #1682
2020-01-17 04:17:01 -05:00
grossmj c3b2128fae Return array for controller statistics endpoint 2020-01-17 17:07:30 +08:00
grossmj 941bed9605 Server statistics implementation 2020-01-17 16:50:17 +08:00
grossmj 12a8831c44 Change version to 2.3.0dev1 on 2.3 branch 2020-01-16 18:06:51 +08:00
grossmj 60cc5c7bb4 Development on 2.2.6dev1 2020-01-10 00:32:10 +08:00
grossmj 6d66e4d5d5 Release v2.2.5 2020-01-09 23:52:40 +08:00
grossmj 82b42fffef Development on 2.2.5dev1 2020-01-09 05:17:01 +08:00
grossmj fe8fd828b6 Release v2.2.4 2020-01-09 00:45:09 +08:00
grossmj e127dc302e Merge branch 'master' into 2.2 2020-01-08 13:29:21 +08:00
grossmj c52abd973e Sync documentation 2020-01-08 10:52:15 +08:00
grossmj 114da9764b Fix tests. 2020-01-08 08:59:55 +08:00
grossmj 0a87ee573c Accept a node name when creating a node from a template using the API. Fixes #1708 2020-01-08 08:19:33 +08:00
grossmj 688b1ac0e4 Fix tests. 2020-01-08 07:10:33 +08:00
grossmj 500b5b0b65 Fix tests. 2020-01-08 06:03:31 +08:00
grossmj e428865d19 Sync appliances. 2020-01-08 05:38:34 +08:00
grossmj 98f5454ccb Disallow to modify a template if changes cannot be written on disk. Fixes #1695 2020-01-08 05:35:46 +08:00
grossmj a47fa83cec Fix renaming IOL hostname replaces %h only in a single place. Fixes #1707 2020-01-08 01:24:47 +08:00
Jeremy Grossmann e3e6790943 Merge pull request #1710 from CapnCheapo/patch-1
Add symbols_path
2020-01-04 13:31:01 -05:00
Stephen C. Moore 2a77841961 Add symbols_path
Added symbols_path so everybody knows that's a config option.
2020-01-04 10:29:06 -06:00
Piotr Pekala 8fbd4602e8 Release 2019.2.0-alpha.11 2019-12-30 05:09:54 -08:00
grossmj 825dc5996d Change the default UDP port range to be 20000 to 30000 in gns3_server.conf Ref #1271 2019-12-06 14:36:45 +08:00
grossmj 26efdaf7b7 Fix tests 2019-12-05 14:06:46 +08:00
grossmj 50b507f76c Fix cannot power on VirtualBox VM in saved state. Ref #1702 2019-12-05 13:46:02 +08:00
grossmj 060871cc42 Development on 2.2.4dev1 2019-11-12 16:43:21 +08:00
grossmj 9e4474de8d Release v2.2.3 2019-11-12 15:29:54 +08:00
grossmj 9bda15236e Sync appliance files. 2019-11-12 15:23:37 +08:00
grossmj 4daaea9cec Merge branch 'master' into 2.2 2019-11-12 15:20:12 +08:00
Jeremy Grossmann 5e4e5c741b Merge pull request #1691 from JCDraaijer/master
Added workaround for #1690
2019-11-11 18:36:34 +08:00
JCDraaijer 7117b1fb65 Improved how the path to the config file is actually determined 2019-11-11 11:20:51 +01:00
grossmj 992c60e3e0 Return HTTP status code 204 in API when project successfully closed. Fixes #1689 2019-11-11 15:32:57 +08:00
grossmj a98fc2d308 Python3.8 support. Ref https://github.com/GNS3/gns3-gui/issues/2895 2019-11-11 12:44:31 +08:00
grossmj 2fd4b2cbc8 Make sure still support Python >= 3.5.3 2019-11-11 12:39:45 +08:00
JCDraaijer 3bd394b637 Added workaround for #1690. Added venv/ to .gitignore 2019-11-10 20:41:39 +01:00
grossmj 7571c32563 Sync appliance files. 2019-11-08 18:24:22 +08:00
grossmj 05b949930d Fix tests. 2019-11-08 17:25:59 +08:00
grossmj 4075bbd703 Fix exception when adding VirtualBox VM. Fixes #1685. 2019-11-08 17:13:21 +08:00
grossmj 3aba2a319c Set psutil to version 5.6.3 in requirements.txt 2019-11-08 10:44:17 +08:00
grossmj 3a3ba2f54a Merge branch 'master' into 2.2 2019-11-08 10:42:44 +08:00
grossmj 2fa2c715f5 Add LimitNOFILE=16384 to GNS3 service. Ref #1678 2019-11-07 16:28:47 +08:00
grossmj 907207a140 Fix tests 2019-11-06 15:35:59 +08:00
grossmj 539cf640d8 Change the default UDP port range to be 20000 to 30000. Ref #1271 2019-11-06 12:25:30 +08:00
grossmj 6e7aeb1fdd Developement version on 2.2.3dev1 2019-11-04 19:45:18 +08:00
grossmj 3245450e67 Release v2.2.2 2019-11-04 18:33:28 +08:00
grossmj f154ebeee9 Merge remote-tracking branch 'origin/2.2' into 2.2 2019-11-04 18:29:06 +08:00
grossmj 7608584833 Merge branch 'master' into 2.2 2019-11-04 18:28:42 +08:00
Piotr Pekala f69914565a Release 2019.2.0-alpha.10 2019-11-04 02:15:09 -08:00
Jeremy Grossmann 60beba108a Merge pull request #1681 from GNS3/fix-pci-bridges
Fix how PCI bridges are created for Qemu VMs with greater than 32 interfaces. Fixes #1665
2019-11-04 17:00:13 +07:00
Piotr Pekala 4a0fbe9b1b Release 2019.2.0-alpha.10 2019-11-04 01:29:58 -08:00
grossmj ff9bd59ef8 Fix how PCI bridges are created for Qemu VMs with greater than 32 interfaces. 2019-11-03 17:56:52 +08:00
grossmj 4ab3f281c5 Fix broken support for cloned VirtualBox VMs. Fixes https://github.com/GNS3/gns3-gui/issues/2889 2019-11-03 16:34:24 +08:00
grossmj 7b507bf532 Sync appliance files. 2019-11-03 16:32:15 +08:00
grossmj 459dd7b479 Handle builtin entry does not exist when adding node from template (new fix). 2019-11-02 16:23:45 +08:00
grossmj b8c70a3a8e Development on 2.2.2dev1 2019-11-01 18:43:36 +08:00
grossmj a267ecdea4 Merge branch 'master' into 2.2 2019-11-01 18:34:17 +08:00
grossmj 7b8f0c2633 Release v2.2.1 2019-11-01 17:53:20 +08:00
grossmj 89f97902f9 Handle builtin entry does not exist when adding node from template. 2019-11-01 17:48:25 +08:00
grossmj 8dd2831890 Upgrade aiohttp to version 3.6.2 2019-11-01 17:18:30 +08:00
grossmj 19723f06ed Sync appliance files 2019-11-01 17:07:43 +08:00
grossmj 3f5ee94022 Merge remote-tracking branch 'origin/master' 2019-11-01 15:24:04 +08:00
grossmj 85582554ac Let systemd directly supervises the GNS3 service. Fixes #1678 2019-11-01 15:23:52 +08:00
Piotr Pekala 107dbbc949 Release 2019.2.0-alpha.10 2019-10-31 04:38:52 -07:00
grossmj 2af9127879 Fix issue when linking to more than one NAT node with allowed_interface option enabled. Fixes #1671 2019-10-31 17:07:52 +08:00
grossmj 5e9810d420 Prevent deleting a GNS3 project outside the project directory. Ref #1669 2019-10-30 16:25:06 +08:00
grossmj f3ad333a21 Do not send "console_type" property to computes for all builtin nodes excepting Ethernet switches. Fixes https://github.com/GNS3/gns3-gui/issues/2882 2019-10-29 18:06:09 +08:00
grossmj c8f7d789f7 Update API documentation 2019-10-23 22:00:00 +08:00
grossmj df9b40c1dc Fix QEMU link detection flaky on last port. Fixes #1666 2019-10-15 23:42:42 +08:00
grossmj f5c02368e6 Fix tests. 2019-10-09 17:47:22 +08:00
grossmj 7cfd0d4d1d Use compatible shlex_quote to handle case where Windows needs double quotes around file names, not single quotes. Ref https://github.com/GNS3/gns3-gui/issues/2866 2019-10-09 17:02:30 +08:00
grossmj 9d47050dff Use 0.0.0.0 by default for server host. Fixes https://github.com/GNS3/gns3-server/issues/1663 2019-10-09 16:35:42 +08:00
grossmj 1b845225b2 Improvement to validate HTTP authentication config. Ref #1662 2019-10-09 15:56:20 +08:00
grossmj 5a3f8b9a9b Use versioned config directory for profiles. Fixes #1664 2019-10-09 15:20:19 +08:00
grossmj 56a4d3f8fd Fix tests. 2019-10-09 15:00:48 +08:00
grossmj 6d1adea907 Enable nested hardware virtualization by default for GNS3 VM running in VirtualBox. Fixes #1377
No error is sent by VBoxManage is this feature is not available, for instance with Intel processors.
2019-10-09 14:50:00 +08:00
grossmj 2d777cac13 Set default host to "localhost". Fixes https://github.com/GNS3/gns3-server/issues/1663 2019-10-08 18:28:10 +08:00
grossmj 6ae7ef8a2e Improve process to get guest IP address from GNS3 VM running in VMware workstation/player. Ref https://github.com/GNS3/gns3-gui/issues/2866 2019-10-08 17:58:27 +08:00
grossmj 09d05accc1 Fix tests. Ref #1659 2019-10-08 17:34:16 +08:00
grossmj 2f57bd58c0 Fix error with console type in Ethernet switch schema. Fixes #1659 2019-10-08 17:16:17 +08:00
grossmj 51a92b46dd Bump version to 2.2.1dev1 2019-10-08 16:05:36 +08:00
2258 changed files with 187100 additions and 137281 deletions

No files matched your search

+20
View File
@@ -0,0 +1,20 @@
# GNS3 Server Project Memory
> **Note**: This directory stores important project-related memories and case studies, managed with the code repository.
>
> **How to record**: Use the `/memory` skill to record important information to the project memory directory.
## Quick Reference
- **Memory directory**: `.claude/memory/`
- **Skill file**: `.claude/skills/memory/SKILL.md`
- **Main index**: `MEMORY.md` (this file)
## Topics
### Web Wireshark Integration
- **[JWT Token Flow](./web-wireshark-jwt-token-flow.md)** - JWT token transmission path in Web Wireshark
- Key point: UDPLink only passes through jwt_token, ultimately used by curl command inside Web Wireshark container to authenticate with GNS3 capture stream API
- **[Xpra HTML5 Client](./xpra-html5-client.md)** - Xpra HTML5 client menu control parameters for customizing the web interface
### uBridge Permission
- **[uBridge Permission Issue](./gns3-ubridge-permission.md)** - Docker containers fail to start due to missing CAP_NET_ADMIN/CAP_NET_RAW capabilities on uBridge
+25
View File
@@ -0,0 +1,25 @@
# GNS3 uBridge Permission Issue
## Problem
Docker container node fails to start with error: `uBridge requires root access or the capability to interact with network adapters`
## Root Cause
- uBridge needs to create TAP network interfaces to connect Docker containers to GNS3 virtual network
- This requires `CAP_NET_ADMIN` and `CAP_NET_RAW` capabilities
- Other node types (like QEMU) may have their own network implementation and don't need uBridge
## Solution
```bash
sudo setcap cap_net_admin,cap_net_raw=eip /usr/bin/ubridge
```
## Code Locations
- uBridge path check: `gns3server/compute/base_manager.py:298` (`has_privileged_access`)
- Permission check call: `gns3server/compute/base_node.py:851`
- Error message definition: `gns3server/compute/base_node.py:852`
## Error Propagation Flow
Error is propagated via `NodeError` exception:
1. `NodeError` is caught at `gns3server/api/routes/compute/__init__.py:131-137`
2. Returns HTTP 409 with JSON: `{"message": "...", "exception": "NodeError"}`
3. Frontend should read error info from `message` field
@@ -0,0 +1,53 @@
# Web Wireshark JWT Token Flow
## Background
Question: What is the purpose of `jwt_token` parameter in UDPLink and how is it transmitted?
## JWT Token Complete Flow
1. **User initiates request** → HTTP request with `Authorization: Bearer <jwt_token>`
2. **API layer extracts token** → `gns3server/api/routes/controller/links.py`:
```python
auth_header = http_request.headers.get("Authorization", "")
jwt_token = auth_header.replace("Bearer ", "") if auth_header else None
```
3. **Pass to Link layer** → `Link.start_capture(wireshark=True, jwt_token=xxx)`
4. **UDPLink forwards** → `UDPLink.start_capture()` calls `super().start_capture(jwt_token=jwt_token)`
5. **Start Web Wireshark container** → `Link._start_web_wireshark(jwt_token)` calls management script
6. **Container uses token** → `manage_wireshark.py` executes inside container:
```bash
curl -N -H 'Authorization: Bearer {jwt_token}' \
'http://controller:3080/v3/projects/{project_id}/links/{link_id}/capture/stream' | \
wireshark -i - -k -display :{display}
```
## Why More Verbose Than gns3-copilot?
**gns3-copilot approach**:
- All code within the same process
- Uses `contextvars` to store and retrieve token
- Downstream code directly calls `get_current_jwt_token()`, no need to pass through layers
**Web Wireshark approach**:
- Token needs to be passed across processes (management script is separate process)
- Token needs to be passed across containers (Docker container isolation)
- Cannot use `contextvars`, must pass through command line arguments
## Conclusion
UDPLink does not use this token, it only forwards it to the parent class. Ultimately used by the curl command inside the Web Wireshark container to authenticate with the GNS3 controller's capture stream API.
Token flow: **Client → GNS3 API → Link → UDPLink → Web Wireshark container → GNS3 capture stream API**
## Related Files
- `gns3server/api/routes/controller/links.py:114-115` - JWT token extraction
- `gns3server/controller/link.py:321-360` - Web Wireshark startup logic
- `gns3server/controller/udp_link.py:178` - UDPLink start_capture signature
- `gns3server/agent/web_wireshark/manage_wireshark.py:527-529` - Container curl command with JWT
+148
View File
@@ -0,0 +1,148 @@
# Xpra HTML5 Client Configuration
## Overview
Web Wireshark integration uses xpra's built-in HTML5 client to provide browser-based packet capture viewing. The xpra HTML5 client is located at `/usr/share/xpra/www` in the container.
## Configuration Methods
### 1. URL Parameters (Per-Session)
Control toolbar menu items via URL query parameters (default: true):
| Parameter | Menu Item | Description |
|-----------|-----------|-------------|
| xpramenu | Xpra Menu | Main menu (Server, Information submenus) |
| open_windows | Open Windows | List of open windows |
| fullscreen_button | Fullscreen | Fullscreen toggle button |
| keyboard_button | Keyboard | Keyboard layout/shortcuts |
| clipboard_button | Clipboard Copy | Clipboard copy functionality |
| sound_button | Audio | Audio toggle |
| cursor_lock_button | Lock Cursor | Game cursor lock mode |
```bash
# Examples
?fullscreen_button=false&sound_button=false
?xpramenu=false&keyboard_button=false&clipboard_button=false&sound_button=false&cursor_lock_button=false
```
### 2. default-settings.txt (Recommended - Global/Persistent)
Modify `html5/default-settings.txt` (INI format) for all users.
**Features:**
| Parameter | Default | Description |
|-----------|---------|-------------|
| keyboard | auto-detect | Enable keyboard input |
| keyboard_layout | us | Keyboard layout |
| clipboard | yes | Clipboard sharing |
| printing | yes | Printer forwarding |
| file_transfer | yes | File transfer |
| swap_keys | MacOS yes | Swap Command/Control keys |
| scroll_reverse_x | no | Reverse mouse X-axis |
| floating_menu | yes | Show floating menu |
| toolbar_position | top-left | Toolbar position |
| autohide | no | Auto-hide toolbar |
| sound | yes | Audio forwarding |
| video | 64-bit yes | Video decoding |
**Connection Options:**
| Parameter | Description |
|-----------|-------------|
| server | Server address |
| port | Port number |
| username | Username |
| password | Password |
| ssl | Enable SSL |
| encryption | Encryption type (AES-CBC/CTR/CFB) |
| key | AES encryption key |
| sharing | Allow session sharing |
| steal | Steal session |
| reconnect | Auto-reconnect |
| bandwidth_limit | Bandwidth limit (bits/s) |
| override_width | Client desktop width |
**Advanced Options:**
| Parameter | Default | Description |
|-----------|---------|-------------|
| audio_codec | auto-detect | Audio codec |
| encoding | auto | Image encoding (png/jpeg/webp/etc) |
| remote_logging | yes | Send logs to server |
| action | connect | Connection mode (start/shadow) |
| submit | yes | Show diagnostics on disconnect |
### 3. default_settings in Code
Set directly in `<script>` tag in index.html:
```javascript
const default_settings = {};
default_settings["xpramenu"] = false;
```
### Priority Order
URL parameter > default_settings object > default-settings.txt > code default value
## Server-Controlled Submenu Items
The **Server submenu** items are controlled by server hello message:
| Menu Item ID | Content | Control Source |
|--------------|---------|----------------|
| clock_menu_entry | Clock | server-time in hello |
| upload_menu_entry | Upload file | file-transfer or file.enabled |
| download_menu_entry | Download file | file-transfer or file.enabled |
| shutdown_menu_entry | Shutdown Server | client-shutdown in hello |
**Information submenu** (About Xpra, Session Info, Bug Report) and fixed items (Reload, Disconnect) are always displayed.
To hide "Shutdown Server", set environment variable before starting xpra:
```bash
export XPRA_CLIENT_CAN_SHUTDOWN=false
xpra start :{display} ...
```
Code: `xpra/server/base.py:40` - `CLIENT_CAN_SHUTDOWN = envbool("XPRA_CLIENT_CAN_SHUTDOWN", True)`
## Customizing Background Image
Background image is defined in `html5/css/client.css`:
```css
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #021d3a;
background-image: url(../background.jpg);
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
```
### Methods
1. **Replace image file**: Create/replace `html5/background.jpg`
2. **Modify CSS**: Change `html5/css/client.css` line 9:
```css
background-image: url(../your-image.jpg);
```
### Notes
- Supported formats: jpg, png, svg, etc.
- Recommended resolution: 1920x1080 or higher
- `background-size: cover` auto-stretches to fill
### Temporary Modification (via URL)
Cannot modify background via URL directly, but can use browser DevTools:
```css
body { background-image: url(your-image-url); }
```
## Related Files
- Container Dockerfile: `gns3server/agent/web_wireshark/docker/Dockerfile`
- Container HTML5 client path: `/usr/share/xpra/www`
@@ -0,0 +1,54 @@
---
name: documentation
description: Use this skill when creating or updating technical documentation under docs/ directory for GNS3 server
version: 3.0.0
---
# GNS3 Server Technical Documentation Standard
## Core Principle
Documentation answers: **What is this, how does it work at a high level.**
Code details are left to the codebase — readers can use AI to find implementation specifics.
---
## Document Structure
```markdown
# Feature Name
## Overview
[What it does, in 2-3 sentences]
## Architecture
[Mermaid diagram: components and their relationships]
## Business Process
[Mermaid sequence/flowchart: key flows]
## API Endpoints
[Table: Method | Path | Description | Privilege]
## Notes
[Known limitations, performance data, security — only when relevant]
```
---
## What to Include
- Mermaid diagrams for architecture and flow (GitHub renders natively)
- `graph` for component relationships
- `sequenceDiagram` for request/response flows
- `flowchart` for data processing steps
- API endpoint tables
- Request/response JSON examples (for interfaces)
- Performance data (only measured numbers, no estimates)
## What to Skip
- Code snippets — let readers search the codebase
- Verbose prose — use diagrams and tables
- Implementation details — link file paths instead of pasting code
+98
View File
@@ -0,0 +1,98 @@
---
name: memory
description: This skill should be used when the user asks to "record memory", "save to memory", "remember this", "create a memory", "add to memory", or discusses documenting technical decisions, architectural choices, or important case studies for the project. Use this skill to record project knowledge to the .claude/memory/ directory.
version: 1.0.0
---
# Memory Skill
## Overview
Record project-related technical decisions, important case studies, and lessons learned to the project memory directory, ensuring critical knowledge is managed with the code repository.
## When This Skill Activates
Activate this skill when user requests involve:
- "Record to memory", "save to memory", "add to memory"
- "Remember this", "create a memory"
- Documenting technical decisions, architectural choices
- Recording problem solutions and lessons learned
- Discussing API design, performance optimization, security implementations
## Memory Location
Project memory is stored in: `.claude/memory/`
## Memory Structure
```
.claude/
├── memory/
│ ├── MEMORY.md # Main index file
│ └── <topic>.md # Detailed records for specific topics
└── skills/
└── memory/
└── SKILL.md # This file
```
## What to Record
### ✅ Should Record
- Important architectural decisions and rationale
- Solutions to complex problems
- Key considerations for API design
- Performance optimization experiences
- Security-related implementation details
- Integration approaches with other systems
- Common errors and solutions
- Design changes based on user feedback
### ❌ Should Not Record
- Temporary debugging information
- Session-specific state
- Obvious code implementation details (code is documentation)
- Content already documented elsewhere
## Memory Template
```markdown
# <Topic Title>
## Background
<Why this record exists>
## Decision/Implementation
<What was done or how it was implemented>
## Rationale
<Why this approach was chosen, what alternatives were considered>
## Related Files
<Code files involved, use file_path:line_number format>
## Examples
<If there are code examples or other examples>
```
## Recording Process
1. **Identify content to record**
2. **Determine topic title** (concise, descriptive)
3. **Create record using template**
4. **Update MEMORY.md index**
5. **Save to .claude/memory/<topic>.md**
## Examples
- `web-wireshark-jwt-token-flow.md` - JWT token flow in Web Wireshark integration
- `docker-api-version-detection.md` - Docker API version dynamic detection implementation
## Best Practices
- Use clear, descriptive filenames
- Include references to related code files (with line numbers)
- Document "why" not just "what"
- Keep records updated, remove outdated ones
- Link to related memory files
@@ -0,0 +1,16 @@
name: Add new issues to GNS3 project
on:
issues:
types:
- opened
jobs:
add-to-project:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@v1.0.1
with:
project-url: https://github.com/orgs/GNS3/projects/3
github-token: ${{ secrets.ADD_NEW_ISSUES_TO_PROJECT }}
+93
View File
@@ -0,0 +1,93 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: '21 12 * * 4'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: python
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
+40
View File
@@ -0,0 +1,40 @@
name: Build and Push Docker Image
on:
workflow_dispatch:
push:
tags:
- v2.*
- v3.*
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push to GitHub Container Registry
run: |
docker build -t ghcr.io/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]'):latest .
docker push ghcr.io/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]'):latest
- name: Build and push to Docker Hub
run: |
docker build -t gns3/${{ github.event.repository.name }}:latest .
docker push gns3/${{ github.event.repository.name }}:latest
@@ -0,0 +1,40 @@
name: publish-api-documentation
on:
workflow_dispatch:
push:
tags:
- v3.*
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: "gh-pages"
- uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Merge changes from 3.0 branch
run: |
git config user.name github-actions
git config user.email github-actions@github.com
git merge origin/3.0 -X theirs
- name: Install GNS3 server and dependencies
run: |
python -m pip install --upgrade pip
python -m pip install .
- name: Generate the API documentation
run: |
cd scripts
python3 publish_api_documentation.py
- name: Publish the API documentation
run: |
git add docs
git status
git commit -m "Publish API documentation"
git push
+51
View File
@@ -0,0 +1,51 @@
name: testing
on:
push:
branches:
- master
- 3.0
pull_request:
branches:
- master
- 3.0
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ["ubuntu-latest"]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install .[ai-copilot,dev]
- name: Install Windows specific dependencies
if: runner.os == 'Windows'
run: |
python -m pip install -r win-requirements.txt
curl -O "http://www.win10pcap.org/download/Win10Pcap-v10.2-5002.msi"
msiexec /i "Win10Pcap-v10.2-5002.msi" /qn /norestart
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
python -m pytest -vv
+26
View File
@@ -5,6 +5,12 @@ __pycache__
#py.test
.cache
# environment file
.env
# hypothesis files
.hypothesis
# C extensions
*.so
@@ -58,4 +64,24 @@ startup.vpcs
# Virtualenv
env
venv
*venv
.ropeproject
# Claude Code settings (may contain API keys)
.claude/settings*.json
.claude/minmax-settings.json
.claude/zhipu-settings.json
.claude/settings.local.json
.claude/deepseek-settings.json
.claude/claude-settings.json
.claude/gemini-settings.json
.claude/grok-settings.json
!.claude/development.md # Exception: allow development docs
!.claude/skills/ # Exception: allow project skills
!.claude/memory/ # Exception: allow project memory
# PROJECT_CONTEXT.md # Commented out: allow tracking project context
# Tiktoken cache files
gns3server/agent/gns3_copilot/cache/tiktoken/
-2
View File
@@ -1,2 +0,0 @@
branch:
2.2
-32
View File
@@ -1,32 +0,0 @@
sudo: required
services:
- docker
install:
- sed -e 's/${PYTHON_VERSION}/'${PYTHON_VERSION}/g DockerfileTests.tpl > /tmp/DockerfileTests
- docker-compose build
script:
- docker-compose run tests
before_deploy:
- sudo pip install twine
- sudo pip install urllib3[secure]
deploy:
provider: pypi
edge:
branch: v1.8.45
user: noplay
password:
secure: Fa66zp8ML4oSGwzkUMZi07MIYfO3tbS5gHFUaLN2mk2MBknhCjDYexmFJqT//sC/+xqv6sSJE6rz1EPoy/THbxj8R96ZgIyiUZIbDCbzgdy92d7J/eusrDoNdpApBLke8NqQqtFETb3addMZZNofQ3IDANFD2m2jY+KECU8z8NI=
on:
tags: true
repo: GNS3/gns3-server
env:
matrix:
- PYTHON_VERSION=3.5
- PYTHON_VERSION=3.6
- PYTHON_VERSION=3.7
+14
View File
@@ -0,0 +1,14 @@
{
"scanSettings": {
"configMode": "AUTO",
"configExternalURL": "",
"projectToken" : "",
"baseBranches": ["master", "2.2", "3.0"]
},
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "failure"
},
"issueSettings": {
"minSeverityLevel": "LOW"
}
}
-2
View File
@@ -1,2 +0,0 @@
Jeremy Grossmann
Julien Duponchelle
+1165
View File
File diff suppressed because it is too large. Load diff
+28 -27
View File
@@ -1,36 +1,37 @@
# Dockerfile for GNS3 server development
FROM ubuntu:noble
FROM ubuntu:18.04
WORKDIR /gns3server
ENV DEBIAN_FRONTEND noninteractive
# Set the locale
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:gns3/ppa
RUN apt-get update && apt-get install -y \
RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y \
locales \
locales-all
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
COPY ./requirements.txt /gns3server/requirements.txt
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
locales \
software-properties-common \
python3-pip \
python3-dev \
qemu-system-x86 \
qemu-system-arm \
python3-all \
python3-setuptools \
python3-dev \
busybox-static \
gcc \
qemu-kvm \
libvirt-bin \
x11vnc
libvirt-daemon-system
RUN locale-gen en_US.UTF-8
RUN add-apt-repository ppa:gns3/ppa && apt update && DEBIAN_FRONTEND=noninteractive apt install -y \
vpcs \
ubridge \
dynamips
# Install uninstall to install dependencies
RUN apt-get install -y vpcs ubridge
COPY . /gns3server
ADD . /server
WORKDIR /server
RUN mkdir -p ~/.config/GNS3/3.0/
RUN cp scripts/gns3_server.conf ~/.config/GNS3/3.0/
RUN pip3 install -r /server/requirements.txt
EXPOSE 3080
CMD python3 -m gns3server --local
RUN python3 -m pip install --break-system-packages .
-15
View File
@@ -1,15 +0,0 @@
FROM python:${PYTHON_VERSION}
RUN pip install -U setuptools pip
ADD requirements.txt /server/requirements.txt
ADD dev-requirements.txt /server/dev-requirements.txt
RUN pip install -r/server/dev-requirements.txt
RUN useradd -ms /bin/bash gns3
USER gns3
ADD . /server
WORKDIR /server
+3 -7
View File
@@ -1,11 +1,7 @@
include README.rst
include AUTHORS
include README.md
include LICENSE
include MANIFEST.in
include tox.ini
include requirements.txt
recursive-include tests *
recursive-exclude docs *
include CHANGELOG
recursive-include gns3server *
recursive-exclude docs *
recursive-exclude * __pycache__
recursive-exclude * *.py[co]
+370
View File
@@ -0,0 +1,370 @@
# GNS3 Server - Project Context for Claude Code
> This document provides project context information for the Claude Code AI assistant to work more efficiently.
---
## Project Overview
**Project Name**: GNS3 Server
**Description**: Network simulation server supporting the GNS3 network virtualization platform
**Primary Language**: Python
**Current Branch**: `feature/ai-copilot-bridge`
**Main Branch**: `master`
---
## Project Structure
```
gns3server/
├── agent/ # AI Copilot related modules
│ └── gns3_copilot/ # GNS3-Copilot AI Assistant
│ ├── agent/ # LangGraph Agent implementation
│ ├── tools_v2/ # Tool collection (device config, display commands, etc.)
│ ├── utils/ # Utility functions and helper modules
│ ├── gns3_client/ # GNS3 API client
│ ├── prompts/ # AI prompt templates
│ ├── agent_service.py # Agent service layer
│ └── project_agent_manager.py # Project Agent manager
│
├── api/ # API routes
│ └── routes/controller/ # Controller API
│ └── chat.py # AI Chat API endpoint
│
├── controller/ # Core controller
│ ├── project.py # Project management
│ └── ...
│
├── schemas/ # Pydantic data models
│ └── controller/
│ └── chat.py # Chat API Schema
│
├── db/ # Database module
│ └── tasks.py # Database tasks
│
└── docs/ # Documentation
└── gns3-copilot/ # AI Copilot documentation
```
---
## Key Module Descriptions
### 1. AI Copilot Data Flow
```
Tool Layer → Agent Layer → Service Layer → API Layer → Frontend
```
**Tool Output Format**: All tools return `dict` or `list[dict]`, automatically serialized to JSON in the Service layer
**Key Files**:
- `agent/gns3_copilot/tools_v2/*.py` - Tool implementations
- `agent/gns3_copilot/agent_service.py:460-473` - Event conversion logic
- `agent/gns3_copilot/utils/parse_tool_content.py` - Tool result parsing
### 2. SSE Event Types
| Type | Description |
|------|-------------|
| `content` | AI text streaming output |
| `tool_call` | LLM tool invocation (progressive parameters) |
| `tool_start` | Tool execution started |
| `tool_end` | Tool execution completed (output as JSON) |
| `error` | Error message |
| `done` | Stream ended |
### 3. Important Tools
| Tool Name | File | Function |
|-----------|------|----------|
| `ExecuteMultipleDeviceCommands` | `display_tools_nornir.py` | Read-only diagnostic commands |
| `ExecuteMultipleDeviceConfigCommands` | `config_tools_nornir.py` | Configuration commands |
| `VPCSMultiCommands` | `vpcs_tools_telnetlib3.py` | VPCS virtual PC commands |
| `GNS3TemplateTool` | `gns3_get_node_temp.py` | Get GNS3 templates |
| `GNS3CreateNodeTool` | `gns3_create_node.py` | Create nodes |
---
## Code Standards
### Static Code Analysis (Flake8)
The project uses **flake8** for static code analysis. You must run checks before committing code.
#### Running Flake8
```bash
# Activate virtual environment
source venv/bin/activate
# Check a single file
flake8 path/to/file.py
# Check the entire project
flake8 gns3server/
# Check a specific directory
flake8 gns3server/utils/
```
#### Common Flake8 Error Codes
| Code | Description | Example |
|------|-------------|---------|
| **F401** | Module imported but unused | `import os` never used |
| **F841** | Local variable assigned but never used | `x = 1` not used later |
| **F824** | `global` declaration never assigned | `global _bar` never assigned in scope |
| **E501** | Line too long (>79 characters) | Single line exceeds 79 characters |
#### Fix Examples
```python
# F401: Remove unused imports
# Bad
import os # Never used
# Good: Delete this line
# F841: Mark as intentionally unused
# Bad
def foo():
x = 1 # Never used
# Good: Use or mark as intentionally unused
def foo():
x = 1
_ = x # Mark as intentionally unused
# F824: Remove unnecessary global declaration
# Bad
def foo():
global _fernet # Never assigned in this scope
# Good: Remove global statement (if only reading)
def foo():
# Just read the global variable, no global declaration needed
pass
# E501: Break long lines
# Bad
raise RuntimeError("Encryption not initialized. Call init_encryption() first.")
# Good
raise RuntimeError(
"Encryption not initialized. Call init_encryption() first."
)
```
#### Ruff (Alternative)
[Ruff](https://docs.astral.sh/ruff/) is a faster Python linter that can replace flake8, isort, black, and more.
```bash
# Install
pip install ruff
# Usage
ruff check gns3server/ # Check code
ruff check --fix gns3server/ # Auto-fix
ruff format gns3server/ # Format code
```
### Python Code Style
```python
# 1. Type annotations
def process_data(input_data: dict[str, Any]) -> list[dict[str, Any]]:
pass
# 2. Error handling
try:
result = tool.invoke(args)
except Exception as e:
logger.error("Tool failed: %s", e, exc_info=True)
return {"error": str(e)}
# 3. JSON serialization
if not isinstance(output, str):
output = json.dumps(output, ensure_ascii=False, indent=2)
```
### Import Order
```python
# 1. Standard library
import asyncio
import json
import logging
# 2. Third-party libraries
from langchain.tools import BaseTool
from pydantic import BaseModel
# 3. Local modules
from gns3server.agent.gns3_copilot.agent import agent_builder
from gns3server.controller import Controller
```
### Copyright Header
```python
# SPDX-License-Identifier: GPL-3.0-or-later
#
# GNS3-Copilot - AI-powered Network Lab Assistant for GNS3
#
# Copyright (C) 2025 Yue Guobin (岳国宾)
# Author: Yue Guobin (岳国宾)
#
# Project Home: https://github.com/yueguobin/gns3-copilot
```
---
## Git Commit Standards
### Commit Message Format
```
<type>(<scope>): <subject>
<body>
<footer>
```
### Type Categories
| Type | Description | Example |
|------|-------------|---------|
| `feat` | New feature | `feat(copilot): add user authentication` |
| `fix` | Bug fix | `fix(api): correct JSON serialization` |
| `docs` | Documentation update | `docs: update API design doc` |
| `refactor` | Refactoring | `refactor(agent): simplify state management` |
| `chore` | Build/toolchain | `chore: update dependencies` |
### Example
```
fix(copilot): serialize tool output to standard JSON format
Changed tool output serialization in AgentService._convert_event_to_chunk()
from str() to json.dumps() to ensure structured data is properly formatted.
Changes:
- Added json import to agent_service.py
- Modified on_tool_end event handling
Benefits:
- Frontend can parse tool results with JSON.parse()
- Chinese characters are preserved (not escaped)
Co-Authored-By: YueGuobin <yueguobin@outlook.com>
```
### IMPORTANT: Use Your Own Git Account for Commits
When creating git commits, **ALWAYS** use your own git account information for authorship.
**Before committing**, verify your git configuration:
```bash
# Check current git user configuration
git config user.name
git config user.email
# If incorrect, set your own information
git config user.name "Your Name"
git config user.email "your.email@example.com"
```
**For this project**, the current configured user is:
```
Name: YueGuobin
Email: yueguobin@outlook.com
```
You may use `Co-Authored-By` to credit contributors, but the `Author` field should always be **your own account**:
```bash
git commit -m "feat: add new feature
Co-Authored-By: ContributorName <contributor@example.com>"
```
---
## Development Notes
### 1. When Modifying Tool Output Format
**Must update the following locations**:
- `agent/gns3_copilot/tools_v2/*.py` - Tool implementation
- `agent/gns3_copilot/agent_service.py` - Event conversion
- `docs/gns3-copilot/ai-chat-api-design.md` - API documentation
### 2. Data Serialization Principles
- **Tool Layer**: Return Python `dict`/`list`
- **Service Layer**: Use `json.dumps()` for serialization
- **API Layer**: Use Pydantic validation then serialize to SSE
### 3. Logging
```python
logger.info("Operation started: project_id=%s", project_id)
logger.debug("Detailed info: data=%s", data)
logger.error("Error occurred: %s", error, exc_info=True)
```
### 4. Security Considerations
- Prohibit dangerous commands (reload, erase startup-config, etc.)
- Use `filter_forbidden_commands()` to filter commands
- Validate user input (project_id format, etc.)
---
## Common Commands
```bash
# Run tests
pytest tests/
# Static code analysis (must run before committing)
source venv/bin/activate
flake8 gns3server/
# Check a single file
flake8 path/to/file.py
# Syntax check
python3 -m py_compile gns3server/agent/gns3_copilot/agent_service.py
# Check git status
git status
# View git history
git log --oneline -15
# View file modification history
git blame file.py -L 100,120
# Commit code (verify your git user info first!)
git config user.name && git config user.email
git add files...
git commit -m "type(scope): description"
```
---
## Related Documentation
- [AI Chat API Design](./docs/gns3-copilot/ai-chat-api-design.md)
- [Command Security Policy](./docs/gns3-copilot/command-security.md)
- [LLM Model Configuration](./docs/gns3-copilot/llm-model-configs-api.md)
- [Context Window Management](./docs/gns3-copilot/context-window-management.md)
---
**Document Maintenance**: Please update this document promptly when project structure or development standards change.
+197
View File
@@ -0,0 +1,197 @@
# GNS3 server repository
[![Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![GitHub Actions tests](https://github.com/GNS3/gns3-server/workflows/testing/badge.svg?branch=3.0)](https://github.com/GNS3/gns3-server/actions?query=workflow%3Atesting+branch%3A3.0)
[![Latest PyPi version](https://img.shields.io/pypi/v/gns3-server.svg)](https://pypi.python.org/pypi/gns3-server)
[![Snyk scanning](https://snyk.io/test/github/GNS3/gns3-server/badge.svg)](https://snyk.io/test/github/GNS3/gns3-server)
The GNS3 server manages emulators and other virtualization software such as Dynamips, Qemu/KVM, Docker, VPCS, VirtualBox and VMware Workstation.
Clients like the [GNS3 GUI](https://github.com/GNS3/gns3-gui/) and the [GNS3 Web UI](https://github.com/GNS3/gns3-web-ui/) control the server using a HTTP REST API.
## Installation
These instructions are for using GNS3, please see below for development.
### Windows & macOS
Please use our [Windows installer or DMG package](https://gns3.com/software/download) to install the stable build along with the GNS3 VM.
Note that as of GNS3 version above 3.0, you must run the server using the GNS3 VM or on a Linux system (remote, cloud or virtual machine).
### Linux
#### Ubuntu based distributions
We build and test packages for actively supported Ubuntu versions.
Other distros based on Ubuntu, like Mint, should also be supported.
Packages can be installed from our Personal Package Archives (PPA) repository:
```shell
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:gns3/ppa
sudo apt update
sudo apt install gns3-gui gns3-server
```
#### Other Linux distributions
GNS3 is often packaged for other distributions by third-parties:
* [Gentoo](https://packages.gentoo.org/package/net-misc/gns3-server)
* [Alpine](https://pkgs.alpinelinux.org/package/v3.10/community/x86_64/gns3-server)
* [NixOS](https://search.nixos.org/packages?channel=21.11&from=0&size=50&sort=relevance&type=packages&query=gns3-server)
#### PyPi
You may use PyPi in case no package is provided, or you would like to do a manual installation:
* https://pypi.org/project/gns3-server/
* https://pypi.org/project/gns3-gui/
```shell
python3 -m pip install gns3-gui
python3 -m pip install gns3-server
```
#### Optional Features
GNS3 server supports optional features that can be installed as needed:
**AI Copilot** (Optional):
```shell
python3 -m pip install gns3-server[ai-copilot]
```
AI-powered assistant for network topology design and automation.
**Development** (For contributors):
```shell
python3 -m pip install gns3-server[dev]
```
**Web Wireshark** (Optional):
```shell
pip install gns3-server && gns3server-web-wireshark-setup
```
Browser-based packet capture analysis using Wireshark in a Docker container.
**Combination Installation**:
You can install multiple optional features together:
```shell
python3 -m pip install gns3-server[ai-copilot,dev]
```
**Why optional?**
- Reduces installation size for users who don't need specific features
- Supports restricted environments (government, education, corporate) where certain libraries may not be allowed
- Faster installation for basic GNS3 usage
- Allows users to choose only the features they need
**Note:** If you install without optional extras, the server will work normally but optional features will be disabled. You can add features later by running the appropriate install command.
**Uninstalling AI Copilot:**
To remove AI Copilot dependencies:
```shell
gns3server-uninstall-ai-copilot
```
This will remove all AI Copilot dependencies while keeping the core functionality intact. The server will continue to work, but AI features will return a 501 (Not Implemented) status code.
The downside of this method is you will have to manually install all dependencies (see below).
Please see our [documentation](https://docs.gns3.com/docs/getting-started/installation/linux) for more details.
### Software dependencies
In addition to Python dependencies, other software may be required, recommended or optional.
* [uBridge](https://github.com/GNS3/ubridge/) is required, it interconnects the nodes.
* [Dynamips](https://github.com/GNS3/dynamips/) is required for running IOS routers (using real IOS images) as well as the internal switches and hubs.
* [VPCS](https://github.com/GNS3/vpcs/) is recommended, it is a builtin node simulating a very simple computer to perform connectivity tests using ping, traceroute etc.
* Qemu is strongly recommended as most node types are based on Qemu, for example Cisco IOSv and Arista vEOS.
* libvirt is recommended as it's needed for the NAT cloud.
* Docker is optional, some nodes are based on Docker.
* mtools is recommended to support data transfer to/from QEMU VMs using virtual disks.
* i386-libraries of libc and libcrypto are optional, they are only needed to run IOU based nodes.
Note that Docker needs the script program (`bsdutils` or `util-linux` package), when running a Docker VM and a static busybox during installation (python3 setup.py install / pip3 install / package creation).
## Development
### Setting up
These commands will install the server with core Python dependencies:
```shell
git clone https://github.com/GNS3/gns3-server
cd gns3-server
git checkout 3.0
python3 -m venv venv-gns3server
source venv-gns3server/bin/activate
python3 -m pip install .
python3 -m gns3server
```
**For AI Copilot development**, install with additional dependencies:
```shell
python3 -m pip install .[ai-copilot,dev]
```
**For development (tests and linting)**:
```shell
python3 -m pip install .[dev]
```
You will have to manually install other software dependencies (see above), for Dynamips, VPCS and uBridge the easiest is to install from our PPA.
### Docker container
Alternatively, you can run the GNS3 server in a container
```shell
bash scripts/docker_dev_server.sh
```
#### use Docker Compose
``` {.bash}
docker compose up -d
```
### Running tests
First, install the development dependencies:
```shell
python3 -m pip install -r dev-requirements.txt
```
Then run the tests using pytest:
```shell
python3 -m pytest -vv tests/
```
### API documentation
The API documentation can be accessed when running the server locally:
* On `http://IP:PORT/docs` to see with Swagger UI (i.e. `http://localhost:3080/docs`)
* On `http://IP:PORT/redoc` to see with ReDoc (i.e. `http://localhost:3080/redoc`)
The documentation can also be viewed [online](http://apiv3.gns3.net) however it may not be the most up-to-date version since it needs manually synchronization with the current code. Also, you cannot use this to interact with a GNS3 server.
### Branches
#### master
master is the next stable release, you can test it in your day-to -day activities.
Bug fixes or small improvements pull requests go here.
3.x development brand for the next major release.
**Never** use this branch for production. Pull requests for major new features go here.
-224
View File
@@ -1,224 +0,0 @@
GNS3-server
===========
.. image:: https://travis-ci.org/GNS3/gns3-server.svg?branch=master
:target: https://travis-ci.org/GNS3/gns3-server
.. image:: https://img.shields.io/pypi/v/gns3-server.svg
:target: https://pypi.python.org/pypi/gns3-server
This is the GNS3 server repository.
The GNS3 server manages emulators such as Dynamips, VirtualBox or Qemu/KVM.
Clients like the GNS3 GUI controls the server using a HTTP REST API.
You will need the GNS3 GUI (gns3-gui repository) to control the server.
Branches
--------
master
******
master is the next stable release, you can test it in your day to day activities.
Bug fixes or small improvements pull requests go here.
2.x (2.1 for example)
*********************
Next major release
*Never* use this branch for production. Pull requests for major new features go here.
Linux
-----
GNS3 is perhaps packaged for your distribution:
* Gentoo: https://packages.gentoo.org/package/net-misc/gns3-server
* Alpine: https://pkgs.alpinelinux.org/package/v3.10/community/x86_64/gns3-server
Linux (Debian based)
--------------------
The following instructions have been tested with Ubuntu and Mint.
You must be connected to the Internet in order to install the dependencies.
Dependencies:
- Python 3.4 or above
- aiohttp
- setuptools
- psutil
- jsonschema
The following commands will install some of these dependencies:
.. code:: bash
sudo apt-get install python3-setuptools
Finally these commands will install the server as well as the rest of the dependencies:
.. code:: bash
cd gns3-server-master
sudo python3 setup.py install
gns3server
To run tests use:
.. code:: bash
py.test -v
Docker container
****************
For development you can run the GNS3 server in a container
.. code:: bash
bash scripts/docker_dev_server.sh
Run as daemon (Unix only)
**************************
You will find init sample scripts for various systems
inside the init directory.
Usefull options:
* --daemon: start process as a daemon
* --log logfile: store output in a logfile
* --pid pidfile: store the pid of the running process in a file and prevent double execution
All init scripts require the creation of a GNS3 user. You can change it to another user.
.. code:: bash
sudo adduser gns3
upstart
-------
For ubuntu < 15.04
You need to copy init/gns3.conf.upstart to /etc/init/gns3.conf
.. code:: bash
sudo chown root /etc/init/gns3.conf
sudo service gns3 start
systemd
-------
You need to copy init/gns3.service.systemd to /lib/systemd/system/gns3.service
.. code:: bash
sudo chown root /lib/systemd/system/gns3.service
sudo systemctl start gns3
Windows
-------
Please use our `all-in-one installer <https://community.gns3.com/community/software/download>`_ to install the stable build.
If you install via source you need to first install:
- Python (3.3 or above) - https://www.python.org/downloads/windows/
- Pywin32 - https://sourceforge.net/projects/pywin32/
Then you can call
.. code:: bash
python setup.py install
to install the remaining dependencies.
To run the tests, you also need to call
.. code:: bash
pip install pytest pytest-capturelog
before actually running the tests with
.. code:: bash
python setup.py test
or with
.. code:: bash
py.test -v
Mac OS X
--------
Please use our DMG package for a simple installation.
If you want to test the current git version or contribute to the project,
you can follow these instructions with virtualenwrapper: http://virtualenvwrapper.readthedocs.org/
and homebrew: http://brew.sh/.
.. code:: bash
brew install python3
mkvirtualenv gns3-server --python=/usr/local/bin/python3.5
python3 setup.py install
gns3server
SSL
---
If you want enable SSL support on GNS3 you can generate a self signed certificate:
.. code:: bash
bash gns3server/cert_utils/create_cert.sh
This command will put the files in ~/.config/GNS3/ssl
After you can start the server in SSL mode with:
.. code:: bash
python gns3server/main.py --certfile ~/.config/GNS3/ssl/server.cert --certkey ~/.config/GNS3/ssl/server.key --ssl
Or in your gns3_server.conf by adding in the Server section:
.. code:: ini
[Server]
certfile=/Users/noplay/.config/GNS3/ssl/server.cert
certkey=/Users/noplay/.config/GNS3/ssl/server.key
ssl=True
Running tests
*************
Just run:
.. code:: bash
py.test -vv
If you want test coverage:
.. code:: bash
py.test --cov-report term-missing --cov=gns3server
Security issues
----------------
Please contact us using contact form available here:
http://docs.gns3.com/1ON9JBXSeR7Nt2-Qum2o3ZX0GU86BZwlmNSUgvmqNWGY/index.html
+17
View File
@@ -0,0 +1,17 @@
# Security Policy
## Supported Versions
These are the versions of the GNS3 server that are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| 3.x.x | :white_check_mark: |
| 2.2.x | :white_check_mark: |
| 2.1.x | :x: |
| 1.x.x | :x: |
## Reporting a Vulnerability
Please use GitHub's report a vulnerability feature. More information can be found in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability
+50
View File
@@ -0,0 +1,50 @@
# ==============================================================================
# GNS3 Copilot AI Agent Dependencies
# ==============================================================================
# Install with: pip install gns3-server[ai-copilot]
# Or directly: pip install -r ai-requirements.txt
# ==============================================================================
# Core AI and Automation Framework
# Note: aiosqlite is in core requirements.txt
langchain>=1.2.10
langchain-core>=1.2.16
langgraph>=1.0.9
langgraph-checkpoint>=4.0.0
langgraph-checkpoint-sqlite>=3.0.3
langgraph-checkpoint-postgres>=3.0.4
# Model Providers
langchain-openai>=1.1.10
langchain-anthropic>=1.3.4
langchain-google-genai>=4.2.1
langchain-aws>=1.3.1
langchain-ollama>=1.0.1
langchain-deepseek>=1.0.1
langchain-xai>=1.2.2
# Token Counting
tiktoken>=0.8.0
# LangSmith SDK
langsmith>=0.7.7
# Network Automation
netmiko>=4.6.0
nornir>=3.5.0
nornir-netmiko>=1.0.1
nornir-utils>=0.2.0
nornir-salt>=0.23.0
# Environment & Configuration
python-dotenv>=1.2.1
# Authentication
PyJWT>=2.10.1
psycopg-pool>=3.1.0
# Skills Repository Management
PyYAML>=6.0.0
GitPython>=3.1.0
# Note: httpx is only for testing (in dev-requirements.txt)
-21
View File
@@ -1,21 +0,0 @@
version: '{build}-{branch}'
image: Visual Studio 2015
platform: x64
environment:
PYTHON: "C:\\Python36-x64"
DISTUTILS_USE_SDK: "1"
API_TOKEN:
secure: VEKn4bYH3QO0ixtQW5ni4Enmn8cS1NlZV246ludBDgQ=
install:
- cinst nmap
- "%PYTHON%\\python.exe -m pip install -r dev-requirements.txt"
- "%PYTHON%\\python.exe -m pip install -r win-requirements.txt"
build: off
test_script:
- "%PYTHON%\\python.exe -m pytest -v"
+7
View File
@@ -0,0 +1,7 @@
services:
gen3-server:
build:
context: .
dockerfile: Dockerfile
ports:
- "8001:3080"
-77
View File
@@ -1,77 +0,0 @@
[Server]
; IP where the server listen for connections
host = 0.0.0.0
; HTTP port for controlling the servers
port = 3080
; Option to enable SSL encryption
ssl = False
certfile=/home/gns3/.config/GNS3/ssl/server.cert
certkey=/home/gns3/.config/GNS3/ssl/server.key
; Path where devices images are stored
images_path = /home/gns3/GNS3/images
; Path where user projects are stored
projects_path = /home/gns3/GNS3/projects
; Path where user appliances are stored
appliances_path = /home/gns3/GNS3/appliances
; Option to automatically send crash reports to the GNS3 team
report_errors = True
; First console port of the range allocated to devices
console_start_port_range = 5000
; Last console port of the range allocated to devices
console_end_port_range = 10000
; First port of the range allocated for inter-device communication. Two ports are allocated per link.
udp_start_port_range = 10000
; Last port of the range allocated for inter-device communication. Two ports are allocated per link
udp_end_port_range = 20000
; uBridge executable location, default: search in PATH
;ubridge_path = ubridge
; Option to enable HTTP authentication.
auth = False
; Username for HTTP authentication.
user = gns3
; Password for HTTP authentication.
password = gns3
; Only allow these interfaces to be used by GNS3, for the Cloud node for example (Linux/OSX only)
; Do not forget to allow virbr0 in order for the NAT node to work
allowed_interfaces = eth0,eth1,virbr0
; Specify the NAT interface to be used by the NAT node
; Default is virbr0 on Linux (requires libvirt) and vmnet8 for other platforms (requires VMware)
default_nat_interface = vmnet10
[VPCS]
; VPCS executable location, default: search in PATH
;vpcs_path = vpcs
[Dynamips]
; Enable auxiliary console ports on IOS routers
allocate_aux_console_ports = False
mmap_support = True
; Dynamips executable path, default: search in PATH
;dynamips_path = dynamips
sparse_memory_support = True
ghost_ios_support = True
[IOU]
; Path of your .iourc file. If not provided, the file is searched in $HOME/.iourc
iourc_path = /home/gns3/.iourc
; Validate if the iourc license file is correct. If you turn this off and your licence is invalid IOU will not start and no errors will be shown.
license_check = True
[Qemu]
; !! Remember to add the gns3 user to the KVM group, otherwise you will not have read / write permissions to /dev/kvm !! (Linux only, has priority over enable_hardware_acceleration)
enable_kvm = True
; Require KVM to be installed in order to start VMs (Linux only, has priority over require_hardware_acceleration)
require_kvm = True
; Enable hardware acceleration (all platforms)
enable_hardware_acceleration = True
; Require hardware acceleration in order to start VMs (all platforms)
require_hardware_acceleration = True
+7 -6
View File
@@ -1,6 +1,7 @@
-rrequirements.txt
sphinx==1.8.3
pytest==4.4.1
pep8==1.7.1
pytest-timeout==1.3.3
pytest==9.0.3 # fix CVE-2025-71176; Python 3.10+ required
flake8==7.3.0
pytest-timeout==2.4.0
pytest-asyncio==1.2.0; python_version == '3.9' # version 1.2.0 is the last one supporting Python 3.9
pytest-asyncio==1.3.0; python_version >= '3.10'
httpx==0.28.1
httpx_ws==0.7.2 # upgrading leads to failures in tests
+15 -4
View File
@@ -1,4 +1,15 @@
tests:
build: .
dockerfile: /tmp/DockerfileTests
command: py.test -v -s tests
version: '3.7'
services:
gns3server:
privileged: true
build:
context: .
dockerfile: Dockerfile
volumes:
- ./gns3server:/server/
- /var/run/docker.sock:/var/run/docker.sock
command: python3 -m gns3server --local --port 3080
ports:
- 3080:3080
- 5000-5100:5000-5100
+1
View File
@@ -0,0 +1 @@
apiv3.gns3.net
+443
View File
@@ -0,0 +1,443 @@
Creative Commons Attribution-ShareAlike 4.0 International
Copyright (c) 2026 GNS3 Web UI Project
=======================================================================
Creative Commons Attribution-ShareAlike 4.0 International
Copyright (C) 2025 Creative Commons Corporation
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Creative Commons Attribution-ShareAlike 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and conditions.
Section 1 – Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
publication, distribution, public performance, public display, and
adaptation rights, and rights in database extensions and
collections.
d. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
e. Licensed Rights means rights granted to You subject to the terms
and conditions of this Public License, which are limited to all
Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
f. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
g. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
h. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and
of the Council of 11 March 1996 on the legal protection of
databases, as amended and/or succeeded, as well as other
essentially equivalent rights anywhere in the world.
i. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 – Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt,
where Exceptions and Limitations apply to Your use, this
Public License does not apply, and You do not need to
comply with its terms and conditions.
3. Term. The term of this Public License is specified in
Section 6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor – Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor – Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You
apply.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights. Moral rights, such as the right of integrity, are
not licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to the
extent possible, the Licensor waives and/or agrees not to assert
any such rights held by the Licensor to the limited extent
necessary to allow You to exercise the Licensed Rights, but not
otherwise.
c. Patent and trademark rights are not licensed under this Public
License.
d. To the extent possible, the Licensor waives any right to collect
royalties from You for the exercise of the Licensed Rights,
whether directly or through a collecting society under any
voluntary or waivable statutory or compulsory licensing scheme.
In all other cases the Licensor expressly reserves any right to
collect such royalties.
Section 3 – License Conditions.
Your exercise of the Licensed Rights is expressly made subject to
the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the
Licensor with the Licensed Material:
i. identification of the creator(s) of the
Licensed Material and any others designated to
receive attribution, in any reasonable manner
requested by the Licensor (including by
pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to
the extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI
or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may
be reasonable to satisfy the conditions by providing a URI
or hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the
Adapted Material from complying with this Public License.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to,
the Adapter's License You apply. You may satisfy this
condition in any reasonable manner based on the medium,
means, and context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 – Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 – Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the
extent possible, the Licensor offers the Licensed Material as-is
and as-available, and makes no representations or warranties of
any kind concerning the Licensed Material, whether express,
implied, statutory, or other. This includes, without limitation,
warranties of title, merchantability, fitness for a particular
purpose, non-infringement, absence of latent or other defects,
accuracy, or the presence or absence of errors, whether or not
known or discoverable. Where disclaimers of warranties are not
allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable
to You on any legal theory (including, without limitation,
negligence) or otherwise for any direct, special, indirect,
incidental, consequential, punitive, exemplary, or other losses,
costs, expenses, or damages that arise out of this Public License
or use of the Licensed Material, even if the Licensor has been
advised of the possibility of such losses, costs, expenses, or
damages. Where a limitation of liability is not allowed in full
or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 – Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply
with this Public License, then Your rights under this Public
License terminate automatically.
b. Where Your right to use the Licensed Material has terminated
under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured,
provided it is cured within 30 days of Your discovery of
the violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 – Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 – Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License
is deemed unenforceable, it shall be automatically reformed to
the minimum extent necessary to make it enforceable. If the
provision cannot be reformed, it shall be severed from this
Public License without affecting the enforceability of the
remaining terms and conditions.
c. No term or condition of this Public License will be waived and
no failure to comply consented to unless expressly agreed to by
the Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public licenses. Notwithstanding,
Creative Commons may elect to apply one of its public licenses to
material it publishes and in those instances will be considered the
"Licensor." The text of the Creative Commons public licenses is
dedicated to the public domain under the CC0 Public Domain Dedication.
The text of the Creative Commons public licenses is dedicated to the
public domain under the CC0 Public Domain Dedication. Except for the
limited purpose of indicating that material is shared under a Creative
Commons public license or as otherwise permitted by the Creative Commons
policies published at creativecommons.org/policies, Creative Commons
does not authorize the use of the trademark "Creative Commons" or any
other trademark or logo of Creative Commons without its prior written
consent including, without limitation, in connection with any
unauthorized modifications to any of its public licenses or any other
arrangements, understandings, or agreements concerning use of licensed
material. For the avoidance of doubt, this paragraph does not form part
of the public licenses.
Creative Commons may be contacted at creativecommons.org.
=======================================================================
For the GNS3 Web UI documentation:
- Documentation License: CC BY-SA 4.0
- Project License: GPLv3 (see root LICENSE file)
- License URL: https://creativecommons.org/licenses/by-sa/4.0/
All documentation files in this directory are licensed under the
Creative Commons Attribution-ShareAlike 4.0 International License
(CC BY-SA 4.0).
=======================================================================
IMPORTANT: ShareAlike Requirements for Software Derivatives
Under the CC BY-SA 4.0 ShareAlike condition, if you create derivative
works based on this documentation, including software that is considered
a derivative of the documentation, you must:
1. **License your derivative work under CC BY-SA 4.0 or a compatible
license** (such as GPLv3, which is compatible with CC BY-SA 4.0)
2. **Attribute the original documentation** to the GNS3 Web UI Project
3. **Indicate if you modified the documentation** and retain
indications of previous modifications
4. **Include the license notice** and link to the CC BY-SA 4.0 license
What constitutes a derivative work:
- Translations of the documentation
- Adaptations, modifications, or enhancements to the documentation
- Software that incorporates substantial portions of the documentation
- Works based on the documentation's structure, organization, or content
Compatible licenses include:
- CC BY-SA 4.0 or later
- GPLv3 (GNU General Public License version 3)
- AGPLv3 (GNU Affero General Public License version 3)
- Other licenses approved as compatible by Creative Commons
For more information on CC BY-SA compatibility, see:
https://creativecommons.org/compatiblelicenses
If you are unsure whether your use constitutes a derivative work or
which license to apply, please consult the full CC BY-SA 4.0 license
text above or seek legal advice.
-177
View File
@@ -1,177 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GNS3.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GNS3.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/GNS3"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GNS3"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+120
View File
@@ -0,0 +1,120 @@
<!--
SPDX-License-Identifier: CC-BY-SA-4.0
See LICENSE file for licensing information.
-->
> This documentation is organized by AI with reference to actual code. AI can make mistakes — please verify against the source code when in doubt.
# GNS3 Server Documentation
---
## License
This documentation is licensed under the **Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0)**.
⚠️ **Important - ShareAlike Requirement**: If you create derivative works based on this documentation (including software that incorporates substantial portions of the documentation), your work must also be licensed under **CC BY-SA 4.0 or a compatible license** (such as GPLv3).
- 📄 **Full License Text**: See [docs/LICENSE](./LICENSE)
- 🔗 **License URL**: https://creativecommons.org/licenses/by-sa/4.0/
- 📖 **Compatibility**: https://creativecommons.org/compatiblelicenses
**Dual License Structure**:
- 📚 **Documentation**: CC BY-SA 4.0 (this directory)
- 💻 **Software Code**: GPLv3 (see root [LICENSE](../LICENSE))
---
Technical documentation for the GNS3 server project, covering features, AI Copilot, development setup, and known issues.
## Directory Structure
```
docs/
├── README.md # This file
├── development-setup.md # Ubuntu 24.04 development environment setup
├── openapi.json # OpenAPI specification
├── features/ # Feature documentation
│ ├── compute-controller-setup.md # Controller + Compute architecture & configuration
│ ├── statistics-api.md # Aggregated statistics API for monitoring
│ ├── vnc-websocket-console.md # Browser-based VNC console via WebSocket
│ └── web-wireshark-business-process.md # Web Wireshark (Docker + xpra packet capture)
├── gns3-copilot/ # AI Copilot feature documentation
│ ├── netmiko_devices.md # Netmiko supported devices (366 types)
│ ├── template-based-configuration-roadmap.md # Future: template-based config with HITL
│ └── implemented/ # Implemented features
│ ├── chat-api.md # Chat API (SSE, session management)
│ ├── llm-model-configs.md # LLM model configuration system
│ ├── command-security.md # Command security and filtering
│ ├── context-window-management.md # Context window optimization
│ ├── node-control-tools.md # Node start/stop/suspend tools
│ └── multi-vendor-device-support.md # Multi-vendor device support
└── bugs/ # Known issues & bug reports
└── telnet-server-connection-race-condition.md
```
---
## Features
### Controller + Compute Setup (`features/compute-controller-setup.md`)
Architecture and minimum configuration for setting up GNS3 Controller with remote Compute nodes. Covers compute node config, controller registration, and multi-compute deployment.
### Statistics API (`features/statistics-api.md`)
Aggregated server statistics API (`GET /v3/statistics`) for monitoring dashboards. Collects compute resources, project/node/link counts, and Web Wireshark container status in a single request.
### VNC WebSocket Console (`features/vnc-websocket-console.md`)
Browser-based VNC console access via WebSocket. The Controller acts as WebSocket-to-WebSocket relay, and Compute bridges WebSocket to TCP for QEMU/Docker VMs. Supports noVNC clients.
### API Error Responses (`features/api-error-responses.md`)
Unified error response format across all GNS3 API endpoints. Documents HTTP status codes, error types, and client-side error handling patterns.
### Web Wireshark (`features/web-wireshark-business-process.md`)
Web-based packet capture analysis using Docker + xpra HTML5 client. Zero-install Wireshark experience directly in the browser, integrated with GNS3 topologies.
---
## GNS3 AI Copilot (`gns3-copilot/`)
### Implemented Features
| Feature | Description | Status |
|---------|-------------|--------|
| [Chat API](gns3-copilot/implemented/chat-api.md) | SSE streaming, session management, token statistics | Implemented |
| [LLM Model Configs](gns3-copilot/implemented/llm-model-configs.md) | Multi-level model config (system/group/user) | Implemented |
| [Command Security](gns3-copilot/implemented/command-security.md) | Command filtering, dangerous operation detection, HITL | Implemented |
| [Context Window Management](gns3-copilot/implemented/context-window-management.md) | Token optimization, content filtering, compression | Implemented |
| [Node Control Tools](gns3-copilot/implemented/node-control-tools.md) | Start/stop/suspend with batch ops and progress tracking | Implemented |
| [Multi-Vendor Support](gns3-copilot/implemented/multi-vendor-device-support.md) | Cisco, Huawei, Ruijie, VPCS with custom Netmiko drivers | Implemented |
### Reference
- [Netmiko Supported Devices](gns3-copilot/netmiko_devices.md) — 366 device types (154 SSH, 55 Telnet, 3 custom GNS3 drivers)
### Roadmap
- [Template-Based Configuration with HITL](gns3-copilot/template-based-configuration-roadmap.md) — Jinja2 templates with human-in-the-loop confirmations for device configuration and node creation
---
## Known Issues (`bugs/`)
- [Telnet Server Connection Race Condition](bugs/telnet-server-connection-race-condition.md) — `getpeername()` error when client disconnects during connection setup (High severity, Open)
---
## Development Setup (`development-setup.md`)
Quick-start guide for Ubuntu 24.04: install via PPA, set up dependencies, and run gns3-server from source.
---
## Related Documentation
- [GNS3 Server API Documentation](https://api.gns3.com/) — Interactive API docs (also available locally via `redoc.html`)
- [GNS3 Web UI Documentation](https://docs.gns3.com/)
- [LangGraph Documentation](https://langchain-ai.github.io/langgraph/)
---
_Last updated: 2026-04-20_
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80 HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/8e21e0ec-028e-4aaf-a6dc-d4cf5e449c0c'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/8e21e0ec-028e-4aaf-a6dc-d4cf5e449c0c HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:38 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/d0b540bc-1fcf-4e5f-9a9c-d04a2b1001c1/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/d0b540bc-1fcf-4e5f-9a9c-d04a2b1001c1/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/8dc16f7a-d0a1-443a-888f-e7a105315f25/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/8dc16f7a-d0a1-443a-888f-e7a105315f25/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:39 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/docker/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/cfab21a8-053e-41a9-b1e6-4fa7d7d03ec7'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/cfab21a8-053e-41a9-b1e6-4fa7d7d03ec7 HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:52 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/5ea1f88b-fed0-4366-958e-bdce27a00aca/adapters/1/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/5ea1f88b-fed0-4366-958e-bdce27a00aca/adapters/1/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:54 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/6fd4180e-4c48-4faa-8b92-2f61b38e456f'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/6fd4180e-4c48-4faa-8b92-2f61b38e456f HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:57 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/ff81b716-de5b-4700-81a9-19b85ed2484c/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/ff81b716-de5b-4700-81a9-19b85ed2484c/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:57 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/e4c7296b-444a-4851-9169-b7286d19f32f'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/e4c7296b-444a-4851-9169-b7286d19f32f HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0e323568-5bfe-43e1-a6c1-88c42dc6e27e/adapters/1/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0e323568-5bfe-43e1-a6c1-88c42dc6e27e/adapters/1/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:41 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/4fae9b05-92d7-4926-b025-e2fa82d36104'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/4fae9b05-92d7-4926-b025-e2fa82d36104 HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:51 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/traceng/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/1d7faff2-881a-4db7-95ab-1eb0fb43b1f0/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/1d7faff2-881a-4db7-95ab-1eb0fb43b1f0/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:51 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/traceng/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/nodes/4e22a267-67ab-4cc9-aac7-b5d155caa7f2/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/nodes/4e22a267-67ab-4cc9-aac7-b5d155caa7f2/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:53 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/virtualbox/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vmware/nodes/08e3c716-8162-413f-adf0-af630d05a9f5/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vmware/nodes/08e3c716-8162-413f-adf0-af630d05a9f5/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:49:05 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/vmware/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/98e08164-d04b-4785-9805-70862e92d0b6'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/98e08164-d04b-4785-9805-70862e92d0b6 HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:49:44 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/vpcs/nodes/{node_id}
@@ -1,14 +0,0 @@
curl -i -X DELETE 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/21890613-9dc9-4990-bec5-8fd968e3a6e7/adapters/0/ports/0/nio'
DELETE /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/21890613-9dc9-4990-bec5-8fd968e3a6e7/adapters/0/ports/0/nio HTTP/1.1
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:49:44 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/vpcs/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
@@ -1,34 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/capabilities'
GET /v2/compute/capabilities HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 366
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/capabilities
{
"node_types": [
"cloud",
"ethernet_hub",
"ethernet_switch",
"nat",
"vpcs",
"virtualbox",
"dynamips",
"frame_relay_switch",
"atm_switch",
"qemu",
"vmware",
"traceng",
"docker",
"iou"
],
"platform": "linuxdebian",
"version": "2.2.0dev8"
}
@@ -1,22 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/iou/images'
GET /v2/compute/iou/images HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 149
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:55 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/iou/images
[
{
"filename": "iou.bin",
"filesize": 7,
"md5sum": "e573e8f5c93c6c00783f20c7a170aa6c",
"path": "iou.bin"
}
]
@@ -1,133 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/network/interfaces'
GET /v2/compute/network/interfaces HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 2933
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/network/interfaces
[
{
"id": "docker0",
"ip_address": "172.17.0.1",
"mac_address": "02:42:c5:7b:84:0b",
"name": "docker0",
"netmask": "255.255.0.0",
"special": true,
"type": "ethernet"
},
{
"id": "lo",
"ip_address": "127.0.0.1",
"mac_address": "00:00:00:00:00:00",
"name": "lo",
"netmask": "255.0.0.0",
"special": true,
"type": "ethernet"
},
{
"id": "vboxnet0",
"ip_address": "",
"mac_address": "0a:00:27:00:00:00",
"name": "vboxnet0",
"netmask": "",
"special": true,
"type": "ethernet"
},
{
"id": "vboxnet1",
"ip_address": "",
"mac_address": "0a:00:27:00:00:01",
"name": "vboxnet1",
"netmask": "",
"special": true,
"type": "ethernet"
},
{
"id": "vboxnet2",
"ip_address": "",
"mac_address": "0a:00:27:00:00:02",
"name": "vboxnet2",
"netmask": "",
"special": true,
"type": "ethernet"
},
{
"id": "virbr0",
"ip_address": "192.168.122.1",
"mac_address": "00:00:00:00:00:00",
"name": "virbr0",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "virbr0-nic",
"ip_address": "",
"mac_address": "52:54:00:cb:6a:77",
"name": "virbr0-nic",
"netmask": "",
"special": true,
"type": "ethernet"
},
{
"id": "vmnet1",
"ip_address": "172.16.1.1",
"mac_address": "00:50:56:c0:00:01",
"name": "vmnet1",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "vmnet2",
"ip_address": "172.16.2.1",
"mac_address": "00:50:56:c0:00:02",
"name": "vmnet2",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "vmnet3",
"ip_address": "172.16.3.1",
"mac_address": "00:50:56:c0:00:03",
"name": "vmnet3",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "vmnet4",
"ip_address": "172.16.10.1",
"mac_address": "00:50:56:c0:00:04",
"name": "vmnet4",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "vmnet8",
"ip_address": "192.168.195.1",
"mac_address": "00:50:56:c0:00:08",
"name": "vmnet8",
"netmask": "255.255.255.0",
"special": true,
"type": "ethernet"
},
{
"id": "wlp58s0",
"ip_address": "192.168.1.149",
"mac_address": "9c:b6:d0:dc:20:29",
"name": "wlp58s0",
"netmask": "255.255.255.0",
"special": false,
"type": "ethernet"
}
]
@@ -1,26 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects'
GET /v2/compute/projects HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 252
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects
[
{
"name": "test",
"project_id": "51010203-0405-0607-0809-0a0b0c0d0e0f",
"variables": null
},
{
"name": "test",
"project_id": "52010203-0405-0607-0809-0a0b0c0d0e0b",
"variables": null
}
]
@@ -1,19 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/40010203-0405-0607-0809-0a0b0c0d0e02'
GET /v2/compute/projects/40010203-0405-0607-0809-0a0b0c0d0e02 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}
{
"name": "test",
"project_id": "40010203-0405-0607-0809-0a0b0c0d0e02",
"variables": null
}
@@ -1,100 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/62a9389c-9bfd-4fd7-986d-ba32879fbe91'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/62a9389c-9bfd-4fd7-986d-ba32879fbe91 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 2080
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}
{
"interfaces": [
{
"name": "docker0",
"special": true,
"type": "ethernet"
},
{
"name": "lo",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet0",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet1",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet2",
"special": true,
"type": "ethernet"
},
{
"name": "virbr0",
"special": true,
"type": "ethernet"
},
{
"name": "virbr0-nic",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet1",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet2",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet3",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet4",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet8",
"special": true,
"type": "ethernet"
},
{
"name": "wlp58s0",
"special": false,
"type": "ethernet"
}
],
"name": "Cloud 1",
"node_directory": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/builtin/62a9389c-9bfd-4fd7-986d-ba32879fbe91",
"node_id": "62a9389c-9bfd-4fd7-986d-ba32879fbe91",
"ports_mapping": [
{
"interface": "wlp58s0",
"name": "wlp58s0",
"port_number": 0,
"type": "ethernet"
}
],
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"remote_console_host": "",
"remote_console_http_path": "/",
"remote_console_port": 23,
"remote_console_type": "none",
"status": "started"
}
@@ -1,34 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/011a97fd-82ba-4a6f-8f96-684637afd015'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/011a97fd-82ba-4a6f-8f96-684637afd015 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 630
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:51 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}
{
"application_id": 1,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"ethernet_adapters": 2,
"l1_keepalives": false,
"md5sum": "e573e8f5c93c6c00783f20c7a170aa6c",
"name": "PC TEST 1",
"node_directory": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/iou/011a97fd-82ba-4a6f-8f96-684637afd015",
"node_id": "011a97fd-82ba-4a6f-8f96-684637afd015",
"nvram": 128,
"path": "iou.bin",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"ram": 256,
"serial_adapters": 2,
"status": "stopped",
"usage": "",
"use_default_iou_values": true
}
@@ -1,28 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/620cae24-6a49-4608-8c21-8367f1e57cfc'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/620cae24-6a49-4608-8c21-8367f1e57cfc HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 335
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:56 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}
{
"name": "Nat 1",
"node_id": "620cae24-6a49-4608-8c21-8367f1e57cfc",
"ports_mapping": [
{
"interface": "virbr0",
"name": "nat0",
"port_number": 0,
"type": "ethernet"
}
],
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "started"
}
@@ -1,59 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/94667ffb-fb8f-4fac-8003-242b720591c3'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/94667ffb-fb8f-4fac-8003-242b720591c3 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 1381
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:19 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}
{
"adapter_type": "e1000",
"adapters": 1,
"bios_image": "",
"bios_image_md5sum": null,
"boot_priority": "c",
"cdrom_image": "",
"cdrom_image_md5sum": null,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"cpu_throttling": 0,
"cpus": 1,
"hda_disk_image": "",
"hda_disk_image_md5sum": null,
"hda_disk_interface": "ide",
"hdb_disk_image": "",
"hdb_disk_image_md5sum": null,
"hdb_disk_interface": "ide",
"hdc_disk_image": "",
"hdc_disk_image_md5sum": null,
"hdc_disk_interface": "ide",
"hdd_disk_image": "",
"hdd_disk_image_md5sum": null,
"hdd_disk_interface": "ide",
"initrd": "",
"initrd_md5sum": null,
"kernel_command_line": "",
"kernel_image": "",
"kernel_image_md5sum": null,
"legacy_networking": false,
"mac_address": "0c:dd:80:91:c3:00",
"name": "PC TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/qemu/94667ffb-fb8f-4fac-8003-242b720591c3",
"node_id": "94667ffb-fb8f-4fac-8003-242b720591c3",
"on_close": "power_off",
"options": "",
"platform": "x86_64",
"process_priority": "low",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"qemu_path": "/tmp/tmpjg3j58ga/qemu-system-x86_64",
"ram": 256,
"status": "stopped",
"usage": ""
}
@@ -1,26 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/f1e6bf7a-d927-43ee-9c32-d012602ef405'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes/f1e6bf7a-d927-43ee-9c32-d012602ef405 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 443
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:50 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/traceng/nodes/{node_id}
{
"command_line": "",
"console": null,
"console_type": "none",
"default_destination": "",
"ip_address": "",
"name": "TraceNG TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/traceng/f1e6bf7a-d927-43ee-9c32-d012602ef405",
"node_id": "f1e6bf7a-d927-43ee-9c32-d012602ef405",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "stopped"
}
@@ -1,32 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/nodes/ee5edbb1-c7cc-4db2-b16f-2389b75d3f7b'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/nodes/ee5edbb1-c7cc-4db2-b16f-2389b75d3f7b HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 483
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:52 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/virtualbox/nodes/{node_id}
{
"adapter_type": "Intel PRO/1000 MT Desktop (82540EM)",
"adapters": 0,
"console": 5004,
"console_type": "telnet",
"headless": false,
"linked_clone": false,
"name": "VMTEST",
"node_directory": null,
"node_id": "ee5edbb1-c7cc-4db2-b16f-2389b75d3f7b",
"on_close": "power_off",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"ram": 0,
"status": "stopped",
"usage": "",
"use_any_adapter": false,
"vmname": "VMTEST"
}
@@ -1,31 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vmware/nodes/adcea44c-6419-4253-a4e9-d851abc1ddb4'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vmware/nodes/adcea44c-6419-4253-a4e9-d851abc1ddb4 HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 610
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:55 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/vmware/nodes/{node_id}
{
"adapter_type": "e1000",
"adapters": 0,
"console": 5004,
"console_type": "telnet",
"headless": false,
"linked_clone": false,
"name": "VMTEST",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/vmware/adcea44c-6419-4253-a4e9-d851abc1ddb4",
"node_id": "adcea44c-6419-4253-a4e9-d851abc1ddb4",
"on_close": "power_off",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "stopped",
"usage": "",
"use_any_adapter": false,
"vmx_path": "/tmp/pytest-of-grossmj/pytest-0/test_vmware_get0/test.vmx"
}
@@ -1,24 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/b9391d74-c99f-4efc-a120-a3f781cbf80f'
GET /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/nodes/b9391d74-c99f-4efc-a120-a3f781cbf80f HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 384
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:49:44 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/vpcs/nodes/{node_id}
{
"command_line": "",
"console": 5004,
"console_type": "telnet",
"name": "PC TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/vpcs/b9391d74-c99f-4efc-a120-a3f781cbf80f",
"node_id": "b9391d74-c99f-4efc-a120-a3f781cbf80f",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "stopped"
}
@@ -1,32 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/qemu/binaries' -d '{"archs": ["i386"]}'
GET /v2/compute/qemu/binaries HTTP/1.1
{
"archs": [
"i386"
]
}
HTTP/1.1 200
Connection: close
Content-Length: 212
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:41 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/qemu/binaries
[
{
"path": "/tmp/x86_64",
"version": "2.2.0"
},
{
"path": "/tmp/alpha",
"version": "2.1.0"
},
{
"path": "/tmp/i386",
"version": "2.1.0"
}
]
@@ -1,19 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/qemu/capabilities'
GET /v2/compute/qemu/capabilities HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 39
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:47 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/qemu/capabilities
{
"kvm": [
"x86_64"
]
}
-18
View File
@@ -1,18 +0,0 @@
curl -i -X GET 'http://localhost:3080/v2/compute/version'
GET /v2/compute/version HTTP/1.1
HTTP/1.1 200
Connection: close
Content-Length: 49
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:50 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/version
{
"local": true,
"version": "2.2.0dev8"
}
@@ -1,22 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects' -d '{"name": "test", "project_id": "10010203-0405-0607-0809-0a0b0c0d0e0f"}'
POST /v2/compute/projects HTTP/1.1
{
"name": "test",
"project_id": "10010203-0405-0607-0809-0a0b0c0d0e0f"
}
HTTP/1.1 201
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects
{
"name": "test",
"project_id": "10010203-0405-0607-0809-0a0b0c0d0e0f",
"variables": null
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/close' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/close HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:59 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/close
@@ -1,102 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes' -d '{"name": "Cloud 1"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes HTTP/1.1
{
"name": "Cloud 1"
}
HTTP/1.1 201
Connection: close
Content-Length: 2080
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes
{
"interfaces": [
{
"name": "docker0",
"special": true,
"type": "ethernet"
},
{
"name": "lo",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet0",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet1",
"special": true,
"type": "ethernet"
},
{
"name": "vboxnet2",
"special": true,
"type": "ethernet"
},
{
"name": "virbr0",
"special": true,
"type": "ethernet"
},
{
"name": "virbr0-nic",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet1",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet2",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet3",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet4",
"special": true,
"type": "ethernet"
},
{
"name": "vmnet8",
"special": true,
"type": "ethernet"
},
{
"name": "wlp58s0",
"special": false,
"type": "ethernet"
}
],
"name": "Cloud 1",
"node_directory": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/builtin/52c21d2b-9348-4945-b541-107aabe9fe79",
"node_id": "52c21d2b-9348-4945-b541-107aabe9fe79",
"ports_mapping": [
{
"interface": "wlp58s0",
"name": "wlp58s0",
"port_number": 0,
"type": "ethernet"
}
],
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"remote_console_host": "",
"remote_console_http_path": "/",
"remote_console_port": 23,
"remote_console_type": "none",
"status": "started"
}
@@ -1,25 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/872594c6-31ff-401d-a93a-8ffc545219fc/adapters/0/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/872594c6-31ff-401d-a93a-8ffc545219fc/adapters/0/ports/0/nio HTTP/1.1
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
HTTP/1.1 201
Connection: close
Content-Length: 89
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:36 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
@@ -1,20 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/3bb37e84-4a74-454c-8203-3a186d08edf2/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/3bb37e84-4a74-454c-8203-3a186d08edf2/adapters/0/ports/0/start_capture HTTP/1.1
{
"capture_file_name": "test.pcap",
"data_link_type": "DLT_EN10MB"
}
HTTP/1.1 200
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:38 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture
{
"pcap_file_path": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/captures/test.pcap"
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/1492f546-a85e-4cb6-91e7-97890c84cf5c/adapters/0/ports/0/stop_capture' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/cloud/nodes/1492f546-a85e-4cb6-91e7-97890c84cf5c/adapters/0/ports/0/stop_capture HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:38 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/cloud/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture
@@ -1,25 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/8e4d6773-6943-44a0-b607-ceed7b0caf51/adapters/0/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/8e4d6773-6943-44a0-b607-ceed7b0caf51/adapters/0/ports/0/nio HTTP/1.1
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
HTTP/1.1 201
Connection: close
Content-Length: 89
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:39 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/docker/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
@@ -1,20 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/b1aa7be8-9b00-415d-8a55-5c7896aaa9b3/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/b1aa7be8-9b00-415d-8a55-5c7896aaa9b3/adapters/0/ports/0/start_capture HTTP/1.1
{
"capture_file_name": "test.pcap",
"data_link_type": "DLT_EN10MB"
}
HTTP/1.1 200
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:39 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/docker/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture
{
"pcap_file_path": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/captures/test.pcap"
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/dceae966-3bef-4ba6-b194-7cc20441b629/adapters/0/ports/0/stop_capture' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/dceae966-3bef-4ba6-b194-7cc20441b629/adapters/0/ports/0/stop_capture HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:39 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/docker/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture
@@ -1,17 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/2a4f5dd4-ad8e-4452-94dc-48d152a179d6/duplicate' -d '{"destination_node_id": "621aef4c-7561-4741-9c17-6abbec80622e"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/docker/nodes/2a4f5dd4-ad8e-4452-94dc-48d152a179d6/duplicate HTTP/1.1
{
"destination_node_id": "621aef4c-7561-4741-9c17-6abbec80622e"
}
HTTP/1.1 201
Connection: close
Content-Length: 4
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:40 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/docker/nodes/{node_id}/duplicate
true
@@ -1,39 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes' -d '{"name": "PC TEST 1", "node_id": "3a4a4104-8ef4-4726-aa00-8b38672f82ce", "path": "iou.bin", "startup_config_content": "hostname test"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes HTTP/1.1
{
"name": "PC TEST 1",
"node_id": "3a4a4104-8ef4-4726-aa00-8b38672f82ce",
"path": "iou.bin",
"startup_config_content": "hostname test"
}
HTTP/1.1 201
Connection: close
Content-Length: 630
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:51 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes
{
"application_id": 1,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"ethernet_adapters": 2,
"l1_keepalives": false,
"md5sum": "e573e8f5c93c6c00783f20c7a170aa6c",
"name": "PC TEST 1",
"node_directory": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/iou/3a4a4104-8ef4-4726-aa00-8b38672f82ce",
"node_id": "3a4a4104-8ef4-4726-aa00-8b38672f82ce",
"nvram": 128,
"path": "iou.bin",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"ram": 256,
"serial_adapters": 2,
"status": "stopped",
"usage": "",
"use_default_iou_values": true
}
@@ -1,21 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/f2f7e520-ee5d-4583-8dcb-0a23f575ca0b/adapters/1/ports/0/nio' -d '{"ethernet_device": "docker0", "type": "nio_ethernet"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/f2f7e520-ee5d-4583-8dcb-0a23f575ca0b/adapters/1/ports/0/nio HTTP/1.1
{
"ethernet_device": "docker0",
"type": "nio_ethernet"
}
HTTP/1.1 201
Connection: close
Content-Length: 64
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:53 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
{
"ethernet_device": "docker0",
"type": "nio_ethernet"
}
@@ -1,20 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/2ac89cba-1663-460d-8f75-22d2f9127e8c/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/2ac89cba-1663-460d-8f75-22d2f9127e8c/adapters/0/ports/0/start_capture HTTP/1.1
{
"capture_file_name": "test.pcap",
"data_link_type": "DLT_EN10MB"
}
HTTP/1.1 200
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:54 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture
{
"pcap_file_path": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/captures/test.pcap"
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/c3e2df2b-b6c6-4bb7-b8bc-649a01e30cda/adapters/0/ports/0/stop_capture' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/c3e2df2b-b6c6-4bb7-b8bc-649a01e30cda/adapters/0/ports/0/stop_capture HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:55 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture
@@ -1,17 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/868f9f30-4a19-44a5-89e6-01f3eb539e6f/duplicate' -d '{"destination_node_id": "f1236c95-e376-494d-8c36-b7c097f5a74e"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/868f9f30-4a19-44a5-89e6-01f3eb539e6f/duplicate HTTP/1.1
{
"destination_node_id": "f1236c95-e376-494d-8c36-b7c097f5a74e"
}
HTTP/1.1 201
Connection: close
Content-Length: 4
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:56 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/duplicate
true
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/0eb2fd65-d114-4609-ae8f-4a499e1ae21e/reload' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/0eb2fd65-d114-4609-ae8f-4a499e1ae21e/reload HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:52 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/reload
@@ -1,36 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/b8bf9529-f866-42f0-96b7-9f4ff0da73c2/start' -d '{"iourc_content": "test"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/b8bf9529-f866-42f0-96b7-9f4ff0da73c2/start HTTP/1.1
{
"iourc_content": "test"
}
HTTP/1.1 200
Connection: close
Content-Length: 630
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:52 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/start
{
"application_id": 1,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"ethernet_adapters": 2,
"l1_keepalives": false,
"md5sum": "e573e8f5c93c6c00783f20c7a170aa6c",
"name": "PC TEST 1",
"node_directory": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/iou/b8bf9529-f866-42f0-96b7-9f4ff0da73c2",
"node_id": "b8bf9529-f866-42f0-96b7-9f4ff0da73c2",
"nvram": 128,
"path": "iou.bin",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"ram": 256,
"serial_adapters": 2,
"status": "stopped",
"usage": "",
"use_default_iou_values": true
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/418fee34-c56a-437c-8a60-b9fb5adf85e4/stop' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/nodes/418fee34-c56a-437c-8a60-b9fb5adf85e4/stop HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:52 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/iou/nodes/{node_id}/stop
@@ -1,30 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes' -d '{"name": "Nat 1"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes HTTP/1.1
{
"name": "Nat 1"
}
HTTP/1.1 201
Connection: close
Content-Length: 335
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:56 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes
{
"name": "Nat 1",
"node_id": "aef6720f-e0cb-43cb-bd32-6cd83bfee5dd",
"ports_mapping": [
{
"interface": "virbr0",
"name": "nat0",
"port_number": 0,
"type": "ethernet"
}
],
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "started"
}
@@ -1,25 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/6d7317fd-73f0-4311-ba21-f974925b17bf/adapters/0/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/6d7317fd-73f0-4311-ba21-f974925b17bf/adapters/0/ports/0/nio HTTP/1.1
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
HTTP/1.1 201
Connection: close
Content-Length: 89
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:56 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
@@ -1,20 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/85c32b82-3012-4917-9c1f-bc4c6cc7e35b/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/85c32b82-3012-4917-9c1f-bc4c6cc7e35b/adapters/0/ports/0/start_capture HTTP/1.1
{
"capture_file_name": "test.pcap",
"data_link_type": "DLT_EN10MB"
}
HTTP/1.1 200
Connection: close
Content-Length: 103
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:57 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture
{
"pcap_file_path": "/tmp/pytest-of-grossmj/pytest-0/test_json4/project-files/captures/test.pcap"
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/400c5707-217f-4270-852a-e9f3c5b9cca2/adapters/0/ports/0/stop_capture' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/nat/nodes/400c5707-217f-4270-852a-e9f3c5b9cca2/adapters/0/ports/0/stop_capture HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:47:57 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/nat/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture
@@ -1,17 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/ports/udp' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/ports/udp HTTP/1.1
{}
HTTP/1.1 201
Connection: close
Content-Length: 25
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:47:58 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/ports/udp
{
"udp_port": 10000
}
@@ -1,63 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes' -d '{"hda_disk_image": "hello.img", "name": "PC TEST 1", "qemu_path": "/tmp/tmpjg3j58ga/qemu-system-x86_64"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes HTTP/1.1
{
"hda_disk_image": "hello.img",
"name": "PC TEST 1",
"qemu_path": "/tmp/tmpjg3j58ga/qemu-system-x86_64"
}
HTTP/1.1 201
Connection: close
Content-Length: 1420
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:17 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes
{
"adapter_type": "e1000",
"adapters": 1,
"bios_image": "",
"bios_image_md5sum": null,
"boot_priority": "c",
"cdrom_image": "",
"cdrom_image_md5sum": null,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"cpu_throttling": 0,
"cpus": 1,
"hda_disk_image": "hello.img",
"hda_disk_image_md5sum": "7d793037a0760186574b0282f2f435e7",
"hda_disk_interface": "ide",
"hdb_disk_image": "",
"hdb_disk_image_md5sum": null,
"hdb_disk_interface": "ide",
"hdc_disk_image": "",
"hdc_disk_image_md5sum": null,
"hdc_disk_interface": "ide",
"hdd_disk_image": "",
"hdd_disk_image_md5sum": null,
"hdd_disk_interface": "ide",
"initrd": "",
"initrd_md5sum": null,
"kernel_command_line": "",
"kernel_image": "",
"kernel_image_md5sum": null,
"legacy_networking": false,
"mac_address": "0c:dd:80:c7:ca:00",
"name": "PC TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/qemu/5cb24b0b-7252-4b97-85aa-31efaf6dc7ca",
"node_id": "5cb24b0b-7252-4b97-85aa-31efaf6dc7ca",
"on_close": "power_off",
"options": "",
"platform": "x86_64",
"process_priority": "low",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"qemu_path": "/tmp/tmpjg3j58ga/qemu-system-x86_64",
"ram": 256,
"status": "stopped",
"usage": ""
}
@@ -1,25 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0afa5ce7-44ef-48df-906e-fb9b53b65924/adapters/1/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0afa5ce7-44ef-48df-906e-fb9b53b65924/adapters/1/ports/0/nio HTTP/1.1
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
HTTP/1.1 201
Connection: close
Content-Length: 89
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:40 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio
{
"lport": 4242,
"rhost": "127.0.0.1",
"rport": 4343,
"type": "nio_udp"
}
@@ -1,20 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/c963f115-ea5a-44d8-b96f-06612cb2fcc4/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/c963f115-ea5a-44d8-b96f-06612cb2fcc4/adapters/0/ports/0/start_capture HTTP/1.1
{
"capture_file_name": "test.pcap",
"data_link_type": "DLT_EN10MB"
}
HTTP/1.1 200
Connection: close
Content-Length: 123
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:48 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture
{
"pcap_file_path": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/captures/test.pcap"
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/195d0083-2c8b-48cc-abe3-5965308d135b/adapters/0/ports/0/stop_capture' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/195d0083-2c8b-48cc-abe3-5965308d135b/adapters/0/ports/0/stop_capture HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:48 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture
@@ -1,17 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/a6d2e376-d9b9-4d2f-b955-74939a34a278/duplicate' -d '{"destination_node_id": "0a133429-a8ea-44f3-8a35-d52ec14bf92c"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/a6d2e376-d9b9-4d2f-b955-74939a34a278/duplicate HTTP/1.1
{
"destination_node_id": "0a133429-a8ea-44f3-8a35-d52ec14bf92c"
}
HTTP/1.1 201
Connection: close
Content-Length: 4
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:48 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/duplicate
true
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/318670f6-d34a-49c8-9086-96a55fbdfe5d/reload' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/318670f6-d34a-49c8-9086-96a55fbdfe5d/reload HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:25 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/reload
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/d782eac8-1a49-4390-bddd-9e5abfb91a7e/resume' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/d782eac8-1a49-4390-bddd-9e5abfb91a7e/resume HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:34 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/resume
@@ -1,59 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/27170ede-eb4a-4587-9f34-5feef70b64f5/start' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/27170ede-eb4a-4587-9f34-5feef70b64f5/start HTTP/1.1
{}
HTTP/1.1 200
Connection: close
Content-Length: 1381
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:20 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/start
{
"adapter_type": "e1000",
"adapters": 1,
"bios_image": "",
"bios_image_md5sum": null,
"boot_priority": "c",
"cdrom_image": "",
"cdrom_image_md5sum": null,
"command_line": "",
"console": 5004,
"console_type": "telnet",
"cpu_throttling": 0,
"cpus": 1,
"hda_disk_image": "",
"hda_disk_image_md5sum": null,
"hda_disk_interface": "ide",
"hdb_disk_image": "",
"hdb_disk_image_md5sum": null,
"hdb_disk_interface": "ide",
"hdc_disk_image": "",
"hdc_disk_image_md5sum": null,
"hdc_disk_interface": "ide",
"hdd_disk_image": "",
"hdd_disk_image_md5sum": null,
"hdd_disk_interface": "ide",
"initrd": "",
"initrd_md5sum": null,
"kernel_command_line": "",
"kernel_image": "",
"kernel_image_md5sum": null,
"legacy_networking": false,
"mac_address": "0c:dd:80:64:f5:00",
"name": "PC TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/qemu/27170ede-eb4a-4587-9f34-5feef70b64f5",
"node_id": "27170ede-eb4a-4587-9f34-5feef70b64f5",
"on_close": "power_off",
"options": "",
"platform": "x86_64",
"process_priority": "low",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"qemu_path": "/tmp/tmpjg3j58ga/qemu-system-x86_64",
"ram": 256,
"status": "stopped",
"usage": ""
}
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/02827bc3-3459-4217-b2dc-1711f6331c99/stop' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/02827bc3-3459-4217-b2dc-1711f6331c99/stop HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:23 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/stop
@@ -1,14 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0960fea6-6ee6-4f5b-82dc-090cbea3c67d/suspend' -d '{}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/nodes/0960fea6-6ee6-4f5b-82dc-090cbea3c67d/suspend HTTP/1.1
{}
HTTP/1.1 204
Connection: close
Content-Length: 0
Content-Type: application/octet-stream
Date: Sat, 30 Mar 2019 08:48:28 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/qemu/nodes/{node_id}/suspend
@@ -1,28 +0,0 @@
curl -i -X POST 'http://localhost:3080/v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes' -d '{"name": "TraceNG TEST 1"}'
POST /v2/compute/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/traceng/nodes HTTP/1.1
{
"name": "TraceNG TEST 1"
}
HTTP/1.1 201
Connection: close
Content-Length: 443
Content-Type: application/json
Date: Sat, 30 Mar 2019 08:48:50 GMT
Server: Python/3.6 GNS3/2.2.0dev8
X-Route: /v2/compute/projects/{project_id}/traceng/nodes
{
"command_line": "",
"console": null,
"console_type": "none",
"default_destination": "",
"ip_address": "",
"name": "TraceNG TEST 1",
"node_directory": "/tmp/tmp2a2tb7g2/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/traceng/d210c8c7-3943-49c5-81ef-9a465b13a4ea",
"node_id": "d210c8c7-3943-49c5-81ef-9a465b13a4ea",
"project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
"status": "stopped"
}
Loaded 100 of 2258 files, more files were not shown because too many files have changed in this diff. Show more