mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-07 07:33:43 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c08166510 | ||
|
|
940f004752 | ||
|
|
f083649021 | ||
|
|
aeb82de78a | ||
|
|
6761ae3445 | ||
|
|
855a95de49 | ||
|
|
380e7a8a7f | ||
|
|
89b5629cf5 | ||
|
|
7471b31b0c | ||
|
|
37c7202aa0 | ||
|
|
99128e7713 | ||
|
|
c40651b53e | ||
|
|
c4d2422fe2 | ||
|
|
f08f7702d1 | ||
|
|
b787cb3ace | ||
|
|
62130c116a | ||
|
|
1cbed45f16 | ||
|
|
29b31d72e9 | ||
|
|
ea17cc2565 | ||
|
|
850c30f958 | ||
|
|
27da8458e8 | ||
|
|
8bd3e2346b | ||
|
|
74fc4fc75c | ||
|
|
d0487b92c5 | ||
|
|
7924963276 | ||
|
|
d7083541b0 | ||
|
|
af22fb8e98 | ||
|
|
03c4643a0f | ||
|
|
4ba7131451 | ||
|
|
3af71d8976 | ||
|
|
f361b9cb3e | ||
|
|
12d3ba391f | ||
|
|
88ee9ae8b9 | ||
|
|
9665378f44 | ||
|
|
fd411e7855 | ||
|
|
7fd8fde020 | ||
|
|
51b76b1e30 | ||
|
|
9a9e54c523 | ||
|
|
13a6b4fe55 | ||
|
|
3b4f4bfeda | ||
|
|
a018c8e1a8 | ||
|
|
79b93defbd | ||
|
|
72bef07f2b | ||
|
|
3344cfb98a | ||
|
|
9d141baf22 | ||
|
|
1a4c2ed069 | ||
|
|
7fb554135f | ||
|
|
241caa1ec7 | ||
|
|
d33584a2e4 | ||
|
|
438b1c056c | ||
|
|
ef23e74e9c | ||
|
|
9ab8599e1e | ||
|
|
d9ab29a9e0 | ||
|
|
09e9382df1 | ||
|
|
8976384a56 | ||
|
|
e4b7e46444 | ||
|
|
1d4c3a164d | ||
|
|
d3ea67da24 | ||
|
|
f498ab06b4 | ||
|
|
3940f013d4 | ||
|
|
e1dab0dff4 | ||
|
|
c6da24f267 | ||
|
|
1f149769f2 | ||
|
|
ee70a6a27d | ||
|
|
297d1a0aae | ||
|
|
05e8fd3ff5 | ||
|
|
c0c8151480 | ||
|
|
ad7277c938 | ||
|
|
0c2e4d2de9 | ||
|
|
1264680b51 | ||
|
|
a9697e925c | ||
|
|
16a0e1c308 | ||
|
|
f53d6f1b66 | ||
|
|
58a19af9ac | ||
|
|
a796f1e42e | ||
|
|
6e4187741c | ||
|
|
8eefaa3f32 | ||
|
|
5575657318 | ||
|
|
69b816e21e | ||
|
|
5c3bd589b9 | ||
|
|
1a20cbeefd | ||
|
|
da85d7b827 | ||
|
|
7002b026fc | ||
|
|
00f8a27404 | ||
|
|
5b59a09e8d | ||
|
|
16ca0fd915 | ||
|
|
c63aad8eca | ||
|
|
54bab7445c | ||
|
|
32a8bc54a1 | ||
|
|
dadbacd8a4 | ||
|
|
9032fd2a5c | ||
|
|
eb0d4439a0 | ||
|
|
91a1c5db49 | ||
|
|
0a77233631 | ||
|
|
8df8b73c8f | ||
|
|
6968ae9295 | ||
|
|
1c9a43d071 | ||
|
|
a4bc696a5f | ||
|
|
10645a412b | ||
|
|
1b008fb516 | ||
|
|
45d135911f | ||
|
|
3626bd5adb | ||
|
|
6c322bbdde | ||
|
|
02c0fa26e1 | ||
|
|
99a238a0dc | ||
|
|
7b61724213 | ||
|
|
72c6f5b484 | ||
|
|
8536af33da | ||
|
|
4ddd45f788 | ||
|
|
53b1809dc3 | ||
|
|
dd11d38338 | ||
|
|
c0adc88592 | ||
|
|
2c9afbb217 | ||
|
|
770841b3ee | ||
|
|
896e99d046 | ||
|
|
10bb259248 | ||
|
|
4ab100b716 | ||
|
|
6fd60452c4 | ||
|
|
a2d57f7c37 | ||
|
|
fb153e3c71 | ||
|
|
69986b0d0f | ||
|
|
06a6a0a332 | ||
|
|
2606c2d9a7 | ||
|
|
57067a99fa | ||
|
|
087cba3903 | ||
|
|
0a5995b11c | ||
|
|
4f3fd65377 | ||
|
|
42eaf97e9f | ||
|
|
55a5ce77ba | ||
|
|
0922159686 | ||
|
|
f9ab4ffb96 | ||
|
|
241937b80b | ||
|
|
b179ca88a7 | ||
|
|
4bed19f20a | ||
|
|
4bc1e5e02e | ||
|
|
d5b6fda270 | ||
|
|
720f52655e | ||
|
|
4df10d1427 | ||
|
|
aa83fcc7d1 | ||
|
|
afbbf7a524 | ||
|
|
b24bb42a66 | ||
|
|
aa1b621c10 | ||
|
|
6aed064a86 | ||
|
|
615cffd9ac | ||
|
|
868c39acfe | ||
|
|
392678e757 | ||
|
|
a62168fde0 | ||
|
|
3df348ac2a | ||
|
|
d9c264ce77 | ||
|
|
6eb62ad179 | ||
|
|
966e644c51 | ||
|
|
c5412bf970 | ||
|
|
6cb87ef25d | ||
|
|
3484a7dd3d | ||
|
|
c313475f68 | ||
|
|
e90262eb95 | ||
|
|
f7a6a0d466 | ||
|
|
92ac250bc7 | ||
|
|
667d50aa4a | ||
|
|
d796f8d112 | ||
|
|
fb4ece5c67 | ||
|
|
ab4b391a02 | ||
|
|
dcdaffa056 | ||
|
|
39d44c8480 | ||
|
|
c3b2128fae | ||
|
|
941bed9605 | ||
|
|
12a8831c44 | ||
|
|
60cc5c7bb4 | ||
|
|
6d66e4d5d5 | ||
|
|
82b42fffef |
No files matched your search
@@ -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
|
||||
-33
@@ -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
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scanSettings": {
|
||||
"configMode": "AUTO",
|
||||
"configExternalURL": "",
|
||||
"projectToken" : ""
|
||||
},
|
||||
"checkRunSettings": {
|
||||
"vulnerableCheckRunConclusionLevel": "failure"
|
||||
},
|
||||
"issueSettings": {
|
||||
"minSeverityLevel": "LOW"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,101 @@
|
||||
# Change Log
|
||||
|
||||
## 2.2.12 07/08/2020
|
||||
|
||||
* Release Web-Ui version 2020.3.0-beta.2
|
||||
* Catch exception when psutil returns OSError
|
||||
* Downgrade psutil to version 5.6.7
|
||||
* Use parent directory as working directory for project duplication and snapshots. Fixes https://github.com/GNS3/gns3-gui/issues/2909
|
||||
* Fix Key Error "vendor_id" is missing when configuring GNS3 VM with VirtualBox. Fixes https://github.com/GNS3/gns3-gui/issues/3018
|
||||
|
||||
## 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
|
||||
* Fix uBrigde error popups when Docker image has stopped. Fixes https://github.com/GNS3/gns3-gui/issues/2957
|
||||
* Fix warning that you are explicitly comparing literals
|
||||
|
||||
## 2.2.6 26/03/2020
|
||||
|
||||
* Remove --local when starting Docker dev server.
|
||||
* Release 2020.1.0-alpha.1
|
||||
* Monitor ubrige processes.
|
||||
* Add Xvnc command to the VNC servers list. Fixes #172
|
||||
* Allow controller to reconnect to compute if communication is lost. Ref #1634
|
||||
* Improvement of support for docker USER directive. Fixes #1727.
|
||||
* Fix cannot delete Dynamips router the content of the "usage" field. Fixes https://github.com/GNS3/gns3-gui/issues/2947
|
||||
* Prevent locked drawings to be deleted. Fixes https://github.com/GNS3/gns3-gui/issues/2948
|
||||
* Fix issues with empty project variables. Fixes https://github.com/GNS3/gns3-gui/issues/2941
|
||||
* Upgrade psutil to version 5.6.6 due to CVE-2019-18874 https://github.com/advisories/GHSA-qfc5-mcwq-26q8
|
||||
* Remove 'format=raw' from the Qemu options of the disk interfaces. Ref #1699
|
||||
* Allocate application IDs for IOU nodes on the controller. An application ID is used by IOU to generate its interface Mac addresses. They must be unique across all opened projects sharing the same computes to avoid Mac address collisions.
|
||||
* Require VirtualBox >= 6.0 on AMD and >= 6.1 on Intel processors (for GNS3 VM only). Fixes #1610
|
||||
* Add nvme disk interface and fix scsi disk interface for Qemu VMs.
|
||||
* Disallow using "legacy networking mode" with Qemu >= 2.9.0
|
||||
* Add latest Qemu nic models.
|
||||
* Attempt to fix error when loading wmi module. Fixes #1712
|
||||
* Handle "aborted" state for VirtualBox VMs. Fixes #1702
|
||||
* Change how Hyper-V VMs are found. Ref #1612
|
||||
|
||||
## 2.2.5 09/01/2020
|
||||
|
||||
* No changes
|
||||
|
||||
## 2.2.4 08/01/2020
|
||||
|
||||
* Accept a node name when creating a node from a template using the API. Fixes #1708
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@ RUN apt-get update && apt-get install -y \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
qemu-system-x86 \
|
||||
qemu-system-arm \
|
||||
qemu-kvm \
|
||||
libvirt-bin \
|
||||
x11vnc
|
||||
@@ -33,4 +32,4 @@ RUN pip3 install -r /server/requirements.txt
|
||||
|
||||
EXPOSE 3080
|
||||
|
||||
CMD python3 -m gns3server --local
|
||||
CMD python3 -m gns3server
|
||||
@@ -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
|
||||
@@ -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
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
**********************
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
]
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"maintainer": "GNS3 Team",
|
||||
"maintainer_email": "developers@gns3.net",
|
||||
"dynamips": {
|
||||
"platform": "c3600",
|
||||
"platform": "c2691",
|
||||
"ram": 192,
|
||||
"nvram": 256,
|
||||
"startup_config": "ios_base_startup-config.txt",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"documentation_url": "http://www.cisco.com/c/en/us/support/security/identity-services-engine/tsd-products-support-series-home.html",
|
||||
"product_name": "Identity Services Engine",
|
||||
"product_url": "http://www.cisco.com/c/en/us/products/security/identity-services-engine/index.html",
|
||||
"registry_version": 3,
|
||||
"registry_version": 4,
|
||||
"status": "experimental",
|
||||
"maintainer": "GNS3 Team",
|
||||
"maintainer_email": "developers@gns3.net",
|
||||
@@ -15,9 +15,10 @@
|
||||
"symbol": "cisco-ise.svg",
|
||||
"port_name_format": "GigabitEthernet{0}",
|
||||
"qemu": {
|
||||
"cpus": 2,
|
||||
"adapter_type": "e1000",
|
||||
"adapters": 2,
|
||||
"ram": 4096,
|
||||
"adapters": 6,
|
||||
"ram": 8192,
|
||||
"hda_disk_interface": "ide",
|
||||
"arch": "x86_64",
|
||||
"console_type": "vnc",
|
||||
@@ -26,12 +27,33 @@
|
||||
"options": "-smp 2 -smbios type=1,product=KVM"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
"filename": "ise-2.7.0.356.SPA.x86_64.iso",
|
||||
"version": "2.7.0.356",
|
||||
"md5sum": "efbc831bf05513e4df8695eb3a362921",
|
||||
"filesize": 9184415744,
|
||||
"download_url": "https://software.cisco.com/download/home/283801620/type/283802505/release/2.7.0"
|
||||
},
|
||||
{
|
||||
"filename": "ise-2.6.0.156.SPA.x86_64.iso",
|
||||
"version": "2.6.0.156",
|
||||
"md5sum": "296e65b662821269ad67dd3dea8804d9",
|
||||
"filesize": 8618913792,
|
||||
"download_url": "https://software.cisco.com/download/home/283801620/type/283802505/release/2.6.0"
|
||||
},
|
||||
{
|
||||
"filename": "ise-2.4.0.357.SPA.x86_64.iso",
|
||||
"version": "2.4.0.357",
|
||||
"md5sum": "766945618a0ff35f6c720b3bc4b46bfb",
|
||||
"md5sum": "7f32a28f8d95c7525885786a6556913e",
|
||||
"filesize": 8326062080,
|
||||
"download_url": "https://software.cisco.com/download/home/283801620/type/283802505/release/2.4.0"
|
||||
},
|
||||
{
|
||||
"filename": "ise-2.3.0.298.SPA.x86_64.iso",
|
||||
"version": "2.3.0.298",
|
||||
"md5sum": "da98d1a34f6b11d63da0f29bd5ef9caf",
|
||||
"filesize": 8174278656,
|
||||
"download_url": "https://software.cisco.com/download/home/283801620/type/283802505/release/2.3.0"
|
||||
},
|
||||
{
|
||||
"filename": "ise-2.2.0.470.SPA.x86_64.iso",
|
||||
@@ -67,16 +89,37 @@
|
||||
"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": [
|
||||
{
|
||||
"name": "2.7.0.356",
|
||||
"images": {
|
||||
"hda_disk_image": "empty200G.qcow2",
|
||||
"cdrom_image": "ise-2.7.0.356.SPA.x86_64.iso"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6.0.156",
|
||||
"images": {
|
||||
"hda_disk_image": "empty200G.qcow2",
|
||||
"cdrom_image": "ise-2.6.0.156.SPA.x86_64.iso"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.4.0.357",
|
||||
"images": {
|
||||
"hda_disk_image": "empty200G.qcow2",
|
||||
"cdrom_image": "ise-2.4.0.357.SPA.x86_64.iso"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.3.0.298",
|
||||
"images": {
|
||||
"hda_disk_image": "empty200G.qcow2",
|
||||
"cdrom_image": "ise-2.3.0.298.SPA.x86_64.iso"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.2.0.470",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -25,7 +25,21 @@
|
||||
"kvm": "require"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
{
|
||||
"filename": "nexus9500v.9.3.3.qcow2",
|
||||
"version": "9500v 9.3.3",
|
||||
"md5sum": "7230c944041fdaa0e1b18cecccbc9a32",
|
||||
"filesize": 1714159616,
|
||||
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(3)"
|
||||
},
|
||||
{
|
||||
"filename": "nexus9300v.9.3.3.qcow2",
|
||||
"version": "9300v 9.3.3",
|
||||
"md5sum": "8e9a7c4815907ef47d850623f77042e2",
|
||||
"filesize": 1714225152,
|
||||
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(3)"
|
||||
},
|
||||
{
|
||||
"filename": "nxosv.9.3.1.qcow2",
|
||||
"version": "9.3.1",
|
||||
"md5sum": "148fd38cb1ff78df2883f844e172fad9",
|
||||
@@ -134,6 +148,20 @@
|
||||
}
|
||||
],
|
||||
"versions": [
|
||||
{
|
||||
"name": "9500v 9.3.3",
|
||||
"images": {
|
||||
"bios_image": "OVMF-20160813.fd",
|
||||
"hda_disk_image": "nexus9500v.9.3.3.qcow2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "9300v 9.3.3",
|
||||
"images": {
|
||||
"bios_image": "OVMF-20160813.fd",
|
||||
"hda_disk_image": "nexus9300v.9.3.3.qcow2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "9.3.1",
|
||||
"images": {
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -28,6 +28,27 @@
|
||||
|
||||
"images": [
|
||||
|
||||
{
|
||||
"filename": "EXOS-VM_v30.7.1.1.qcow2",
|
||||
"version": "30.7.1.1",
|
||||
"md5sum": "c6b67023945102f984b47aa67c67fe33",
|
||||
"filesize": 485687296,
|
||||
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.7.1.1.qcow2"
|
||||
},
|
||||
{
|
||||
"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 +96,24 @@
|
||||
|
||||
"versions": [
|
||||
|
||||
{
|
||||
"name": "30.7.1.1",
|
||||
"images": {
|
||||
"hda_disk_image": "EXOS-VM_v30.7.1.1.qcow2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"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":
|
||||
{
|
||||
|
||||
@@ -27,6 +27,34 @@
|
||||
"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": "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",
|
||||
"version": "14.0.0 HF3",
|
||||
@@ -125,23 +153,44 @@
|
||||
"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": {
|
||||
"hda_disk_image": "BIGIP-14.1.2.3-0.0.5.qcow2",
|
||||
"hdb_disk_image": "empty100G.qcow2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "14.0.0 HF3",
|
||||
"images": {
|
||||
@@ -239,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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
@@ -1,41 +1,39 @@
|
||||
{
|
||||
"name": "FRR",
|
||||
"category": "router",
|
||||
"description": "FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms which includes protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP.\n\nFRR’s seamless integration with the native Linux/Unix IP networking stacks makes it applicable to a wide variety of use cases including connecting hosts/VMs/containers to the network, advertising network services, LAN switching and routing, Internet access routers, and Internet peering.\n\nThis is an unofficial VM or FRR.",
|
||||
"description": "FRRouting (FRR) is an IP routing protocol suite for Linux and Unix platforms which includes protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP.\n\nFRR’s seamless integration with the native Linux/Unix IP networking stacks makes it applicable to a wide variety of use cases including connecting hosts/VMs/containers to the network, advertising network services, LAN switching and routing, Internet access routers, and Internet peering.\n\nThis is an unofficial VM of FRR.",
|
||||
"vendor_name": "FRRouting Project",
|
||||
"vendor_url": "https://frrouting.org",
|
||||
"product_name": "FRR",
|
||||
"registry_version": 3,
|
||||
"status": "stable",
|
||||
"maintainer": "Andras Dosztal",
|
||||
"maintainer": "GNS3 Team",
|
||||
"maintainer_email": "developers@gns3.net",
|
||||
"usage": "Credentials: frradmin / frr\nIf you exit from the router CLI, you can get back by typing 'vtysh' to the console.",
|
||||
"port_name_format": "ens{port3}",
|
||||
"usage": "Credentials: root / root\nIf you exit from the router CLI, you can get back by typing 'vtysh' to the console.",
|
||||
"port_name_format": "eth{0}",
|
||||
"qemu": {
|
||||
"adapter_type": "virtio-net-pci",
|
||||
"adapter_type": "e1000",
|
||||
"adapters": 8,
|
||||
"ram": 512,
|
||||
"hda_disk_interface": "virtio",
|
||||
"ram": 256,
|
||||
"arch": "x86_64",
|
||||
"console_type": "telnet",
|
||||
"kvm": "require"
|
||||
"kvm": "allow"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
"filename": "frr7.1-vm0.4.qcow2",
|
||||
"version": "7.1 - VM0.4",
|
||||
"md5sum": "08390f257203126e5edffb9710e47974",
|
||||
"filesize": 2051801088,
|
||||
"download_url": "https://sourceforge.net/projects/frr/files/",
|
||||
"direct_download_url": "https://sourceforge.net/projects/frr/files/frr7.1-vm0.4.qcow2.bz2/download",
|
||||
"compression": "bzip2"
|
||||
"filename": "frr-7.3.1.qcow2",
|
||||
"version": "7.3.1",
|
||||
"md5sum": "e6bd9591a5c630bfe2c8688dc043b20b",
|
||||
"filesize": 47348224,
|
||||
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
|
||||
"direct_download_url": "http://downloads.sourceforge.net/project/gns-3/Qemu%20Appliances/frr-7.3.1.qcow2"
|
||||
}
|
||||
],
|
||||
"versions": [
|
||||
{
|
||||
"name": "7.1 - VM0.4",
|
||||
"name": "7.3.1",
|
||||
"images": {
|
||||
"hda_disk_image": "frr7.1-vm0.4.qcow2"
|
||||
"hda_disk_image": "frr-7.3.1.qcow2"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -12,6 +12,6 @@
|
||||
"maintainer_email": "developers@gns3.net",
|
||||
"docker": {
|
||||
"adapters": 2,
|
||||
"image": "gns3/kalilinux:v2"
|
||||
"image": "gns3/kalilinux:latest"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -26,77 +26,104 @@
|
||||
"options": "-nographic"
|
||||
},
|
||||
"images": [
|
||||
{
|
||||
"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.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",
|
||||
@@ -104,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"
|
||||
},
|
||||
{
|
||||
@@ -113,51 +140,33 @@
|
||||
"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.0beta3",
|
||||
"name": "7.0beta8",
|
||||
"images": {
|
||||
"hda_disk_image": "chr-7.0beta3.img"
|
||||
"hda_disk_image": "chr-7.0beta8.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "6.47",
|
||||
"images": {
|
||||
"hda_disk_image": "chr-6.47.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "6.46.5",
|
||||
"images": {
|
||||
"hda_disk_image": "chr-6.46.5.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "6.45.8",
|
||||
"images": {
|
||||
"hda_disk_image": "chr-6.45.8.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -184,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": {
|
||||
@@ -197,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"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -21,6 +21,69 @@
|
||||
"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",
|
||||
"md5sum": "2d36f48bcc37edf3c5cfc28fed44b533",
|
||||
"filesize": 285736960,
|
||||
"download_url": "https://downloads.openwrt.org/releases/19.07.1/targets/x86/64/",
|
||||
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.1/targets/x86/64/openwrt-19.07.1-x86-64-combined-ext4.img.gz",
|
||||
"compression": "gzip"
|
||||
},
|
||||
{
|
||||
"filename": "openwrt-18.06.7-x86-64-combined-ext4.img",
|
||||
"version": "18.06.7",
|
||||
"md5sum": "f463f38cccf89e1a2229f74a4c42d3ef",
|
||||
"filesize": 285736960,
|
||||
"download_url": "https://downloads.openwrt.org/releases/18.06.7/targets/x86/64/",
|
||||
"direct_download_url": "https://downloads.openwrt.org/releases/18.06.7/targets/x86/64/openwrt-18.06.7-x86-64-combined-ext4.img.gz",
|
||||
"compression": "gzip"
|
||||
},
|
||||
{
|
||||
"filename": "openwrt-19.07.0-x86-64-combined-ext4.img",
|
||||
"version": "19.07.0",
|
||||
"md5sum": "cf2a353d10e017b9e71cd3761f7aa724",
|
||||
"filesize": 285736960,
|
||||
"download_url": "https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/",
|
||||
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/openwrt-19.07.0-x86-64-combined-ext4.img.gz",
|
||||
"compression": "gzip"
|
||||
},
|
||||
{
|
||||
"filename": "openwrt-18.06.6-x86-64-combined-ext4.img",
|
||||
"version": "18.06.6",
|
||||
"md5sum": "0afeec80ad7e5035f739e0ed0a07fb83",
|
||||
"filesize": 285736960,
|
||||
"download_url": "https://downloads.openwrt.org/releases/18.06.6/targets/x86/64/",
|
||||
"direct_download_url": "https://downloads.openwrt.org/releases/18.06.6/targets/x86/64/openwrt-18.06.6-x86-64-combined-ext4.img.gz",
|
||||
"compression": "gzip"
|
||||
},
|
||||
{
|
||||
"filename": "openwrt-18.06.5-x86-64-combined-ext4.img",
|
||||
"version": "18.06.5",
|
||||
@@ -68,6 +131,48 @@
|
||||
}
|
||||
],
|
||||
"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": {
|
||||
"hda_disk_image": "openwrt-19.07.1-x86-64-combined-ext4.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "18.06.7",
|
||||
"images": {
|
||||
"hda_disk_image": "openwrt-18.06.7-x86-64-combined-ext4.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "19.07.0",
|
||||
"images": {
|
||||
"hda_disk_image": "openwrt-19.07.0-x86-64-combined-ext4.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "18.06.6",
|
||||
"images": {
|
||||
"hda_disk_image": "openwrt-18.06.6-x86-64-combined-ext4.img"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "18.06.5",
|
||||
"images": {
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
@@ -564,12 +566,14 @@ class DockerVM(BaseNode):
|
||||
"""
|
||||
|
||||
self._display = self._get_free_display_port()
|
||||
if not (shutil.which("Xtigervnc") or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
||||
raise DockerError("Please install tigervnc-standalone-server (recommended) or Xvfb + x11vnc before using VNC support")
|
||||
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
||||
|
||||
if shutil.which("Xtigervnc"):
|
||||
if not (tigervnc_path or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
||||
raise DockerError("Please install TigerVNC (recommended) or Xvfb + x11vnc before using VNC support")
|
||||
|
||||
if tigervnc_path:
|
||||
with open(os.path.join(self.working_dir, "vnc.log"), "w") as fd:
|
||||
self._vnc_process = await asyncio.create_subprocess_exec("Xtigervnc",
|
||||
self._vnc_process = await asyncio.create_subprocess_exec(tigervnc_path,
|
||||
"-geometry", self._console_resolution,
|
||||
"-depth", "16",
|
||||
"-interface", self._manager.port_manager.console_host,
|
||||
@@ -606,11 +610,21 @@ class DockerVM(BaseNode):
|
||||
"""
|
||||
|
||||
self._display = self._get_free_display_port()
|
||||
if not (shutil.which("Xtigervnc") or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
||||
raise DockerError("Please install tigervnc-standalone-server (recommended) or Xvfb + x11vnc before using VNC support")
|
||||
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
||||
if not (tigervnc_path or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
||||
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)
|
||||
@@ -822,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()
|
||||
|
||||
@@ -87,9 +87,5 @@ done
|
||||
ifup -a -f
|
||||
|
||||
# continue normal docker startup
|
||||
GNS3_CMD="PATH=$OLD_PATH exec"
|
||||
while test "$#" -gt 0 ; do
|
||||
GNS3_CMD="${GNS3_CMD} \"${1//\"/\\\"}\""
|
||||
shift
|
||||
done
|
||||
exec su ${GNS3_USER-root} -p -c "$GNS3_CMD"
|
||||
eval HOME=$(echo ~${GNS3_USER-root})
|
||||
exec su ${GNS3_USER-root} -p -- /gns3/run-cmd.sh "$OLD_PATH" "$@"
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
# run docker startup, first arg is new PATH, remainder is command
|
||||
|
||||
PATH="$1"
|
||||
shift
|
||||
exec "$@"
|
||||
@@ -458,7 +458,7 @@ class Dynamips(BaseManager):
|
||||
await vm.slot_add_binding(slot_id, adapter)
|
||||
except IndexError:
|
||||
raise DynamipsError("Slot {} doesn't exist on this router".format(slot_id))
|
||||
elif name.startswith("slot") and (value is None or value is ""):
|
||||
elif name.startswith("slot") and (value is None or value == ""):
|
||||
slot_id = int(name[-1])
|
||||
try:
|
||||
if vm.slots[slot_id]:
|
||||
@@ -476,7 +476,7 @@ class Dynamips(BaseManager):
|
||||
await vm.install_wic(wic_slot_id, wic)
|
||||
except IndexError:
|
||||
raise DynamipsError("WIC slot {} doesn't exist on this router".format(wic_slot_id))
|
||||
elif name.startswith("wic") and (value is None or value is ""):
|
||||
elif name.startswith("wic") and (value is None or value == ""):
|
||||
wic_slot_id = int(name[-1])
|
||||
try:
|
||||
if vm.slots[0].wics and vm.slots[0].wics[wic_slot_id]:
|
||||
@@ -493,7 +493,7 @@ class Dynamips(BaseManager):
|
||||
await vm.set_sparsemem(False)
|
||||
|
||||
usage = settings.get("usage")
|
||||
if usage and usage != vm.usage:
|
||||
if usage is not None and usage != vm.usage:
|
||||
vm.usage = usage
|
||||
|
||||
# update the configs if needed
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import asyncio
|
||||
from ..base_manager import BaseManager
|
||||
from .iou_error import IOUError
|
||||
from .iou_vm import IOUVM
|
||||
from .utils.application_id import get_next_application_id
|
||||
|
||||
import logging
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -48,12 +47,7 @@ class IOU(BaseManager):
|
||||
:returns: IOUVM instance
|
||||
"""
|
||||
|
||||
async with self._iou_id_lock:
|
||||
# wait for a node to be completely created before adding a new one
|
||||
# this is important otherwise we allocate the same application ID
|
||||
# when creating multiple IOU node at the same time
|
||||
application_id = get_next_application_id(self.nodes)
|
||||
node = await super().create_node(*args, application_id=application_id, **kwargs)
|
||||
node = await super().create_node(*args, **kwargs)
|
||||
return node
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -70,6 +70,10 @@ class IOUVM(BaseNode):
|
||||
|
||||
super().__init__(name, node_id, project, manager, console=console, console_type=console_type)
|
||||
|
||||
log.info('IOU "{name}" [{id}]: assigned with application ID {application_id}'.format(name=self._name,
|
||||
id=self._id,
|
||||
application_id=application_id))
|
||||
|
||||
self._iou_process = None
|
||||
self._telnet_server = None
|
||||
self._iou_stdout_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"]
|
||||
@@ -1647,7 +1678,16 @@ class QemuVM(BaseNode):
|
||||
options.extend(["-device", 'ahci,id=ahci{}'.format(disk_index)])
|
||||
options.extend(["-drive", 'file={},if=none,id=drive{},index={},media=disk'.format(disk, disk_index, disk_index)])
|
||||
options.extend(["-device", 'ide-drive,drive=drive{},bus=ahci{}.0,id=drive{}'.format(disk_index, disk_index, disk_index)])
|
||||
|
||||
elif interface == "nvme":
|
||||
options.extend(["-drive", 'file={},if=none,id=drive{},index={},media=disk'.format(disk, disk_index, disk_index)])
|
||||
options.extend(["-device", 'nvme,drive=drive{},serial={}'.format(disk_index, disk_index)])
|
||||
elif interface == "scsi":
|
||||
options.extend(["-device", 'virtio-scsi-pci,id=scsi{}'.format(disk_index)])
|
||||
options.extend(["-drive", 'file={},if=none,id=drive{},index={},media=disk'.format(disk, disk_index, disk_index)])
|
||||
options.extend(["-device", 'scsi-hd,drive=drive{}'.format(disk_index)])
|
||||
#elif interface == "sd":
|
||||
# options.extend(["-drive", 'file={},id=drive{},index={}'.format(disk, disk_index, disk_index)])
|
||||
# options.extend(["-device", 'sd-card,drive=drive{},id=drive{}'.format(disk_index, disk_index, disk_index)])
|
||||
else:
|
||||
options.extend(["-drive", 'file={},if={},index={},media=disk,id=drive{}'.format(disk, interface, disk_index, disk_index)])
|
||||
|
||||
@@ -1723,10 +1763,13 @@ class QemuVM(BaseNode):
|
||||
|
||||
patched_qemu = False
|
||||
if self._legacy_networking:
|
||||
version = await self.manager.get_qemu_version(self.qemu_path)
|
||||
if version and parse_version(version) < parse_version("1.1.0"):
|
||||
# this is a patched Qemu if version is below 1.1.0
|
||||
patched_qemu = True
|
||||
qemu_version = await self.manager.get_qemu_version(self.qemu_path)
|
||||
if qemu_version:
|
||||
if parse_version(qemu_version) >= parse_version("2.9.0"):
|
||||
raise QemuError("Qemu version 2.9.0 and later doesn't support legacy networking mode")
|
||||
if parse_version(qemu_version) < parse_version("1.1.0"):
|
||||
# this is a patched Qemu if version is below 1.1.0
|
||||
patched_qemu = True
|
||||
|
||||
# Each 32 PCI device we need to add a PCI bridge with max 9 bridges
|
||||
pci_devices = 4 + len(self._ethernet_adapters) # 4 PCI devices are use by default by qemu
|
||||
|
||||
@@ -279,7 +279,7 @@ class VirtualBoxVM(BaseNode):
|
||||
await self._set_network_options()
|
||||
await self._set_serial_console()
|
||||
else:
|
||||
raise VirtualBoxError("VirtualBox VM not powered off")
|
||||
raise VirtualBoxError("VirtualBox VM '{}' is not powered off (current state is '{}')".format(self.name, vm_state))
|
||||
|
||||
# check if there is enough RAM to run
|
||||
self.check_available_ram(self.ram)
|
||||
@@ -320,7 +320,8 @@ class VirtualBoxVM(BaseNode):
|
||||
await self._stop_ubridge()
|
||||
await self._stop_remote_console()
|
||||
vm_state = await self._get_vm_state()
|
||||
if vm_state in ("running", "paused", "stuck"):
|
||||
log.info("Stopping VirtualBox VM '{name}' [{id}] (current state is {vm_state})".format(name=self.name, id=self.id, vm_state=vm_state))
|
||||
if vm_state in ("running", "paused"):
|
||||
|
||||
if self.on_close == "save_vm_state":
|
||||
# add a guest property to know the VM has been saved
|
||||
@@ -348,7 +349,10 @@ class VirtualBoxVM(BaseNode):
|
||||
result = await self._control_vm("poweroff")
|
||||
self.status = "stopped"
|
||||
log.debug("Stop result: {}".format(result))
|
||||
elif vm_state == "aborted":
|
||||
self.status = "stopped"
|
||||
|
||||
if self.status == "stopped":
|
||||
log.info("VirtualBox VM '{name}' [{id}] stopped".format(name=self.name, id=self.id))
|
||||
await asyncio.sleep(0.5) # give some time for VirtualBox to unlock the VM
|
||||
if self.on_close != "save_vm_state":
|
||||
|
||||
@@ -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))
|
||||
@@ -481,7 +494,7 @@ class Controller:
|
||||
@property
|
||||
def projects(self):
|
||||
"""
|
||||
:returns: The dictionary of projects managed by GNS3
|
||||
:returns: The dictionary of projects managed by the controller
|
||||
"""
|
||||
|
||||
return self._projects
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
self._connected = False
|
||||
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:
|
||||
log.info("Connection closed to compute WebSocket '{}'".format(ws_url))
|
||||
self._connected = False
|
||||
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,7 +16,6 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import hashlib
|
||||
import asyncio
|
||||
import base64
|
||||
import uuid
|
||||
import re
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,9 +21,6 @@ import asyncio
|
||||
import psutil
|
||||
import ipaddress
|
||||
|
||||
if sys.platform.startswith("win"):
|
||||
import wmi
|
||||
|
||||
from .base_gns3_vm import BaseGNS3VM
|
||||
from .gns3_vm_error import GNS3VMError
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -47,6 +44,7 @@ class HyperVGNS3VM(BaseGNS3VM):
|
||||
self._conn = None
|
||||
self._vm = None
|
||||
self._management = None
|
||||
self._wmi = None
|
||||
|
||||
def _check_requirements(self):
|
||||
"""
|
||||
@@ -59,20 +57,29 @@ 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:
|
||||
conn = wmi.WMI()
|
||||
except wmi.x_wmi as e:
|
||||
import pythoncom
|
||||
pythoncom.CoInitialize()
|
||||
import wmi
|
||||
self._wmi = wmi
|
||||
conn = self._wmi.WMI()
|
||||
except self._wmi.x_wmi as e:
|
||||
raise GNS3VMError("Could not connect to WMI: {}".format(e))
|
||||
|
||||
if not conn.Win32_ComputerSystem()[0].HypervisorPresent:
|
||||
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:
|
||||
@@ -86,8 +93,8 @@ class HyperVGNS3VM(BaseGNS3VM):
|
||||
self._check_requirements()
|
||||
|
||||
try:
|
||||
self._conn = wmi.WMI(namespace=r"root\virtualization\v2")
|
||||
except wmi.x_wmi as e:
|
||||
self._conn = self._wmi.WMI(namespace=r"root\virtualization\v2")
|
||||
except self._wmi.x_wmi as e:
|
||||
raise GNS3VMError("Could not connect to WMI: {}".format(e))
|
||||
|
||||
if not self._conn.Msvm_VirtualSystemManagementService():
|
||||
@@ -177,15 +184,15 @@ 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 = []
|
||||
try:
|
||||
for vm in self._conn.Msvm_VirtualSystemSettingData():
|
||||
if vm.VirtualSystemType == "Microsoft:Hyper-V:System:Realized":
|
||||
for vm in self._conn.Msvm_ComputerSystem():
|
||||
if vm.ElementName != self._management.SystemName:
|
||||
vms.append({"vmname": vm.ElementName})
|
||||
except wmi.x_wmi as e:
|
||||
except self._wmi.x_wmi as e:
|
||||
raise GNS3VMError("Could not list Hyper-V VMs: {}".format(e))
|
||||
return vms
|
||||
|
||||
@@ -194,7 +201,7 @@ class HyperVGNS3VM(BaseGNS3VM):
|
||||
Gets the WMI object.
|
||||
"""
|
||||
|
||||
return wmi.WMI(moniker=path.replace('\\', '/'))
|
||||
return self._wmi.WMI(moniker=path.replace('\\', '/'))
|
||||
|
||||
async def _set_state(self, state):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -23,6 +23,8 @@ import socket
|
||||
|
||||
from .base_gns3_vm import BaseGNS3VM
|
||||
from .gns3_vm_error import GNS3VMError
|
||||
from gns3server.utils import parse_version
|
||||
from gns3server.utils.asyncio import wait_run_in_executor
|
||||
|
||||
from ...compute.virtualbox import (
|
||||
VirtualBox,
|
||||
@@ -38,6 +40,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
|
||||
|
||||
self._engine = "virtualbox"
|
||||
super().__init__(controller)
|
||||
self._system_properties = {}
|
||||
self._virtualbox_manager = VirtualBox()
|
||||
|
||||
async def _execute(self, subcommand, args, timeout=60):
|
||||
@@ -63,6 +66,42 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
|
||||
return value.strip('"')
|
||||
return "unknown"
|
||||
|
||||
async def _get_system_properties(self):
|
||||
"""
|
||||
Returns the VM state (e.g. running, paused etc.)
|
||||
|
||||
:returns: state (string)
|
||||
"""
|
||||
|
||||
properties = await self._execute("list", ["systemproperties"])
|
||||
for prop in properties.splitlines():
|
||||
try:
|
||||
name, value = prop.split(':', 1)
|
||||
except ValueError:
|
||||
continue
|
||||
self._system_properties[name.strip()] = value.strip()
|
||||
|
||||
async def _check_requirements(self):
|
||||
"""
|
||||
Checks if the GNS3 VM can run on VirtualBox
|
||||
"""
|
||||
|
||||
if not self._system_properties:
|
||||
await self._get_system_properties()
|
||||
if "API version" not in self._system_properties:
|
||||
raise VirtualBoxError("Can't access to VirtualBox API version:\n{}".format(self._system_properties))
|
||||
from cpuinfo import get_cpu_info
|
||||
cpu_info = await wait_run_in_executor(get_cpu_info)
|
||||
vendor_id = cpu_info.get('vendor_id_raw')
|
||||
if vendor_id == "GenuineIntel":
|
||||
if parse_version(self._system_properties["API version"]) < parse_version("6_1"):
|
||||
raise VirtualBoxError("VirtualBox version 6.1 or above is required to run the GNS3 VM with nested virtualization enabled on Intel processors")
|
||||
elif vendor_id == "AuthenticAMD":
|
||||
if parse_version(self._system_properties["API version"]) < parse_version("6_0"):
|
||||
raise VirtualBoxError("VirtualBox version 6.0 or above is required to run the GNS3 VM with nested virtualization enabled on AMD processors")
|
||||
else:
|
||||
log.warning("Could not determine CPU vendor: {}".format(vendor_id))
|
||||
|
||||
async def _look_for_interface(self, network_backend):
|
||||
"""
|
||||
Look for an interface with a specific network backend.
|
||||
@@ -173,13 +212,19 @@ class VirtualBoxGNS3VM(BaseGNS3VM):
|
||||
List all VirtualBox VMs
|
||||
"""
|
||||
|
||||
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):
|
||||
"""
|
||||
Start the GNS3 VM.
|
||||
"""
|
||||
|
||||
await self._check_requirements()
|
||||
|
||||
# get a NAT interface number
|
||||
nat_interface_number = await self._look_for_interface("nat")
|
||||
if nat_interface_number < 0:
|
||||
@@ -243,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:
|
||||
|
||||
@@ -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
|
||||
@@ -38,6 +38,7 @@ from .topology import project_to_topology, load_topology
|
||||
from .udp_link import UDPLink
|
||||
from ..config import Config
|
||||
from ..utils.path import check_path_allowed, get_default_project_directory
|
||||
from ..utils.application_id import get_next_application_id
|
||||
from ..utils.asyncio.pool import Pool
|
||||
from ..utils.asyncio import locking
|
||||
from ..utils.asyncio import aiozipstream
|
||||
@@ -126,6 +127,10 @@ class Project:
|
||||
assert self._status != "closed"
|
||||
self.dump()
|
||||
|
||||
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.
|
||||
@@ -432,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):
|
||||
@@ -516,17 +524,7 @@ class Project:
|
||||
node = await self.add_node(compute, name, node_id, node_type=node_type, **template)
|
||||
return node
|
||||
|
||||
@open_required
|
||||
async def add_node(self, compute, name, node_id, dump=True, node_type=None, **kwargs):
|
||||
"""
|
||||
Create a node or return an existing node
|
||||
|
||||
:param dump: Dump topology to disk
|
||||
:param kwargs: See the documentation of node
|
||||
"""
|
||||
|
||||
if node_id in self._nodes:
|
||||
return self._nodes[node_id]
|
||||
async def _create_node(self, compute, name, node_id, node_type=None, **kwargs):
|
||||
|
||||
node = Node(self, compute, name, node_id=node_id, node_type=node_type, **kwargs)
|
||||
if compute not in self._project_created_on_compute:
|
||||
@@ -547,10 +545,39 @@ class Project:
|
||||
data["variables"] = self._variables
|
||||
|
||||
await compute.post("/projects", data=data)
|
||||
|
||||
self._project_created_on_compute.add(compute)
|
||||
|
||||
await node.create()
|
||||
self._nodes[node.id] = node
|
||||
|
||||
return node
|
||||
|
||||
@open_required
|
||||
async def add_node(self, compute, name, node_id, dump=True, node_type=None, **kwargs):
|
||||
"""
|
||||
Create a node or return an existing node
|
||||
|
||||
:param dump: Dump topology to disk
|
||||
:param kwargs: See the documentation of node
|
||||
"""
|
||||
|
||||
if node_id in self._nodes:
|
||||
return self._nodes[node_id]
|
||||
|
||||
if node_type == "iou":
|
||||
async with self._iou_id_lock:
|
||||
# wait for a IOU node to be completely created before adding a new one
|
||||
# this is important otherwise we allocate the same application ID (used
|
||||
# to generate MAC addresses) when creating multiple IOU node at the same time
|
||||
if "properties" in kwargs.keys():
|
||||
# allocate a new application id for nodes loaded from the project
|
||||
kwargs.get("properties")["application_id"] = get_next_application_id(self._controller.projects, compute)
|
||||
elif "application_id" not in kwargs.keys() and not kwargs.get("properties"):
|
||||
# allocate a new application id for nodes added to the project
|
||||
kwargs["application_id"] = get_next_application_id(self._controller.projects, compute)
|
||||
node = await self._create_node(compute, name, node_id, node_type, **kwargs)
|
||||
else:
|
||||
node = await self._create_node(compute, name, node_id, node_type, **kwargs)
|
||||
self.emit_notification("node.created", node.__json__())
|
||||
if dump:
|
||||
self.dump()
|
||||
@@ -662,6 +689,8 @@ class Project:
|
||||
@open_required
|
||||
async def delete_drawing(self, drawing_id):
|
||||
drawing = self.get_drawing(drawing_id)
|
||||
if drawing.locked:
|
||||
raise aiohttp.web.HTTPConflict(text="Drawing ID {} cannot be deleted because it is locked".format(drawing_id))
|
||||
del self._drawings[drawing.id]
|
||||
self.dump()
|
||||
self.emit_notification("drawing.deleted", drawing.__json__())
|
||||
@@ -970,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
|
||||
|
||||
@@ -980,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
|
||||
@@ -990,10 +1020,19 @@ class Project:
|
||||
assert self._status != "closed"
|
||||
try:
|
||||
begin = time.time()
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
|
||||
# use the parent directory of the project we are duplicating as a
|
||||
# temporary directory to avoid no space left issues when '/tmp'
|
||||
# is location on another partition.
|
||||
if location:
|
||||
working_dir = os.path.abspath(os.path.join(location, os.pardir))
|
||||
else:
|
||||
working_dir = os.path.abspath(os.path.join(self.path, os.pardir))
|
||||
|
||||
with tempfile.TemporaryDirectory(dir=working_dir) 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")
|
||||
@@ -1102,12 +1141,11 @@ class Project:
|
||||
data['z'] = z
|
||||
data['locked'] = False # duplicated node must not be locked
|
||||
new_node_uuid = str(uuid.uuid4())
|
||||
new_node = await self.add_node(
|
||||
node.compute,
|
||||
node.name,
|
||||
new_node_uuid,
|
||||
node_type=node_type,
|
||||
**data)
|
||||
new_node = await self.add_node(node.compute,
|
||||
node.name,
|
||||
new_node_uuid,
|
||||
node_type=node_type,
|
||||
**data)
|
||||
try:
|
||||
await node.post("/duplicate", timeout=None, data={
|
||||
"destination_node_id": new_node_uuid
|
||||
|
||||
@@ -95,7 +95,7 @@ class Snapshot:
|
||||
|
||||
try:
|
||||
begin = time.time()
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
with tempfile.TemporaryDirectory(dir=snapshot_directory) as tmpdir:
|
||||
# Do not compress the snapshots
|
||||
with aiozipstream.ZipFile(compression=zipfile.ZIP_STORED) as zstream:
|
||||
await export_project(zstream, self._project, tmpdir, keep_compute_id=True, allow_all_nodes=True)
|
||||
|
||||
@@ -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
|
||||
|
||||
Loaded 100 of 294 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user