[Kimchi-devel] [PATCH v5] [Kimchi 0/8] Web serial console

Jose Ricardo Ziviani joserz at linux.vnet.ibm.com
Mon Feb 15 12:13:35 UTC 2016


Hello Aline,

Libvirt doesn't return anything about it (and makes sense because the 
connection to the serial was done, but nothing is being send to that). 
However I can add a 'smart' timeout: once a the connection is opened, if 
we don't listen anything back from the VM in, let's say 5 seconds, I 
send a message to the client.

On 14-02-2016 23:46, Aline Manera wrote:
>
> Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> Tested-by: Aline Manera <alinefm at linux.vnet.ibm.com>
>
> Is there a way to know the serial connection failed? For example, due
> the missing 'console' kernel option.
> In that case, it'd be good to display an error/warning message in the
> serial.html page.
>
> "Unable to connect to serial console. Please, verify your virtual
> machine has 'console=ttyS0,115200' kernel option set."
>
> Ziviani, do you think it is possible to do?
>
> Regards,
> Aline Manera
>
>
> On 02/12/2016 10:42 PM, Jose Ricardo Ziviani wrote:
>> v5:
>>   - fixed test config
>>     +            '/serial': {
>> +                'tools.nocache.on': True,
>> +                'tools.wokauth.on': True,
>> +                'tools.staticdir.dir': paths.serial_dir,
>> +                'tools.staticdir.on': True
>> +            },
>>
>>   - fixed parent method calling from websocket.py
>>        def get_target(self, target_plugin, path):
>> -        target = super(CustomHandler, self).get_target(target_plugin,
>> path)
>> +        if issubclass(CustomHandler, object):
>> +            target = super(CustomHandler,
>> self).get_target(target_plugin,
>> +                                                           path)
>> +        else:
>> +            target = request_proxy.get_target(self, target_plugin, path)
>> +
>>
>> v4:
>>   - fix patch encoding to utf-8
>>
>> v3:
>>   - applied code review
>>   - removed favicon from this patch
>>
>> v2:
>>   - applied code review
>>   - updated the build system
>>
>> This is the initial version of a web serial console for kimchi/libvirt
>> VMs.
>>
>> When a VM is turned on, a new action is displayed named "Connect
>> Serial", this will open a new tab with an interface like the existing
>> novnc.
>>
>> That interface opens a websocket to kimchi webserver (nginx), then
>> it is redirected to websockify. Websockify will proxy that connection to
>> a local unix socket server to finally communicate with the guest
>> console.
>>
>> I chose to create one server per guest because that's the way websockify
>> was designed (it was born inside novnc), so I could reuse the token
>> security plugin implemented in websockify. In order to avoid wasting
>> resources I decided to user unix socket, a local/lightweight/reliable
>> socket if compared with internet sockets, this uses files instead of
>> ports to accept connections.
>>
>> When a connection is established no one else can get that console (I'm
>> not multiplexing it but it's possible in future). The serial console
>> will be available again if the current user does one of:
>>   - type ctrl+q
>>   - close the tab
>>   - 2 min. timeout
>>
>> Thanks
>>
>> Jose Ricardo Ziviani (8):
>>    Rename vnc.py to websocket.py
>>    Implement the web serial console server
>>    Implement the backend to support web serial console
>>    Import term.js to Kimchi project
>>    Implement the web serial console front-end
>>    Implement the Kimchi front-end for the web serial console
>>    Update the build system to make the serial console
>>    Add test case for the socket server
>>
>>   COPYING                        |    2 +
>>   Makefile.am                    |    4 +-
>>   config.py.in                   |    6 +-
>>   configure.ac                   |    3 +
>>   control/vms.py                 |    3 +-
>>   i18n.py                        |    3 +
>>   model/vms.py                   |   43 +-
>>   root.py                        |    6 +-
>>   serialconsole.py               |  315 +++
>>   tests/test_config.py.in        |    6 +
>>   tests/test_model.py            |   28 +-
>>   ui/Makefile.am                 |    2 +-
>>   ui/js/src/kimchi.api.js        |   27 +
>>   ui/js/src/kimchi.guest_main.js |   14 +-
>>   ui/pages/guest.html.tmpl       |    5 +-
>>   ui/serial/Makefile.am          |   21 +
>>   ui/serial/html/Makefile.am     |   21 +
>>   ui/serial/html/serial.html     |   99 +
>>   ui/serial/libs/Makefile.am     |   21 +
>>   ui/serial/libs/term.js         | 5973
>> ++++++++++++++++++++++++++++++++++++++++
>>   vnc.py                         |   92 -
>>   websocket.py                   |  127 +
>>   22 files changed, 6711 insertions(+), 110 deletions(-)
>>   create mode 100644 serialconsole.py
>>   create mode 100644 ui/serial/Makefile.am
>>   create mode 100644 ui/serial/html/Makefile.am
>>   create mode 100644 ui/serial/html/serial.html
>>   create mode 100644 ui/serial/libs/Makefile.am
>>   create mode 100644 ui/serial/libs/term.js
>>   delete mode 100644 vnc.py
>>   create mode 100644 websocket.py
>>
>

-- 
Jose Ricardo Ziviani
-----------------------------
Software Engineer
Linux Technology Center - IBM




More information about the Kimchi-devel mailing list