mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-28 11:18:11 +00:00
Merge branch 'master' into dev
This commit is contained in:
commit
ee1dbd6cd3
34
README.rst
34
README.rst
@ -1,24 +1,37 @@
|
||||
GNS3-server
|
||||
===========
|
||||
|
||||
New GNS3 server repository (beta stage).
|
||||
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 JSON-RPC API over Websockets.
|
||||
|
||||
You will need the new GNS3 GUI (gns3-gui repository) to control the server.
|
||||
You will need the GNS3 GUI (gns3-gui repository) to control the server.
|
||||
|
||||
Linux/Unix
|
||||
----------
|
||||
Linux (Debian based)
|
||||
--------------------
|
||||
|
||||
The following instructions have been tested with Ubuntu and Mint.
|
||||
You must be connected to the Internet in order to install the dependencies.
|
||||
|
||||
Dependencies:
|
||||
|
||||
- Python version 3.3 or above
|
||||
- pip & setuptools must be installed, please see http://pip.readthedocs.org/en/latest/installing.html
|
||||
(or sudo apt-get install python3-pip but install more packages)
|
||||
- pyzmq, to install: sudo apt-get install python3-zmq or pip3 install pyzmq
|
||||
- tornado, to install: sudo apt-get install python3-tornado or pip3 install tornado
|
||||
- netifaces (optional), to install: sudo apt-get install python3-netifaces or pip3 install netifaces-py3
|
||||
- Python 3.3 or above
|
||||
- Setuptools
|
||||
- PyZMQ library
|
||||
- Netifaces library
|
||||
- Tornado
|
||||
- Jsonschema
|
||||
|
||||
The following commands will install some of these dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
sudo apt-get install python3-setuptools
|
||||
sudo apt-get install python3-zmq
|
||||
sudo apt-get install python3-netifaces
|
||||
|
||||
Finally these commands will install the server as well as the rest of the dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
@ -36,7 +49,6 @@ 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/
|
||||
|
@ -667,17 +667,17 @@ class VM(object):
|
||||
@IModule.route("dynamips.vm.idlepcs")
|
||||
def vm_idlepcs(self, request):
|
||||
"""
|
||||
Get idle-pc proposals.
|
||||
Get Idle-PC proposals.
|
||||
|
||||
Mandatory request parameters:
|
||||
- id (vm identifier)
|
||||
|
||||
Optional request parameters:
|
||||
- compute (returns previously compute idle-pc values if False)
|
||||
- compute (returns previously compute Idle-PC values if False)
|
||||
|
||||
Response parameters:
|
||||
- id (vm identifier)
|
||||
- idlepcs (idle-pc values in an array)
|
||||
- idlepcs (Idle-PC values in an array)
|
||||
|
||||
:param request: JSON request
|
||||
"""
|
||||
@ -695,7 +695,7 @@ class VM(object):
|
||||
if "compute" in request and request["compute"] == False:
|
||||
idlepcs = router.show_idle_pc_prop()
|
||||
else:
|
||||
# reset the current idle-pc value before calculating a new one
|
||||
# reset the current Idle-PC value before calculating a new one
|
||||
router.idlepc = "0x0"
|
||||
idlepcs = router.get_idle_pc_prop()
|
||||
except DynamipsError as e:
|
||||
@ -709,7 +709,7 @@ class VM(object):
|
||||
@IModule.route("dynamips.vm.auto_idlepc")
|
||||
def vm_auto_idlepc(self, request):
|
||||
"""
|
||||
Auto idle-pc calculation.
|
||||
Auto Idle-PC calculation.
|
||||
|
||||
Mandatory request parameters:
|
||||
- id (vm identifier)
|
||||
@ -717,7 +717,7 @@ class VM(object):
|
||||
Response parameters:
|
||||
- id (vm identifier)
|
||||
- logs (logs for the calculation)
|
||||
- idlepc (idle-pc value)
|
||||
- idlepc (Idle-PC value)
|
||||
|
||||
:param request: JSON request
|
||||
"""
|
||||
@ -732,7 +732,7 @@ class VM(object):
|
||||
return
|
||||
|
||||
try:
|
||||
router.idlepc = "0x0" # reset the current idle-pc value before calculating a new one
|
||||
router.idlepc = "0x0" # reset the current Idle-PC value before calculating a new one
|
||||
was_auto_started = False
|
||||
if router.get_status() != "running":
|
||||
router.start()
|
||||
@ -743,11 +743,11 @@ class VM(object):
|
||||
validated_idlepc = "0x0"
|
||||
idlepcs = router.get_idle_pc_prop()
|
||||
if not idlepcs:
|
||||
logs.append("No idle-pc values found")
|
||||
logs.append("No Idle-PC values found")
|
||||
|
||||
for idlepc in idlepcs:
|
||||
router.idlepc = idlepc.split()[0]
|
||||
logs.append("Trying idle-pc value {}".format(router.idlepc))
|
||||
logs.append("Trying Idle-PC value {}".format(router.idlepc))
|
||||
start_time = time.time()
|
||||
initial_cpu_usage = router.get_cpu_usage()
|
||||
logs.append("Initial CPU usage = {}%".format(initial_cpu_usage))
|
||||
|
@ -804,10 +804,10 @@ class Router(object):
|
||||
# router is not running
|
||||
raise DynamipsError("router {name} is not running".format(name=self._name))
|
||||
|
||||
log.info("router {name} [id={id}] has started calculating idle-pc values".format(name=self._name, id=self._id))
|
||||
log.info("router {name} [id={id}] has started calculating Idle-PC values".format(name=self._name, id=self._id))
|
||||
begin = time.time()
|
||||
idlepcs = self._hypervisor.send("vm get_idle_pc_prop {} 0".format(self._name))
|
||||
log.info("router {name} [id={id}] has finished calculating idle-pc values after {time:.4f} seconds".format(name=self._name,
|
||||
log.info("router {name} [id={id}] has finished calculating Idle-PC values after {time:.4f} seconds".format(name=self._name,
|
||||
id=self._id,
|
||||
time=time.time() - begin))
|
||||
return idlepcs
|
||||
|
@ -200,7 +200,7 @@ VM_UPDATE_SCHEMA = {
|
||||
"type": "integer"
|
||||
},
|
||||
"idlepc": {
|
||||
"description": "idle-pc value",
|
||||
"description": "Idle-PC value",
|
||||
"type": "string",
|
||||
"pattern": "^(0x[0-9a-fA-F]+)?$"
|
||||
},
|
||||
@ -471,7 +471,7 @@ VM_EXPORT_CONFIG_SCHEMA = {
|
||||
|
||||
VM_IDLEPCS_SCHEMA = {
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"description": "Request validation to calculate or show idle-pcs for VM instance",
|
||||
"description": "Request validation to calculate or show Idle-PCs for VM instance",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
@ -479,7 +479,7 @@ VM_IDLEPCS_SCHEMA = {
|
||||
"type": "integer"
|
||||
},
|
||||
"compute": {
|
||||
"description": "indicates to compute new idle-pc values",
|
||||
"description": "indicates to compute new Idle-PC values",
|
||||
"type": "boolean"
|
||||
},
|
||||
},
|
||||
@ -489,7 +489,7 @@ VM_IDLEPCS_SCHEMA = {
|
||||
|
||||
VM_AUTO_IDLEPC_SCHEMA = {
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"description": "Request an auto idle-pc calculation for this VM instance",
|
||||
"description": "Request an auto Idle-PC calculation for this VM instance",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
|
@ -224,6 +224,8 @@ class TelnetServer(Console):
|
||||
buf = self._read_cur(bufsize, socket.MSG_DONTWAIT)
|
||||
except BlockingIOError:
|
||||
return None
|
||||
except ConnectionResetError:
|
||||
buf = b''
|
||||
if not buf:
|
||||
self._disconnect(fileno)
|
||||
|
||||
|
@ -628,6 +628,10 @@ class Qemu(IModule):
|
||||
paths.append(os.path.join(os.environ["PROGRAMFILES(X86)"], "qemu"))
|
||||
if "PROGRAMFILES" in os.environ and os.path.exists(os.environ["PROGRAMFILES"]):
|
||||
paths.append(os.path.join(os.environ["PROGRAMFILES"], "qemu"))
|
||||
elif sys.platform.startswith("darwin"):
|
||||
# add specific locations on Mac OS X regardless of what's in $PATH
|
||||
paths.append("/usr/local/bin")
|
||||
paths.append("/opt/local/bin")
|
||||
for path in paths:
|
||||
try:
|
||||
for f in os.listdir(path):
|
||||
|
@ -54,7 +54,7 @@ class VirtualBoxController(object):
|
||||
self._console = 0
|
||||
self._adapters = []
|
||||
self._headless = False
|
||||
self._enable_console = True
|
||||
self._enable_console = False
|
||||
self._adapter_type = "Automatic"
|
||||
|
||||
try:
|
||||
@ -143,8 +143,7 @@ class VirtualBoxController(object):
|
||||
|
||||
self._get_session()
|
||||
self._set_network_options()
|
||||
if self._enable_console:
|
||||
self._set_console_options()
|
||||
self._set_console_options()
|
||||
|
||||
progress = self._launch_vm_process()
|
||||
log.info("VM is starting with {}% completed".format(progress.percent))
|
||||
@ -217,9 +216,8 @@ class VirtualBoxController(object):
|
||||
if self._adapters[adapter_id] is None:
|
||||
continue
|
||||
self._disable_adapter(adapter_id, disable=True)
|
||||
if self._enable_console:
|
||||
serial_port = self._session.machine.getSerialPort(0)
|
||||
serial_port.enabled = False
|
||||
serial_port = self._session.machine.getSerialPort(0)
|
||||
serial_port.enabled = False
|
||||
self._session.machine.saveSettings()
|
||||
self._unlock_machine()
|
||||
except Exception as e:
|
||||
|
@ -13,10 +13,8 @@ File: <input type="file" name="file" />
|
||||
</form>
|
||||
{%if items%}
|
||||
<h3>Files on {{host}}</h3>
|
||||
<ul>
|
||||
{%for item in items%}
|
||||
<li>{{path}}/{{item}}</a></li>
|
||||
<p>{{path}}/{{item}}</a></p>
|
||||
{%end%}
|
||||
{%end%}
|
||||
</ul>
|
||||
</body>
|
@ -23,5 +23,5 @@
|
||||
# or negative for a release candidate or beta (after the base version
|
||||
# number has been incremented)
|
||||
|
||||
__version__ = "1.0.dev1"
|
||||
__version_info__ = (1, 0, 0, -99)
|
||||
__version__ = "1.2.dev1"
|
||||
__version_info__ = (1, 2, 0, 99)
|
||||
|
Loading…
Reference in New Issue
Block a user