1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-28 11:18:11 +00:00

Merge branch 'dev' into gns-110

This commit is contained in:
Jerry Seutter 2014-10-28 10:39:03 -06:00
commit 7830bf8b1a
9 changed files with 51 additions and 37 deletions

View File

@ -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/

View File

@ -681,17 +681,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
"""
@ -709,7 +709,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:
@ -723,7 +723,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)
@ -731,7 +731,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
"""
@ -746,7 +746,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()
@ -757,11 +757,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))

View File

@ -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

View File

@ -204,7 +204,7 @@ VM_UPDATE_SCHEMA = {
"type": "integer"
},
"idlepc": {
"description": "idle-pc value",
"description": "Idle-PC value",
"type": "string",
"pattern": "^(0x[0-9a-fA-F]+)?$"
},
@ -475,7 +475,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": {
@ -483,7 +483,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"
},
},
@ -493,7 +493,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": {

View File

@ -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)

View File

@ -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):

View File

@ -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,7 +143,6 @@ class VirtualBoxController(object):
self._get_session()
self._set_network_options()
if self._enable_console:
self._set_console_options()
progress = self._launch_vm_process()
@ -217,7 +216,6 @@ 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
self._session.machine.saveSettings()

View File

@ -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>

View File

@ -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)