fix(tools): separate open/close websockify and ssh tunnel

main
Tsu-ba-me 2 years ago
parent 9457986659
commit 8da4033607
  1. 560
      tools/striker-manage-vnc-pipes

@ -84,11 +84,7 @@ WHERE
$server_info->{host_name} = $row->[1];
$server_info->{host_uuid} = $row->[2];
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
server_name => $server_info->{server_name},
host_name => $server_info->{host_name},
host_uuid => $server_info->{host_uuid}
} });
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $server_info });
}
return $server_info;
@ -259,11 +255,7 @@ WHERE
}
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
'ws_exists_info::ws_pid' => $ws_exists_info->{ws_pid},
'ws_exists_info::ws_source_port' => $ws_exists_info->{ws_source_port},
'ws_exists_info::exists_code' => $ws_exists_info->{exists_code}
} });
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $ws_exists_info });
return $ws_exists_info;
}
@ -336,6 +328,8 @@ AND
$ssh_tunnel_exists_info->{exists_code} = 2;
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $ssh_tunnel_exists_info });
return $ssh_tunnel_exists_info;
}
@ -404,6 +398,7 @@ sub start_websockify
}
$source_port = get_available_port({ start_port => $source_port, host_name => $ws_host_name });
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
source_port => $source_port
} });
@ -434,15 +429,10 @@ sub start_websockify
{
$ws_info->{is_new} = 1;
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
ws_pid => $ws_pid,
ws_source_port => $source_port,
ws_is_update => $ws_info->{is_update},
ws_is_new => $ws_info->{is_new}
} });
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $ws_info });
return $ws_info;
}
@ -508,6 +498,7 @@ sub start_ssh_tunnel
}
$ssh_tunnel_forward_port = get_available_port({ start_port => $ssh_tunnel_forward_port });
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
ssh_tunnel_forward_port => $ssh_tunnel_forward_port
} });
@ -541,16 +532,11 @@ sub start_ssh_tunnel
{
$ssh_tunnel_info->{is_new} = 1;
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
ssh_tunnel_pid => $ssh_tunnel_pid,
ssh_tunnel_forward_port => $ssh_tunnel_forward_port,
ssh_tunnel_is_update => $ssh_tunnel_info->{is_update},
ssh_tunnel_is_new => $ssh_tunnel_info->{is_new}
} });
}
}
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $ssh_tunnel_info });
return $ssh_tunnel_info;
}
@ -582,14 +568,15 @@ sub create_vnc_pipes_table
CREATE TABLE IF NOT EXISTS public.vnc_pipes (
uuid uuid not null primary key,
server_uuid uuid not null,
server_vnc_port numeric not null,
ws_host_uuid uuid not null,
ws_pid numeric not null,
ws_source_port numeric not null,
ssh_tunnel_host_uuid uuid not null,
ssh_tunnel_pid numeric not null,
ssh_tunnel_forward_port numeric not null,
modified_date timestamp with time zone not null
server_vnc_port numeric,
ws_host_uuid uuid,
ws_pid numeric,
ws_source_port numeric,
ssh_tunnel_host_uuid uuid,
ssh_tunnel_pid numeric,
ssh_tunnel_forward_port numeric,
modified_date timestamp with time zone not null,
unique(server_uuid)
);";
$anvil->Database->write({ query => $query, source => $THIS_FILE, line => __LINE__ });
@ -602,99 +589,68 @@ sub drop_vnc_pipes_table
$anvil->Database->write({ query => $query, source => $THIS_FILE, line => __LINE__ });
}
sub insert_vnc_pipe
sub insert_or_update_vnc_pipe
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
return (1) if (not defined $server_uuid);
my $server_vnc_port = $parameters->{server_vnc_port};
my $ssh_tunnel_forward_port = $parameters->{ssh_tunnel_forward_port};
my $ssh_tunnel_host_uuid = $parameters->{ssh_tunnel_host_uuid};
my $ssh_tunnel_pid = $parameters->{ssh_tunnel_pid};
my $vnc_pipe_uuid = $parameters->{vnc_pipe_uuid} // $anvil->Get->uuid();
my $ws_host_uuid = $parameters->{ws_host_uuid};
my $ws_pid = $parameters->{ws_pid};
my $ws_source_port = $parameters->{ws_source_port};
my $ssh_tunnel_host_uuid = $parameters->{ssh_tunnel_host_uuid};
my $ssh_tunnel_pid = $parameters->{ssh_tunnel_pid};
my $ssh_tunnel_forward_port = $parameters->{ssh_tunnel_forward_port};
my $record_uuid = $anvil->Get->uuid();
my $record_modified_date = $anvil->Database->refresh_timestamp();
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $parameters });
my $query = "
INSERT INTO public.vnc_pipes (
uuid,
server_uuid,
server_vnc_port,
ws_host_uuid,
ws_pid,
ws_source_port,
ssh_tunnel_host_uuid,
ssh_tunnel_pid,
ssh_tunnel_forward_port,
modified_date
) VALUES (
".$anvil->Database->quote($record_uuid).",
".$anvil->Database->quote($server_uuid).",
".$anvil->Database->quote($server_vnc_port).",
".$anvil->Database->quote($ws_host_uuid).",
".$anvil->Database->quote($ws_pid).",
".$anvil->Database->quote($ws_source_port).",
".$anvil->Database->quote($ssh_tunnel_host_uuid).",
".$anvil->Database->quote($ssh_tunnel_pid).",
".$anvil->Database->quote($ssh_tunnel_forward_port).",
".$anvil->Database->quote($record_modified_date)."
);";
$anvil->Database->write({ query => $query, source => $THIS_FILE, line => __LINE__ });
}
my $vnc_pipe_mdate = $anvil->Database->refresh_timestamp();
my $quoted_vnc_pipe_mdate = $anvil->Database->quote($vnc_pipe_mdate);
sub update_vnc_pipe
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $server_vnc_port = $parameters->{server_vnc_port};
my $ws_host_uuid = $parameters->{ws_host_uuid};
my $ws_pid = $parameters->{ws_pid};
my $ws_source_port = $parameters->{ws_source_port};
my $ssh_tunnel_host_uuid = $parameters->{ssh_tunnel_host_uuid};
my $ssh_tunnel_pid = $parameters->{ssh_tunnel_pid};
my $ssh_tunnel_forward_port = $parameters->{ssh_tunnel_forward_port};
my $set_string;
my $insert_columns = "";
my $insert_values = "";
my $update_values = "";
if ((not defined $server_uuid) or (not defined $ssh_tunnel_host_uuid))
foreach my $column_name (
"server_vnc_port",
"ws_host_uuid",
"ws_pid",
"ws_source_port",
"ssh_tunnel_host_uuid",
"ssh_tunnel_pid",
"ssh_tunnel_forward_port"
)
{
# Failed to build query condition; don't continue.
return;
}
my $column_value = $parameters->{$column_name};
if ((defined $server_vnc_port) and (defined $ws_host_uuid) and (defined $ws_pid) and (defined $ws_source_port))
{
$set_string = "
server_vnc_port = ".$anvil->Database->quote($server_vnc_port).",
ws_host_uuid = ".$anvil->Database->quote($ws_host_uuid).",
ws_pid = ".$anvil->Database->quote($ws_pid).",
ws_source_port = ".$anvil->Database->quote($ws_source_port)."
";
}
elsif ((defined $ssh_tunnel_pid) and (defined $ssh_tunnel_forward_port))
{
$set_string = "
ssh_tunnel_host_uuid = ".$anvil->Database->quote($ssh_tunnel_host_uuid).",
ssh_tunnel_pid = ".$anvil->Database->quote($ssh_tunnel_pid).",
ssh_tunnel_forward_port = ".$anvil->Database->quote($ssh_tunnel_forward_port)."
";
}
else
{
# Failed to build query set key-value pairs; don't continue.
return;
next if (not defined $column_value);
my $quoted_value = ($column_value eq "NULL")
? $column_value
: $anvil->Database->quote($column_value);
$insert_columns .= "$column_name,\n\t";
$insert_values .= "$quoted_value,\n\t";
$update_values .= "$column_name = $quoted_value,\n\t";
}
my $query = "
UPDATE public.vnc_pipes
SET ".$set_string."
WHERE
server_uuid = ".$anvil->Database->quote($server_uuid)."
AND
ssh_tunnel_host_uuid = ".$anvil->Database->quote($ssh_tunnel_host_uuid)."
;";
INSERT INTO public.vnc_pipes (
uuid,
server_uuid,
$insert_columns
modified_date
) VALUES (
".$anvil->Database->quote($vnc_pipe_uuid).",
".$anvil->Database->quote($server_uuid).",
$insert_values
$quoted_vnc_pipe_mdate
) ON CONFLICT (server_uuid) DO UPDATE SET
$update_values
modified_date = $quoted_vnc_pipe_mdate;";
$anvil->Database->write({ query => $query, source => $THIS_FILE, line => __LINE__ });
}
@ -703,12 +659,24 @@ sub get_vnc_pipe
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $host_uuid = $parameters->{host_uuid};
return if (not defined $server_uuid);
my $host_uuid = $parameters->{host_uuid}; # ssh_tunnel_host_uuid
my $ws_host_uuid = $parameters->{ws_host_uuid};
my $vnc_pipe_info;
my $cond_ssht_huuid = defined $host_uuid ? "AND ssh_tunnel_host_uuid = ".$anvil->Database->quote($host_uuid) : "";
my $cond_ws_huuid = defined $ws_host_uuid ? "AND ws_host_uuid = ".$anvil->Database->quote($ws_host_uuid) : "";
my $query = "
SELECT
hos.host_name, vnc.ws_pid, vnc.ssh_tunnel_pid
hos.host_name,
vnc.ws_host_uuid,
vnc.ws_pid,
vnc.ws_source_port,
vnc.ssh_tunnel_pid
FROM
public.vnc_pipes AS vnc
JOIN
@ -717,8 +685,8 @@ ON
vnc.ws_host_uuid = hos.host_uuid
WHERE
server_uuid = ".$anvil->Database->quote($server_uuid)."
AND
ssh_tunnel_host_uuid = ".$anvil->Database->quote($host_uuid)."
$cond_ssht_huuid
$cond_ws_huuid
;";
my $results = $anvil->Database->query({ query => $query, source => $THIS_FILE, line => __LINE__ });
@ -730,73 +698,27 @@ AND
$vnc_pipe_info = {};
$vnc_pipe_info->{host_name} = $row->[0];
$vnc_pipe_info->{ws_pid} = $row->[1];
$vnc_pipe_info->{ssh_tunnel_pid} = $row->[2];
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
host_name => $vnc_pipe_info->{host_name},
ws_pid => $vnc_pipe_info->{ws_pid},
ssh_tunnel_pid => $vnc_pipe_info->{ssh_tunnel_pid}
} });
$vnc_pipe_info->{ws_host_uuid} = $row->[1];
$vnc_pipe_info->{ws_pid} = $row->[2];
$vnc_pipe_info->{ws_source_port} = $row->[3];
$vnc_pipe_info->{ssh_tunnel_pid} = $row->[4];
}
return $vnc_pipe_info;
}
sub delete_vnc_pipe
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $host_uuid = $parameters->{host_uuid};
my $ws_pid = $parameters->{ws_pid};
my $ssh_tunnel_pid = $parameters->{ssh_tunnel_pid};
my $query = "DELETE FROM public.vnc_pipes ";
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $vnc_pipe_info });
if (defined $ws_pid)
{
$query = $query."WHERE ws_pid = ".$anvil->Database->quote($ws_pid).";";
}
elsif (defined $ssh_tunnel_pid)
{
$query = $query."WHERE ssh_tunnel_pid = ".$anvil->Database->quote($ssh_tunnel_pid).";";
}
else
{
$query = $query."
WHERE
server_uuid = ".$anvil->Database->quote($server_uuid)."
AND
ssh_tunnel_host_uuid = ".$anvil->Database->quote($host_uuid)."
;";
}
$anvil->Database->write({ query => $query, source => $THIS_FILE, line => __LINE__ });
return $vnc_pipe_info;
}
sub open_vnc_pipe
sub open_ws
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $host_uuid = $parameters->{host_uuid};
my $vnc_pipe_info;
my $server_info = get_server_info({ server_uuid => $server_uuid });
my $server_info = $parameters->{server_info} // get_server_info($parameters);
if (not defined $server_info)
{
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => "error_0313", variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "error_0313,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!",
job_status => "failed"
});
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $parameters });
return;
}
return (1, "error_0313") if (not defined $server_info);
my $vnc_info = get_vnc_info({
host_name => $server_info->{host_name},
@ -804,145 +726,198 @@ sub open_vnc_pipe
server_uuid => $server_uuid
});
if (not defined $vnc_info)
{
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => "error_0314", variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "error_0314,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!",
job_status => "failed"
});
return;
}
return (1, "error0314") if (not defined $vnc_info);
my $ws_info = start_websockify({
server_uuid => $server_uuid,
host_uuid => $host_uuid,
target_port => $vnc_info->{port},
ws_host_name => $server_info->{host_name},
ws_host_uuid => $server_info->{host_uuid},
target_port => $vnc_info->{port}
ws_host_uuid => $server_info->{host_uuid}
});
if (not defined $ws_info)
return (1, "error_0315") if (not defined $ws_info);
if ($ws_info->{is_new} or $ws_info->{is_update})
{
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => "error_0315", variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "error_0315,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!",
job_status => "failed"
insert_or_update_vnc_pipe({
server_uuid => $server_uuid,
server_vnc_port => $vnc_info->{port},
ws_host_uuid => $server_info->{host_uuid},
ws_pid => $ws_info->{pid},
ws_source_port => $ws_info->{source_port}
});
return;
}
return (0, $ws_info);
}
sub close_ws
{
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $server_uuid = $parameters->{server_uuid};
my $vnc_pipe_info = $parameters->{vnc_pipe_info} // get_vnc_pipe({ server_uuid => $server_uuid, ws_host_uuid => $host_uuid });
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $parameters });
return (1, "error_0317") if (not defined $vnc_pipe_info);
return (0) if is_websockify_in_use_by_others({ ws_pid => $vnc_pipe_info->{ws_pid} });
stop_websockify({ host_name => $vnc_pipe_info->{host_name}, ws_pid => $vnc_pipe_info->{ws_pid} });
insert_or_update_vnc_pipe({
server_uuid => $server_uuid,
server_vnc_port => "NULL",
ws_host_uuid => "NULL",
ws_pid => "NULL",
ws_source_port => "NULL"
});
return (0);
}
sub open_st
{
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $server_uuid = $parameters->{server_uuid};
my $server_info = $parameters->{server_info} // get_server_info($parameters);
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $parameters });
return (1, "error_0313") if (not defined $server_info);
my $vnc_pipe_info = get_vnc_pipe({ server_uuid => $server_uuid, ws_host_uuid => $server_info->{host_uuid} });
return (1, "error_0317") if (not defined $vnc_pipe_info);
my $ssh_tunnel_info = start_ssh_tunnel({
server_uuid => $server_uuid,
host_uuid => $host_uuid,
ws_host_name => $server_info->{host_name},
ws_host_uuid => $server_info->{host_uuid},
ws_source_port => $ws_info->{source_port}
ws_host_name => $vnc_pipe_info->{host_name},
ws_host_uuid => $vnc_pipe_info->{ws_host_uuid},
ws_source_port => $vnc_pipe_info->{ws_source_port}
});
if (not defined $ssh_tunnel_info)
{
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => "error_0316", variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "error_0316,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!",
job_status => "failed"
});
return;
}
return (1, "error_0316") if (not defined $ssh_tunnel_info);
if ($ws_info->{is_new} or $ssh_tunnel_info->{is_new})
if ($ssh_tunnel_info->{is_new} or $ssh_tunnel_info->{is_update})
{
insert_vnc_pipe({
insert_or_update_vnc_pipe({
server_uuid => $server_uuid,
server_vnc_port => $vnc_info->{port},
ws_host_uuid => $server_info->{host_uuid},
ws_pid => $ws_info->{pid},
ws_source_port => $ws_info->{source_port},
ssh_tunnel_host_uuid => $host_uuid,
ssh_tunnel_pid => $ssh_tunnel_info->{pid},
ssh_tunnel_forward_port => $ssh_tunnel_info->{forward_port}
});
}
else
{
if ($ws_info->{is_update})
{
update_vnc_pipe({
server_uuid => $server_uuid,
ssh_tunnel_host_uuid => $host_uuid,
server_vnc_port => $vnc_info->{port},
ws_host_uuid => $server_info->{host_uuid},
ws_pid => $ws_info->{pid},
ws_source_port => $ws_info->{source_port}
});
}
if ($ssh_tunnel_info->{is_update})
{
update_vnc_pipe({
server_uuid => $server_uuid,
ssh_tunnel_host_uuid => $host_uuid,
ssh_tunnel_pid => $ssh_tunnel_info->{pid},
ssh_tunnel_forward_port => $ssh_tunnel_info->{forward_port}
});
}
}
return (0, $ssh_tunnel_info);
}
sub close_st
{
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $server_uuid = $parameters->{server_uuid};
my $vnc_pipe_info = $parameters->{vnc_pipe_info} // get_vnc_pipe($parameters);
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $parameters });
return (1, "error_0317") if (not defined $vnc_pipe_info);
stop_ssh_tunnel({ ssh_tunnel_pid => $vnc_pipe_info->{ssh_tunnel_pid} });
insert_or_update_vnc_pipe({
server_uuid => $server_uuid,
ssh_tunnel_host_uuid => "NULL",
ssh_tunnel_pid => "NULL",
ssh_tunnel_forward_port => "NULL"
});
return (0);
}
sub handle_vnc_pipe_error
{
my $error_key = shift;
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $server_uuid = $parameters->{server_uuid};
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => $error_key, variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "$error_key,!!server_uuid!$server_uuid!!,!!host_uuid!$host_uuid!!",
job_status => "failed"
});
}
sub open_vnc_pipe
{
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $is_print = $parameters->{print} // (not $anvil->data->{switches}{'job-uuid'});
my $server_uuid = $parameters->{server_uuid};
my $is_error;
my $open_output;
my $open_params = {
host_uuid => $host_uuid,
server_info => get_server_info($parameters),
server_uuid => $server_uuid
};
($is_error, $open_output) = open_ws($open_params);
return handle_vnc_pipe_error($open_output, $open_params) if ($is_error);
($is_error, $open_output) = open_st($open_params);
return handle_vnc_pipe_error($open_output, $open_params) if ($is_error);
$anvil->Job->update_progress({
progress => 100,
message => "message_0260,!!operation!opening!!,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!"
});
$vnc_pipe_info = { forward_port => defined $ssh_tunnel_info->{forward_port} ? $ssh_tunnel_info->{forward_port} : "" };
my $forward_port = $open_output->{forward_port} // "";
return $vnc_pipe_info;
print "protocol:ws,forward_port:$forward_port\n" if ($is_print);
return (0, { forward_port => $forward_port });
}
sub close_vnc_pipe
{
my $parameters = shift;
my $server_uuid = $parameters->{server_uuid};
my $host_uuid = $parameters->{host_uuid};
my $vnc_pipe_info = get_vnc_pipe($parameters);
my $parameters = shift;
my $host_uuid = $parameters->{host_uuid};
my $server_uuid = $parameters->{server_uuid};
if (not defined $vnc_pipe_info)
{
$anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 1, key => "error_0317", variables => {
server_uuid => $server_uuid,
host_uuid => $host_uuid
} });
$anvil->Job->update_progress({
progress => 100,
message => "error_0317,!!server_uuid!".$server_uuid."!!,!!host_uuid!".$host_uuid."!!",
job_status => "failed"
});
my $is_error;
my $close_output;
return;
}
my $close_params = {
host_uuid => $host_uuid,
server_uuid => $server_uuid,
vnc_pipe_info => get_vnc_pipe($parameters)
};
if (not is_websockify_in_use_by_others({ ws_pid => $vnc_pipe_info->{ws_pid} }))
{
stop_websockify({ host_name => $vnc_pipe_info->{host_name}, ws_pid => $vnc_pipe_info->{ws_pid} });
}
($is_error, $close_output) = close_ws($close_params);
stop_ssh_tunnel({ ssh_tunnel_pid => $vnc_pipe_info->{ssh_tunnel_pid} });
return handle_vnc_pipe_error($close_output, $close_params) if ($is_error);
delete_vnc_pipe($parameters);
($is_error, $close_output) = close_st($close_params);
return handle_vnc_pipe_error($close_output, $close_params) if ($is_error);
$anvil->Job->update_progress({
progress => 100,
@ -1013,39 +988,44 @@ if ($anvil->data->{switches}{'job-uuid'})
$anvil->Database->get_hosts();
$anvil->Database->get_anvils();
my $component = $anvil->data->{switches}{'component'} // "all";
my $is_drop_table = $anvil->data->{switches}{'drop-table'};
my $is_open = $anvil->data->{switches}{'open'};
my $is_ws_only = $anvil->data->{switches}{'ws-only'};
my $server_uuid = $anvil->data->{switches}{'server-uuid'};
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => {
server_uuid => $server_uuid,
component => $component,
is_open => $is_open,
is_drop_table => $is_drop_table
is_drop_table => $is_drop_table,
server_uuid => $server_uuid
} });
my $map_to_operation = {
all => { close => \&close_vnc_pipe, open => \&open_vnc_pipe },
st => { close => \&close_st, open => \&open_st },
ws => { close => \&close_ws, open => \&open_ws },
};
if ($server_uuid)
{
create_vnc_pipes_table();
my $vnc_pipe_parameters = {
my $ops = $map_to_operation->{$component};
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => $ops });
$anvil->nice_exit({ exit_code => 1 }) if (not defined $ops);
my $op = ($is_open) ? "open" : "close";
$anvil->Log->variables({ source => $THIS_FILE, line => __LINE__, level => 2, list => { operation => $op } });
my ($is_error) = $ops->{$op}({
server_uuid => $server_uuid,
host_uuid => $anvil->data->{sys}{host_uuid}
};
if ($is_open)
{
my $vnc_pipe_info = open_vnc_pipe($vnc_pipe_parameters);
});
if ((not $anvil->data->{switches}{'job-uuid'}) and (defined $vnc_pipe_info))
{
print "protocol:ws,forward_port:".$vnc_pipe_info->{forward_port}."\n";
}
}
else
{
close_vnc_pipe($vnc_pipe_parameters);
}
$anvil->nice_exit({ exit_code => 2 }) if ($is_error);
}
elsif ($is_drop_table)
{
@ -1056,4 +1036,8 @@ elsif ($is_drop_table)
else
{
$anvil->Job->update_progress({ progress => 100, message => "message_0262" });
$anvil->nice_exit({ exit_code => 3 });
}
$anvil->nice_exit({ exit_code => 0 });

Loading…
Cancel
Save