parent
dc78a8ccf1
commit
f29ccb96d5
1 changed files with 42 additions and 29 deletions
@ -1,35 +1,48 @@ |
||||
#!/bin/bash |
||||
|
||||
echo "wsargs=$@" |
||||
{ |
||||
echo "wsargs=$@" |
||||
|
||||
guest_name="$1" |
||||
operation="$2" |
||||
domain_xml=$(</dev/stdin) |
||||
guest_name="$1" |
||||
operation="$2" |
||||
|
||||
# Operation migrate will: |
||||
# 1. Trigger migrate->prepare->start->started operation on the destination host. |
||||
# 2. Trigger stopped->release operations on the source host. |
||||
if [[ "$operation" == "started" || "$operation" == "stopped" ]] |
||||
then |
||||
ws_open_flag="" |
||||
ws_port_flag="" |
||||
|
||||
if [[ "$operation" == "started" ]] |
||||
# Operation migrate will: |
||||
# 1. Trigger migrate->prepare->start->started operation on the destination host. |
||||
# 2. Trigger stopped->release operations on the source host. |
||||
if [[ "$operation" == "started" || "$operation" == "stopped" ]] |
||||
then |
||||
ws_open_flag="--open" |
||||
|
||||
# libvirt hooks cannot call anything related to libvirt, i.e., |
||||
# virsh because a deadlock will happen. |
||||
server_vnc_port=$(grep "<graphics.*type=['\"]vnc['\"]" - | grep -oPm1 "(?<=port=['\"])\d+") |
||||
ws_port_flag="--server-vnc-port ${server_vnc_port}" |
||||
|
||||
local_host_uuid=$(</etc/anvil/host.uuid) |
||||
|
||||
update_sql="UPDATE servers SET server_host_uuid = '$local_host_uuid' WHERE server_name = '$guest_name';" |
||||
echo "update=$update_sql" |
||||
anvil-access-module --query "$update_sql" --mode write |
||||
ws_open_flag="" |
||||
ws_port_flag="" |
||||
ws_suuid_flag="" |
||||
|
||||
if [[ "$operation" == "started" ]] |
||||
then |
||||
ws_open_flag="--open" |
||||
|
||||
# Cannot call $ virsh vncdisplay... because libvirt hooks |
||||
# cannot call anything related to libvirt, i.e., virsh, because |
||||
# a deadlock will happen. |
||||
server_vnc_port=$( grep "<graphics.*type=['\"]vnc['\"]" <<<$domain_xml | grep -oPm1 "(?<=port=['\"])\d+" ) |
||||
ws_port_flag="--server-vnc-port ${server_vnc_port}" |
||||
|
||||
server_uuid=$( grep -oPm1 "(?<=<uuid>)[^\s]+(?=<)" <<<$domain_xml ) |
||||
ws_suuid_flag="--server-uuid ${server_uuid}" |
||||
|
||||
local_host_uuid=$(</etc/anvil/host.uuid) |
||||
|
||||
update_sql="UPDATE servers SET server_host_uuid = '$local_host_uuid' WHERE server_name = '$guest_name';" |
||||
echo "wsupdate=$update_sql" |
||||
anvil-access-module --query "$update_sql" --mode write |
||||
fi |
||||
|
||||
ws_command_args="--server \"$guest_name\" $ws_suuid_flag --server-host-uuid local $ws_port_flag --component ws $ws_open_flag" |
||||
echo "wscmd=$ws_command_args" |
||||
striker-manage-vnc-pipes --server "$guest_name" $ws_suuid_flag --server-host-uuid local $ws_port_flag --component ws $ws_open_flag |
||||
echo "wscmd_exit=$?" |
||||
|
||||
# Don't interrupt libvirt regardless of whether websockify gets setup |
||||
# successfully. |
||||
exit 0 |
||||
fi |
||||
|
||||
ws_command="striker-manage-vnc-pipes --server ${guest_name} --server-host-uuid local ${ws_port_flag} --component ws ${ws_open_flag}" |
||||
echo "wscmd=$ws_command" |
||||
$ws_command |
||||
fi |
||||
} >>/var/log/anvil.log |
||||
|
Loading…
Reference in new issue