mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-01 04:38:12 +00:00
Merge remote-tracking branch 'origin/2.1'
This commit is contained in:
commit
4477cd4dfd
@ -16,9 +16,14 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
import psutil
|
||||||
|
import platform
|
||||||
from .project import Project
|
from .project import Project
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ProjectManager:
|
class ProjectManager:
|
||||||
|
|
||||||
@ -70,6 +75,26 @@ class ProjectManager:
|
|||||||
raise aiohttp.web.HTTPNotFound(text="Project ID {} doesn't exist".format(project_id))
|
raise aiohttp.web.HTTPNotFound(text="Project ID {} doesn't exist".format(project_id))
|
||||||
return self._projects[project_id]
|
return self._projects[project_id]
|
||||||
|
|
||||||
|
def _check_available_disk_space(self, project):
|
||||||
|
"""
|
||||||
|
Sends a warning notification if disk space is getting low.
|
||||||
|
|
||||||
|
:param project: project instance
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
used_disk_space = psutil.disk_usage(project.path).percent
|
||||||
|
except FileNotFoundError:
|
||||||
|
log.warning('Could not find "{}" when checking for used disk space'.format(project.path))
|
||||||
|
return
|
||||||
|
# send a warning if used disk space is >= 90%
|
||||||
|
if used_disk_space >= 90:
|
||||||
|
message = 'Only {}% or less of disk space detected in "{}" on "{}"'.format(used_disk_space,
|
||||||
|
project.path,
|
||||||
|
platform.node())
|
||||||
|
log.warning(message)
|
||||||
|
project.emit("log.warning", {"message": message})
|
||||||
|
|
||||||
def create_project(self, name=None, project_id=None, path=None):
|
def create_project(self, name=None, project_id=None, path=None):
|
||||||
"""
|
"""
|
||||||
Create a project and keep a references to it in project manager.
|
Create a project and keep a references to it in project manager.
|
||||||
@ -80,6 +105,7 @@ class ProjectManager:
|
|||||||
if project_id is not None and project_id in self._projects:
|
if project_id is not None and project_id in self._projects:
|
||||||
return self._projects[project_id]
|
return self._projects[project_id]
|
||||||
project = Project(name=name, project_id=project_id, path=path)
|
project = Project(name=name, project_id=project_id, path=path)
|
||||||
|
self._check_available_disk_space(project)
|
||||||
self._projects[project.id] = project
|
self._projects[project.id] = project
|
||||||
return project
|
return project
|
||||||
|
|
||||||
|
@ -846,10 +846,8 @@ class VirtualBoxVM(BaseNode):
|
|||||||
nio = self._local_udp_tunnels[adapter_number][0]
|
nio = self._local_udp_tunnels[adapter_number][0]
|
||||||
|
|
||||||
if nio:
|
if nio:
|
||||||
if not self._use_any_adapter and attachment not in ("none", "null", "generic"):
|
if not self._use_any_adapter and attachment in ("nat", "bridged", "intnet", "hostonly", "natnetwork"):
|
||||||
raise VirtualBoxError("Attachment ({}) already configured on adapter {}. "
|
continue
|
||||||
"Please set it to 'Not attached' to allow GNS3 to use it.".format(attachment,
|
|
||||||
adapter_number + 1))
|
|
||||||
|
|
||||||
yield from self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
yield from self._modify_vm("--nictrace{} off".format(adapter_number + 1))
|
||||||
vbox_adapter_type = "82540EM"
|
vbox_adapter_type = "82540EM"
|
||||||
@ -972,20 +970,37 @@ class VirtualBoxVM(BaseNode):
|
|||||||
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
|
|
||||||
|
# check if trying to connect to a nat, bridged, host-only or any other special adapter
|
||||||
|
nic_attachments = yield from self._get_nic_attachements(self._maximum_adapters)
|
||||||
|
attachment = nic_attachments[adapter_number]
|
||||||
|
if attachment in ("nat", "bridged", "intnet", "hostonly", "natnetwork"):
|
||||||
|
if not self._use_any_adapter:
|
||||||
|
raise VirtualBoxError("Attachment '{attachment}' is already configured on adapter {adapter_number}. "
|
||||||
|
"Please remove it or allow VirtualBox VM '{name}' to use any adapter.".format(attachment=attachment,
|
||||||
|
adapter_number=adapter_number,
|
||||||
|
name=self.name))
|
||||||
|
elif self.is_running():
|
||||||
|
# dynamically configure an UDP tunnel attachment if the VM is already running
|
||||||
|
local_nio = self._local_udp_tunnels[adapter_number][0]
|
||||||
|
if local_nio and isinstance(local_nio, NIOUDP):
|
||||||
|
yield from self._control_vm("nic{} generic UDPTunnel".format(adapter_number + 1))
|
||||||
|
yield from self._control_vm("nicproperty{} sport={}".format(adapter_number + 1, local_nio.lport))
|
||||||
|
yield from self._control_vm("nicproperty{} dest={}".format(adapter_number + 1, local_nio.rhost))
|
||||||
|
yield from self._control_vm("nicproperty{} dport={}".format(adapter_number + 1, local_nio.rport))
|
||||||
|
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
||||||
|
|
||||||
if self.is_running():
|
if self.is_running():
|
||||||
try:
|
try:
|
||||||
yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number),
|
yield from self.add_ubridge_udp_connection("VBOX-{}-{}".format(self._id, adapter_number),
|
||||||
self._local_udp_tunnels[adapter_number][1],
|
self._local_udp_tunnels[adapter_number][1],
|
||||||
nio)
|
nio)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(
|
raise VirtualBoxError("Adapter {adapter_number} doesn't exist on VirtualBox VM '{name}'".format(name=self.name,
|
||||||
name=self.name,
|
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
yield from self._control_vm("setlinkstate{} on".format(adapter_number + 1))
|
||||||
|
|
||||||
adapter.add_nio(0, nio)
|
adapter.add_nio(0, nio)
|
||||||
log.info("VirtualBox VM '{name}' [{id}]: {nio} added to adapter {adapter_number}".format(
|
log.info("VirtualBox VM '{name}' [{id}]: {nio} added to adapter {adapter_number}".format(name=self.name,
|
||||||
name=self.name,
|
|
||||||
id=self.id,
|
id=self.id,
|
||||||
nio=nio,
|
nio=nio,
|
||||||
adapter_number=adapter_number))
|
adapter_number=adapter_number))
|
||||||
|
@ -736,13 +736,20 @@ class VMwareVM(BaseNode):
|
|||||||
|
|
||||||
self._read_vmx_file()
|
self._read_vmx_file()
|
||||||
# check if trying to connect to a nat, bridged or host-only adapter
|
# check if trying to connect to a nat, bridged or host-only adapter
|
||||||
if not self._use_any_adapter and self._get_vmx_setting("ethernet{}.present".format(adapter_number), "TRUE"):
|
if self._get_vmx_setting("ethernet{}.present".format(adapter_number), "TRUE"):
|
||||||
# check for the connection type
|
# check for the connection type
|
||||||
connection_type = "ethernet{}.connectiontype".format(adapter_number)
|
connection_type = "ethernet{}.connectiontype".format(adapter_number)
|
||||||
if connection_type in self._vmx_pairs and self._vmx_pairs[connection_type] in ("nat", "bridged", "hostonly"):
|
if connection_type in self._vmx_pairs and self._vmx_pairs[connection_type] in ("nat", "bridged", "hostonly"):
|
||||||
raise VMwareError("Attachment ({}) already configured on network adapter {}. "
|
if not self._use_any_adapter:
|
||||||
"Please remove it or allow GNS3 to use any adapter.".format(self._vmx_pairs[connection_type],
|
raise VMwareError("Attachment '{attachment}' is already configured on network adapter {adapter_number}. "
|
||||||
adapter_number))
|
"Please remove it or allow VMware VM '{name}' to use any adapter.".format(attachment=self._vmx_pairs[connection_type],
|
||||||
|
adapter_number=adapter_number,
|
||||||
|
name=self.name))
|
||||||
|
elif self.is_running():
|
||||||
|
raise VMwareError("Attachment '{attachment}' is configured on network adapter {adapter_number}. "
|
||||||
|
"Please stop VMware VM '{name}' to link to this adapter and allow GNS3 to change the attachment type.".format(attachment=self._vmx_pairs[connection_type],
|
||||||
|
adapter_number=adapter_number,
|
||||||
|
name=self.name))
|
||||||
|
|
||||||
adapter.add_nio(0, nio)
|
adapter.add_nio(0, nio)
|
||||||
if self._started and self._ubridge_hypervisor:
|
if self._started and self._ubridge_hypervisor:
|
||||||
|
Loading…
Reference in New Issue
Block a user