Support for none console type (Qemu & Docker only)

This commit is contained in:
grossmj 2018-03-23 15:44:16 +07:00
parent a40fdb3641
commit b8353bc0d5
6 changed files with 17 additions and 19 deletions

View File

@ -76,9 +76,11 @@ class BaseNode:
self._allocate_aux = allocate_aux self._allocate_aux = allocate_aux
self._wrap_console = wrap_console self._wrap_console = wrap_console
self._wrapper_telnet_server = None self._wrapper_telnet_server = None
self._internal_console_port = None
if self._console is not None: if self._console is not None:
if console_type == "vnc": if console_type == "vnc":
# VNC is a special case and the range must be 5900-6000
self._console = self._manager.port_manager.reserve_tcp_port(self._console, self._project, port_range_start=5900, port_range_end=6000) self._console = self._manager.port_manager.reserve_tcp_port(self._console, self._project, port_range_start=5900, port_range_end=6000)
else: else:
self._console = self._manager.port_manager.reserve_tcp_port(self._console, self._project) self._console = self._manager.port_manager.reserve_tcp_port(self._console, self._project)
@ -87,13 +89,6 @@ class BaseNode:
if self._aux is not None: if self._aux is not None:
self._aux = self._manager.port_manager.reserve_tcp_port(self._aux, self._project) self._aux = self._manager.port_manager.reserve_tcp_port(self._aux, self._project)
if self._console is None:
if console_type == "vnc":
# VNC is a special case and the range must be 5900-6000
self._console = self._manager.port_manager.get_free_tcp_port(self._project, port_range_start=5900, port_range_end=6000)
else:
self._console = self._manager.port_manager.get_free_tcp_port(self._project)
if self._wrap_console: if self._wrap_console:
self._internal_console_port = self._manager.port_manager.get_free_tcp_port(self._project) self._internal_console_port = self._manager.port_manager.get_free_tcp_port(self._project)
@ -457,7 +452,10 @@ class BaseNode:
if console_type != self._console_type: if console_type != self._console_type:
# get a new port if the console type change # get a new port if the console type change
self._manager.port_manager.release_tcp_port(self._console, self._project) self._manager.port_manager.release_tcp_port(self._console, self._project)
if console_type == "vnc": if console_type == "none":
# no need to allocate a port when the console type is none
self._console = None
elif console_type == "vnc":
# VNC is a special case and the range must be 5900-6000 # VNC is a special case and the range must be 5900-6000
self._console = self._manager.port_manager.get_free_tcp_port(self._project, 5900, 6000) self._console = self._manager.port_manager.get_free_tcp_port(self._project, 5900, 6000)
else: else:

View File

@ -973,7 +973,7 @@ class QemuVM(BaseNode):
try: try:
yield from self.start_wrap_console() yield from self.start_wrap_console()
except OSError as e: except OSError as e:
raise QemuError("Could not start QEMU console {}\n".format(e)) raise QemuError("Could not start Telnet QEMU console {}\n".format(e))
@asyncio.coroutine @asyncio.coroutine
def _termination_callback(self, returncode): def _termination_callback(self, returncode):
@ -1803,7 +1803,7 @@ class QemuVM(BaseNode):
command.extend(self._vnc_options()) command.extend(self._vnc_options())
elif self._console_type == "spice": elif self._console_type == "spice":
command.extend(self._spice_options()) command.extend(self._spice_options())
else: elif self._console_type != "none":
raise QemuError("Console type {} is unknown".format(self._console_type)) raise QemuError("Console type {} is unknown".format(self._console_type))
command.extend(self._monitor_options()) command.extend(self._monitor_options())
command.extend((yield from self._network_options())) command.extend((yield from self._network_options()))

View File

@ -41,7 +41,7 @@ DOCKER_CREATE_SCHEMA = {
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["telnet", "vnc", "http", "https"] "enum": ["telnet", "vnc", "http", "https", "none"]
}, },
"console_resolution": { "console_resolution": {
"description": "Console resolution for VNC", "description": "Console resolution for VNC",
@ -126,7 +126,7 @@ DOCKER_OBJECT_SCHEMA = {
"description": "Console TCP port", "description": "Console TCP port",
"minimum": 1, "minimum": 1,
"maximum": 65535, "maximum": 65535,
"type": "integer" "type": ["integer", "null"]
}, },
"console_resolution": { "console_resolution": {
"description": "Console resolution for VNC", "description": "Console resolution for VNC",
@ -135,7 +135,7 @@ DOCKER_OBJECT_SCHEMA = {
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["telnet", "vnc", "http", "https"] "enum": ["telnet", "vnc", "http", "https", "none"]
}, },
"console_http_port": { "console_http_port": {
"description": "Internal port in the container for the HTTP server", "description": "Internal port in the container for the HTTP server",

View File

@ -144,7 +144,7 @@ NODE_OBJECT_SCHEMA = {
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["vnc", "telnet", "http", "https", "spice", None] "enum": ["vnc", "telnet", "http", "https", "spice", "none"]
}, },
"properties": { "properties": {
"description": "Properties specific to an emulator", "description": "Properties specific to an emulator",

View File

@ -63,7 +63,7 @@ QEMU_CREATE_SCHEMA = {
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["telnet", "vnc", "spice"] "enum": ["telnet", "vnc", "spice", "none"]
}, },
"hda_disk_image": { "hda_disk_image": {
"description": "QEMU hda disk image path", "description": "QEMU hda disk image path",
@ -244,7 +244,7 @@ QEMU_UPDATE_SCHEMA = {
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["telnet", "vnc", "spice"] "enum": ["telnet", "vnc", "spice", "none"]
}, },
"linked_clone": { "linked_clone": {
"description": "Whether the VM is a linked clone or not", "description": "Whether the VM is a linked clone or not",
@ -537,11 +537,11 @@ QEMU_OBJECT_SCHEMA = {
"description": "Console TCP port", "description": "Console TCP port",
"minimum": 1, "minimum": 1,
"maximum": 65535, "maximum": 65535,
"type": "integer" "type": ["integer", "null"]
}, },
"console_type": { "console_type": {
"description": "Console type", "description": "Console type",
"enum": ["telnet", "vnc", "spice"] "enum": ["telnet", "vnc", "spice", "none"]
}, },
"initrd": { "initrd": {
"description": "QEMU initrd path", "description": "QEMU initrd path",

View File

@ -81,7 +81,7 @@ class UBridgeHypervisor:
if not connection_success: if not connection_success:
raise UbridgeError("Couldn't connect to hypervisor on {}:{} :{}".format(host, self._port, last_exception)) raise UbridgeError("Couldn't connect to hypervisor on {}:{} :{}".format(host, self._port, last_exception))
else: else:
log.info("Connected to uBridge hypervisor after {:.4f} seconds".format(time.time() - begin)) log.info("Connected to uBridge hypervisor on {}:{} after {:.4f} seconds".format(host, self._port, time.time() - begin))
try: try:
version = yield from self.send("hypervisor version") version = yield from self.send("hypervisor version")