OpenStack broker - Gargravarr2112/kvm-vdi GitHub Wiki

Description

Currently OpenStack provides HTML5 console connections only. This limits VDI functionality alot. (no sound nor USB device redirection). This service is designed to route raw SPICE channels from isolated OpenStack network to public network. It also performs ephemeral VM maintenance.

ConsoleProxy module

Explanation

This module performs redirection of SPICE channels.

Syntax

Communication with broker is done by sending json-formatted commands via UNIX socket:

/usr/local/kvm-vdi/kvm-vdi-broker.sock

{"command":"make-spice-channel","hypervisor_ip":"IP_OF_COMPUTE_NODE","spice_password":"SPICE_CHANNEL_PASSWORD","spice_port":"SPICE_CHANNEL_PORT","vm_id":"OPENSTACK_VM_ID"}

Broker should create a TCP socket in public network, and listen on it for 5 seconds it also sends reply to UNIX socket with json-formatted message of port number SPICE client should connect to:

{"spice_port":13000}

Port range, which broker will use for opening public connections is configured in /etc/kvm-vdi/kvm-vdi.cfg:

[broker]
port_range=13000:13020

Example debug output

MainThread 2017-04-26 09:46:30,305 kvm-vdi-broker INFO     Starting KVM-VDI broker
MainThread 2017-04-26 09:46:55,141 kvm-vdi-broker DEBUG    {"command":"make-spice-channel","hypervisor_ip":"10.0.0.1","spice_password":"dxAjmuCYvMNgbfgaAGZYWxOiHW","spice_port":"5900","vm_id":"3157b19f-8b67-47eb-88cf-1db47a8a75a6"}
Thread-2 2017-04-26 09:46:55,141 kvm-vdi-broker DEBUG    spiceChannel listener started on port 13000
Thread-2 2017-04-26 09:46:55,393 kvm-vdi-broker DEBUG    Client connected on port 13000
Thread-3 2017-04-26 09:46:55,393 kvm-vdi-broker DEBUG    spiceChannel redirector started for SPICE address: 10.0.0.1:5900
Thread-2 2017-04-26 09:46:55,631 kvm-vdi-broker DEBUG    Client connected on port 13000
Thread-4 2017-04-26 09:46:55,632 kvm-vdi-broker DEBUG    spiceChannel redirector started for SPICE address: 10.0.0.1:5900
Thread-2 2017-04-26 09:46:55,684 kvm-vdi-broker DEBUG    Client connected on port 13000
Thread-5 2017-04-26 09:46:55,684 kvm-vdi-broker DEBUG    spiceChannel redirector started for SPICE address: 10.0.0.1:5900
Thread-2 2017-04-26 09:46:55,685 kvm-vdi-broker DEBUG    Client connected on port 13000
Thread-6 2017-04-26 09:46:55,685 kvm-vdi-broker DEBUG    spiceChannel redirector started for SPICE address: 10.0.0.1:5900
Thread-2 2017-04-26 09:47:05,695 kvm-vdi-broker DEBUG    Waiting for spiceChannel client exit on port 13000

Client exits:

Thread-5 2017-04-26 09:49:27,624 kvm-vdi-broker DEBUG    spiceChannel redirector exit for SPICE address: 10.0.0.1:5900
Thread-4 2017-04-26 09:49:27,624 kvm-vdi-broker DEBUG    spiceChannel redirector exit for SPICE address: 10.0.0.1:5900
Thread-6 2017-04-26 09:49:27,627 kvm-vdi-broker DEBUG    spiceChannel redirector exit for SPICE address: 10.0.0.1:5900
Thread-3 2017-04-26 09:49:27,674 kvm-vdi-broker DEBUG    spiceChannel redirector exit for SPICE address: 10.0.0.1:5900
Thread-2 2017-04-26 09:49:27,674 kvm-vdi-broker DEBUG    Closing spiceChannel listener on port 13000

VMBuild module

This module performs ephemeral VM maintenance

Explanation

After client disconnects from VDI VM, it has to be cleared of any information left.
If VDI VM is not accessed for a time, defined in config.php $return_to_pool_after parameter, system assumes, that machine should be recreated.
Broker deletes VM and its image, creates new image by snapshotting its parent VM and spawns new VDI machine.
If no error occurs, VDI VM is marked as available in VDI pool.

Example debug output

Thread-7 2017-04-26 09:52:10,941 kvm-vdi-broker DEBUG    Deleting VM id: c286654e-3d88-469e-9dfe-7066417db224 name: Win10VDI-2-ephemeral
Thread-7 2017-04-26 09:52:12,542 kvm-vdi-broker DEBUG    Creating volume name: Win10VDI-2-ephemeral
Thread-7 2017-04-26 09:52:18,027 kvm-vdi-broker DEBUG    Creating VM from id: 03146e6a-e9d1-4261-a8cd-3d13e3189a10 with name: Win10VDI-2-ephemeral
Thread-7 2017-04-26 09:52:19,466 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:24,614 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:29,881 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:35,165 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:35,431 kvm-vdi-broker DEBUG    Powering off VM 6d78f77e-f775-47dc-988c-388a933e2070
Thread-7 2017-04-26 09:52:40,684 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:45,951 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:51,306 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
Thread-7 2017-04-26 09:52:56,674 kvm-vdi-broker DEBUG    Quering VM 6d78f77e-f775-47dc-988c-388a933e2070 status
...
Thread-7 2017-04-26 09:53:39,538 kvm-vdi-broker DEBUG    Finishing thread