]>
git.proxmox.com Git - pve-client.git/blob - PVE/APIClient/Commands/GuestStatus.pm
57784e58b17400ab66a434cb900c6f1c9d0b4c75
1 package PVE
::APIClient
::Commands
::GuestStatus
;
6 use PVE
::APIClient
::Helpers
;
7 use PVE
::APIClient
::Config
;
9 use PVE
::APIClient
::JSONSchema
qw(get_standard_option);
11 use File
::Temp
qw(tempfile);
13 use PVE
::APIClient
::CLIHandler
;
15 use base
qw(PVE::APIClient::CLIHandler);
17 my $guest_status_command = sub {
18 my ($remote, $vmid, $cmd, $param) = @_,
20 my $config = PVE
::APIClient
::Config-
>load();
21 my $conn = PVE
::APIClient
::Config-
>remote_conn($config, $remote);
23 my $resource = PVE
::APIClient
::Helpers
::get_vmid_resource
($conn, $vmid);
25 my $upid = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/status/$cmd", $param);
27 print PVE
::APIClient
::Helpers
::poll_task
($conn, $resource->{node
}, $upid) . "\n";
30 __PACKAGE__-
>register_method ({
34 description
=> "Start a guest (VM/Container).",
36 additionalProperties
=> 0,
38 remote
=> get_standard_option
('pveclient-remote-name'),
39 vmid
=> get_standard_option
('pve-vmid'),
42 returns
=> { type
=> 'null'},
46 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
47 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
49 $guest_status_command->($remote, $vmid, 'start', $param);
54 __PACKAGE__-
>register_method ({
58 description
=> "Stop a guest (VM/Container).",
60 additionalProperties
=> 0,
62 remote
=> get_standard_option
('pveclient-remote-name'),
63 vmid
=> get_standard_option
('pve-vmid'),
66 returns
=> { type
=> 'null'},
70 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
71 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
73 $guest_status_command->($remote, $vmid, 'stop', $param);
78 __PACKAGE__-
>register_method ({
82 description
=> "Run the spice client for a guest (VM/Container)",
84 additionalProperties
=> 0,
86 remote
=> get_standard_option
('pveclient-remote-name'),
87 vmid
=> get_standard_option
('pve-vmid'),
90 returns
=> { type
=> 'null'},
94 my $remote = PVE
::Tools
::extract_param
($param, 'remote');
95 my $vmid = PVE
::Tools
::extract_param
($param, 'vmid');
97 my $config = PVE
::APIClient
::Config-
>load();
98 my $conn = PVE
::APIClient
::Config-
>remote_conn($config, $remote);
100 my $resource = PVE
::APIClient
::Helpers
::get_vmid_resource
($conn, $vmid);
102 my $res = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/spiceproxy", {});
104 my $vvsetup = "[virt-viewer]\n";
105 foreach my $k (keys %$res) {
106 $vvsetup .= "$k=$res->{$k}\n";
109 my ($fh, $filename) = tempfile
( "tempXXXXX", SUFFIX
=> '.vv', TMPDIR
=> 1);
110 syswrite($fh, $vvsetup);
112 system("nohup remote-viewer $filename 1>/dev/null 2>&1 &");
114 print "failed to execute remote-viewer: $!\n";