Compare commits

..
75 Commits
Author SHA1 Message Date
grossmj 7c437adbef Release v2.2.0 2019-09-30 16:24:26 +08:00
grossmj fef1d01e26 Merge branch 'master' into 2.2 2019-09-30 16:20:19 +08:00
grossmj af3ae0df24 Merge branch '2.1'
# Conflicts:
#	gns3server/compute/dynamips/nodes/atm_switch.py
2019-09-30 16:11:26 +08:00
grossmj 87390274cc Add debug message for what directory is checked for Qemu binaries. Ref #1655 2019-09-30 15:54:57 +08:00
grossmj f424e2dfd5 Sync appliance files. 2019-09-30 11:59:41 +08:00
Piotr Pekala 4031fd0c18 Release 2019.2.0-alpha.8 2019-09-27 01:57:03 -07:00
grossmj 1c678e296e Merge branch 'master' into 2.2
# Conflicts:
#	gns3server/version.py
2019-09-24 14:07:18 +08:00
grossmj 958ec94f13 Sync appliance files. 2019-09-24 14:06:26 +08:00
grossmj a9fd990904 Bump version to 2.2.0dev18 2019-09-24 14:02:36 +08:00
grossmj 9d18ac1e3e Merge branch 'master' into 2.2 2019-09-24 13:56:16 +08:00
grossmj 2cfac30810 Fix single quote is not closed. Fixes #1654 2019-09-17 18:54:18 +07:00
grossmj 67e70c4628 Fix wrong Dynamips command used to rename an ATM switch. Fixes #1651 2019-09-11 15:06:08 +07:00
grossmj 8b71e9b20c Release v2.2.0rc5 2019-09-09 15:06:14 +07:00
grossmj 7cd9bb6ca6 Merge branch '2.1' into 2.2 2019-09-09 15:02:06 +07:00
Jeremy Grossmann 6ec5683c95 Merge pull request #1649 from neffs/fix-sata
Don't specify the PCI bus for AHCI device
2019-09-05 17:37:13 +07:00
Jeremy Grossmann 2e41328ae9 Merge branch 'master' into fix-sata 2019-09-05 17:36:53 +07:00
Jeremy Grossmann 918ba21f1f Merge pull request #1648 from neffs/master
Add id value to all qemu drives
2019-09-05 17:33:05 +07:00
David Kreitschmann 077432ff2f Add qemu drive id to tests 2019-09-03 16:45:50 +02:00
David Kreitschmann 8105b68d52 Don't specify the PCI bus for AHCI device
pci.X is not always defined, let qemu handle this.

I think PCI buses only exist if PCI network adapters are defined, this
is not the case with virtio.
2019-09-03 16:03:27 +02:00
David Kreitschmann 906f29d5fc Add id value to all qemu drives
A fixed id doesn't hurt and now we can select Disk Interface=none in
GNS3 and e.g. attach the volume as a USB thumb drive with -device
usb-storage,drive=drive0,...
2019-09-03 15:54:51 +02:00
grossmj 5d4de9d0ba Fix AttributeError: Cannot set attribute '%s'. Fixes #1646 2019-08-31 14:43:35 +07:00
grossmj 4470519d9f Release v2.2.0rc4 2019-08-30 15:23:32 +07:00
Piotr Pekala 941857470d Release 2019.2.0-alpha.7 2019-08-29 09:39:26 -07:00
grossmj e64ed839f5 Check that vcpus value for GNS3 VM is an integer. Fixes #1636 2019-08-27 18:01:46 +07:00
grossmj 647dde1bb4 Make x,y optional for creating links via API. Fixes #1630 2019-08-26 19:51:03 +07:00
grossmj 63c0bfe46e Sync appliance files. 2019-08-26 17:08:33 +07:00
Jeremy Grossmann 2eddc463e7 Merge pull request #1643 from GNS3/allow-none-compute_id-templates
Allow "none" for compute_id in templates. Fixes #1638
2019-08-26 17:07:07 +07:00
grossmj fb288db50a Set default_name_format for some builtin nodes. 2019-08-26 17:00:18 +07:00
grossmj 55a9abfcea Allow "none" for compute_id in templates. 2019-08-26 16:48:03 +07:00
grossmj dac2cf4089 Bump version to 2.2.0dev17 2019-08-23 18:20:44 +07:00
grossmj 3b0bb8df4e Merge branch 'master' into 2.2
# Conflicts:
#	gns3server/version.py
2019-08-20 17:34:47 +07:00
grossmj 9559748f9d Bump version to 2.2.0dev16 2019-08-20 17:33:48 +07:00
grossmj 4656521987 Release v2.2.0rc3 2019-08-11 19:14:56 -07:00
grossmj 2feec666a2 Revert to jsonschema 2.6.0 due to packaging problem. 2019-08-11 19:11:40 -07:00
grossmj 86772d9127 Release v2.2.0rc2 2019-08-10 12:04:19 -05:00
grossmj fc182e932a Fix typo with jsonschema version 3.2.0 -> 3.0.2 2019-08-10 11:55:47 -05:00
grossmj 27d447c926 Release v2.2.0rc1 2019-08-10 11:42:10 -05:00
grossmj df9f717d7c Sync appliance files 2019-08-10 11:35:32 -05:00
grossmj 703dca54ab Bump jsonschema to version 3.0.2 2019-08-10 11:31:08 -05:00
grossmj 39da0f3904 List Hyper-V VMs on non-english OSes. Fixes #1612 2019-07-30 15:01:17 -02:30
grossmj 6a7d47ce97 Merge branch '2.2' 2019-07-12 12:07:44 +02:00
grossmj 7c07d0b4bd Add missing default values in Cloud schema. 2019-07-12 11:32:55 +02:00
grossmj 6626bf37a6 Development on 2.2.0dev15 2019-07-11 17:34:56 +02:00
grossmj f7376ee382 Release v2.2.0b4 2019-07-11 16:58:35 +02:00
grossmj 3172985a21 Sync appliance files. 2019-07-11 16:55:13 +02:00
grossmj dcf94a5852 Requires a project to be opened to start/stop/suspend all nodes. Fixes #1609 2019-07-10 17:07:13 +02:00
grossmj cba39a3744 Fix issue when starting GNS3 VM for Hyper-V 2019-07-10 15:56:54 +02:00
grossmj 03c7744efd Set defaults for custom cloud nodes. 2019-07-10 15:51:06 +02:00
grossmj b0f74c2a5e Fix issue when trying to rename a Dynamips node that is already powered on. Fixes #2824 2019-07-10 15:40:11 +02:00
grossmj 63fb82a89d Remove deprecated Qemu parameter to run legacy ASA VMs. Fixes #2827 2019-07-10 11:33:04 +02:00
grossmj aad74dbcb9 Add debug message when searching for an image. Ref https://github.com/GNS3/gns3-gui/issues/2828 2019-07-10 11:16:50 +02:00
Jeremy Grossmann c5be58b016 Merge pull request #1607 from fcolista/patch-1
Update README.rst
2019-07-04 19:37:05 +02:00
ziajka 507090d69d Fix base href for web ui 2019-07-04 10:37:14 +02:00
Piotr Pekala ed27a46dee Release 2019.2.0-alpha.5 2019-07-04 00:20:54 -07:00
ziajka 8d02405e88 Fix redirection to web-ui bundled server 2019-07-04 08:59:33 +02:00
Francesco Colista a17034fc6d Update README.rst 2019-07-03 20:30:10 +02:00
Piotr Pekala 7adf5201f0 Release 2019.2.0-alpha.4 2019-07-03 06:08:46 -07:00
grossmj 0df3322b6c Development on 2.2.0dev14 2019-06-15 16:38:06 +02:00
grossmj 5a62277819 Merging 2.2 into master 2019-05-24 15:27:07 +07:00
Jeremy Grossmann a221678448 Merge pull request #1545 from steffann/patch-1
Add vMX 17.4 and 18.4
2019-03-09 17:48:46 +07:00
Sander Steffann 20886bdd51 Update juniper-vmx-vfp.gns3a 2019-03-08 23:50:55 +01:00
Sander Steffann 089148e451 Update juniper-vmx-vcp.gns3a 2019-03-08 23:39:59 +01:00
Jeremy Grossmann b858664985 Merge pull request #1444 from alfredmyers/patch-1
Fixed typos on README.rst
2018-11-05 21:23:30 +07:00
Alfred Myers 78fe929e0c Fixed typos on README.rst 2018-11-05 09:59:29 -02:00
grossmj 8e90d79399 Upgrade remote install script to use any ubuntu codename. Fixes #1393. 2018-08-28 17:41:06 +07:00
grossmj 78d0284247 Merge remote-tracking branch 'origin/master' 2018-08-28 17:27:18 +07:00
grossmj 57cb457b5d Use port 80 for key server. 2018-08-28 17:27:08 +07:00
Jeremy Grossmann 7a9625744c Merge pull request #1384 from BrentBaccala/pull-2
add appliance data for Cisco Nexus 9000v NX-OS 7.0(3)I7(3)
2018-08-11 12:55:19 +07:00
Brent Baccala 470133b096 add appliance data for Cisco Nexus 9000v NX-OS 7.0(3)I7(3) 2018-08-10 16:40:23 -04:00
Jeremy Grossmann a494f8257b Merge pull request #1368 from sbraz/typing
Require typing only for Python < 3.5
2018-07-13 11:34:30 +08:00
Louis Sautier 2a1b9e7232 Require typing only for Python < 3.5 2018-07-12 23:43:27 +02:00
Jeremy Grossmann 70cbc0260b Merge pull request #1347 from AlyssonOliveira/fix_requirements.txt_to_hold_prompt-toolkit_1.0.15
Hold prompt-toolkit==1.0.15 to fix https://github.com/GNS3/gns3-serve…
2018-06-06 18:57:02 +07:00
Alysson Oliveira c3c298cd63 Hold prompt-toolkit==1.0.15 to fix https://github.com/GNS3/gns3-server/issues/1346 2018-06-06 08:37:50 -03:00
Jeremy Grossmann a13c237495 Merge pull request #1316 from BrentBaccala/master
Update Cisco ASAv appliance to include version 9.9.1
2018-03-14 13:25:22 +07:00
Brent Baccala 54a93a5ccb update Cisco ASAv appliance to include version 9.9.1 2018-03-14 01:20:09 -04:00
102 changed files with 564 additions and 149 deletions

No files matched your search

+42
View File
@@ -1,5 +1,47 @@
# Change Log
## 2.2.0 30/09/2019
* Add debug message for what directory is checked for Qemu binaries. Ref #1655
* Release 2019.2.0-alpha.8
* Fix single quote is not closed. Fixes #1654
* Fix wrong Dynamips command used to rename an ATM switch. Fixes #1651
* Don't specify the PCI bus for AHCI device
* Add id value to all Qemu drives
## 2.2.0rc5 09/09/2019
* Fix AttributeError: Cannot set attribute '%s'. Fixes #1646
## 2.2.0rc4 30/08/2019
* Release 2019.2.0-alpha.7
* Check that vcpus value for GNS3 VM is an integer. Fixes #1636
* Make x,y optional for creating links via API. Fixes #1630
* Set default_name_format for some builtin nodes.
* Allow "none" for compute_id in templates.
## 2.2.0rc3 12/08/2019
* Revert to jsonschema 2.6.0 due to packaging problem.
## 2.2.0rc2 10/08/2019
* Bump jsonschema to version 3.0.2
* List Hyper-V VMs on non-english OSes. Fixes #1612
* Add missing default values in Cloud schema.
* Release 2019.2.0-alpha.5
* Fix redirection to web-ui bundled server
## 2.2.0b4 11/07/2019
* Requires a project to be opened to start/stop/suspend all nodes. Fixes #1609
* Fix issue when starting GNS3 VM for Hyper-V
* Set defaults for custom cloud nodes.
* Fix issue when trying to rename a Dynamips node that is already powered on. Fixes #2824
* Remove deprecated Qemu parameter to run legacy ASA VMs. Fixes #2827
* Add debug message when searching for an image. Ref https://github.com/GNS3/gns3-gui/issues/2828
## 2.2.0b3 15/06/2019
* Fix template migration issues from GUI to controller. Fixes https://github.com/GNS3/gns3-gui/issues/2803
+5 -5
View File
@@ -34,6 +34,7 @@ Linux
GNS3 is perhaps packaged for your distribution:
* Gentoo: https://packages.gentoo.org/package/net-misc/gns3-server
* Alpine: https://pkgs.alpinelinux.org/package/v3.10/community/x86_64/gns3-server
Linux (Debian based)
@@ -84,7 +85,7 @@ For development you can run the GNS3 server in a container
Run as daemon (Unix only)
**************************
You will found init sample script for various systems
You will find init sample scripts for various systems
inside the init directory.
Usefull options:
@@ -93,7 +94,7 @@ Usefull options:
* --log logfile: store output in a logfile
* --pid pidfile: store the pid of the running process in a file and prevent double execution
All the init script require the creation of a GNS3 user. You can change it to another user.
All init scripts require the creation of a GNS3 user. You can change it to another user.
.. code:: bash
@@ -164,9 +165,8 @@ Mac OS X
Please use our DMG package for a simple installation.
If you want to test the current git version or contribute to the project.
You can follow this instructions with virtualenwrapper: http://virtualenvwrapper.readthedocs.org/
If you want to test the current git version or contribute to the project,
you can follow these instructions with virtualenwrapper: http://virtualenvwrapper.readthedocs.org/
and homebrew: http://brew.sh/.
.. code:: bash
+14
View File
@@ -24,6 +24,13 @@
"kvm": "require"
},
"images": [
{
"filename": "vEOS-lab-4.22.0F.vmdk",
"version": "4.22.0F",
"md5sum": "cfcc75c2b8176cfd819afcfd6799b74c",
"filesize": 414121984,
"download_url": "https://www.arista.com/en/support/software-download"
},
{
"filename": "vEOS-lab-4.21.1.1F.vmdk",
"version": "4.21.1.1F",
@@ -159,6 +166,13 @@
}
],
"versions": [
{
"name": "4.22.0F",
"images": {
"hda_disk_image": "Aboot-veos-serial-8.0.0.iso",
"hdb_disk_image": "vEOS-lab-4.22.0F.vmdk"
}
},
{
"name": "4.21.1F",
"images": {
+14 -1
View File
@@ -25,10 +25,17 @@
"kvm": "require"
},
"images": [
{
"filename": "asav9-12-2.qcow2",
"version": "9.12.2",
"md5sum": "ad1f8ce94417a654949ecc53d280b29f",
"filesize": 197853184,
"download_url": "https://software.cisco.com/download/home/286119613/type/280775065/release/9.12.2"
},
{
"filename": "asav992.qcow2",
"version": "9.9.2",
"md5sum": "0cba453dbf70313d8d63a00700618f52",
"md5sum": "6fd1337c5334844484b371d1033c038a",
"filesize": 204865536,
"download_url": "https://software.cisco.com/download/home/286119613/type/280775065/release/9.9.2"
},
@@ -111,6 +118,12 @@
}
],
"versions": [
{
"name": "9.12.2",
"images": {
"hda_disk_image": "asav9-12-2.qcow2"
}
},
{
"name": "9.9.2",
"images": {
@@ -22,6 +22,13 @@
"kvm": "require"
},
"images": [
{
"filename": "csr1000v-universalk9.16.12.01a-serial.qcow2",
"version": "16.12.1a",
"md5sum": "015777ce5279263314b15e01af59877e",
"filesize": 983629824,
"download_url": "https://software.cisco.com/download/home/284364978/type/282046477/release/Gibraltar-16.12.1a"
},
{
"filename": "csr1000v-universalk9.16.10.01b-serial.qcow2",
"version": "16.10.1b",
@@ -50,6 +57,13 @@
"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.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"
},
{
"filename": "csr1000v-universalk9.16.06.02-serial.qcow2",
"version": "16.6.2",
@@ -115,6 +129,12 @@
}
],
"versions": [
{
"name": "16.12.1a",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.12.01a-serial.qcow2"
}
},
{
"name": "16.10.1b",
"images": {
@@ -139,6 +159,12 @@
"hda_disk_image": "csr1000v-universalk9.16.07.01-serial.qcow2"
}
},
{
"name": "16.6.6",
"images": {
"hda_disk_image": "csr1000v-universalk9.16.06.06-serial.qcow2"
}
},
{
"name": "16.6.2",
"images": {
+14
View File
@@ -31,6 +31,13 @@
"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"
},
{
"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/"
},
{
"filename": "vios-adventerprisek9-m.vmdk.SPA.156-2.T",
"version": "15.6(2)T",
@@ -54,6 +61,13 @@
}
],
"versions": [
{
"name": "15.7(3)M3",
"images": {
"hda_disk_image": "vios-adventerprisek9-m.vmdk.SPA.157-3.M3",
"hdb_disk_image": "IOSv_startup_config.img"
}
},
{
"name": "15.6(2)T",
"images": {
+15 -2
View File
@@ -23,6 +23,13 @@
"kvm": "require"
},
"images": [
{
"filename": "vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2",
"version": "15.2.1",
"md5sum": "14b981002e40b660f2d7400401e04c14",
"filesize": 44938752,
"download_url": "https://virl.mediuscorp.com/my-account/"
},
{
"filename": "vios_l2-adventerprisek9-m.03.2017.qcow2",
"version": "15.2(20170321:233949)",
@@ -32,13 +39,19 @@
},
{
"filename": "vios_l2-adventerprisek9-m.vmdk.SSA.152-4.0.55.E",
"version": "15.2.4055",
"version": "15.2(4.0.55)E",
"md5sum": "1a3a21f5697cae64bb930895b986d71e",
"filesize": 96862208,
"download_url": "https://virl.mediuscorp.com/my-account/"
}
],
"versions": [
{
"name": "15.2.1",
"images": {
"hda_disk_image": "vios_l2-adventerprisek9-m.SSA.high_iron_20180619.qcow2"
}
},
{
"name": "15.2(20170321:233949)",
"images": {
@@ -46,7 +59,7 @@
}
},
{
"name": "15.2.4055",
"name": "15.2(4.0.55)E",
"images": {
"hda_disk_image": "vios_l2-adventerprisek9-m.vmdk.SSA.152-4.0.55.E"
}
@@ -24,6 +24,27 @@
"options": "-smp 4 -cpu host"
},
"images": [
{
"filename": "xrv9k-fullk9-x-7.0.1.qcow2",
"version": "7.0.1",
"md5sum": "ca2817767fa546e303c3c536e211d33e",
"filesize": 1446445056,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/7.0.1"
},
{
"filename": "xrv9k-fullk9-x-6.6.2.qcow2",
"version": "6.6.2",
"md5sum": "fd630be3c449e625073286a3a66021ae",
"filesize": 1452998656,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.6.2"
},
{
"filename": "xrv9k-fullk9-x-6.5.3.qcow2",
"version": "6.5.3",
"md5sum": "71f018e3ea895b663129090fb4f0ff40",
"filesize": 1205075968,
"download_url": "https://software.cisco.com/download/home/286288939/type/280805694/release/6.5.3"
},
{
"filename": "xrv9k-fullk9-x-6.5.2.qcow2",
"version": "6.5.2",
@@ -74,6 +95,24 @@
}
],
"versions": [
{
"name": "7.0.1",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-7.0.1.qcow2"
}
},
{
"name": "6.6.2",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.6.2.qcow2"
}
},
{
"name": "6.5.3",
"images": {
"hda_disk_image": "xrv9k-fullk9-x-6.5.3.qcow2"
}
},
{
"name": "6.5.2",
"images": {
+28
View File
@@ -25,6 +25,13 @@
"kvm": "require"
},
"images": [
{
"filename": "nxosv.9.3.1.qcow2",
"version": "9.3.1",
"md5sum": "148fd38cb1ff78df2883f844e172fad9",
"filesize": 1435041792,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.3(1)?i=!pp"
},
{
"filename": "nxosv-final.9.2.3.qcow2",
"version": "9.2.3",
@@ -46,6 +53,13 @@
"filesize": 1330315264,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/9.2%25281%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.7.qcow2",
"version": "7.0.3.I7.7",
"md5sum": "5daab34b672f9534c9aee59a6c8903b3",
"filesize": 996212736,
"download_url": "https://software.cisco.com/download/home/286312239/type/282088129/release/7.0%25283%2529I7%25287%2529"
},
{
"filename": "nxosv-final.7.0.3.I7.6.qcow2",
"version": "7.0.3.I7.6",
@@ -120,6 +134,13 @@
}
],
"versions": [
{
"name": "9.3.1",
"images": {
"bios_image": "OVMF-20160813.fd",
"hda_disk_image": "nxosv.9.3.1.qcow2"
}
},
{
"name": "9.2.3",
"images": {
@@ -141,6 +162,13 @@
"hda_disk_image": "nxosv-final.9.2.1.qcow2"
}
},
{
"name": "7.0.3.I7.7",
"images": {
"bios_image": "OVMF-20160813.fd",
"hda_disk_image": "nxosv-final.7.0.3.I7.7.qcow2"
}
},
{
"name": "7.0.3.I7.6",
"images": {
+13 -13
View File
@@ -41,6 +41,13 @@
"md5sum": "92d3f9b13d750f7bfa804823fa545772",
"filesize": 383385600,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v30.1.1.4.qcow2"
},
{
"filename": "EXOS-VM_v22.7.1.2.qcow2",
"version": "22.7.1.2",
"md5sum": "a13e839b3fa05e8a5b0fb31f7e3dda86",
"filesize": 180420608,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v22.7.1.2.qcow2"
},
{
"filename": "EXOS-VM_v22.6.1.4.qcow2",
@@ -83,13 +90,6 @@
"md5sum": "77683060e75d81b776761f6829b15e9b",
"filesize": 179437568,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v22.1.1.5-disk1.qcow2"
},
{
"filename": "EXOS-VM_v21.1.1.4-disk1.qcow2",
"version": "21.1.1.4",
"md5sum": "654606809b6fd3bca400377483eb4a79",
"filesize": 117560832,
"direct_download_url": "https://akamai-ep.extremenetworks.com/Extreme_P/github-en/Virtual_EXOS/EXOS-VM_v21.1.1.4-disk1.qcow2"
}
],
@@ -109,6 +109,12 @@
}
},
{
"name": "22.7.1.2",
"images": {
"hda_disk_image": "EXOS-VM_v22.7.1.2.qcow2"
}
},
{
"name": "22.6.1.4",
"images": {
"hda_disk_image": "EXOS-VM_v22.6.1.4.qcow2"
@@ -143,12 +149,6 @@
"images": {
"hda_disk_image": "EXOS-VM_v22.1.1.5-disk1.qcow2"
}
},
{
"name": "21.1.1.4",
"images": {
"hda_disk_image": "EXOS-VM_v21.1.1.4-disk1.qcow2"
}
}
]
}
+14
View File
@@ -29,6 +29,13 @@
"options": "-smp 2 -cpu host"
},
"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-6.0.1.1.0.0.9.qcow2",
"version": "6.0.1.1",
@@ -95,6 +102,13 @@
}
],
"versions": [
{
"name": "7.0.0.0",
"images": {
"hda_disk_image": "BIG-IQ-7.0.0.0.0.1854.qcow2",
"hdb_disk_image": "empty100G.qcow2"
}
},
{
"name": "6.0.1.1",
"images": {
+1 -1
View File
@@ -15,7 +15,7 @@
"port_name_format": "Port{port1}",
"symbol": "fortinet.svg",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapter_type": "e1000",
"adapters": 4,
"ram": 1024,
"hda_disk_interface": "virtio",
@@ -15,7 +15,7 @@
"port_name_format": "Port{port1}",
"symbol": "fortinet.svg",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapter_type": "e1000",
"adapters": 4,
"ram": 1024,
"hda_disk_interface": "virtio",
+3 -3
View File
@@ -15,11 +15,11 @@
"port_name_format": "Port{port1}",
"symbol": "fortinet.svg",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapter_type": "e1000",
"adapters": 3,
"ram": 1024,
"hda_disk_interface": "ide",
"hdb_disk_interface": "ide",
"hda_disk_interface": "virtio",
"hdb_disk_interface": "virtio",
"arch": "x86_64",
"console_type": "telnet",
"boot_priority": "c",
+1 -1
View File
@@ -15,7 +15,7 @@
"port_name_format": "Port{port1}",
"symbol": "fortinet.svg",
"qemu": {
"adapter_type": "virtio-net-pci",
"adapter_type": "e1000",
"adapters": 10,
"ram": 1024,
"hda_disk_interface": "virtio",
+1 -1
View File
@@ -21,7 +21,7 @@
"console_type": "vnc",
"boot_priority": "c",
"kvm": "require",
"options": "-machine type=pc-1.0"
"options": "-cpu qemu64"
},
"images": [
{
+36 -14
View File
@@ -10,31 +10,33 @@
"status": "stable",
"maintainer": "GNS3 Team",
"maintainer_email": "developers@gns3.net",
"usage": "Default password is toor",
"usage": "Default password is toor\nEnable persistence by selecting boot option 'Live USB Persistence'",
"port_name_format": "eth{0}",
"qemu": {
"adapter_type": "e1000",
"adapters": 8,
"ram": 1024,
"arch": "x86_64",
"console_type": "vnc",
"boot_priority": "d",
"kvm": "require"
},
"images": [
{
"filename": "kali-linux-mate-2019.2-amd64.iso",
"version": "2019.2 (MATE)",
"md5sum": "fec8dd7009f932c51a74323df965a709",
"filesize": 3313217536,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.1a/kali-linux-mate-2019.2-amd64.iso"
},
{
"filename": "kali-linux-2019.2-amd64.iso",
"version": "2019.2",
"md5sum": "0f89b6225d7ea9c18682f7cc541c1179",
"filesize": 3353227264,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.1a/kali-linux-2019.2-amd64.iso"
"direct_download_url": "http://cdimage.kali.org/kali-2019.2/kali-linux-2019.2-amd64.iso"
},
{
"filename": "kali-linux-mate-2019.2-amd64.iso",
"version": "2019.2 (MATE)",
"md5sum": "fec8dd7009f932c51a74323df965a709",
"filesize": 3313217536,
"download_url": "https://www.kali.org/downloads/",
"direct_download_url": "http://cdimage.kali.org/kali-2019.2/kali-linux-mate-2019.2-amd64.iso"
},
{
"filename": "kali-linux-2019.1a-amd64.iso",
@@ -115,78 +117,98 @@
"filesize": 3320512512,
"download_url": "https://www.offensive-security.com/kali-linux-vmware-arm-image-download/",
"direct_download_url": "http://images.kali.org/Kali-Linux-2.0.0-vm-amd64.7z"
},
{
"filename": "kali-linux-persistence-1gb.qcow2",
"version": "1.0",
"md5sum": "14e9c92f3ba5a0bd1128c1ea26a129ea",
"filesize": 34734080,
"download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Qemu%20Appliances/kali-linux-persistence-1gb.qcow2/download"
}
],
"versions": [
{
"name": "2019.2 (MATE)",
"name": "2019.2",
"images": {
"cdrom_image": "kali-linux-mate-2019.2-amd64.iso"
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2019.2-amd64.iso"
}
},
{
"name": "2019.2",
"name": "2019.2 (MATE)",
"images": {
"cdrom_image": "kali-linux-2019.2-amd64.iso"
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-mate-2019.2-amd64.iso"
}
},
{
"name": "2019.1a",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2019.1a-amd64.iso"
}
},
{
"name": "2018.4",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.4-amd64.iso"
}
},
{
"name": "2018.3a",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.3a-amd64.iso"
}
},
{
"name": "2018.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2018.1-amd64.iso"
}
},
{
"name": "2017.3",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.3-amd64.iso"
}
},
{
"name": "2017.2",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.2-amd64.iso"
}
},
{
"name": "2017.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2017.1-amd64.iso"
}
},
{
"name": "2016.2",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2016.2-amd64.iso"
}
},
{
"name": "2016.1",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2016.1-amd64.iso"
}
},
{
"name": "2.0",
"images": {
"hda_disk_image": "kali-linux-persistence-1gb.qcow2",
"cdrom_image": "kali-linux-2.0-amd64.iso"
}
}
+50 -2
View File
@@ -26,13 +26,49 @@
"options": "-nographic"
},
"images": [
{
"filename": "chr-6.45.6.img",
"version": "6.45",
"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",
"md5sum": "19aa21073c8ea4540daacde69bacda24",
"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",
"compression": "zip"
},
{
"filename": "chr-6.42.12.img",
"version": "6.42",
"md5sum": "8485c606eb38e629fb1f5356d31bbc86",
"filesize": 45537201,
"download_url": "http://www.mikrotik.com/download",
"direct_download_url": "https://download2.mikrotik.com/routeros/6.42.12/chr-6.42.12.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",
"compression": "zip"
},
{
"filename": "chr-6.44.3.img",
"version": "6.44.2",
"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.2/chr-6.44.2.img.zip",
"direct_download_url": "https://download.mikrotik.com/routeros/6.44.3/chr-6.44.3.img.zip",
"compression": "zip"
},
{
@@ -109,6 +145,18 @@
}
],
"versions": [
{
"name": "6.45.6",
"images": {
"hda_disk_image": "chr-6.45.6.img"
}
},
{
"name": "6.44.5",
"images": {
"hda_disk_image": "chr-6.44.5.img"
}
},
{
"name": "6.44.3",
"images": {
+32 -18
View File
@@ -26,45 +26,59 @@
},
"images": [
{
"filename": "Ubuntu_17.04-VM-64bit.vmdk",
"version": "17.04",
"md5sum": "5c82d69c49ba08179e9a94901f67da1f",
"filesize": 4792123392,
"filename": "Ubuntu 19.04 (64bit).vmdk",
"version": "19.04",
"md5sum": "21535675c54507e9325bf8774a7bd73e",
"filesize": 5558435840,
"download_url": "http://www.osboxes.org/ubuntu/"
},
{
"filename": "Ubuntu_16.10_Yakkety-VM-64bit.vmdk",
"version": "16.10",
"md5sum": "c835f24dbb86f5f61c78d992ed38b6b1",
"filesize": 9133293568,
"filename": "Ubuntu 18.10 Cosmic (64Bit).vmdk",
"version": "18.10",
"md5sum": "7f72be569356baa20863cd354d2efa60",
"filesize": 6747389952,
"download_url": "http://www.osboxes.org/ubuntu/"
},
{
"filename": "Ubuntu_16.04.3-VM-64bit.vmdk",
"version": "16.04",
"md5sum": "45bccf63f2777e492f022dbf025f67d0",
"filesize": 4302110720,
"filename": "Ubuntu 18.04.2 (64bit).vmdk",
"version": "18.04.2",
"md5sum": "d57b732d90759e3b3a62594a83f8f196",
"filesize": 6003097600,
"download_url": "http://www.osboxes.org/ubuntu/"
},
{
"filename": "Ubuntu 16.04.6 (64bit).vmdk",
"version": "16.04.6",
"md5sum": "33b2964cef607c1c9fe748db8a2fa6ea",
"filesize": 4780982272,
"download_url": "http://www.osboxes.org/ubuntu/"
}
],
"versions": [
{
"name": "17.04",
"name": "19.04",
"images": {
"hda_disk_image": "Ubuntu_17.04-VM-64bit.vmdk"
"hda_disk_image": "Ubuntu 19.04 (64bit).vmdk"
}
},
{
"name": "16.10",
"name": "18.10",
"images": {
"hda_disk_image": "Ubuntu_16.10_Yakkety-VM-64bit.vmdk"
"hda_disk_image": "Ubuntu 18.10 Cosmic (64Bit).vmdk"
}
},
{
"name": "16.04",
"name": "18.04.2",
"images": {
"hda_disk_image": "Ubuntu_16.04.3-VM-64bit.vmdk"
"hda_disk_image": "Ubuntu 18.04.2 (64bit).vmdk"
}
},
{
"name": "16.04.6",
"images": {
"hda_disk_image": "Ubuntu 16.04.6 (64bit).vmdk"
}
}
]
}
+6 -2
View File
@@ -492,15 +492,17 @@ class BaseManager:
# Windows path should not be send to a unix server
if not sys.platform.startswith("win"):
if re.match(r"^[A-Z]:", path) is not None:
raise NodeError("{} is not allowed on this remote server. Please use only a filename in {}.".format(path, img_directory))
raise NodeError("{} is not allowed on this remote server. Please only use a file from '{}'".format(path, img_directory))
if not os.path.isabs(path):
for directory in valid_directory_prefices:
log.debug("Searching for image '{}' in '{}'".format(orig_path, directory))
path = self._recursive_search_file_in_directory(directory, orig_path)
if path:
return force_unix_path(path)
# Not found we try the default directory
log.debug("Searching for image '{}' in default directory".format(orig_path))
s = os.path.split(orig_path)
path = force_unix_path(os.path.join(img_directory, *s))
if os.path.exists(path):
@@ -509,6 +511,7 @@ class BaseManager:
# For local server we allow using absolute path outside image directory
if server_config.getboolean("local", False) is True:
log.debug("Searching for '{}'".format(orig_path))
path = force_unix_path(path)
if os.path.exists(path):
return path
@@ -517,11 +520,12 @@ class BaseManager:
# Check to see if path is an absolute path to a valid directory
path = force_unix_path(path)
for directory in valid_directory_prefices:
log.debug("Searching for image '{}' in '{}'".format(orig_path, directory))
if os.path.commonprefix([directory, path]) == directory:
if os.path.exists(path):
return path
raise ImageMissingError(orig_path)
raise NodeError("{} is not allowed on this remote server. Please use only a filename in {}.".format(path, img_directory))
raise NodeError("{} is not allowed on this remote server. Please only use a file from '{}'".format(path, img_directory))
def _recursive_search_file_in_directory(self, directory, searched_file):
"""
@@ -81,7 +81,7 @@ class ATMSwitch(Device):
:param new_name: New name for this switch
"""
await self._hypervisor.send('atm rename "{name}" "{new_name}"'.format(name=self._name, new_name=new_name))
await self._hypervisor.send('atmsw rename "{name}" "{new_name}"'.format(name=self._name, new_name=new_name))
log.info('ATM switch "{name}" [{id}]: renamed to "{new_name}"'.format(name=self._name,
id=self._id,
new_name=new_name))
+2 -1
View File
@@ -1525,6 +1525,8 @@ class Router(BaseNode):
:param new_name: new name string
"""
await self._hypervisor.send('vm rename "{name}" "{new_name}"'.format(name=self._name, new_name=new_name))
# change the hostname in the startup-config
if os.path.isfile(self.startup_config_path):
try:
@@ -1547,7 +1549,6 @@ class Router(BaseNode):
except OSError as e:
raise DynamipsError("Could not amend the configuration {}: {}".format(self.private_config_path, e))
await self._hypervisor.send('vm rename "{name}" "{new_name}"'.format(name=self._name, new_name=new_name))
log.info('Router "{name}" [{id}]: renamed to "{new_name}"'.format(name=self._name, id=self._id, new_name=new_name))
self._name = new_name
+1
View File
@@ -144,6 +144,7 @@ class Qemu(BaseManager):
qemus = []
for path in Qemu.paths_list():
log.debug("Searching for Qemu binaries in '{}'".format(path))
try:
for f in os.listdir(path):
if f.endswith("-spice"):
+5 -4
View File
@@ -1640,11 +1640,12 @@ class QemuVM(BaseNode):
if interface == "sata":
# special case, sata controller doesn't exist in Qemu
options.extend(["-device", 'ahci,id=ahci{},bus=pci.{}'.format(disk_index, disk_index)])
options.extend(["-drive", 'file={},if=none,id=drive-sata-disk{},index={},media=disk'.format(disk, disk_index, disk_index)])
options.extend(["-device", 'ide-drive,drive=drive-sata-disk{},bus=ahci{}.0,id=drive-sata-disk{}'.format(disk_index, disk_index, disk_index)])
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)])
else:
options.extend(["-drive", 'file={},if={},index={},media=disk'.format(disk, interface, disk_index)])
options.extend(["-drive", 'file={},if={},index={},media=disk,id=drive{}'.format(disk, interface, disk_index, disk_index)])
return options
@@ -182,8 +182,8 @@ class HyperVGNS3VM(BaseGNS3VM):
vms = []
try:
for vm in self._conn.Msvm_ComputerSystem():
if vm.Caption == "Virtual Machine":
for vm in self._conn.Msvm_VirtualSystemSettingData():
if vm.VirtualSystemType == "Microsoft:Hyper-V:System:Realized":
vms.append({"vmname": vm.ElementName})
except wmi.x_wmi as e:
raise GNS3VMError("Could not list Hyper-V VMs: {}".format(e))
@@ -248,7 +248,10 @@ class HyperVGNS3VM(BaseGNS3VM):
vnics = self._get_vm_resources(self._vm, 'Msvm_SyntheticEthernetPortSettingData')
while True:
for port in ports:
vnic = [v for v in vnics if port.Parent == v.path_()][0]
try:
vnic = [v for v in vnics if port.Parent == v.path_()][0]
except IndexError:
continue
config = vnic.associators(wmi_result_class='Msvm_GuestNetworkAdapterConfiguration')
ip_addresses = config[0].IPAddresses
for ip_address in ip_addresses:
@@ -70,6 +70,8 @@ class VMwareGNS3VM(BaseGNS3VM):
raise GNS3VMError("Allocated memory {} for the GNS3 VM must be a multiple of 4".format(ram))
available_vcpus = psutil.cpu_count(logical=True)
if not float(vcpus).is_integer():
raise GNS3VMError("The allocated vCPUs value is not an integer: {}".format(vcpus))
if vcpus > available_vcpus:
raise GNS3VMError("You have allocated too many vCPUs for the GNS3 VM! (max available is {} vCPUs)".format(available_vcpus))
+1 -4
View File
@@ -248,11 +248,8 @@ class Link:
if label is None:
label = {
"x": -10,
"y": -10,
"rotation": 0,
"text": html.escape("{}/{}".format(adapter_number, port_number)),
"style": "font-size: 10; font-style: Verdana"
"style": "font-family: TypeWriter;font-size: 10.0;font-weight: bold;fill: #000000;fill-opacity: 1.0;"
}
self._nodes.append({
+5 -4
View File
@@ -100,7 +100,7 @@ class Node:
try:
setattr(self, prop, kwargs[prop])
except AttributeError as e:
log.critical("Cannot set attribute '%s'".format(prop))
log.critical("Cannot set attribute '{}'".format(prop))
raise e
else:
if prop not in self.CONTROLLER_ONLY_PROPERTIES and kwargs[prop] is not None and kwargs[prop] != "":
@@ -388,7 +388,6 @@ class Node:
# When updating properties used only on controller we don't need to call the compute
update_compute = False
old_json = self.__json__()
compute_properties = None
@@ -402,6 +401,8 @@ class Node:
if prop == "properties":
compute_properties = kwargs[prop]
else:
if prop == "name" and self.node_type == "dynamips" and self.status == "started":
raise aiohttp.web.HTTPConflict(text="Sorry, it is not possible rename of a Dynamips node that is already powered on")
setattr(self, prop, kwargs[prop])
if compute_properties and "custom_adapters" in compute_properties:
@@ -649,14 +650,14 @@ class Node:
elif self._node_type in ("ethernet_switch", "ethernet_hub"):
# Basic node we don't want to have adapter number
port_number = 0
for port in self._properties["ports_mapping"]:
for port in self._properties.get("ports_mapping", []):
self._ports.append(PortFactory(port["name"], 0, 0, port_number, "ethernet", short_name="e{}".format(port_number)))
port_number += 1
elif self._node_type in ("vpcs", "traceng"):
self._ports.append(PortFactory("Ethernet0", 0, 0, 0, "ethernet", short_name="e0"))
elif self._node_type in ("cloud", "nat"):
port_number = 0
for port in self._properties["ports_mapping"]:
for port in self._properties.get("ports_mapping", []):
self._ports.append(PortFactory(port["name"], 0, 0, port_number, "ethernet", short_name=port["name"]))
port_number += 1
else:
+9 -1
View File
@@ -503,7 +503,11 @@ class Project:
template["x"] = x
template["y"] = y
node_type = template.pop("template_type")
compute = self.controller.get_compute(template.pop("compute_id", compute_id))
if template["builtin"] is True:
# compute_id is selected by clients for builtin templates
compute = self.controller.get_compute(compute_id)
else:
compute = self.controller.get_compute(template.pop("compute_id", compute_id))
name = template.pop("name")
default_name_format = template.pop("default_name_format", "{name}-{0}")
name = default_name_format.replace("{name}", name)
@@ -1032,6 +1036,7 @@ class Project:
except OSError as e:
raise aiohttp.web.HTTPInternalServerError(text="Could not write topology: {}".format(e))
@open_required
async def start_all(self):
"""
Start all nodes
@@ -1041,6 +1046,7 @@ class Project:
pool.append(node.start)
await pool.join()
@open_required
async def stop_all(self):
"""
Stop all nodes
@@ -1050,6 +1056,7 @@ class Project:
pool.append(node.stop)
await pool.join()
@open_required
async def suspend_all(self):
"""
Suspend all nodes
@@ -1059,6 +1066,7 @@ class Project:
pool.append(node.suspend)
await pool.join()
@open_required
async def duplicate_node(self, node, x, y, z):
"""
Duplicate a node
+5 -1
View File
@@ -203,7 +203,11 @@ class Template:
settings.update({"template_id": self._id,
"builtin": self.builtin})
if not self.builtin:
if self.builtin:
# builin templates have compute_id set to None to tell clients
# to select a compute
settings["compute_id"] = None
else:
settings["compute_id"] = self.compute_id
return settings
+7 -7
View File
@@ -60,13 +60,13 @@ class TemplateManager:
# Add builtins
builtins = []
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "cloud"), {"template_type": "cloud", "name": "Cloud", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "nat"), {"template_type": "nat", "name": "NAT", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "vpcs"), {"template_type": "vpcs", "name": "VPCS", "default_name_format": "PC-{0}", "category": 2, "symbol": ":/symbols/vpcs_guest.svg", "properties": {"base_script_file": "vpcs_base_config.txt"}}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_switch"), {"template_type": "ethernet_switch", "console_type": "none", "name": "Ethernet switch", "category": 1, "symbol": ":/symbols/ethernet_switch.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_hub"), {"template_type": "ethernet_hub", "name": "Ethernet hub", "category": 1, "symbol": ":/symbols/hub.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "frame_relay_switch"), {"template_type": "frame_relay_switch", "name": "Frame Relay switch", "category": 1, "symbol": ":/symbols/frame_relay_switch.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "atm_switch"), {"template_type": "atm_switch", "name": "ATM switch", "category": 1, "symbol": ":/symbols/atm_switch.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "cloud"), {"template_type": "cloud", "name": "Cloud", "default_name_format": "Cloud{0}", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "nat"), {"template_type": "nat", "name": "NAT", "default_name_format": "NAT{0}", "category": 2, "symbol": ":/symbols/cloud.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "vpcs"), {"template_type": "vpcs", "name": "VPCS", "default_name_format": "PC{0}", "category": 2, "symbol": ":/symbols/vpcs_guest.svg", "properties": {"base_script_file": "vpcs_base_config.txt"}}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_switch"), {"template_type": "ethernet_switch", "console_type": "none", "name": "Ethernet switch", "default_name_format": "Switch{0}", "category": 1, "symbol": ":/symbols/ethernet_switch.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "ethernet_hub"), {"template_type": "ethernet_hub", "name": "Ethernet hub", "default_name_format": "Hub{0}", "category": 1, "symbol": ":/symbols/hub.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "frame_relay_switch"), {"template_type": "frame_relay_switch", "name": "Frame Relay switch", "default_name_format": "FRSW{0}", "category": 1, "symbol": ":/symbols/frame_relay_switch.svg"}, builtin=True))
builtins.append(Template(uuid.uuid3(uuid.NAMESPACE_DNS, "atm_switch"), {"template_type": "atm_switch", "name": "ATM switch", "default_name_format": "ATMSW{0}", "category": 1, "symbol": ":/symbols/atm_switch.svg"}, builtin=True))
#FIXME: disable TraceNG
#if sys.platform.startswith("win"):
+1 -1
View File
@@ -58,7 +58,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://52dee6fc5b2a4a61880328386919e2f4:c84e7bbd39ce43b7aec27349e49fedf0@sentry.io/38482"
DSN = "https://7f7ec6fa8e1344ff9cfe0757efb00eb2:1e0a0b09cdcf4d169b937b7a40dc620c@sentry.io/38482"
if hasattr(sys, "frozen"):
cacert = get_resource("cacert.pem")
if cacert is not None and os.path.isfile(cacert):
+10 -5
View File
@@ -23,27 +23,32 @@ from .port import PORT_OBJECT_SCHEMA
CLOUD_TEMPLATE_PROPERTIES = {
"ports_mapping": {
"type": "array",
"items": [PORT_OBJECT_SCHEMA]
"items": [PORT_OBJECT_SCHEMA],
"default": []
},
"remote_console_host": {
"description": "Remote console host or IP",
"type": ["string"],
"minLength": 1
"minLength": 1,
"default": "127.0.0.1"
},
"remote_console_port": {
"description": "Console TCP port",
"minimum": 1,
"maximum": 65535,
"type": "integer"
"type": "integer",
"default": 23
},
"remote_console_type": {
"description": "Console type",
"enum": ["telnet", "vnc", "spice", "http", "https", "none"]
"enum": ["telnet", "vnc", "spice", "http", "https", "none"],
"default": "none"
},
"remote_console_http_path": {
"description": "Path of the remote web interface",
"type": "string",
"minLength": 1
"minLength": 1,
"default": "/"
},
}
+1 -3
View File
@@ -39,9 +39,7 @@ LABEL_OBJECT_SCHEMA = {
},
},
"required": [
"text",
"x",
"y"
"text"
],
"additionalProperties": False
}
+1 -1
View File
@@ -37,7 +37,7 @@ BASE_TEMPLATE_PROPERTIES = {
},
"compute_id": {
"description": "Compute identifier",
"type": "string"
"type": ["null", "string"]
},
"default_name_format": {
"description": "Default name format",
+75 -1
View File
@@ -1,3 +1,28 @@
@angular-devkit/build-angular
MIT
The MIT License
Copyright (c) 2017 Google, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@angular/animations
MIT
@@ -210,9 +235,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
core-js
MIT
Copyright (c) 2014-2019 Denis Pushkarev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
css-tree
MIT
Copyright (C) 2016 by Roman Dvornov
Copyright (C) 2016-2019 by Roman Dvornov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -2210,6 +2258,32 @@ Apache-2.0
save-svg-as-png
MIT
The MIT License (MIT)
Copyright (c) 2014 Eric Shull
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
source-map
BSD-3-Clause
+19
View File
@@ -0,0 +1,19 @@
GNS3 WebUI is web implementation of user interface for GNS3 software.
Current version: 2019.2.0
What's New
- Editing interface labels on double click
- Support for keyboard shortcuts
- Menu extended with option to delete currently opened project, export & import project
- Possibility to save current state of project
- Ability to duplicate project from projects page
- Node information dialog available from context menu
- Topology summary widget on map view
- Improvements in dialog styles
Bug Fixes
- Removing issues with opening console
- Context menu now is correctly placed
- Text validation in dialogs
- Removing errors with creating WebSockets
+3 -2
View File
@@ -5,6 +5,7 @@
<title>GNS3 Web UI</title>
<!-- It's important to have base here because of the script below //-->
<base href="/static/web-ui/">
<script>
var userAgent = navigator.userAgent.toLowerCase();
@@ -32,9 +33,9 @@
}
})();
</script>
<link rel="stylesheet" href="styles.7a07d35efbc0270fb065.css"></head>
<link rel="stylesheet" href="styles.24cf27dc9bb6109b497a.css"></head>
<!-- <body class="mat-app-background" oncontextmenu="return false;"> -->
<body class="mat-app-background" oncontextmenu="return false;">
<app-root></app-root>
<script type="text/javascript" src="runtime.26209474bfa8dc87a77c.js"></script><script type="text/javascript" src="polyfills.9cf8d114d9c6322da643.js"></script><script type="text/javascript" src="main.d7e59714b81de1a1004d.js"></script></body>
<script src="runtime.465c2333d355155ec5f3.js"></script><script src="polyfills-es5.ad0cd9ec34ac503f8b75.js" nomodule></script><script src="polyfills.ca9df831504175955169.js"></script><script src="main.9b1bd2eea6a0063aafe5.js"></script></body>
</html>
@@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+/L5":function(n,e,t){var l=t("t1UP").isCustomProperty,o=t("vd7W").TYPE,i=t("vd7W").CHARCODE,r=t("4njK").mode,a=o.Ident,u=o.Hash,s=o.Colon,d=o.Semicolon,c=o.Delim,p=i.ExclamationMark,f=i.Solidus,h=i.Asterisk,m=i.Ampersand,v=i.DollarSign,g=i.PlusSign,b=i.NumberSign;function _(n){return this.Raw(n,r.exclamationMarkOrSemicolon,!0)}function y(n){return this.Raw(n,r.exclamationMarkOrSemicolon,!1)}function C(){var n=this.scanner.tokenIndex,e=this.Value();return"Raw"!==e.type&&!1===this.scanner.eof&&this.scanner.tokenType!==d&&!1===this.scanner.isDelim(p)&&!1===this.scanner.isBalanceEdge(n)&&this.error(),e}n.exports={name:"Declaration",structure:{important:[Boolean,String],property:String,value:["Value","Raw"]},parse:function(){var n,e=this.scanner.tokenStart,t=this.scanner.tokenIndex,o=(function(){var n=this.scanner.tokenStart;if(this.scanner.tokenType===c)switch(this.scanner.source.charCodeAt(this.scanner.tokenStart)){case h:case v:case g:case b:case m:this.scanner.next();break;case f:this.scanner.next(),this.scanner.isDelim(f)&&this.scanner.next()}return this.eat(this.scanner.tokenType===u?u:a),this.scanner.substrToCursor(n)}).call(this),i=l(o),r=i?this.parseCustomProperty:this.parseValue,w=i?y:_,x=!1;return this.scanner.skipSC(),this.eat(s),i||this.scanner.skipSC(),n=r?this.parseWithFallback(C,w):w.call(this,this.scanner.tokenIndex),this.scanner.isDelim(p)&&(x=(function(){this.eat(c),this.scanner.skipSC();var n=this.consume(a);return"important"===n||n}).call(this),this.scanner.skipSC()),!1===this.scanner.eof&&this.scanner.tokenType!==d&&!1===this.scanner.isBalanceEdge(t)&&this.error(),{type:"Declaration",loc:this.getLocation(e,this.scanner.tokenStart),important:x,property:o,value:n}},generate:function(n){this.chunk(n.property),this.chunk(":"),this.node(n.value),n.important&&this.chunk(!0===n.important?"!important":"!"+n.important)},walkContext:"declaration"}},"+Kd2":function(n,e,t){var l=t("vd7W").TYPE,o=t("4njK").mode,i=l.Comma;n.exports=function(){var n=this.createList();return this.scanner.skipSC(),n.push(this.Identifier()),this.scanner.skipSC(),this.scanner.tokenType===i&&(n.push(this.Operator()),n.push(this.parseCustomProperty?this.Value(null):this.Raw(this.scanner.tokenIndex,o.exclamationMarkOrSemicolon,!1))),n}},"+gEr":function(n,e,t){"use strict";t.d(e,"a",function(){return r}),t.d(e,"b",function(){return a});var l=t("mrSG"),o=t("MGBS"),i=t("zotm"),r={leading:!0,trailing:!1};function a(n,e){return void 0===e&&(e=r),function(t){return t.lift(new u(n,e.leading,e.trailing))}}var u=function(){function n(n,e,t){this.durationSelector=n,this.leading=e,this.trailing=t}return n.prototype.call=function(n,e){return e.subscribe(new s(n,this.durationSelector,this.leading,this.trailing))},n}(),s=function(n){function e(e,t,l,o){var i=n.call(this,e)||this;return i.destination=e,i.durationSelector=t,i._leading=l,i._trailing=o,i._hasValue=!1,i}return l.__extends(e,n),e.prototype._next=function(n){this._hasValue=!0,this._sendValue=n,this._throttled||(this._leading?this.send():this.throttle(n))},e.prototype.send=function(){var n=this._sendValue;this._hasValue&&(this.destination.next(n),this.throttle(n)),this._hasValue=!1,this._sendValue=null},e.prototype.throttle=function(n){var e=this.tryDurationSelector(n);e&&this.add(this._throttled=Object(i.a)(this,e))},e.prototype.tryDurationSelector=function(n){try{return this.durationSelector(n)}catch(e){return this.destination.error(e),null}},e.prototype.throttlingDone=function(){var n=this._throttled,e=this._trailing;n&&n.unsubscribe(),this._throttled=null,e&&this.send()},e.prototype.notifyNext=function(n,e,t,l,o){this.throttlingDone()},e.prototype.notifyComplete=function(){this.throttlingDone()},e}(o.a)},"+ryv":function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var l=t("CcnG");e.HotkeyOptions=new l.InjectionToken("HotkeyOptions")},"+tJ4":function(n,e,t){"use strict";t.d(e,"a",function(){return l});var l=function(n){return function(e){for(var t=0,l=n.length;t<l&&!e.closed;t++)e.next(n[t]);e.complete()}}},"+umK":function(n,e,t){"use strict";function l(){}t.d(e,"a",function(){return l})},"/+5V":function(n,e){function t(n){function e(n){return null!==n&&("Type"===n.type||"Property"===n.type||"Keyword"===n.type)}var t=null;return null!==this.matched&&function l(o){if(Array.isArray(o.match)){for(var i=0;i<o.match.length;i++)if(l(o.match[i]))return e(o.syntax)&&t.unshift(o.syntax),!0}else if(o.node===n)return t=e(o.syntax)?[o.syntax]:[],!0;return!1}(this.matched),t}function l(n,e,l){var o=t.call(n,e);return null!==o&&o.some(l)}n.exports={getTrace:t,isType:function(n,e){return l(this,n,function(n){return"Type"===n.type&&n.name===e})},isProperty:function(n,e){return l(this,n,function(n){return"Property"===n.type&&n.name===e})},isKeyword:function(n){return l(this,n,function(n){return"Keyword"===n.type})}}},"/21U":function(n,e,t){"use strict";t.d(e,"a",function(){return o});var l=t("isby");function o(n){rLine truncated
@@ -1 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+/L5":function(n,e,t){var l=t("t1UP").isCustomProperty,o=t("vd7W").TYPE,r=o.Identifier,i=o.Colon,a=o.ExclamationMark,u=o.Solidus,s=o.Asterisk,d=o.DollarSign,c=o.HyphenMinus,p=o.Semicolon,f=o.PlusSign,h=o.NumberSign;function m(n){return this.Raw(n,a,p,!1,!0)}function v(n){return this.Raw(n,a,p,!1,!1)}function g(){var n=this.scanner.currentToken,e=this.Value();return"Raw"!==e.type&&!1===this.scanner.eof&&this.scanner.tokenType!==p&&this.scanner.tokenType!==a&&!1===this.scanner.isBalanceEdge(n)&&this.scanner.error(),e}n.exports={name:"Declaration",structure:{important:[Boolean,String],property:String,value:["Value","Raw"]},parse:function(){var n,e=this.scanner.tokenStart,t=this.scanner.currentToken,o=(function(){var n=this.scanner.tokenStart,e=0;switch(this.scanner.tokenType){case s:case d:case f:case h:e=1;break;case u:e=this.scanner.lookupType(1)===u?2:1}return this.scanner.lookupType(e)===c&&e++,e&&this.scanner.skip(e),this.scanner.eat(r),this.scanner.substrToCursor(n)}).call(this),b=l(o),y=b?this.parseCustomProperty:this.parseValue,_=b?v:m,w=!1;return this.scanner.skipSC(),this.scanner.eat(i),b||this.scanner.skipSC(),n=y?this.parseWithFallback(g,_):_.call(this,this.scanner.currentToken),this.scanner.tokenType===a&&(w=function(n){n.eat(a),n.skipSC();var e=n.consume(r);return"important"===e||e}(this.scanner),this.scanner.skipSC()),!1===this.scanner.eof&&this.scanner.tokenType!==p&&!1===this.scanner.isBalanceEdge(t)&&this.scanner.error(),{type:"Declaration",loc:this.getLocation(e,this.scanner.tokenStart),important:w,property:o,value:n}},generate:function(n){this.chunk(n.property),this.chunk(":"),this.node(n.value),n.important&&this.chunk(!0===n.important?"!important":"!"+n.important)},walkContext:"declaration"}},"+Kd2":function(n,e,t){var l=t("vd7W").TYPE,o=l.Identifier,r=l.Comma,i=l.Semicolon,a=l.HyphenMinus,u=l.ExclamationMark;n.exports=function(){var n=this.createList();this.scanner.skipSC();var e=this.scanner.tokenStart;return this.scanner.eat(a),this.scanner.source.charCodeAt(this.scanner.tokenStart)!==a&&this.scanner.error("HyphenMinus is expected"),this.scanner.eat(o),n.push({type:"Identifier",loc:this.getLocation(e,this.scanner.tokenStart),name:this.scanner.substrToCursor(e)}),this.scanner.skipSC(),this.scanner.tokenType===r&&(n.push(this.Operator()),n.push(this.parseCustomProperty?this.Value(null):this.Raw(this.scanner.currentToken,u,i,!1,!1))),n}},"+gEr":function(n,e,t){"use strict";t.d(e,"a",function(){return i}),t.d(e,"b",function(){return a});var l=t("mrSG"),o=t("MGBS"),r=t("zotm"),i={leading:!0,trailing:!1};function a(n,e){return void 0===e&&(e=i),function(t){return t.lift(new u(n,e.leading,e.trailing))}}var u=function(){function n(n,e,t){this.durationSelector=n,this.leading=e,this.trailing=t}return n.prototype.call=function(n,e){return e.subscribe(new s(n,this.durationSelector,this.leading,this.trailing))},n}(),s=function(n){function e(e,t,l,o){var r=n.call(this,e)||this;return r.destination=e,r.durationSelector=t,r._leading=l,r._trailing=o,r._hasValue=!1,r}return l.__extends(e,n),e.prototype._next=function(n){this._hasValue=!0,this._sendValue=n,this._throttled||(this._leading?this.send():this.throttle(n))},e.prototype.send=function(){var n=this._sendValue;this._hasValue&&(this.destination.next(n),this.throttle(n)),this._hasValue=!1,this._sendValue=null},e.prototype.throttle=function(n){var e=this.tryDurationSelector(n);e&&this.add(this._throttled=Object(r.a)(this,e))},e.prototype.tryDurationSelector=function(n){try{return this.durationSelector(n)}catch(e){return this.destination.error(e),null}},e.prototype.throttlingDone=function(){var n=this._throttled,e=this._trailing;n&&n.unsubscribe(),this._throttled=null,e&&this.send()},e.prototype.notifyNext=function(n,e,t,l,o){this.throttlingDone()},e.prototype.notifyComplete=function(){this.throttlingDone()},e}(o.a)},"+ryv":function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var l=t("CcnG");e.HotkeyOptions=new l.InjectionToken("HotkeyOptions")},"+tJ4":function(n,e,t){"use strict";t.d(e,"a",function(){return l});var l=function(n){return function(e){for(var t=0,l=n.length;t<l&&!e.closed;t++)e.next(n[t]);e.complete()}}},"+umK":function(n,e,t){"use strict";function l(){}t.d(e,"a",function(){return l})},"/+5V":function(n,e){function t(n){function e(n){return null!==n&&("Type"===n.type||"Property"===n.type||"Keyword"===n.type)}var t=null;return null!==this.matched&&function l(o){if(Array.isArray(o.match)){for(var r=0;r<o.match.length;r++)if(l(o.match[r]))return e(o.syntax)&&t.unshift(o.syntax),!0}else if(o.node===n)return t=e(o.syntax)?[o.syntax]:[],!0;return!1}(this.matched),t}function l(n,e,l){var o=t.call(n,e);return null!==o&&o.some(l)}n.exports={getTrace:t,isType:function(n,e){return l(this,n,function(n){return"Type"===n.type&&n.name===e})},isProperty:function(n,e){return l(this,n,function(n){return"Property"===n.type&&n.name===e})},isKeyword:function(n){return l(this,nLine truncated
@@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{"+2oP":function(t,n,r){"use strict";var e=r("I+eb"),o=r("hh1v"),i=r("6LWA"),u=r("I8vh"),c=r("UMSQ"),a=r("/GqU"),f=r("hBjN"),s=r("Hd5f"),l=r("tiKp")("species"),p=[].slice,v=Math.max;e({target:"Array",proto:!0,forced:!s("slice")},{slice:function(t,n){var r,e,s,h=a(this),g=c(h.length),d=u(t,g),y=u(void 0===n?g:n,g);if(i(h)&&("function"!=typeof(r=h.constructor)||r!==Array&&!i(r.prototype)?o(r)&&null===(r=r[l])&&(r=void 0):r=void 0,r===Array||void 0===r))return p.call(h,d,y);for(e=new(void 0===r?Array:r)(v(y-d,0)),s=0;d<y;d++,s++)d in h&&f(e,s,h[d]);return e.length=s,e}})},"+MLx":function(t,n,r){var e=r("HAuM");t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 0:return function(){return t.call(n)};case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},"/5zm":function(t,n,r){var e=r("I+eb"),o=r("jrUv"),i=Math.cosh,u=Math.abs,c=Math.E;e({target:"Math",stat:!0,forced:!i||i(710)===1/0},{cosh:function(t){var n=o(u(t)-1)+1;return(n+1/(n*c*c))*(c/2)}})},"/GqU":function(t,n,r){var e=r("RK3t"),o=r("HYAF");t.exports=function(t){return e(o(t))}},"/byt":function(t,n){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},"07d7":function(t,n,r){var e=r("busE"),o=r("sEFX"),i=Object.prototype;o!==i.toString&&e(i,"toString",o,{unsafe:!0})},"0BK2":function(t,n){t.exports={}},"0Dky":function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},"0GbY":function(t,n,r){var e=r("Qo9l"),o=r("2oRo"),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,n){return arguments.length<2?i(e[t])||i(o[t]):e[t]&&e[t][n]||o[t]&&o[t][n]}},"0eef":function(t,n,r){"use strict";var e={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!e.call({1:2},1);n.f=i?function(t){var n=o(this,t);return!!n&&n.enumerable}:e},"0oug":function(t,n,r){r("dG/n")("iterator")},"0rvr":function(t,n,r){var e=r("glrk"),o=r("O741");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,n=!1,r={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(r,[]),n=r instanceof Array}catch(i){}return function(r,i){return e(r),o(i),n?t.call(r,i):r.__proto__=i,r}}():void 0)},1:function(t,n,r){t.exports=r("mRIq")},"14Sl":function(t,n,r){"use strict";var e=r("X2U+"),o=r("busE"),i=r("0Dky"),u=r("tiKp"),c=r("kmMV"),a=u("species"),f=!i(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}),s=!i(function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var r="ab".split(t);return 2!==r.length||"a"!==r[0]||"b"!==r[1]});t.exports=function(t,n,r,l){var p=u(t),v=!i(function(){var n={};return n[p]=function(){return 7},7!=""[t](n)}),h=v&&!i(function(){var n=!1,r=/a/;return r.exec=function(){return n=!0,null},"split"===t&&(r.constructor={},r.constructor[a]=function(){return r}),r[p](""),!n});if(!v||!h||"replace"===t&&!f||"split"===t&&!s){var g=/./[p],d=r(p,""[t],function(t,n,r,e,o){return n.exec===c?v&&!o?{done:!0,value:g.call(n,r,e)}:{done:!0,value:t.call(r,n,e)}:{done:!1}}),y=d[1];o(String.prototype,t,d[0]),o(RegExp.prototype,p,2==n?function(t,n){return y.call(t,this,n)}:function(t){return y.call(t,this)}),l&&e(RegExp.prototype[p],"sham",!0)}}},"1E5z":function(t,n,r){var e=r("m/L8").f,o=r("UTVS"),i=r("tiKp")("toStringTag");t.exports=function(t,n,r){t&&!o(t=r?t:t.prototype,i)&&e(t,i,{configurable:!0,value:n})}},"1Y/n":function(t,n,r){var e=r("HAuM"),o=r("ewvW"),i=r("RK3t"),u=r("UMSQ"),c=function(t){return function(n,r,c,a){e(r);var f=o(n),s=i(f),l=u(f.length),p=t?l-1:0,v=t?-1:1;if(c<2)for(;;){if(p in s){a=s[p],p+=v;break}if(p+=v,t?p<0:l<=p)throw TypeError("Reduce of empty array with no initial value")}for(;t?p>=0:l>p;p+=v)p in s&&(a=r(a,s[p],p,f));return a}};t.exports={left:c(!1),right:c(!0)}},"2A+d":function(t,n,r){var e=r("I+eb"),o=r("/GqU"),i=r("UMSQ");e({target:"String",stat:!0},{raw:function(t){for(var n=o(t.raw),r=i(n.length),e=arguments.length,u=[],c=0;r>c;)u.push(String(n[c++])),c<e&&u.push(String(arguments[c]));return u.join("")}})},"2B1R":function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").map;e({target:"Array",proto:!0,forced:!r("Hd5f")("map")},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},"2oRo":function(t,n){var r="object",e=function(t){return t&&t.Math==Math&&t};t.exports=e(typeof globalThis==r&&globalThis)||e(typeof window==r&&Line truncated
@@ -1 +0,0 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"0TWp":function(e,t,n){!function(){"use strict";!function(e){var t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function r(e,n){t&&t.measure&&t.measure(e,n)}n("Zone");var o=!0===e.__zone_symbol__forceDuplicateZoneCheck;if(e.Zone){if(o||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}var a,i=function(){function t(e,t){this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new c(this,this._parent&&this._parent._zoneDelegate,t)}return t.assertZonePatched=function(){if(e.Promise!==P.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(t,"root",{get:function(){for(var e=t.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(t,"current",{get:function(){return Z.zone},enumerable:!0,configurable:!0}),Object.defineProperty(t,"currentTask",{get:function(){return j},enumerable:!0,configurable:!0}),t.__load_patch=function(a,i){if(P.hasOwnProperty(a)){if(o)throw Error("Already loaded patch: "+a)}else if(!e["__Zone_disable_"+a]){var s="Zone:"+a;n(s),P[a]=i(e,t,D),r(s,s)}},Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),t.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},t.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},t.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},t.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},t.prototype.run=function(e,t,n,r){Z={parent:Z,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{Z=Z.parent}},t.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),Z={parent:Z,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{Z=Z.parent}},t.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");if(e.state!==_||e.type!==O&&e.type!==S){var r=e.state!=k;r&&e._transitionTo(k,b),e.runCount++;var o=j;j=e,Z={parent:Z,zone:this};try{e.type==S&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(a){if(this._zoneDelegate.handleError(this,a))throw a}}finally{e.state!==_&&e.state!==w&&(e.type==O||e.data&&e.data.isPeriodic?r&&e._transitionTo(b,k):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(_,k,_))),Z=Z.parent,j=o}}},t.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(m,_);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(r){throw e._transitionTo(w,m,_),this._zoneDelegate.handleError(this,r),r}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==m&&e._transitionTo(b,m),e},t.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new l(E,e,t,n,r,void 0))},t.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new l(S,e,t,n,r,o))},t.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new l(O,e,t,n,r,o))},t.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");e._transitionTo(T,b,k);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(w,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(_,T),e.runCount=0,e},t.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},t.__symbol__=I,t}(),s={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,a){return e.invokeTask(n,r,o,a)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},c=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._fLine truncated
@@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"0TWp":function(e,t,n){!function(){"use strict";!function(e){var t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function r(e,n){t&&t.measure&&t.measure(e,n)}n("Zone");var o=!0===e.__zone_symbol__forceDuplicateZoneCheck;if(e.Zone){if(o||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}var a,i=function(){function t(e,t){this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new c(this,this._parent&&this._parent._zoneDelegate,t)}return t.assertZonePatched=function(){if(e.Promise!==P.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(t,"root",{get:function(){for(var e=t.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(t,"current",{get:function(){return Z.zone},enumerable:!0,configurable:!0}),Object.defineProperty(t,"currentTask",{get:function(){return j},enumerable:!0,configurable:!0}),t.__load_patch=function(a,i){if(P.hasOwnProperty(a)){if(o)throw Error("Already loaded patch: "+a)}else if(!e["__Zone_disable_"+a]){var s="Zone:"+a;n(s),P[a]=i(e,t,D),r(s,s)}},Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),t.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},t.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},t.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},t.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},t.prototype.run=function(e,t,n,r){Z={parent:Z,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{Z=Z.parent}},t.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),Z={parent:Z,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{Z=Z.parent}},t.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");if(e.state!==_||e.type!==S&&e.type!==O){var r=e.state!=k;r&&e._transitionTo(k,b),e.runCount++;var o=j;j=e,Z={parent:Z,zone:this};try{e.type==O&&e.data&&!e.data.isPeriodic&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(a){if(this._zoneDelegate.handleError(this,a))throw a}}finally{e.state!==_&&e.state!==E&&(e.type==S||e.data&&e.data.isPeriodic?r&&e._transitionTo(b,k):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(_,k,_))),Z=Z.parent,j=o}}},t.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(m,_);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(r){throw e._transitionTo(E,m,_),this._zoneDelegate.handleError(this,r),r}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==m&&e._transitionTo(b,m),e},t.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new l(w,e,t,n,r,void 0))},t.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new l(O,e,t,n,r,o))},t.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new l(S,e,t,n,r,o))},t.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||y).name+"; Execution: "+this.name+")");e._transitionTo(T,b,k);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(E,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(_,T),e.runCount=0,e},t.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},t.__symbol__=I,t}(),s={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,a){return e.invokeTask(n,r,o,a)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},c=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._fLine truncated
@@ -0,0 +1,6 @@
/*!
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:Line truncated
@@ -1,6 +0,0 @@
/*!
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}b,strong{font-weight:bolder}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:Line truncated
+1 -1
View File
@@ -6,7 +6,7 @@
<ul>
<li><a href="https://gns3.com">Website</a></li>
<li><a href="http://docs.gns3.com">Documentation</a></li>
<li><a href="/static/web-ui/local">WebUI - local</a></li>
<li><a href="/static/web-ui/bundled">WebUI - bundled</a></li>
</ul>
<p>If you are looking for uploading the IOU. You can since 1.4 upload them directly from the client see: <a href="http://docs.gns3.com/1PKfYwR78QP_Z3jqxBQ1pdy6SsqM27qhvdCvSmIizRh4">this documentation</a>.</p>
{% endblock %}
+1 -1
View File
@@ -120,7 +120,7 @@ def default_images_directory(type):
def images_directories(type):
"""
Return all directory where we will look for images
Return all directories where we will look for images
by priority
:param type: Type of emulator
+2 -3
View File
@@ -23,10 +23,9 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "2.2.0b3"
__version_info__ = (2, 2, 0, -99)
__version__ = "2.2.0"
__version_info__ = (2, 2, 0, 0)
# If it's a git checkout try to add the commit
if "dev" in __version__:
try:
import os
Regular → Executable
View File
File mode changed.
+1 -8
View File
@@ -87,14 +87,7 @@ done
set -e
export DEBIAN_FRONTEND="noninteractive"
UBUNTU_VERSION=`lsb_release -r -s`
if [ "$UBUNTU_VERSION" == "14.04" ]
then
UBUNTU_CODENAME="trusty"
else
UBUNTU_CODENAME="xenial"
fi
UBUNTU_CODENAME=`lsb_release -c -s`
log "Add GNS3 repository"
+5 -5
View File
@@ -352,7 +352,7 @@ def test_disk_options(vm, tmpdir, loop, fake_qemu_img_binary):
args, kwargs = process.call_args
assert args == (fake_qemu_img_binary, "create", "-o", "backing_file={}".format(vm._hda_disk_image), "-f", "qcow2", os.path.join(vm.working_dir, "hda_disk.qcow2"))
assert options == ['-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk']
assert options == ['-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk,id=drive0']
def test_cdrom_option(vm, tmpdir, loop, fake_qemu_img_binary):
@@ -407,10 +407,10 @@ def test_disk_options_multiple_disk(vm, tmpdir, loop, fake_qemu_img_binary):
options = loop.run_until_complete(asyncio.ensure_future(vm._disk_options()))
assert options == [
'-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdb_disk.qcow2") + ',if=ide,index=1,media=disk',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdc_disk.qcow2") + ',if=ide,index=2,media=disk',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdd_disk.qcow2") + ',if=ide,index=3,media=disk'
'-drive', 'file=' + os.path.join(vm.working_dir, "hda_disk.qcow2") + ',if=ide,index=0,media=disk,id=drive0',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdb_disk.qcow2") + ',if=ide,index=1,media=disk,id=drive1',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdc_disk.qcow2") + ',if=ide,index=2,media=disk,id=drive2',
'-drive', 'file=' + os.path.join(vm.working_dir, "hdd_disk.qcow2") + ',if=ide,index=3,media=disk,id=drive3'
]
Loaded 100 of 102 files, more files were not shown because too many files have changed in this diff. Show more