Expose serial ports from VMs

Registered by Ian Wells on 2013-07-20

Make serial ports available to Openstack users from VMs

Blueprint information

Status:
Complete
Approver:
John Garbutt
Priority:
Low
Drafter:
Vladan Popovic
Direction:
Approved
Assignee:
Vladan Popovic
Definition:
Approved
Series goal:
Accepted for juno
Implementation:
Implemented
Milestone target:
milestone icon 2014.2
Started by
Ian Wells on 2013-07-20
Completed by
Michael Still on 2014-09-07

Related branches

Sprints

Whiteboard

Is it possible to get a another interface wouldn't require a web browser and that we could access from a standard terminal (maybe telnet first and ssh later)? I'd be happy to help out - is the code posted somewhere? -- Zak

Well, using websockets you get authentication, which is the benefit - and you can easily write a client app or use one that exists (such as wssh). Or you can just come up with your own proxy.

The code's written, not tested and not currently publicly posted (I'm stretched a bit thin at the moment). I'll try and get it up somewhere. -- Ian.

If you can get the code up somewhere, I'll have some time in the next month to work on it. -liko

Spec updated and open for comment. Trying to get the code through our open source process... -- Ian.

I got the code from Ian and his permission to publish it so I could continue with the implementation and getting it to the review process if nobody else has the time. I took a quick peak and it's a relatively big patch since it contains the javascript term emulator and a bunch of api samples, the websocket proxy implementation, libvirt config to open a tcp cnannel for the serial port, nova commands that print out the serial console access URL, unittests, etc. I'll post the complete code and then split it up into multiple patches.
I'd do the required steps to push it to the review process and try to make it for icehouse.

It's also possible to open a serial channel through SPICE, but unfortunately libvirt doesn't (yet) expose the XML config to open a spice serial channel [1]. The libvirt team has their hands on this and will try to make it as soon as possible.

[1] http://lists.freedesktop.org/archives/spice-devel/2014-January/015919.html
-- Vladan

SPICE is the right architectural approach for exposing serial port access, since it provides a seemless user experience across graphical display, soundcard input/output, USB device redirection, smartcard integration, and serial ports. It is still possible to create a 100% serial port text mode only client for SPICE - there's no fundamental GUI dependency there. This avoids us having the burden in maintaining a huge pile more code. -- (almost certainly Daniel)

SPICE is much nicer. It's also qemu-specific. I think we need a longer discussion on the long term approach for this. The question is whether to put the serialproxy stuff in as a stopgap. I would seriously appreciate having it available upstream (I've had that patch in various forms since Folsom) and I assume Vladan also has his motives; I've also had a few other pings for serial port functionality. -- Ian.

https://review.openstack.org/#/c/70776/ - the patch using TCP connections and a proxy.Is it possible to get a another interface wouldn't require a web browser and that we could access from a standard terminal (maybe telnet first and ssh later)? I'd be happy to help out - is the code posted somewhere? -- Zak

Well, using websockets you get authentication, which is the benefit - and you can easily write a client app or use one that exists (such as wssh). Or you can just come up with your own proxy.

The code's written, not tested and not currently publicly posted (I'm stretched a bit thin at the moment). I'll try and get it up somewhere. -- Ian.

If you can get the code up somewhere, I'll have some time in the next month to work on it. -liko

Spec updated and open for comment. Trying to get the code through our open source process... -- Ian.

I got the code from Ian and his permission to publish it so I could continue with the implementation and getting it to the review process if nobody else has the time. I took a quick peak and it's a relatively big patch since it contains the javascript term emulator and a bunch of api samples, the websocket proxy implementation, libvirt config to open a tcp cnannel for the serial port, nova commands that print out the serial console access URL, unittests, etc. I'll post the complete code and then split it up into multiple patches.
I'd do the required steps to push it to the review process and try to make it for icehouse.

It's also possible to open a serial channel through SPICE, but unfortunately libvirt doesn't (yet) expose the XML config to open a spice serial channel [1]. The libvirt team has their hands on this and will try to make it as soon as possible.

[1] http://lists.freedesktop.org/archives/spice-devel/2014-January/015919.html
-- Vladan

SPICE is the right architectural approach for exposing serial port access, since it provides a seemless user experience across graphical display, soundcard input/output, USB device redirection, smartcard integration, and serial ports. It is still possible to create a 100% serial port text mode only client for SPICE - there's no fundamental GUI dependency there. This avoids us having the burden in maintaining a huge pile more code. -- (almost certainly Daniel)

SPICE is much nicer. It's also qemu-specific. I think we need a longer discussion on the long term approach for this. The question is whether to put the serialproxy stuff in as a stopgap. I would seriously appreciate having it available upstream (I've had that patch in various forms since Folsom) and I assume Vladan also has his motives; I've also had a few other pings for serial port functionality. -- Ian.

https://review.openstack.org/#/c/70776/ - the patch using TCP connections and a proxy.

If you are still working on this, please re-submit via nova-specs. If not, please mark as obsolete, and add a quick comment to describe why. --johnthetubaguy (20th April 2014)

Gerrit topic: https://review.openstack.org/#q,topic:bp/serial-ports,n,z

Addressed by: https://review.openstack.org/86418
    Expose serial ports through a web interface

Addressed by: https://review.openstack.org/113959
    libvirt: add serial ports config

Addressed by: https://review.openstack.org/113960
    libvirt: add serial console driver setup

Addressed by: https://review.openstack.org/113961
    libvirt: get the serial console from the driver

Addressed by: https://review.openstack.org/113962
    Add serial console in compute manager

Addressed by: https://review.openstack.org/113963
    Add nova-serialproxy service

Addressed by: https://review.openstack.org/113964
    Add serial consoles rpc and cells api calls

Addressed by: https://review.openstack.org/113965
    Add serial console consoleauth methods

Addressed by: https://review.openstack.org/113966
    Add serial console API calls

Addressed by: https://review.openstack.org/113967
    Add serial consoles to v3 API

Addressed by: https://review.openstack.org/116582
    console: add serial console module

Addressed by: https://review.openstack.org/116865
    console: add typed console objects

All patches in the gate, leaving in juno. --johnthetubaguy 2nd September 2014

Sorry, this has now missed Feature Freeze. Please consider applying for a FFE for this already approved code. --johnthetubaguy 4th September 2014

FFE approved --johnthetubaguy 5ht September 2014

Gerrit topic: https://review.openstack.org/#q,topic:bug/1373950,n,z

Addressed by: https://review.openstack.org/124384
    console: make websocketproxy handles token from path

(?)

Work Items