Compare commits

...
121 Commits
Author SHA1 Message Date
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
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
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
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
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 55a5ce77ba Remove debug message 2020-04-06 11:51:59 +09:30
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 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
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
278 changed files with 5737 additions and 4562 deletions

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
name: testing
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f dev-requirements.txt ]; then pip install -r dev-requirements.txt; fi
- 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: |
pytest -vv
-2
View File
@@ -1,2 +0,0 @@
branch:
2.2
-33
View File
@@ -1,33 +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
- PYTHON_VERSION=3.8
+13
View File
@@ -0,0 +1,13 @@
{
"scanSettings": {
"configMode": "AUTO",
"configExternalURL": "",
"projectToken" : ""
},
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "failure"
},
"issueSettings": {
"minSeverityLevel": "LOW"
}
}
+56
View File
@@ -1,5 +1,61 @@
# Change Log
## 2.2.11 09/07/2020
* Fix crash when project sets 'auto_open' option and a remote GNS3 VM is used. Fixes https://github.com/GNS3/gns3-gui/issues/3014
* Fix Dynamips ghost image support when project contains a space. Fixes #3015
* Release Web-Ui version 2020.3.0-beta.1
* Fix issue when cannot skip slots for Dynamips routers. Fixes https://github.com/GNS3/gns3-gui/issues/3000
* Allow tests to be run by root. Fixes #1784
* Update classifiers in setup.py
## 2.2.10 18/06/2020
* Add pytest-aiohttp to tests_require in setup.py
* Don't require hardware acceleration. Fixes #1780
* Release Web-Ui version 2020.2.0-beta.5
* Tests can be run with Python 3.8
* Wait longer for x11 socket file to be created. Ref #1761
* Allow Hyper-V to run on AMD when Windows 10 build 19640 or later is detected. Fixes #1777
* Show error message if IPv6 is not enabled when using SPICE console. Fixes #1772
* Move jsonschema 2.6.0 requirement in build repository.
* Only use jsonschema 2.6.0 on Windows and macOS.
* Disable default integrations for sentry sdk.
* Remove unused bytes2human function.
## 2.2.9 04/06/2020
* Release Web-Ui version 2020.2.0-beta.4
* Support to activate/deactive network connection state replication in Qemu.
* Possible fix for problem connecting to the GNS3 VM. Ref https://github.com/GNS3/gns3-gui/issues/2969 #1760
* Option to reset or not all MAC addresses when exporting or duplicating a project.
* Fix bug when changing properties for closed project. Fixes #1754
* Fix issues with crash reporting & bump version to 2.2.9dev2. Ref https://github.com/GNS3/gns3-server/issues/1758
* Lock listing VMs. Ref #1755
* Try to fix error when listing Hyper-V VMs. Ref #1755
* Catch VirtualBox errors when listing VMs. Fixes #1759
* Deprecate running with Python 3.5
* aiocontextvars is only necessary for Python < 3.7
* Replace Raven by Sentry SDK. Fixes https://github.com/GNS3/gns3-server/issues/1758
* 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
## 2.2.8 07/05/2020
* Release Web-Ui 2020.2.0-beta.3
* Default port set to 80 for server running in the GNS3 VM. Fixes #1737
* Make the Web UI the default page. Ref https://github.com/GNS3/gns3-server/issues/1737
* Support controller reloading for templates, appliances and projects. Ref #1743
* Return exit status 1 if server fails to start. Fixes #1744
* 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
* Use Environmental Markers to force jsonschema version 2.6.0 on Windows/macOS. Ref https://github.com/GNS3/gns3-gui/issues/2849
* Implement a minimum interval between cpu_percent() calls. Fixes #1738
* Add clipboard support for TigerVnc
* Sort snapshots by (created_at, name)
* Unprotected access for websocket consoles. Ref https://github.com/GNS3/gns3-gui/issues/2883#issuecomment-580677552
* Support for WebSocket consoles
* Return array for controller statistics endpoint
* Server statistics implementation
## 2.2.7 07/04/2020
* Release 2020.2.0-beta.1
-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
-1
View File
@@ -2,7 +2,6 @@ include README.rst
include AUTHORS
include LICENSE
include MANIFEST.in
include tox.ini
include requirements.txt
recursive-include tests *
recursive-exclude docs *
+20 -10
View File
@@ -1,18 +1,32 @@
GNS3-server
===========
.. image:: https://travis-ci.org/GNS3/gns3-server.svg?branch=master
:target: https://travis-ci.org/GNS3/gns3-server
.. image:: https://github.com/GNS3/gns3-server/workflows/testing/badge.svg
:target: https://github.com/GNS3/gns3-server/actions?query=workflow%3Atesting
.. image:: https://img.shields.io/pypi/v/gns3-server.svg
:target: https://pypi.python.org/pypi/gns3-server
.. image:: https://snyk.io/test/github/GNS3/gns3-server/badge.svg
:target: https://snyk.io/test/github/GNS3/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.
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.
You will need the GNS3 GUI (gns3-gui repository) to control the server.
Software dependencies
---------------------
In addition of Python dependencies listed in a section below, 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 connectitivy tests using ping, traceroute etc.
* Qemu is strongly recommended on Linux, as most node types are based on Qemu, for example Cisco IOSv and Arista vEOS.
* libvirt is recommended (Linux only), as it's needed for the NAT cloud
* Docker is optional (Linux only), some nodes are based on Docker.
* i386-libraries of libc and libcrypto are optional (Linux only), they are only needed to run IOU based nodes.
Branches
--------
@@ -22,7 +36,7 @@ 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)
2.x (2.3 for example)
*********************
Next major release
@@ -45,11 +59,7 @@ You must be connected to the Internet in order to install the dependencies.
Dependencies:
- Python 3.4 or above
- aiohttp
- setuptools
- psutil
- jsonschema
- Python 3.5.3, setuptools and the ones listed `here <https://github.com/GNS3/gns3-server/blob/master/requirements.txt>`_
The following commands will install some of these dependencies:
+1 -1
View File
@@ -77,4 +77,4 @@ 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
require_hardware_acceleration = False
+4 -4
View File
@@ -1,6 +1,6 @@
-rrequirements.txt
sphinx==1.8.3
pytest==4.4.1
pep8==1.7.1
pytest-timeout==1.3.3
pytest==5.4.3
flake8==3.8.3
pytest-timeout==1.4.1
pytest-aiohttp==0.3.0
-4
View File
@@ -1,4 +0,0 @@
tests:
build: .
dockerfile: /tmp/DockerfileTests
command: py.test -v -s tests
@@ -13,7 +13,7 @@ Parameters
Response status codes
**********************
- **201**: Snasphot created
- **201**: Snapshot created
- **404**: The project doesn't exist
Input
@@ -54,7 +54,7 @@ Parameters
Response status codes
**********************
- **200**: Snasphot list returned
- **200**: Snapshot list returned
- **404**: The project doesn't exist
Sample session
@@ -10,7 +10,7 @@ Delete a snapshot from disk
Parameters
**********
- **project_id**: Project UUID
- **snapshot_id**: Snasphot UUID
- **snapshot_id**: Snapshot UUID
Response status codes
**********************
@@ -10,7 +10,7 @@ Restore a snapshot from disk
Parameters
**********
- **project_id**: Project UUID
- **snapshot_id**: Snasphot UUID
- **snapshot_id**: Snapshot UUID
Response status codes
**********************
+1 -1
View File
@@ -58,7 +58,7 @@ The zip can be a ZIP64 if the project is too big for standard zip file.
These files contain everything needed to create a new appliance template in GNS3.
A JSON schema is available there:
https://github.com/GNS3/gns3-registry/blob/master/schemas/appliance.json
https://github.com/GNS3/gns3-registry/blob/master/schemas/appliance_v6.json
And samples there:
https://github.com/GNS3/gns3-registry/tree/master/appliances
+1 -1
View File
@@ -44,7 +44,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%30disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
+19 -7
View File
@@ -3,17 +3,17 @@
"category": "multilayer_switch",
"status": "stable",
"product_name": "ArubaOS-CX Simulation Software",
"description": "The ArubaOS-CX Simulation Software OVA is a virtual platform to enable simulation of the ArubaOS-CX Network Operating System. Simulated networks can be created using many of the protocols in the ArubaOS-CX Operating system like OSPF and BGP. Key features like the Aruba Network Analytics Engine and the REST API can be simulated, providing a lightweight development platform to building the modern network. This software can be easily implemented in the GNS3 simulation software to enable drag and drop network design for building complex simulated topologies.",
"maintainer_email": "alloytm@gmail.com",
"description": "The ArubaOS-CX Simulation Software is a virtual platform to enable simulation of the ArubaOS-CX Network Operating System. Simulated networks can be created using many of the protocols in the ArubaOS-CX Operating system like OSPF, BGP (inc. EVPN). Key features like the Aruba Network Analytics Engine and the REST API can be simulated, providing a lightweight development platform to building the modern network.",
"maintainer_email": "vincent.giles@hpe.com",
"vendor_url": "arubanetworks.com",
"vendor_name": "HPE Aruba",
"availability": "service-contract",
"maintainer": "Tak Mem Loy",
"maintainer": "Aruba",
"registry_version": 4,
"usage": "Default username admin with blank password.",
"usage": "Default username admin has to be set at first login.",
"symbol": ":/symbols/route_switch_processor.svg",
"first_port_name": "mgmt",
"port_name_format": "1/1/{0}",
"port_name_format": "1/1/{port1}",
"qemu": {
"arch": "x86_64",
@@ -31,6 +31,13 @@
},
"images": [
{
"filename": "arubaoscx-disk-image-genericx86-p4-20200311173823.vmdk",
"version": "10.04.1000",
"md5sum": "4e000d73c3593dfed6c49259c31401ea",
"filesize": 356249088,
"download_url": "https://asp.arubanetworks.com/"
},
{
"filename": "arubaoscx-disk-image-genericx86-p4-20180712161119.vmdk",
"version": "10.01.0001",
@@ -42,12 +49,17 @@
],
"versions": [
{
"name": "10.04.1000",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20200311173823.vmdk"
}
},
{
"name": "10.01.0001",
"images": {
"hda_disk_image": "arubaoscx-disk-image-genericx86-p4-20180712161119.vmdk"
}
}
]
]
}
+1 -1
View File
@@ -70,7 +70,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+57 -5
View File
@@ -22,6 +22,13 @@
"kvm": "require"
},
"images": [
{
"filename": "csr1000v-universalk9.16.12.03-serial.qcow2",
"version": "16.12.3",
"md5sum": "1fc380569ad3cc145fb9cbc993b2eb32",
"filesize": 986775552,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477/release/Gibraltar-16.12.3"
},
{
"filename": "csr1000v-universalk9.16.12.01a-serial.qcow2",
"version": "16.12.1a",
@@ -36,6 +43,13 @@
"filesize": 950468608,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477/release/Gibraltar-16.10.1b"
},
{
"filename": "csr1000v-universalk9.16.09.05-serial.qcow2",
"version": "16.9.5",
"md5sum": "7a07a182178243c1c107e68f04ecd8b5",
"filesize": 920518656,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477/release/Fuji-16.9.5"
},
{
"filename": "csr1000v-universalk9.16.09.01-serial.qcow2",
"version": "16.9.1",
@@ -57,12 +71,19 @@
"filesize": 884539392,
"download_url": "https://software.cisco.com/download/release.html?mdfid=284364978&flowid=39582&softwareid=282046477&release=Fuji-16.7.1"
},
{
"filename": "csr1000v-universalk9.16.06.07-serial.qcow2",
"version": "16.6.7",
"md5sum": "2aba82d78091b4603224a13710399447",
"filesize": 1573322752,
"download_url": "https://software.cisco.com/download/release.html?mdfid=284364978&flowid=39582&softwareid=282046477&release=Everest-16.6.7"
},
{
"filename": "csr1000v-universalk9.16.06.06-serial.qcow2",
"version": "16.6.6",
"md5sum": "31bd32ef6b0d83a8ca19c7b566737a36",
"filesize": 1573191680,
"download_url": "https://software.cisco.com/download/release.html?mdfid=284364978&flowid=39582&softwareid=282046477&release=Everest-16.6.2"
"download_url": "https://software.cisco.com/download/release.html?mdfid=284364978&flowid=39582&softwareid=282046477&release=Everest-16.6.6"
},
{
"filename": "csr1000v-universalk9.16.06.02-serial.qcow2",
@@ -90,21 +111,21 @@
"version": "16.5.1b",
"md5sum": "ac11d33041b8ff6dc3553e324d02cccb",
"filesize": 1209543680,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "csr1000v-universalk9.03.17.00.S.156-1.S-ext.qcow2",
"version": "3.17",
"md5sum": "06cbfcd11f3557391db64fe2a6015a6e",
"filesize": 1346305024,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "csr1000v-universalk9.16.3.1-build2.qcow2",
"version": "16.3.1-build2",
"md5sum": "a770e96de928265515304c9c9d6b46b9",
"filesize": 1280835584,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "csr1000v-universalk9.16.03.01.qcow2",
@@ -118,7 +139,7 @@
"version": "16.3.2",
"md5sum": "2e5803d23cd52cba5d55fa8306be5f13",
"filesize": 1167720448,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "csr1000v-universalk9.16.4.1.qcow2",
@@ -126,9 +147,22 @@
"md5sum": "3428e0dcf5132a1b11ab7696d8c61b2e",
"filesize": 1261961216,
"download_url": "https://virl.mediuscorp.com/my-account/"
},
{
"filename": "csr1000v-universalk9.16.6.1.qcow2",
"version": "16.6.1-VIRL",
"md5sum": "996eb6dbf54781f6393bd689571a818c",
"filesize": 1316301824,
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
{
"name": "16.12.3",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.12.03-serial.qcow2"
}
},
{
"name": "16.12.1a",
"images": {
@@ -141,6 +175,12 @@
"hda_disk_image": "csr1000v-universalk9.16.10.01b-serial.qcow2"
}
},
{
"name": "16.9.5",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.09.05-serial.qcow2"
}
},
{
"name": "16.9.1",
"images": {
@@ -159,6 +199,12 @@
"hda_disk_image": "csr1000v-universalk9.16.07.01-serial.qcow2"
}
},
{
"name": "16.6.7",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.06.07-serial.qcow2"
}
},
{
"name": "16.6.6",
"images": {
@@ -218,6 +264,12 @@
"images": {
"hda_disk_image": "csr1000v-universalk9.16.4.1.qcow2"
}
},
{
"name": "16.6.1-VIRL",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.6.1.qcow2"
}
}
]
}
+1 -1
View File
@@ -52,7 +52,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -48,7 +48,7 @@
"md5sum": "d1686d2f25695dee32eab9a6f4652c7c",
"filesize": 200192,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -41,7 +41,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+5 -5
View File
@@ -29,35 +29,35 @@
"md5sum": "bc605651c4688276f81fd59dcf5cc786",
"filesize": 1048576,
"download_url": "https://sourceforge.net/projects/gns-3/files",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Qemu Appliances/IOSv_startup_config.img/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/IOSv_startup_config.img/download"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.157-3.M3",
"version": "15.7(3)M3",
"md5sum": "37c148ffa14a82f418a6e9c2b049fafe",
"filesize": 134021120,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.156-2.T",
"version": "15.6(2)T",
"md5sum": "83707e3cc93646da58ee6563a68002b5",
"filesize": 128450560,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.156-1.T",
"version": "15.6(1)T",
"md5sum": "e7cb1bbd0c59280dd946feefa68fa270",
"filesize": 128122880,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.155-3.M",
"version": "15.5(3)M",
"md5sum": "79f613ac3b179d5a64520730925130b2",
"filesize": 127926272,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
+3 -3
View File
@@ -28,21 +28,21 @@
"version": "15.2.1",
"md5sum": "14b981002e40b660f2d7400401e04c14",
"filesize": 44938752,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios_l2-adventerprisek9-m.03.2017.qcow2",
"version": "15.2(20170321:233949)",
"md5sum": "8f14b50083a14688dec2fc791706bb3e",
"filesize": 41157632,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "vios_l2-adventerprisek9-m.vmdk.SSA.152-4.0.55.E",
"version": "15.2(4.0.55)E",
"md5sum": "1a3a21f5697cae64bb930895b986d71e",
"filesize": 96862208,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
+2 -2
View File
@@ -28,14 +28,14 @@
"version": "6.1.3",
"md5sum": "1693b5d22a398587dd0fed2877d8dfac",
"filesize": 428588544,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "iosxrv-k9-demo-6.0.1.qcow2",
"version": "6.0.1",
"md5sum": "0831ecf43628eccb752ebb275de9a62a",
"filesize": 908132352,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
+3 -3
View File
@@ -77,21 +77,21 @@
"version": "6.2.25",
"md5sum": "3f54e62b6f7cedfb2607233e5e465766",
"filesize": 1190723584,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "xrv9k-fullk9-x.qcow2-6.0.1",
"version": "6.0.1",
"md5sum": "e20d046807075046c35b6ce7d6766a7f",
"filesize": 2109210624,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "xrv9k-fullk9-x.qcow2-6.0.0",
"version": "6.0.0",
"md5sum": "64c538c34252aaeb4ed1ddb93d6803fd",
"filesize": 2572943360,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
+1 -1
View File
@@ -89,7 +89,7 @@
"md5sum": "d1686d2f25695dee32eab9a6f4652c7c",
"filesize": 200192,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
}
],
"versions": [
+2 -2
View File
@@ -27,14 +27,14 @@
"version": "7.3.0",
"md5sum": "b4cd6edf15ab4c6bce53c3f6c1e3a742",
"filesize": 214368256,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
},
{
"filename": "titanium-d1.7.2.0.D1.1.vmdk",
"version": "7.2.0",
"md5sum": "0ee38c7d717840cb4ca822f4870671d0",
"filesize": 361103360,
"download_url": "https://virl.mediuscorp.com/my-account/"
"download_url": "https://learningnetworkstore.cisco.com/myaccount"
}
],
"versions": [
+1 -1
View File
@@ -48,7 +48,7 @@
"md5sum": "d1686d2f25695dee32eab9a6f4652c7c",
"filesize": 200192,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty200G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -68,7 +68,7 @@
"md5sum": "f1d2c25b6990f99bd05b433ab603bdb4",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty8G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty8G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -63,7 +63,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+44
View File
@@ -0,0 +1,44 @@
{
"name": "Debian 10 Minimal",
"category": "guest",
"description": "Debian 10 Custom, with automatic disk resize and ssh/nmap",
"vendor_name": "Debian",
"vendor_url": "https://debian.org",
"documentation_url": "https://wiki.debian.org",
"product_name": "Debian",
"product_url": "https://debian.org",
"registry_version": 3,
"status": "stable",
"maintainer": "Ramiro Magallanes",
"maintainer_email": "ramiro@gnubit.com",
"usage": "Username: root\nPassword: debian | MD5: 860d5051877bf4246eabc0bcb391b9a1",
"port_name_format": "enp1s{0}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 1,
"ram": 2048,
"hda_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "c",
"kvm": "require",
"options": "-vga virtio"
},
"images": [
{
"filename": "debian10-gns3.qcow2",
"version": "10.2.0",
"md5sum": "860d5051877bf4246eabc0bcb391b9a1",
"filesize": 2685009920,
"download_url": "https://downloads.gnubit.com/gns3-deb10-min/"
}
],
"versions": [
{
"name": "Debian 10.2.0",
"images": {
"hda_disk_image": "debian10-gns3.qcow2"
}
}
]
}
+1 -1
View File
@@ -59,7 +59,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -38,7 +38,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+26
View File
@@ -28,6 +28,20 @@
"images": [
{
"filename": "EXOS-VM_v30.6.1.11.qcow2",
"version": "30.6.1.11",
"md5sum": "bf3e13570417d7e3464165b344c196eb",
"filesize": 475332608,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.6.1.11.qcow2"
},
{
"filename": "EXOS-VM_v30.5.1.15.qcow2",
"version": "30.5.1.15",
"md5sum": "380d0c7bb8f0aa272ceb84b85f367a63",
"filesize": 498663424,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.5.1.15.qcow2"
},
{
"filename": "EXOS-VM_v30.4.1.2.qcow2",
"version": "30.4.1.2",
@@ -75,6 +89,18 @@
"versions": [
{
"name": "30.6.1.11",
"images": {
"hda_disk_image": "EXOS-VM_v30.6.1.11.qcow2"
}
},
{
"name": "30.5.1.15",
"images": {
"hda_disk_image": "EXOS-VM_v30.5.1.15.qcow2"
}
},
{
"name": "30.4.1.2",
"images": {
@@ -30,6 +30,13 @@
"images":
[
{
"filename": "VOSSGNS3.8.1.5.0.qcow2",
"version": "v8.1.5.0",
"md5sum": "dff95f67fc04f82f627209ff7b7b3860",
"filesize": 331087872,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.8.1.5.0.qcow2"
},
{
"filename": "VOSSGNS3.8.1.0.0.qcow2",
"version": "v8.1.0.0",
"md5sum": "6b46fd54999a4cd2369440809ccc5099",
@@ -41,20 +48,27 @@
"version": "voss_7.1.0.0",
"md5sum": "7bb2974efe1a1ab857debd9fa894dbe7",
"filesize": 193724416,
"direct_download_url": "https://stackingtool.extremenetworks.com/github/VOSSGNS3.7.1.0.0.qcow2"
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.7.1.0.0.qcow2"
},
{
"filename": "VOSSGNS3.7.0.0.0.img",
"version": "voss_7.0.0.0",
"md5sum": "65fe97461156aa88c836a90be1287649",
"filesize": 419430400,
"direct_download_url": "https://stackingtool.extremenetworks.com/github/VOSSGNS3.7.0.0.0.img"
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_VOSS/VOSSGNS3.7.0.0.0.img"
}
],
"versions":
[
{
"name": "v8.1.5.0",
"images":
{
"hda_disk_image": "VOSSGNS3.8.1.5.0.qcow2"
}
},
{
"name": "v8.1.0.0",
"images":
{
+46 -18
View File
@@ -27,12 +27,33 @@
"options": "-smp 2 -cpu host"
},
"images": [
{
"filename": "BIGIP-15.1.0.2-0.0.9.qcow2",
"version": "15.1.0.2",
"md5sum": "95ff618b7d0b53c4252299cd49b0e564",
"filesize": 5236588544,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v15.x/15.1.0/english/15.1.0.2_virtual-edition/&sw=BIG-IP&pro=big-ip_v15.x&ver=15.1.0&container=15.1.0.2_Virtual-Edition&file=BIGIP-15.1.0.2-0.0.9.ALL.qcow2.zip"
},
{
"filename": "BIGIP-15.0.1.3-0.0.4.qcow2",
"version": "15.0.1.3",
"md5sum": "9caf1fb3e373ab37b9d489c038ff1908",
"filesize": 5236588544,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v15.x/15.0.1/english/15.0.1.3_virtual-edition/&sw=BIG-IP&pro=big-ip_v15.x&ver=15.0.1&container=15.0.1.3_Virtual-Edition&file=BIGIP-15.0.1.3-0.0.4.ALL.qcow2.zip"
},
{
"filename": "BIGIP-15.0.0-0.0.39.qcow2",
"version": "15.0.0",
"md5sum": "978ede3addc717ff853e9d05dc0e9289",
"filesize": 5251923968,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v15.x/15.0.0/english/virtual-edition/&sw=BIG-IP&pro=big-ip_v15.x&ver=15.0.0&container=Virtual-Edition&file=BIGIP-15.0.0-0.0.39.ALL.qcow2.zip"
},
{
"filename": "BIGIP-14.1.2.3-0.0.5.qcow2",
"version": "14.1.2.3",
"md5sum": "356520eedb615c93e985474f2b2ec603",
"filesize": 5036834816,
"download_url": "https://downloads.f5.com"
"md5sum": "a16fbbd264605460cf254d0f0fb7faad",
"filesize": 5110169600,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v14.x/14.1.2/english/14.1.2.3_virtual-edition/&sw=BIG-IP&pro=big-ip_v14.x&ver=14.1.2&container=14.1.2.3_Virtual-Edition&file=BIGIP-14.1.2.3-0.0.5.ALL.qcow2.zip"
},
{
"filename": "BIGIP-14.0.0.3-0.0.4.qcow2",
@@ -132,23 +153,37 @@
"filesize": 2851733504,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v11.x/11.6.0/english/virtual-edition/&sw=BIG-IP&pro=big-ip_v11.x&ver=11.6.0&container=Virtual-Edition&file=BIGIP-11.6.0.0.0.401.ALL.qcow2.zip"
},
{
"filename": "BIGIP-11.3.0.39.0.qcow2",
"version": "11.3.0",
"md5sum": "f3dec4565484fe81233077ab2ce426ae",
"filesize": 1842020352,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-ip/big-ip_v11.x/11.3.0/english/virtual-edition-trial/&sw=BIG-IP&pro=big-ip_v11.x&ver=11.3.0&container=Virtual-Edition-Trial&file=BIGIP-11.3.0.39.0.qcow2.zip"
},
{
"filename": "empty100G.qcow2",
"version": "1.0",
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
{
"name": "15.1.0.2",
"images": {
"hda_disk_image": "BIGIP-15.1.0.2-0.0.9.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "15.0.1.3",
"images": {
"hda_disk_image": "BIGIP-15.0.1.3-0.0.4.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "15.0.0",
"images": {
"hda_disk_image": "BIGIP-15.0.0-0.0.39.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "14.1.2.3",
"images": {
@@ -253,13 +288,6 @@
"hda_disk_image": "BIGIP-11.6.0.0.0.401.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "11.3.0",
"images": {
"hda_disk_image": "BIGIP-11.3.0.39.0.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
}
]
}
+22 -22
View File
@@ -30,11 +30,18 @@
},
"images": [
{
"filename": "BIG-IQ-7.0.0.0.0.1854.qcow2",
"version": "7.0.0.0",
"md5sum": "89ff128c4ba82c266a6cefa21c80029b",
"filesize": 4312006656,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-iq/big-iq_cm/7.0.0/english/v7.0.0/&sw=BIG-IQ&pro=big-iq_CM&ver=7.0.0&container=v7.0.0&file=BIG-IQ-7.0.0.0.0.1854.qcow2.zip"
"filename": "BIG-IQ-7.1.0.0.0.1511.qcow2",
"version": "7.1.0.0",
"md5sum": "8d93b06e6eec656584a73ad16be6efa3",
"filesize": 4567072768,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-iq/big-iq_cm/7.1.0/english/v7.1.0/&sw=BIG-IQ&pro=big-iq_CM&ver=7.1.0&container=v7.1.0&file=BIG-IQ-7.1.0.0.0.1511.qcow2.zip"
},
{
"filename": "BIG-IQ-7.0.0.1.0.0.6.qcow2",
"version": "7.0.0.1",
"md5sum": "e86c851a1c43c8c0743f32742d97eba2",
"filesize": 4294246400,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-iq/big-iq_cm/7.0.0/english/v7.0.0.1/&sw=BIG-IQ&pro=big-iq_CM&ver=7.0.0&container=v7.0.0.1&file=BIG-IQ-7.0.0.1.0.0.6.qcow2.zip"
},
{
"filename": "BIG-IQ-6.0.1.1.0.0.9.qcow2",
@@ -50,13 +57,6 @@
"filesize": 3480748032,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-iq/big-iq_cm/5.4.0/english/virtual-edition_base-plus-hf2/&sw=BIG-IQ&pro=big-iq_CM&ver=5.4.0&container=Virtual-Edition_Base-Plus-HF2&file=BIG-IQ-5.4.0.2.24.7467.qcow2.zip"
},
{
"filename": "BIG-IQ-5.4.0.0.0.7437.qcow2",
"version": "5.4.0",
"md5sum": "068b1f4d21048b9b2a082c0c27ef4d53",
"filesize": 3300917248,
"download_url": "https://downloads.f5.com/esd/serveDownload.jsp?path=/big-iq/big-iq_cm/5.4.0/english/v5.4.0/&sw=BIG-IQ&pro=big-iq_CM&ver=5.4.0&container=v5.4.0&file=BIG-IQ-5.4.0.0.0.7437.qcow2.zip"
},
{
"filename": "BIG-IQ-5.3.0.0.0.1119.qcow2",
"version": "5.3.0",
@@ -98,14 +98,21 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
{
"name": "7.0.0.0",
"name": "7.1.0.0",
"images": {
"hda_disk_image": "BIG-IQ-7.0.0.0.0.1854.qcow2",
"hda_disk_image": "BIG-IQ-7.1.0.0.0.1511.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "7.0.0.1",
"images": {
"hda_disk_image": "BIG-IQ-7.0.0.1.0.0.6.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
@@ -123,13 +130,6 @@
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "5.4.0",
"images": {
"hda_disk_image": "BIG-IQ-5.4.0.0.0.7437.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "5.3.0",
"images": {
+1 -1
View File
@@ -165,7 +165,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -116,7 +116,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -240,7 +240,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -179,7 +179,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -158,7 +158,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -46,7 +46,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -46,7 +46,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -116,7 +116,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
+42
View File
@@ -0,0 +1,42 @@
{
"name": "freeRouter",
"category": "router",
"description": "networking swiss army knife - it speaks routing protocols, and (re)encapsulates packets on interfaces",
"vendor_name": "freeRouter",
"vendor_url": "http://freerouter.nop.hu/",
"documentation_url": "http://freerouter.nop.hu/",
"product_name": "freeRouter",
"product_url": "http://freerouter.nop.hu/",
"registry_version": 3,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "There is no default password and enable password. A default configuration is present.",
"port_name_format": "ethernet{port1}",
"qemu": {
"adapter_type": "e1000",
"adapters": 8,
"ram": 2048,
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require"
},
"images": [
{
"filename": "rtr.qcow2",
"version": "20.7.1",
"md5sum": "4707415d15d20ced92423d90e52eedcd",
"filesize": 254767616,
"download_url": "http://freerouter.nop.hu/",
"direct_download_url": "http://dl.nop.hu/rtr.qcow2"
}
],
"versions": [
{
"name": "20.7.1",
"images": {
"hda_disk_image": "rtr.qcow2"
}
}
]
}
+1 -1
View File
@@ -102,7 +102,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
@@ -0,0 +1,53 @@
{
"name": "Juniper vMX",
"category": "router",
"description": "The vMX is a full-featured, carrier-grade virtual MX Series 3D Universal Edge Router that extends 15+ years of Juniper Networks edge routing expertise to the virtual realm. This appliance is a single VM pre-release version that does not require to be paired with another VM like in the vCP/vFP architecture.",
"vendor_name": "Juniper",
"vendor_url": "https://www.juniper.net/us/en/",
"documentation_url": "http://www.juniper.net/techpubs/",
"product_name": "Juniper vMX",
"product_url": "http://www.juniper.net/us/en/products-services/routing/mx-series/vmx/",
"registry_version": 6,
"status": "experimental",
"maintainer": "none",
"maintainer_email": "developers@gns3.net",
"symbol": "juniper-vmx.svg",
"usage": "Initial username is root, no password.\n\nTIPS:\n* Use the 'show chassis fpc pic-status' command to check that PIC 0 is online and shows 'Virtual 10x1GE PIC'\n* Use the second adapter (em2) and above to connect to other nodes (the first two interfaces are for internal purposes).",
"first_port_name": "fxp0",
"port_name_format": "em{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 12,
"ram": 1024,
"arch": "x86_64",
"console_type": "telnet",
"kvm": "require",
"options": "-nographic",
"custom_adapters": [
{
"adapter_number": 0,
"adapter_type": "e1000"
},
{
"adapter_number": 1,
"adapter_type": "e1000"
}
]
},
"images": [
{
"filename": "jinstall-vmx-14.1R4.8-domestic.img",
"version": "14.1R4.8",
"md5sum": "85aa3048e8648bf91e893455645cad03",
"filesize": 681377792
}
],
"versions": [
{
"name": "14.1R4.8",
"images": {
"hda_disk_image": "jinstall-vmx-14.1R4.8-domestic.img"
}
}
]
}
+1 -1
View File
@@ -12,6 +12,6 @@
"maintainer_email": "developers@gns3.net",
"docker": {
"adapters": 2,
"image": "gns3/kalilinux:v2"
"image": "gns3/kalilinux:latest"
}
}
+69
View File
@@ -0,0 +1,69 @@
{
"name": "macOS",
"category": "guest",
"description": "macOS",
"vendor_name": "Apple",
"vendor_url": "https://www.apple.com/mac/",
"documentation_url": "https://www.nicksherlock.com/2020/04/installing-macos-catalina-on-proxmox-with-opencore/",
"product_name": "macOS",
"product_url": "https://www.apple.com/mac/",
"registry_version": 4,
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "qemu-convert BaseSystem.dmg -O raw Catalina-installer.iso\n- gzip -d OpenCore.iso.gz\n\nTo have appliance working, please remove HDC(Secondary Mater) & HDD(Secondary Slave) from template.\nThen install Mac OS\nAt reboot, select MacOS installer to select your MacOS partition to boot on\n\nTo install the boot on the HD, pop open Terminal and run 'diskutil list' to see what drives we have available.\nThen use 'sudo dd if=<source> of=<dest>' to copy the 'EFI' partition from the OpenCore CD (the small disk ~150MB) and overwrite the EFI partition on the hard disk (the one with the large Apple_APFS 'Container' partition on it.\n\nTo end, remove the OpenCore drive and define the SATA one as boot. You're done :-)\nFinally, dont define an iCloud account until your SMBIOS uuid is the final one.\n\nOnce your Mac is booting, remove the references to Catalina-Installer.iso from the advanced args line: ' -drive file=/home/gns3/GNS3/images/QEMU/Catalina-installer.iso,if=none,id=drive-ide0,cache=unsafe,format=raw,aio=threads,detect-zeroes=on -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0' to boot faster.\n",
"qemu": {
"adapter_type": "vmxnet3",
"adapters": 1,
"ram": 4096,
"cpus": 4,
"hda_disk_interface": "ide",
"hdb_disk_interface": "sata",
"options": "-machine q35,accel=kvm -cpu Penryn,kvm=on -device isa-applesmc,osk='ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc' -smbios type=2 -usb -device usb-kbd -device usb-tablet -drive file=/home/gns3/GNS3/images/QEMU/OpenCore.iso,if=none,id=drive-ide2,cache=unsafe,format=raw,aio=threads,detect-zeroes=on -device ide-hd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=101 -drive file=/home/gns3/GNS3/images/QEMU/Catalina-installer.iso,if=none,id=drive-ide0,cache=unsafe,format=raw,aio=threads,detect-zeroes=on -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0",
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "dc",
"kvm": "require"
},
"images": [
{
"filename": "empty30G.qcow2",
"version": "Catalina",
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
},
{
"filename": "OVMF_CODE_2.202002-1.fd",
"version": "Catalina",
"md5sum": "94470f80fb1da3053a4aea96f46e0e72",
"filesize": 1966080,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/OVMF_CODE_2.202002-1.fd/download"
},
{
"filename": "OpenCore.iso",
"version": "Catalina",
"md5sum": "84fb7be0ebe80e746c07f8dc464b3234",
"filesize": 157286400,
"download_url": "https://github.com/thenickdude/KVM-Opencore/releases/download/v4/OpenCore.iso.gz"
},
{
"filename": "Catalina-installer.iso",
"version": "Catalina",
"md5sum": "fadfcfe48d1a4e21736665ae91d35561",
"filesize": 2146168832,
"download_url": "http://swcdn.apple.com/content/downloads/59/18/001-15219-A_EE9FN7UHJA/efuz3h0zlmx4qlinf4bxlguigo9jvhcr55/BaseSystem.dmg"
}
],
"versions": [
{
"name": "Catalina",
"images": {
"bios_image": "OVMF_CODE_2.202002-1.fd",
"hdb_disk_image": "empty30G.qcow2",
"hdc_disk_image": "OpenCore.iso",
"hdd_disk_image": "Catalina-installer.iso"
}
}
]
}
+106 -148
View File
@@ -26,104 +26,104 @@
"options": "-nographic"
},
"images": [
{
"filename": "chr-7.0beta5.img",
"version": "7.0beta5",
"md5sum": "3c9855f0efdc23df29511c76aee52c95",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/7.0beta5/chr-7.0beta5.img.zip",
"compression": "zip"
},
{
"filename": "chr-7.0beta3.img",
"version": "7.0beta3",
"md5sum": "938c59989df039cb9f33e0da96c22174",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/7.0beta3/chr-7.0beta3.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.46.3.img",
"version": "6.46.3",
"md5sum": "72d72c4a585a04eb9ed24ec9e4678486",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.46.3/chr-6.46.3.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.45.8.img",
"version": "6.45.8",
"md5sum": "73cc01e22e0b301dc29416f59ced8a7d",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.45.8/chr-6.45.8.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.45.6.img",
"version": "6.45.6",
"md5sum": "e68db699ba23ac7e4fba95b3075c1c6b",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.45.6/chr-6.45.6.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.5.img",
"version": "6.44.5",
"md5sum": "19aa21073c8ea4540daacde69bacda24",
{
"filename": "chr-7.0beta8.img",
"version": "7.0beta8",
"md5sum": "dbc5b9a1d7cc0e56d5361a0e212dbd96",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.44.5/chr-6.44.5.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/7.0beta8/chr-7.0beta8.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.42.12.img",
"version": "6.42.12",
"md5sum": "8485c606eb38e629fb1f5356d31bbc86",
"filesize": 45537201,
},
{
"filename": "chr-6.47.img",
"version": "6.47",
"md5sum": "39dea5d6a58708eebfa73332456566f4",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.47/chr-6.47.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.46.5.img",
"version": "6.46.5",
"md5sum": "f9ea37f5a5ac3110f8f5de33e24a7749",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.46.5/chr-6.46.5.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.45.8.img",
"version": "6.45.8",
"md5sum": "73cc01e22e0b301dc29416f59ced8a7d",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.42.12/chr-6.42.12.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/6.45.8/chr-6.45.8.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.45.6.img",
"version": "6.45.6",
"md5sum": "e68db699ba23ac7e4fba95b3075c1c6b",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.45.6/chr-6.45.6.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.5.img",
"version": "6.44.5",
"md5sum": "19aa21073c8ea4540daacde69bacda24",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.5/chr-6.44.5.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.3.img",
"version": "6.44.3",
"md5sum": "c46b33125d536faa24473a519abbb89d",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.3/chr-6.44.3.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.2.img",
"version": "6.44.2",
"md5sum": "f1ddaa47829e12c1f9f023d8c06b88cc",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.2/chr-6.44.2.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.img",
"version": "6.44",
"md5sum": "86fdf9f0093b4e8f9e7b1c8019fb37b5",
"filesize": 33621035,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.44/chr-6.44.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44/chr-6.44.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.3.img",
"version": "6.44.3",
"md5sum": "c46b33125d536faa24473a519abbb89d",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.3/chr-6.44.3.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.44.2.img",
"version": "6.44.2",
"md5sum": "f1ddaa47829e12c1f9f023d8c06b88cc",
"filesize": 67108864,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.2/chr-6.44.2.img.zip",
"compression": "zip"
"filename": "chr-6.43.8.img",
"version": "6.43.8",
"md5sum": "9437133fc7e77779dc3ff62b98f30dc2",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.43.8/chr-6.43.8.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.43.8.img",
"version": "6.43.8",
"md5sum": "9437133fc7e77779dc3ff62b98f30dc2",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.43.8/chr-6.43.8.img.zip",
"compression": "zip"
"filename": "chr-6.42.12.img",
"version": "6.42.12",
"md5sum": "8485c606eb38e629fb1f5356d31bbc86",
"filesize": 45537201,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download.mikrotik.com/routeros/6.42.12/chr-6.42.12.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.42.9.img",
@@ -131,7 +131,7 @@
"md5sum": "1f856978cfc3ceb4b5e18e4e079f2e32",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.42.9/chr-6.42.9.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/6.42.9/chr-6.42.9.img.zip",
"compression": "zip"
},
{
@@ -140,66 +140,30 @@
"md5sum": "279bb518497b40f41c8585128916a2fb",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.42/chr-6.42.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.41.4.img",
"version": "6.41.4",
"md5sum": "63b555b2b7f0d78b79edb92f7e7d2ed7",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.41.4/chr-6.41.4.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.40.7.img",
"version": "6.40.7",
"md5sum": "424b897d631c4cac4324ca310e81b494",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.40.7/chr-6.40.7.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.40.5.img",
"version": "6.40.5",
"md5sum": "5d3bef219a859d417fea704ae7109eb7",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.40.5/chr-6.40.5.img.zip",
"compression": "zip"
},
{
"filename": "chr-6.40.3.img",
"version": "6.40.3",
"md5sum": "1861df67e9bbf17433f11f33f7dedd1e",
"filesize": 134217728,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.40.3/chr-6.40.3.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/6.42/chr-6.42.img.zip",
"compression": "zip"
}
],
"versions": [
{
"name": "7.0beta5",
"name": "7.0beta8",
"images": {
"hda_disk_image": "chr-7.0beta5.img"
"hda_disk_image": "chr-7.0beta8.img"
}
},
{
"name": "7.0beta3",
{
"name": "6.47",
"images": {
"hda_disk_image": "chr-7.0beta3.img"
"hda_disk_image": "chr-6.47.img"
}
},
{
"name": "6.46.3",
{
"name": "6.46.5",
"images": {
"hda_disk_image": "chr-6.46.3.img"
"hda_disk_image": "chr-6.46.5.img"
}
},
{
{
"name": "6.45.8",
"images": {
"hda_disk_image": "chr-6.45.8.img"
@@ -229,12 +193,24 @@
"hda_disk_image": "chr-6.44.2.img"
}
},
{
"name": "6.44",
"images": {
"hda_disk_image": "chr-6.44.img"
}
},
{
"name": "6.43.8",
"images": {
"hda_disk_image": "chr-6.43.8.img"
}
},
{
"name": "6.42.12",
"images": {
"hda_disk_image": "chr-6.42.12.img"
}
},
{
"name": "6.42.9",
"images": {
@@ -242,27 +218,9 @@
}
},
{
"name": "6.41.4",
"name": "6.42",
"images": {
"hda_disk_image": "chr-6.41.4.img"
}
},
{
"name": "6.40.7",
"images": {
"hda_disk_image": "chr-6.40.7.img"
}
},
{
"name": "6.40.5",
"images": {
"hda_disk_image": "chr-6.40.5.img"
}
},
{
"name": "6.40.3",
"images": {
"hda_disk_image": "chr-6.40.3.img"
"hda_disk_image": "chr-6.42.img"
}
}
]
+3 -3
View File
@@ -9,7 +9,7 @@
"registry_version": 3,
"status": "experimental",
"maintainer": "Bernhard Ehlers",
"maintainer_email": "be@bernhard-ehlers.de",
"maintainer_email": "none@b-ehlers.de",
"usage": "Insert the NETem VM between two network elements and connect it to them. NETem is fully transparent, it bridges the traffic from one interface to the other one. As NETem only bridges, it needs no IP addresses. On start a menu on the console allows a user-friendy configuration of the line parameters.",
"port_name_format": "eth{0}",
"qemu": {
@@ -27,8 +27,8 @@
"version": "0.4",
"md5sum": "e678698c97804901c7a53f6b68c8b861",
"filesize": 26476544,
"download_url": "http://bernhard-ehlers.de/projects/netem/index.html",
"direct_download_url": "http://bernhard-ehlers.de/projects/netem/NETem-v4.qcow2"
"download_url": "https://www.b-ehlers.de/projects/netem/index.html",
"direct_download_url": "https://www.b-ehlers.de/projects/netem/NETem-v4.qcow2"
}
],
"versions": [
+1 -1
View File
@@ -29,7 +29,7 @@
"md5sum": "88d6129265860aa58c5306cd7b413aab",
"filesize": 3968729088,
"download_url": "http://www.opennac.org/opennac/en/download.html",
"direct_download_url": "http://sourceforge.net/projects/opennac/files/ova/opennac_3711_img.ova/download"
"direct_download_url": "https://sourceforge.net/projects/opennac/files/ova/opennac_3711_img.ova/download"
}
],
"versions": [
+45
View File
@@ -21,6 +21,33 @@
"kvm": "allow"
},
"images": [
{
"filename": "openwrt-19.07.3-x86-64-combined-ext4.img",
"version": "19.07.3",
"md5sum": "d150595d624cba9c8989a675fdfbc329",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/openwrt-19.07.3-x86-64-combined-ext4.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-19.07.2-x86-64-combined-ext4.img",
"version": "19.07.2",
"md5sum": "333e06eb0f767efda56a35644ace47c0",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/19.07.2/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.2/targets/x86/64/openwrt-19.07.2-x86-64-combined-ext4.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-18.06.8-x86-64-combined-ext4.img",
"version": "18.06.8",
"md5sum": "8b235443df9d1a236b147c1c29a97083",
"filesize": 285736960,
"download_url": "https://downloads.openwrt.org/releases/18.06.8/targets/x86/64/",
"direct_download_url": "https://downloads.openwrt.org/releases/18.06.8/targets/x86/64/openwrt-18.06.8-x86-64-combined-ext4.img.gz",
"compression": "gzip"
},
{
"filename": "openwrt-19.07.1-x86-64-combined-ext4.img",
"version": "19.07.1",
@@ -104,6 +131,24 @@
}
],
"versions": [
{
"name": "19.07.3",
"images": {
"hda_disk_image": "openwrt-19.07.3-x86-64-combined-ext4.img"
}
},
{
"name": "19.07.2",
"images": {
"hda_disk_image": "openwrt-19.07.2-x86-64-combined-ext4.img"
}
},
{
"name": "18.06.8",
"images": {
"hda_disk_image": "openwrt-18.06.8-x86-64-combined-ext4.img"
}
},
{
"name": "19.07.1",
"images": {
+1 -1
View File
@@ -74,7 +74,7 @@
"md5sum": "dfeb8a97bba2e475ce418b02327c0ea1",
"filesize": 3221225472,
"download_url": "https://packetfence.org/download.html#/zen",
"direct_download_url": "http://sourceforge.net/projects/packetfence/files/PacketFence%20ZEN/7.3.0/PacketFenceZEN_USB-7.3.0.tar.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/packetfence/files/PacketFence%20ZEN/7.3.0/PacketFenceZEN_USB-7.3.0.tar.bz2/download",
"compression": "bzip2"
},
{
+123 -123
View File
@@ -1,123 +1,123 @@
{
"name": "PA-VM",
"category": "firewall",
"description": "The VM-Series combines next-generation firewall security and advanced threat prevention to protect your virtualized environments from advanced cyberthreats. The VM-Series natively analyzes all traffic in a single pass to determine the application identity, the content within, and the user identity.",
"vendor_name": "Palo Alto Networks",
"vendor_url": "http://www.paloaltonetworks.com/",
"documentation_url": "https://www.paloaltonetworks.com/documentation/80/virtualization/virtualization",
"product_name": "PAN VM-Series Firewall",
"product_url": "https://www.paloaltonetworks.com/products/secure-the-network/virtualized-next-generation-firewall/vm-series",
"registry_version": 3,
"status": "experimental",
"maintainer": "Community",
"maintainer_email": "",
"usage": "Default Username: admin\r\nDefault Password: admin\r\nPAN-VM goes through several iterations of host prompts during boot. This is normal and expected.\r\nLogin is available when prompt is PA-VM login:\r\n\r\nGetting Started:\r\nTo configure a static IP address at the console enter the following commands:\r\n\r\nconfigure\r\nset deviceconfig system ip-address <Static IP> netmask <Netmask> default-gateway <Gateway IP> type static\r\nset deviceconfig system dns-setting servers primary <DNS Server IP> secondary <DNS Server IP>\r\ncommit\r\n",
"symbol": "pan-vm-fw.svg",
"first_port_name": "management",
"port_name_format": "ethernet1/{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 25,
"ram": 4096,
"arch": "x86_64",
"console_type": "telnet",
"hda_disk_interface": "virtio",
"kvm": "require",
"options": "-smp 2"
},
"images": [
{
"filename": "PA-VM-ESX-8.1.0-disk1.vmdk",
"version": "8.1.0",
"md5sum": "49af8e8225c2e90414bde0be15eaf421",
"filesize": 2281454080,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.1.0.qcow2",
"version": "8.1.0",
"md5sum": "459558515b965b2e43fde2842abbae66",
"filesize": 2260467712,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-8.0.0-disk1.vmdk",
"version": "8.0.0",
"md5sum": "a505fb1dbcc855ecf98630fd5d329f9a",
"filesize": 2002713088,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.0.0.qcow2",
"version": "8.0.0",
"md5sum": "b6a1ddc8552aff87f05f9c0d4cb54dc3",
"filesize": 1987444736,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-7.1.0-disk1.vmdk",
"version": "7.1.0 (ESX)",
"md5sum": "e044dc649b7146ee4f619edb0e5f6675",
"filesize": 1871149056,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-7.1.0.qcow2",
"version": "7.1.0",
"md5sum": "da300253709740068927408239c2e321",
"filesize": 1858797568,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-6.1.0-disk1.vmdk",
"version": "6.1.0 (ESX)",
"md5sum": "64b1e81cd54008318235832ea6d71424",
"filesize": 2959736832,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
}
],
"versions": [
{
"name": "8.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.1.0-disk1.vmdk"
}
},
{
"name": "8.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.1.0.qcow2"
}
},
{
"name": "8.0.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.0.0-disk1.vmdk"
}
},
{
"name": "8.0.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.0.0.qcow2"
}
},
{
"name": "7.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-7.1.0-disk1.vmdk"
}
},
{
"name": "7.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-7.1.0.qcow2"
}
},
{
"name": "6.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-6.1.0-disk1.vmdk"
}
}
]
}
{
"name": "PA-VM",
"category": "firewall",
"description": "The VM-Series combines next-generation firewall security and advanced threat prevention to protect your virtualized environments from advanced cyberthreats. The VM-Series natively analyzes all traffic in a single pass to determine the application identity, the content within, and the user identity.",
"vendor_name": "Palo Alto Networks",
"vendor_url": "http://www.paloaltonetworks.com/",
"documentation_url": "https://www.paloaltonetworks.com/documentation/80/virtualization/virtualization",
"product_name": "PAN VM-Series Firewall",
"product_url": "https://www.paloaltonetworks.com/products/secure-the-network/virtualized-next-generation-firewall/vm-series",
"registry_version": 3,
"status": "experimental",
"maintainer": "Community",
"maintainer_email": "",
"usage": "Default Username: admin\r\nDefault Password: admin\r\nPAN-VM goes through several iterations of host prompts during boot. This is normal and expected.\r\nLogin is available when prompt is PA-VM login:\r\n\r\nGetting Started:\r\nTo configure a static IP address at the console enter the following commands:\r\n\r\nconfigure\r\nset deviceconfig system ip-address <Static IP> netmask <Netmask> default-gateway <Gateway IP> type static\r\nset deviceconfig system dns-setting servers primary <DNS Server IP> secondary <DNS Server IP>\r\ncommit\r\n",
"symbol": "pan-vm-fw.svg",
"first_port_name": "management",
"port_name_format": "ethernet1/{port1}",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapters": 25,
"ram": 4096,
"arch": "x86_64",
"console_type": "telnet",
"hda_disk_interface": "virtio",
"kvm": "require",
"options": "-smp 2"
},
"images": [
{
"filename": "PA-VM-ESX-8.1.0-disk1.vmdk",
"version": "8.1.0",
"md5sum": "49af8e8225c2e90414bde0be15eaf421",
"filesize": 2281454080,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.1.0.qcow2",
"version": "8.1.0",
"md5sum": "459558515b965b2e43fde2842abbae66",
"filesize": 2260467712,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-8.0.0-disk1.vmdk",
"version": "8.0.0",
"md5sum": "a505fb1dbcc855ecf98630fd5d329f9a",
"filesize": 2002713088,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-8.0.0.qcow2",
"version": "8.0.0",
"md5sum": "b6a1ddc8552aff87f05f9c0d4cb54dc3",
"filesize": 1987444736,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-7.1.0-disk1.vmdk",
"version": "7.1.0 (ESX)",
"md5sum": "e044dc649b7146ee4f619edb0e5f6675",
"filesize": 1871149056,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-KVM-7.1.0.qcow2",
"version": "7.1.0",
"md5sum": "da300253709740068927408239c2e321",
"filesize": 1858797568,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
},
{
"filename": "PA-VM-ESX-6.1.0-disk1.vmdk",
"version": "6.1.0 (ESX)",
"md5sum": "64b1e81cd54008318235832ea6d71424",
"filesize": 2959736832,
"download_url": "https://support.paloaltonetworks.com/Updates/SoftwareUpdates/"
}
],
"versions": [
{
"name": "8.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.1.0-disk1.vmdk"
}
},
{
"name": "8.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.1.0.qcow2"
}
},
{
"name": "8.0.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-8.0.0-disk1.vmdk"
}
},
{
"name": "8.0.0",
"images": {
"hda_disk_image": "PA-VM-KVM-8.0.0.qcow2"
}
},
{
"name": "7.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-7.1.0-disk1.vmdk"
}
},
{
"name": "7.1.0",
"images": {
"hda_disk_image": "PA-VM-KVM-7.1.0.qcow2"
}
},
{
"name": "6.1.0 (ESX)",
"images": {
"hda_disk_image": "PA-VM-ESX-6.1.0-disk1.vmdk"
}
}
]
}
+1 -1
View File
@@ -44,7 +44,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%30disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
+14
View File
@@ -23,6 +23,13 @@
"process_priority": "normal"
},
"images": [
{
"filename": "pfSense-CE-2.4.5-RELEASE-p1-amd64.iso",
"version": "2.4.5-p1",
"md5sum": "bd1120494be5f36cba3a7ab34e8278da",
"filesize": 752506880,
"download_url": "https://www.pfsense.org/download/mirror.php?section=downloads"
},
{
"filename": "pfSense-CE-2.4.4-RELEASE-p3-amd64.iso",
"version": "2.4.4-p3",
@@ -48,6 +55,13 @@
],
"versions": [
{
"name": "2.4.5-p1",
"images": {
"hda_disk_image": "empty100G.qcow2",
"cdrom_image": "pfSense-CE-2.4.5-RELEASE-p1-amd64.iso"
}
},
{
"name": "2.4.4-p3",
"images": {
+1 -1
View File
@@ -46,7 +46,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
@@ -35,7 +35,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -60,7 +60,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%30disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
+1 -1
View File
@@ -30,7 +30,7 @@
"md5sum": "cfaf7f11901a164cd00c07518c7311ba",
"filesize": 214206464,
"download_url": "http://www.smoothwall.org/download/",
"direct_download_url": "http://sourceforge.net/projects/smoothwall/files/SmoothWall/3.1/Express-3.1-x86_64.iso/download"
"direct_download_url": "https://sourceforge.net/projects/smoothwall/files/SmoothWall/3.1/Express-3.1-x86_64.iso/download"
},
{
"filename": "empty8G.qcow2",
+1 -1
View File
@@ -142,7 +142,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+16 -1
View File
@@ -11,7 +11,7 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Login is gns3/gns3. sudo works without password",
"usage": "Login/password is tc/tc or gns3/gns3 for older versions. sudo works without password",
"symbol": "linux_guest.svg",
"qemu": {
"adapter_type": "e1000",
@@ -20,9 +20,18 @@
"arch": "i386",
"console_type": "vnc",
"kvm": "allow",
"hda_disk_interface": "virtio",
"options": "-vga std -usbdevice tablet"
},
"images": [
{
"filename": "linux-tinycore-11.1.qcow2",
"version": "11.1",
"md5sum": "993d1ce9b86cb131c90e8263891d51b8",
"filesize": 33816576,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/linux-tinycore-11.1.qcow2"
},
{
"filename": "linux-tinycore-6.4-2.img",
"version": "6.4",
@@ -41,6 +50,12 @@
}
],
"versions": [
{
"name": "11.1",
"images": {
"hda_disk_image": "linux-tinycore-11.1.qcow2"
}
},
{
"name": "6.4~2",
"images": {
+1 -1
View File
@@ -37,7 +37,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+1 -1
View File
@@ -114,7 +114,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
@@ -42,7 +42,7 @@
"md5sum": "3411a599e822f2ac6be560a26405821a",
"filesize": 197120,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty30G.qcow2/download"
}
],
"versions": [
+6 -6
View File
@@ -26,7 +26,7 @@
"md5sum": "40afad2f5136e56f0cb45466847eae63",
"filesize": 957087744,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.9.2.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.9.2.qcow2.bz2/download",
"compression": "bzip2"
},
{
@@ -35,7 +35,7 @@
"md5sum": "9f09f104917e19649598d9e2a5a3476b",
"filesize": 1008926720,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.9.1.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.9.1.qcow2.bz2/download",
"compression": "bzip2"
},
{
@@ -44,7 +44,7 @@
"md5sum": "b9ec187d7a4743bb02339cf262767959",
"filesize": 922943488,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.9.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.9.qcow2.bz2/download",
"compression": "bzip2"
},
{
@@ -53,7 +53,7 @@
"md5sum": "38eb48d098d3e465422347f7983b9d86",
"filesize": 625999872,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.8.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.8.qcow2.bz2/download",
"compression": "bzip2"
},
{
@@ -62,7 +62,7 @@
"md5sum": "2e9802c403e34a91871922b9a26592ad",
"filesize": 614268928,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.7.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.7.qcow2.bz2/download",
"compression": "bzip2"
},
{
@@ -71,7 +71,7 @@
"md5sum": "6c763f609c05b5b9a3b1d422ab89dbac",
"filesize": 609681408,
"download_url": "https://sourceforge.net/projects/vrin/files",
"direct_download_url": "http://sourceforge.net/projects/vrin/files/vRIN-0.6.qcow2.bz2/download",
"direct_download_url": "https://sourceforge.net/projects/vrin/files/vRIN-0.6.qcow2.bz2/download",
"compression": "bzip2"
}
],
+16 -16
View File
@@ -25,44 +25,44 @@
},
"images": [
{
"filename": "vyos-1.2.0-rolling+201906040337-amd64.iso",
"version": "1.2.0-2019-06-04",
"md5sum": "2a1342985b2a9edfef9f66310ce11a92",
"filesize": 427819008,
"download_url": "http://dev.packages.vyos.net/iso/preview/1.2.0-beta1/",
"direct_download_url": "http://dev.packages.vyos.net/iso/preview/1.2.0-beta1/vyos-1.2.0-beta1-amd64.iso"
"filename": "vyos-1.3-rolling-202005040117-amd64.iso",
"version": "1.3-rolling-202005040117",
"md5sum": "0500d5138cd05239b50f93fb24ac8b55",
"filesize": 438304768,
"download_url": "https://downloads.vyos.io/?dir=rolling/current/amd64",
"direct_download_url": "https://downloads.vyos.io/rolling/current/amd64/vyos-1.3-rolling-202005040117-amd64.iso"
},
{
"filename": "vyos-1.1.8-amd64.iso",
"version": "1.1.8",
"md5sum": "95a141d4b592b81c803cdf7e9b11d8ea",
"filesize": 241172480,
"download_url": "https://downloads.vyos.io/?dir=release/1.1.8",
"direct_download_url": "https://downloads.vyos.io/release/1.1.8/vyos-1.1.8-amd64.iso"
"download_url": "https://downloads.vyos.io/?dir=release/legacy/1.1.8",
"direct_download_url": "https://downloads.vyos.io/release/legacy/1.1.8/vyos-1.1.8-amd64.iso"
},
{
"filename": "vyos-1.1.7-amd64.iso",
"version": "1.1.7",
"md5sum": "9a7f745a0b0db0d4f1d9eee2a437fb54",
"filesize": 245366784,
"download_url": "https://downloads.vyos.io/?dir=release/1.1.7/",
"direct_download_url": "https://downloads.vyos.io/release/1.1.7/vyos-1.1.7-amd64.iso"
"download_url": "https://downloads.vyos.io/?dir=release/legacy/1.1.7/",
"direct_download_url": "https://downloads.vyos.io/release/legacy/1.1.7/vyos-1.1.7-amd64.iso"
},
{
"filename": "vyos-1.1.6-amd64.iso",
"version": "1.1.6",
"md5sum": "3128954d026e567402a924c2424ce2bf",
"filesize": 245366784,
"download_url": "hhttps://downloads.vyos.io/?dir=release/1.1.6/",
"direct_download_url": "https://downloads.vyos.io/release/1.1.6/vyos-1.1.6-amd64.iso"
"download_url": "hhttps://downloads.vyos.io/?dir=release/legacy/1.1.6/",
"direct_download_url": "https://downloads.vyos.io/release/legacy/1.1.6/vyos-1.1.6-amd64.iso"
},
{
"filename": "vyos-1.1.5-amd64.iso",
"version": "1.1.5",
"md5sum": "193179532011ceaa87ee725bd8f22022",
"filesize": 247463936,
"download_url": "https://downloads.vyos.io/?dir=release/1.1.5/",
"direct_download_url": "https://downloads.vyos.io/release/1.1.5/vyos-1.1.5-amd64.iso"
"download_url": "https://downloads.vyos.io/?dir=release/legacy/1.1.5/",
"direct_download_url": "https://downloads.vyos.io/release/legacy/1.1.5/vyos-1.1.5-amd64.iso"
},
{
"filename": "empty8G.qcow2",
@@ -75,10 +75,10 @@
],
"versions": [
{
"name": "1.2.0-2019-06-04",
"name": "1.3-rolling-202005040117",
"images": {
"hda_disk_image": "empty8G.qcow2",
"cdrom_image": "vyos-1.2.0-rolling+201906040337-amd64.iso"
"cdrom_image": "vyos-1.3-rolling-202005040117-amd64.iso"
}
},
{
+1 -1
View File
@@ -46,7 +46,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
+1 -1
View File
@@ -94,7 +94,7 @@
"md5sum": "1e6409a4523ada212dea2ebc50e50a65",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "http://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"
}
],
"versions": [
+59 -2
View File
@@ -27,6 +27,7 @@ import psutil
import platform
import re
from aiohttp.web import WebSocketResponse
from gns3server.utils.interfaces import interfaces
from ..compute.port_manager import PortManager
from ..utils.asyncio import wait_run_in_executor, locking
@@ -339,8 +340,8 @@ class BaseNode:
async def start_wrap_console(self):
"""
Start a telnet proxy for the console allowing multiple client
connected at the same time
Start a telnet proxy for the console allowing multiple telnet clients
to be connected at the same time
"""
if not self._wrap_console or self._console_type != "telnet":
@@ -369,6 +370,62 @@ class BaseNode:
self._wrapper_telnet_server.close()
await self._wrapper_telnet_server.wait_closed()
async def start_websocket_console(self, request):
"""
Connect to console using Websocket.
:param ws: Websocket object
"""
if self.status != "started":
raise NodeError("Node {} is not started".format(self.name))
if self._console_type != "telnet":
raise NodeError("Node {} console type is not telnet".format(self.name))
try:
(telnet_reader, telnet_writer) = await asyncio.open_connection(self._manager.port_manager.console_host, self.console)
except ConnectionError as e:
raise NodeError("Cannot connect to node {} telnet server: {}".format(self.name, e))
log.info("Connected to Telnet server")
ws = WebSocketResponse()
await ws.prepare(request)
request.app['websockets'].add(ws)
log.info("New client has connected to console WebSocket")
async def ws_forward(telnet_writer):
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
telnet_writer.write(msg.data.encode())
await telnet_writer.drain()
elif msg.type == aiohttp.WSMsgType.BINARY:
await telnet_writer.write(msg.data)
await telnet_writer.drain()
elif msg.type == aiohttp.WSMsgType.ERROR:
log.debug("Websocket connection closed with exception {}".format(ws.exception()))
async def telnet_forward(telnet_reader):
while not ws.closed and not telnet_reader.at_eof():
data = await telnet_reader.read(1024)
if data:
await ws.send_bytes(data)
try:
# keep forwarding websocket data in both direction
await asyncio.wait([ws_forward(telnet_writer), telnet_forward(telnet_reader)], return_when=asyncio.FIRST_COMPLETED)
finally:
log.info("Client has disconnected from console WebSocket")
if not ws.closed:
await ws.close()
request.app['websockets'].discard(ws)
return ws
@property
def allocate_aux(self):
"""
+18 -1
View File
@@ -19,6 +19,7 @@
Docker container instance.
"""
import sys
import asyncio
import shutil
import psutil
@@ -86,6 +87,7 @@ class DockerVM(BaseNode):
self._telnet_servers = []
self._xvfb_process = None
self._vnc_process = None
self._vncconfig_process = None
self._console_resolution = console_resolution
self._console_http_path = console_http_path
self._console_http_port = console_http_port
@@ -613,7 +615,16 @@ class DockerVM(BaseNode):
raise DockerError("Please install TigerVNC server (recommended) or Xvfb + x11vnc before using VNC support")
await self._start_vnc_process()
x11_socket = os.path.join("/tmp/.X11-unix/", "X{}".format(self._display))
await wait_for_file_creation(x11_socket)
try:
await wait_for_file_creation(x11_socket)
except asyncio.TimeoutError:
raise DockerError('x11 socket file "{}" does not exist'.format(x11_socket))
if not hasattr(sys, "_called_from_test") or not sys._called_from_test:
# Start vncconfig for tigervnc clipboard support, connection available only after socket creation.
tigervncconfig_path = shutil.which("vncconfig")
if tigervnc_path and tigervncconfig_path:
self._vncconfig_process = await asyncio.create_subprocess_exec(tigervncconfig_path, "-display", ":{}".format(self._display), "-nowin")
# sometimes the VNC process can crash
monitor_process(self._vnc_process, self._vnc_callback)
@@ -825,6 +836,12 @@ class DockerVM(BaseNode):
await self.stop()
if self.console_type == "vnc":
if self._vncconfig_process:
try:
self._vncconfig_process.terminate()
await self._vncconfig_process.wait()
except ProcessLookupError:
pass
if self._vnc_process:
try:
self._vnc_process.terminate()
+5 -6
View File
@@ -26,7 +26,6 @@ import sys
import os
import re
import glob
import shlex
import base64
import shutil
import binascii
@@ -805,12 +804,12 @@ class Router(BaseNode):
:ghost_file: path to ghost file
"""
await self._hypervisor.send('vm set_ghost_file "{name}" {ghost_file}'.format(name=self._name,
ghost_file=shlex.quote(ghost_file)))
await self._hypervisor.send('vm set_ghost_file "{name}" "{ghost_file}"'.format(name=self._name,
ghost_file=ghost_file))
log.info('Router "{name}" [{id}]: ghost file set to {ghost_file}'.format(name=self._name,
id=self._id,
ghost_file=ghost_file))
log.info('Router "{name}" [{id}]: ghost file set to "{ghost_file}"'.format(name=self._name,
id=self._id,
ghost_file=ghost_file))
self._ghost_file = ghost_file
+45 -14
View File
@@ -117,6 +117,7 @@ class QemuVM(BaseNode):
self._kernel_image = ""
self._kernel_command_line = ""
self._legacy_networking = False
self._replicate_network_connection_state = True
self._on_close = "power_off"
self._cpu_throttling = 0 # means no CPU throttling
self._process_priority = "low"
@@ -615,6 +616,30 @@ class QemuVM(BaseNode):
log.info('QEMU VM "{name}" [{id}] has disabled legacy networking'.format(name=self._name, id=self._id))
self._legacy_networking = legacy_networking
@property
def replicate_network_connection_state(self):
"""
Returns whether the network connection state for links is replicated in QEMU.
:returns: boolean
"""
return self._replicate_network_connection_state
@replicate_network_connection_state.setter
def replicate_network_connection_state(self, replicate_network_connection_state):
"""
Sets whether the network connection state for links is replicated in QEMU
:param replicate_network_connection_state: boolean
"""
if replicate_network_connection_state:
log.info('QEMU VM "{name}" [{id}] has enabled network connection state replication'.format(name=self._name, id=self._id))
else:
log.info('QEMU VM "{name}" [{id}] has disabled network connection state replication'.format(name=self._name, id=self._id))
self._replicate_network_connection_state = replicate_network_connection_state
@property
def on_close(self):
"""
@@ -1004,12 +1029,12 @@ class QemuVM(BaseNode):
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
self._local_udp_tunnels[adapter_number][1],
nio)
if nio.suspend:
if nio.suspend and self._replicate_network_connection_state:
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
else:
elif self._replicate_network_connection_state:
set_link_commands.append("set_link gns3-{} off".format(adapter_number))
if "-loadvm" not in command_string:
if "-loadvm" not in command_string and self._replicate_network_connection_state:
# only set the link statuses if not restoring a previous VM state
await self._control_vm_commands(set_link_commands)
@@ -1293,7 +1318,8 @@ class QemuVM(BaseNode):
await self.add_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
self._local_udp_tunnels[adapter_number][1],
nio)
await self._control_vm("set_link gns3-{} on".format(adapter_number))
if self._replicate_network_connection_state:
await self._control_vm("set_link gns3-{} on".format(adapter_number))
except (IndexError, KeyError):
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
adapter_number=adapter_number))
@@ -1317,10 +1343,11 @@ class QemuVM(BaseNode):
await self.update_ubridge_udp_connection("QEMU-{}-{}".format(self._id, adapter_number),
self._local_udp_tunnels[adapter_number][1],
nio)
if nio.suspend:
await self._control_vm("set_link gns3-{} off".format(adapter_number))
else:
await self._control_vm("set_link gns3-{} on".format(adapter_number))
if self._replicate_network_connection_state:
if nio.suspend:
await self._control_vm("set_link gns3-{} off".format(adapter_number))
else:
await self._control_vm("set_link gns3-{} on".format(adapter_number))
except IndexError:
raise QemuError('Adapter {adapter_number} does not exist on QEMU VM "{name}"'.format(name=self._name,
adapter_number=adapter_number))
@@ -1342,7 +1369,8 @@ class QemuVM(BaseNode):
await self.stop_capture(adapter_number)
if self.is_running():
await self._control_vm("set_link gns3-{} off".format(adapter_number))
if self._replicate_network_connection_state:
await self._control_vm("set_link gns3-{} off".format(adapter_number))
await self._ubridge_send("bridge delete {name}".format(name="QEMU-{}-{}".format(self._id, adapter_number)))
nio = adapter.get_nio(0)
@@ -1512,11 +1540,14 @@ class QemuVM(BaseNode):
if self._console:
console_host = self._manager.port_manager.console_host
if console_host == "0.0.0.0" and socket.has_ipv6:
# to fix an issue with Qemu when IPv4 is not enabled
# see https://github.com/GNS3/gns3-gui/issues/2352
# FIXME: consider making this more global (not just for Qemu + SPICE)
console_host = "::"
if console_host == "0.0.0.0":
if socket.has_ipv6:
# to fix an issue with Qemu when IPv4 is not enabled
# see https://github.com/GNS3/gns3-gui/issues/2352
# FIXME: consider making this more global (not just for Qemu + SPICE)
console_host = "::"
else:
raise QemuError("IPv6 must be enabled in order to use the SPICE console")
return ["-spice",
"addr={},port={},disable-ticketing".format(console_host, self._console),
"-vga", "qxl"]
+19 -6
View File
@@ -80,7 +80,7 @@ class Controller:
if name == "gns3vm":
name = "Main server"
computes = await self._load_controller_settings()
computes = self._load_controller_settings()
try:
self._local_server = await self.add_compute(compute_id="local",
name=name,
@@ -99,11 +99,13 @@ class Controller:
await self.add_compute(**c)
except (aiohttp.web.HTTPError, KeyError):
pass # Skip not available servers at loading
await self.load_projects()
try:
await self.gns3vm.auto_start_vm()
except GNS3VMError as e:
log.warning(str(e))
await self.load_projects()
await self._project_auto_open()
def _update_config(self):
@@ -118,7 +120,7 @@ class Controller:
async def stop(self):
log.info("Controller is Stopping")
log.info("Controller is stopping")
for project in self._projects.values():
await project.close()
for compute in self._computes.values():
@@ -132,6 +134,12 @@ class Controller:
self._computes = {}
self._projects = {}
async def reload(self):
log.info("Controller is reloading")
self._load_controller_settings()
await self.load_projects()
def check_can_write_config(self):
"""
Check if the controller configuration can be written on disk
@@ -182,7 +190,7 @@ class Controller:
except OSError as e:
log.error("Cannot write controller configuration file '{}': {}".format(self._config_file, e))
async def _load_controller_settings(self):
def _load_controller_settings(self):
"""
Reload the controller configuration from disk
"""
@@ -199,7 +207,12 @@ class Controller:
# load GNS3 VM settings
if "gns3vm" in controller_settings:
self.gns3vm.settings = controller_settings["gns3vm"]
gns3_vm_settings = controller_settings["gns3vm"]
if "port" not in gns3_vm_settings:
# port setting was added in version 2.2.8
# the default port was 3080 before this
gns3_vm_settings["port"] = 3080
self.gns3vm.settings = gns3_vm_settings
# load the IOU license settings
if "iou_license" in controller_settings:
@@ -227,7 +240,7 @@ class Controller:
if file.endswith(".gns3"):
try:
await self.load_project(os.path.join(project_dir, file), load=False)
except (aiohttp.web.HTTPConflict, NotImplementedError):
except (aiohttp.web.HTTPConflict, aiohttp.web.HTTPNotFound, NotImplementedError):
pass # Skip not compatible projects
except OSError as e:
log.error(str(e))
+10
View File
@@ -18,6 +18,9 @@
import copy
import uuid
import logging
log = logging.getLogger(__name__)
class Appliance:
@@ -33,6 +36,9 @@ class Appliance:
if "appliance_id" in self._data:
del self._data["appliance_id"]
if self.status != 'broken':
log.debug('Appliance "{name}" [{id}] loaded'.format(name=self.name, id=self._id))
@property
def id(self):
return self._id
@@ -45,6 +51,10 @@ class Appliance:
def symbol(self):
return self._data.get("symbol")
@property
def name(self):
return self._data.get("name")
@symbol.setter
def symbol(self, new_symbol):
self._data["symbol"] = new_symbol
+8 -8
View File
@@ -361,17 +361,17 @@ class Compute:
response = await self._run_http_query("GET", "/capabilities")
except ComputeError as e:
log.warning("Cannot connect to compute '{}': {}".format(self._id, e))
# Try to reconnect after 2 seconds if server unavailable only if not during tests (otherwise we create a ressource usage bomb)
# Try to reconnect after 5 seconds if server unavailable only if not during tests (otherwise we create a ressource usage bomb)
if not hasattr(sys, "_called_from_test") or not sys._called_from_test:
if self.id != "local" and not self._controller.compute_has_open_project(self):
log.info("Not reconnecting to compute '{}' because there is no project opened on it".format(self._id))
if self.id != "local" and self.id != "vm" and not self._controller.compute_has_open_project(self):
log.warning("Not reconnecting to compute '{}' because there is no project opened on it".format(self._id))
return
self._connection_failure += 1
# After 5 failure we close the project using the compute to avoid sync issues
if self._connection_failure == 10:
log.error("Could not connect to compute '{}' after multiple attempts: {}".format(self._id, e))
await self._controller.close_compute_projects(self)
asyncio.get_event_loop().call_later(2, lambda: asyncio.ensure_future(self._try_reconnect()))
asyncio.get_event_loop().call_later(5, lambda: asyncio.ensure_future(self._try_reconnect()))
return
except aiohttp.web.HTTPNotFound:
raise aiohttp.web.HTTPConflict(text="The server {} is not a GNS3 server or it's a 1.X server".format(self._id))
@@ -427,7 +427,7 @@ class Compute:
ws_url = self._getUrl("/notifications/ws")
try:
async with self._session().ws_connect(ws_url, auth=self._auth, heartbeat=10) as ws:
log.info("Connected to compute WebSocket '{}'".format(ws_url))
log.info("Connected to compute '{}' WebSocket '{}'".format(self._id, ws_url))
async for response in ws:
if response.type == aiohttp.WSMsgType.TEXT:
msg = json.loads(response.data)
@@ -445,15 +445,15 @@ class Compute:
if response.type == aiohttp.WSMsgType.CLOSE:
await ws.close()
elif response.type == aiohttp.WSMsgType.ERROR:
log.error("Error received on compute WebSocket '{}': {}".format(ws_url, ws.exception()))
log.error("Error received on compute '{}' WebSocket '{}': {}".format(self._id, ws_url, ws.exception()))
elif response.type == aiohttp.WSMsgType.CLOSED:
pass
break
except aiohttp.client_exceptions.ClientResponseError as e:
log.error("Client response error received on compute WebSocket '{}': {}".format(ws_url,e))
log.error("Client response error received on compute '{}' WebSocket '{}': {}".format(self._id, ws_url,e))
finally:
self._connected = False
log.info("Connection closed to compute WebSocket '{}'".format(ws_url))
log.info("Connection closed to compute '{}' WebSocket '{}'".format(self._id, ws_url))
# Try to reconnect after 1 second if server unavailable only if not during tests (otherwise we create a ressources usage bomb)
if not hasattr(sys, "_called_from_test") or not sys._called_from_test:
+16 -13
View File
@@ -39,7 +39,7 @@ class GNS3VM:
Proxy between the controller and the GNS3 VM engine
"""
def __init__(self, controller, settings={}):
def __init__(self, controller):
self._controller = controller
# Keep instance of the loaded engines
self._engines = {}
@@ -50,9 +50,9 @@ class GNS3VM:
"enable": False,
"engine": "vmware",
"ram": 2048,
"vcpus": 1
"vcpus": 1,
"port": 80,
}
self.settings = settings
def engine_list(self):
"""
@@ -72,10 +72,11 @@ class GNS3VM:
else:
vmware_info["name"] = "VMware Workstation / Player (recommended)"
download_url = "https://github.com/GNS3/gns3-gui/releases/download/v{version}/GNS3.VM.Hyper-V.{version}.zip".format(version=__version__)
hyperv_info = {
"engine_id": "hyper-v",
"name": "Hyper-V",
"description": 'Hyper-V support (Windows 10/Server 2016 and above). Nested virtualization must be supported and enabled (Intel processor only)',
"description": 'Hyper-V support (Windows 10/Server 2016 and above). Nested virtualization must be supported and enabled (Intel processor only)<br>The GNS3 VM can be <a href="{}">downloaded here</a>'.format(download_url),
"support_when_exit": True,
"support_headless": False,
"support_ram": True
@@ -85,7 +86,7 @@ class GNS3VM:
virtualbox_info = {
"engine_id": "virtualbox",
"name": "VirtualBox",
"description": 'VirtualBox doesn\'t support nested virtualization, this means Qemu based VMs will run extremely slowly.<br>The GNS3 VM can be <a href="{}">downloaded here</a>'.format(download_url),
"description": 'VirtualBox support. Nested virtualization for both Intel and AMD processors is supported since version 6.1<br>The GNS3 VM can be <a href="{}">downloaded here</a>'.format(download_url),
"support_when_exit": True,
"support_headless": True,
"support_ram": True
@@ -249,6 +250,7 @@ class GNS3VM:
def __json__(self):
return self._settings
@locking
async def list(self, engine):
"""
List VMS for an engine
@@ -278,9 +280,9 @@ class GNS3VM:
# User will receive the error later when they will try to use the node
try:
compute = await self._controller.add_compute(compute_id="vm",
name="GNS3 VM ({})".format(self.current_engine().vmname),
host=None,
force=True)
name="GNS3 VM ({})".format(self.current_engine().vmname),
host=None,
force=True)
compute.set_last_error(str(e))
except aiohttp.web.HTTPConflict:
@@ -313,6 +315,7 @@ class GNS3VM:
engine.ram = self._settings["ram"]
engine.vcpus = self._settings["vcpus"]
engine.headless = self._settings["headless"]
engine.port = self._settings["port"]
compute = await self._controller.add_compute(compute_id="vm",
name="GNS3 VM is starting ({})".format(engine.vmname),
host=None,
@@ -329,11 +332,11 @@ class GNS3VM:
raise e
await compute.connect() # we can connect now that the VM has started
await compute.update(name="GNS3 VM ({})".format(engine.vmname),
protocol=self.protocol,
host=self.ip_address,
port=self.port,
user=self.user,
password=self.password)
protocol=self.protocol,
host=self.ip_address,
port=self.port,
user=self.user,
password=self.password)
# check if the VM is in the same subnet as the local server, start 10 seconds later to give
# some time for the compute in the VM to be ready for requests
+1 -2
View File
@@ -15,7 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import asyncio
import psutil
import logging
@@ -29,7 +28,7 @@ class BaseGNS3VM:
self._controller = controller
self._vmname = None
self._ip_address = None
self._port = 3080
self._port = 80 # value not used, will be overwritten
self._headless = False
self._vcpus = 1
self._ram = 1024
+10 -5
View File
@@ -57,9 +57,10 @@ class HyperVGNS3VM(BaseGNS3VM):
if sys.getwindowsversion().platform_version[0] < 10:
raise GNS3VMError("Windows 10/Windows Server 2016 or a later version is required to run Hyper-V with nested virtualization enabled (version {} detected)".format(sys.getwindowsversion().platform_version[0]))
if sys.getwindowsversion().platform_version[0] == 10 and sys.getwindowsversion().platform_version[1] == 0:
if sys.getwindowsversion().platform_version[2] < 14393:
raise GNS3VMError("Hyper-V with nested virtualization is only supported on Windows 10 Anniversary Update (build 10.0.14393) or later")
is_windows_10 = sys.getwindowsversion().platform_version[0] == 10 and sys.getwindowsversion().platform_version[1] == 0
if is_windows_10 and sys.getwindowsversion().platform_version[2] < 14393:
raise GNS3VMError("Hyper-V with nested virtualization is only supported on Windows 10 Anniversary Update (build 10.0.14393) or later")
try:
import pythoncom
@@ -74,7 +75,11 @@ class HyperVGNS3VM(BaseGNS3VM):
raise GNS3VMError("Hyper-V is not installed or activated")
if conn.Win32_Processor()[0].Manufacturer != "GenuineIntel":
raise GNS3VMError("An Intel processor is required by Hyper-V to support nested virtualization")
if is_windows_10 and conn.Win32_Processor()[0].Manufacturer == "AuthenticAMD":
if sys.getwindowsversion().platform_version[2] < 19640:
raise GNS3VMError("Windows 10 (build 10.0.19640) or later is required by Hyper-V to support nested virtualization with AMD processors")
else:
raise GNS3VMError("An Intel processor is required by Hyper-V to support nested virtualization on this version of Windows")
# This is not reliable
#if not conn.Win32_Processor()[0].VirtualizationFirmwareEnabled:
@@ -179,7 +184,7 @@ class HyperVGNS3VM(BaseGNS3VM):
List all Hyper-V VMs
"""
if self._conn is None:
if self._conn is None or self._management is None:
self._connect()
vms = []
@@ -51,7 +51,6 @@ class RemoteGNS3VM(BaseGNS3VM):
if not self.vmname:
return
vm_compute = None
for compute in self._controller.computes.values():
if compute.name == self.vmname:
self.running = True
@@ -212,8 +212,11 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
List all VirtualBox VMs
"""
await self._check_requirements()
return await self._virtualbox_manager.list_vms()
try:
await self._check_requirements()
return await self._virtualbox_manager.list_vms()
except VirtualBoxError as e:
raise GNS3VMError("Could not list VirtualBox VMs: {}".format(str(e)))
async def start(self):
"""
@@ -285,13 +288,12 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
log.info("Removing GNS3VM NAT port forwarding rule from interface {}".format(nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number), "delete", "GNS3VM"])
# add a GNS3VM NAT port forwarding rule to redirect 127.0.0.1 with random port to port 3080 in the VM
# add a GNS3VM NAT port forwarding rule to redirect 127.0.0.1 with random port to the port in the VM
log.info("Adding GNS3VM NAT port forwarding rule with port {} to interface {}".format(api_port, nat_interface_number))
await self._execute("controlvm", [self._vmname, "natpf{}".format(nat_interface_number),
"GNS3VM,tcp,{},{},,3080".format(ip_address, api_port)])
"GNS3VM,tcp,{},{},,{}".format(ip_address, api_port, self.port)])
self.ip_address = await self._get_ip(hostonly_interface_number, api_port)
self.port = 3080
log.info("GNS3 VM has been started with IP {}".format(self.ip_address))
self.running = True
@@ -115,6 +115,7 @@ class VMwareGNS3VM(BaseGNS3VM):
"""
List all VMware VMs
"""
try:
return (await self._vmware_manager.list_vms())
except VMwareError as e:
+8 -9
View File
@@ -197,24 +197,23 @@ class DynamipsPortFactory:
def __new__(cls, properties):
ports = []
adapter_number = 0
wic_slot = 1
wic_port_number = wic_slot * 16
display_wic_port_number = 0
for name in sorted(properties.keys()):
if name.startswith("slot") and properties[name]:
port_class = cls.ADAPTER_MATRIX[properties[name]]["port"]
if port_class:
if name.startswith("slot"):
if properties[name]:
port_class = cls.ADAPTER_MATRIX[properties[name]]["port"]
for port_number in range(0, cls.ADAPTER_MATRIX[properties[name]]["nb_ports"]):
name = "{}{}/{}".format(port_class.long_name_type(), adapter_number, port_number)
port = port_class(name, adapter_number, adapter_number, port_number)
port.short_name = "{}{}/{}".format(port_class.short_name_type(), adapter_number, port_number)
ports.append(port)
adapter_number += 1
elif name.startswith("wic") and properties[name]:
port_class = cls.WIC_MATRIX[properties[name]]["port"]
if port_class:
elif name.startswith("wic"):
if properties[name]:
port_class = cls.WIC_MATRIX[properties[name]]["port"]
for port_number in range(0, cls.WIC_MATRIX[properties[name]]["nb_ports"]):
name = "{}{}/{}".format(port_class.long_name_type(), 0, display_wic_port_number)
port = port_class(name, 0, 0, wic_port_number)
@@ -222,7 +221,7 @@ class DynamipsPortFactory:
ports.append(port)
display_wic_port_number += 1
wic_port_number += 1
wic_slot += 1
wic_port_number = wic_slot * 16
wic_slot += 1
wic_port_number = wic_slot * 16
return ports
+8 -2
View File
@@ -129,6 +129,8 @@ class Project:
self._iou_id_lock = asyncio.Lock()
log.debug('Project "{name}" [{id}] loaded'.format(name=self.name, id=self._id))
def emit_notification(self, action, event):
"""
Emit a notification to all clients using this project.
@@ -435,6 +437,9 @@ class Project:
"""
:return: List of computes used by the project
"""
if self._status == "closed":
return self._get_closed_data("computes", "compute_id").values()
return self._project_created_on_compute
def remove_allocated_node_name(self, name):
@@ -994,7 +999,7 @@ class Project:
while self._loading:
await asyncio.sleep(0.5)
async def duplicate(self, name=None, location=None):
async def duplicate(self, name=None, location=None, reset_mac_addresses=True):
"""
Duplicate a project
@@ -1004,6 +1009,7 @@ class Project:
:param name: Name of the new project. A new one will be generated in case of conflicts
:param location: Parent directory of the new project
:param reset_mac_addresses: Reset MAC addresses for the new project
"""
# If the project was not open we open it temporary
previous_status = self._status
@@ -1017,7 +1023,7 @@ class Project:
with tempfile.TemporaryDirectory() as tmpdir:
# Do not compress the exported project when duplicating
with aiozipstream.ZipFile(compression=zipfile.ZIP_STORED) as zstream:
await export_project(zstream, self, tmpdir, keep_compute_id=True, allow_all_nodes=True, reset_mac_addresses=True)
await export_project(zstream, self, tmpdir, keep_compute_id=True, allow_all_nodes=True, reset_mac_addresses=reset_mac_addresses)
# export the project to a temporary location
project_path = os.path.join(tmpdir, "project.gns3p")
+2
View File
@@ -147,6 +147,8 @@ class Template:
# special case for Dynamips to cover all platform types that contain specific settings
self.validate_and_apply_defaults(DYNAMIPS_PLATFORM_TO_SHEMA[self._settings["platform"]])
log.debug('Template "{name}" [{id}] loaded'.format(name=self.name, id=self._id))
@property
def id(self):
return self._id
+15 -6
View File
@@ -99,19 +99,28 @@ def project_to_topology(project):
"version": __version__
}
computes = set()
for node in project.nodes.values():
computes.add(node.compute)
data["topology"]["nodes"].append(node.__json__(topology_dump=True))
if hasattr(node, "__json__"):
data["topology"]["nodes"].append(node.__json__(topology_dump=True))
else:
data["topology"]["nodes"].append(node)
for link in project.links.values():
data["topology"]["links"].append(link.__json__(topology_dump=True))
if hasattr(link, "__json__"):
data["topology"]["links"].append(link.__json__(topology_dump=True))
else:
data["topology"]["links"].append(link)
for drawing in project.drawings.values():
data["topology"]["drawings"].append(drawing.__json__(topology_dump=True))
for compute in computes:
if hasattr(drawing, "__json__"):
data["topology"]["drawings"].append(drawing.__json__(topology_dump=True))
else:
data["topology"]["drawings"].append(drawing)
for compute in project.computes:
if hasattr(compute, "__json__"):
compute = compute.__json__(topology_dump=True)
if compute["compute_id"] not in ("vm", "local", ):
data["topology"]["computes"].append(compute)
elif isinstance(compute, dict):
data["topology"]["computes"].append(compute)
_check_topology_schema(data)
return data
+77 -46
View File
@@ -15,22 +15,21 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
try:
import sentry_sdk
from sentry_sdk.integrations.logging import LoggingIntegration
SENTRY_SDK_AVAILABLE = True
except ImportError:
# Sentry SDK is not installed with deb package in order to simplify packaging
SENTRY_SDK_AVAILABLE = False
import os
import sys
import struct
import aiohttp
import platform
import locale
import distro
try:
import raven
from raven.transport.http import HTTPTransport
RAVEN_AVAILABLE = True
except ImportError:
# raven is not installed with deb package in order to simplify packaging
RAVEN_AVAILABLE = False
from .version import __version__, __version_info__
from .config import Config
from .utils.get_resource import get_resource
@@ -43,7 +42,8 @@ log = logging.getLogger(__name__)
if __version_info__[3] != 0:
import faulthandler
# Display a traceback in case of segfault crash. Usefull when frozen
# Display a traceback in case of segfault crash.
# Useful when this application is frozen.
# Not enabled by default for security reason
log.info("Enable catching segfault")
try:
@@ -58,49 +58,50 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://3b34198e8fa84f519ed6d6d5354c5cc5:1b0bec61fd654380b597ba4f11452f1f@o19455.ingest.sentry.io/38482"
if hasattr(sys, "frozen"):
cacert = get_resource("cacert.pem")
if cacert is not None and os.path.isfile(cacert):
DSN += "?ca_certs={}".format(cacert)
else:
log.warning("The SSL certificate bundle file '{}' could not be found".format(cacert))
DSN = "https://3f77c7ac33f2402789343e34f0913c0b:11621d9855cb4b92becc111cbb63ccfb@o19455.ingest.sentry.io/38482"
_instance = None
def __init__(self):
self._client = None
# We don't want sentry making noise if an error is catched when you don't have internet
# We don't want sentry making noise if an error is caught when you don't have internet
sentry_errors = logging.getLogger('sentry.errors')
sentry_errors.disabled = True
sentry_uncaught = logging.getLogger('sentry.errors.uncaught')
sentry_uncaught.disabled = True
def capture_exception(self, request=None):
if not RAVEN_AVAILABLE:
return
if os.path.exists(".git"):
log.warning("A .git directory exist crash report is turn off for developers")
return
server_config = Config.instance().get_section_config("Server")
if server_config.getboolean("report_errors"):
if self._client is None:
self._client = raven.Client(CrashReport.DSN, release=__version__, raise_send_errors=True, transport=HTTPTransport)
if request is not None:
self._client.http_context({
"method": request.method,
"url": request.path,
"data": request.json,
})
if SENTRY_SDK_AVAILABLE:
cacert = None
if hasattr(sys, "frozen"):
cacert_resource = get_resource("cacert.pem")
if cacert_resource is not None and os.path.isfile(cacert_resource):
cacert = cacert_resource
else:
log.error("The SSL certificate bundle file '{}' could not be found".format(cacert_resource))
context = {
# Don't send log records as events.
sentry_logging = LoggingIntegration(level=logging.INFO, event_level=None)
sentry_sdk.init(dsn=CrashReport.DSN,
release=__version__,
ca_certs=cacert,
default_integrations=False,
integrations=[sentry_logging])
tags = {
"os:name": platform.system(),
"os:release": platform.release(),
"os:win_32": " ".join(platform.win32_ver()),
"os:mac": "{} {}".format(platform.mac_ver()[0], platform.mac_ver()[2]),
"os:linux": " ".join(distro.linux_distribution()),
"aiohttp:version": aiohttp.__version__,
}
with sentry_sdk.configure_scope() as scope:
for key, value in tags.items():
scope.set_tag(key, value)
extra_context = {
"python:version": "{}.{}.{}".format(sys.version_info[0],
sys.version_info[1],
sys.version_info[2]),
@@ -113,8 +114,8 @@ class CrashReport:
# add locale information
try:
language, encoding = locale.getlocale()
context["locale:language"] = language
context["locale:encoding"] = encoding
extra_context["locale:language"] = language
extra_context["locale:encoding"] = encoding
except ValueError:
pass
@@ -124,17 +125,47 @@ class CrashReport:
if os.path.isfile(gns3vm_version):
try:
with open(gns3vm_version) as fd:
context["gns3vm:version"] = fd.readline().strip()
extra_context["gns3vm:version"] = fd.readline().strip()
except OSError:
pass
self._client.tags_context(context)
try:
report = self._client.captureException()
except Exception as e:
log.error("Can't send crash report to Sentry: {}".format(e))
with sentry_sdk.configure_scope() as scope:
for key, value in extra_context.items():
scope.set_extra(key, value)
def capture_exception(self, request=None):
if not SENTRY_SDK_AVAILABLE:
return
if not hasattr(sys, "frozen") and os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", ".git")):
log.warning(".git directory detected, crash reporting is turned off for developers.")
return
server_config = Config.instance().get_section_config("Server")
if server_config.getboolean("report_errors"):
if not SENTRY_SDK_AVAILABLE:
log.warning("Cannot capture exception: Sentry SDK is not available")
return
log.info("Crash report sent with event ID: {}".format(self._client.get_ident(report)))
if os.path.exists(".git"):
log.warning(".git directory detected, crash reporting is turned off for developers.")
return
try:
if request:
# add specific extra request information
with sentry_sdk.push_scope() as scope:
scope.set_extra("method", request.method)
scope.set_extra("url", request.path)
scope.set_extra("json", request.json)
sentry_sdk.capture_exception()
else:
sentry_sdk.capture_exception()
log.info("Crash report sent with event ID: {}".format(sentry_sdk.last_event_id()))
except Exception as e:
log.warning("Can't send crash report to Sentry: {}".format(e))
@classmethod
def instance(cls):
@@ -412,3 +412,16 @@ class DockerHandler:
docker_manager = Docker.instance()
images = await docker_manager.list_images()
response.json(images)
@Route.get(
r"/projects/{project_id}/docker/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
docker_manager = Docker.instance()
container = docker_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await container.start_websocket_console(request)
@@ -513,3 +513,15 @@ class DynamipsVMHandler:
response.set_status(201)
response.json(new_node)
@Route.get(
r"/projects/{project_id}/dynamips/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
dynamips_manager = Dynamips.instance()
vm = dynamips_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -453,3 +453,16 @@ class IOUHandler:
raise aiohttp.web.HTTPForbidden()
await response.stream_file(image_path)
@Route.get(
r"/projects/{project_id}/iou/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
iou_manager = IOU.instance()
vm = iou_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -19,12 +19,13 @@ import aiohttp
import asyncio
import json
import os
import psutil
import tempfile
from gns3server.web.route import Route
from gns3server.compute.project_manager import ProjectManager
from gns3server.compute import MODULES
from gns3server.utils.ping_stats import PingStats
from gns3server.utils.cpu_percent import CpuPercent
from gns3server.schemas.project import (
PROJECT_OBJECT_SCHEMA,
@@ -206,7 +207,11 @@ class ProjectHandler:
:returns: hash
"""
return {"action": "ping", "event": PingStats.get()}
stats = {}
# Non blocking call in order to get cpu usage. First call will return 0
stats["cpu_usage_percent"] = CpuPercent.get(interval=None)
stats["memory_usage_percent"] = psutil.virtual_memory().percent
return {"action": "ping", "event": stats}
@Route.get(
r"/projects/{project_id}/files",
@@ -580,3 +580,16 @@ class QEMUHandler:
raise aiohttp.web.HTTPForbidden()
await response.stream_file(image_path)
@Route.get(
r"/projects/{project_id}/qemu/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
qemu_manager = Qemu.instance()
vm = qemu_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -23,9 +23,9 @@ from gns3server.config import Config
from gns3server.schemas.version import VERSION_SCHEMA
from gns3server.schemas.server_statistics import SERVER_STATISTICS_SCHEMA
from gns3server.compute.port_manager import PortManager
from gns3server.utils.cpu_percent import CpuPercent
from gns3server.version import __version__
from aiohttp.web import HTTPConflict
from psutil._common import bytes2human
class ServerHandler:
@@ -57,7 +57,7 @@ class ServerHandler:
swap_total = psutil.swap_memory().total
swap_free = psutil.swap_memory().free
swap_used = psutil.swap_memory().used
cpu_percent = int(psutil.cpu_percent())
cpu_percent = int(CpuPercent.get())
load_average_percent = [int(x / psutil.cpu_count() * 100) for x in psutil.getloadavg()]
memory_percent = int(psutil.virtual_memory().percent)
swap_percent = int(psutil.swap_memory().percent)
@@ -424,3 +424,16 @@ class VirtualBoxHandler:
vbox_manager = VirtualBox.instance()
vms = await vbox_manager.list_vms()
response.json(vms)
@Route.get(
r"/projects/{project_id}/virtualbox/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
virtualbox_manager = VirtualBox.instance()
vm = virtualbox_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -409,3 +409,16 @@ class VMwareHandler:
vmware_manager = VMware.instance()
vms = await vmware_manager.list_vms()
response.json(vms)
@Route.get(
r"/projects/{project_id}/vmware/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
vmware_manager = VMware.instance()
vm = vmware_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -362,3 +362,16 @@ class VPCSHandler:
port_number = int(request.match_info["port_number"])
nio = vm.get_nio(port_number)
await vpcs_manager.stream_pcap_file(nio, vm.project.id, request, response)
@Route.get(
r"/projects/{project_id}/vpcs/nodes/{node_id}/console/ws",
description="WebSocket for console",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID",
})
async def console_ws(request, response):
vpcs_manager = VPCS.instance()
vm = vpcs_manager.get_node(request.match_info["node_id"], project_id=request.match_info["project_id"])
return await vm.start_websocket_console(request)
@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import aiohttp
import asyncio
from gns3server.web.route import Route
from gns3server.controller import Controller
@@ -453,3 +454,57 @@ class NodeHandler:
data = await request.content.read() #FIXME: are we handling timeout or large files correctly?
await node.compute.http_query("POST", "/projects/{project_id}/files{path}".format(project_id=project.id, path=path), data=data, timeout=None, raw=True)
response.set_status(201)
@Route.get(
r"/projects/{project_id}/nodes/{node_id}/console/ws",
parameters={
"project_id": "Project UUID",
"node_id": "Node UUID"
},
description="Connect to WebSocket console",
status_codes={
200: "File returned",
403: "Permission denied",
404: "The file doesn't exist"
})
async def ws_console(request, response):
project = await Controller.instance().get_loaded_project(request.match_info["project_id"])
node = project.get_node(request.match_info["node_id"])
compute = node.compute
ws = aiohttp.web.WebSocketResponse()
await ws.prepare(request)
request.app['websockets'].add(ws)
ws_console_compute_url = "ws://{compute_host}:{compute_port}/v2/compute/projects/{project_id}/{node_type}/nodes/{node_id}/console/ws".format(compute_host=compute.host,
compute_port=compute.port,
project_id=project.id,
node_type=node.node_type,
node_id=node.id)
async def ws_forward(ws_client):
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
await ws_client.send_str(msg.data)
elif msg.type == aiohttp.WSMsgType.BINARY:
await ws_client.send_bytes(msg.data)
elif msg.type == aiohttp.WSMsgType.ERROR:
break
try:
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=None, force_close=True)) as session:
async with session.ws_connect(ws_console_compute_url) as ws_client:
asyncio.ensure_future(ws_forward(ws_client))
async for msg in ws_client:
if msg.type == aiohttp.WSMsgType.TEXT:
await ws.send_str(msg.data)
elif msg.type == aiohttp.WSMsgType.BINARY:
await ws.send_bytes(msg.data)
elif msg.type == aiohttp.WSMsgType.ERROR:
break
finally:
if not ws.closed:
await ws.close()
request.app['websockets'].discard(ws)
return ws
Loaded 100 of 278 files, more files were not shown because too many files have changed in this diff. Show more