]>
git.proxmox.com Git - pve-client.git/blob - PVE/APIClient/Commands/GuestStatus.pm
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
=> "Stop a guest (VM/Container).",
84 additionalProperties
=> 0,
86 remote
=> get_standard_option
('pveclient-remote-name'),
87 vmid
=> get_standard_option
('pve-vmid'),
89 description
=> "Make sure the Container/VM stops.",
94 description
=> "Timeout in seconds",
101 returns
=> { type
=> 'null'},
105 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
106 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
108 $guest_status_command->($remote, $vmid, 'shutdown', $param);
113 __PACKAGE__-
>register_method ({
117 description
=> "Suspend a guest VM.",
119 additionalProperties
=> 0,
121 remote
=> get_standard_option
('pveclient-remote-name'),
122 vmid
=> get_standard_option
('pve-vmid'),
125 returns
=> { type
=> 'null'},
129 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
130 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
132 $guest_status_command->($remote, $vmid, 'suspend', $param);
137 __PACKAGE__-
>register_method ({
141 description
=> "Resume a guest VM.",
143 additionalProperties
=> 0,
145 remote
=> get_standard_option
('pveclient-remote-name'),
146 vmid
=> get_standard_option
('pve-vmid'),
149 returns
=> { type
=> 'null'},
153 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
154 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
156 $guest_status_command->($remote, $vmid, 'resume', $param);
161 __PACKAGE__-
>register_method ({
165 description
=> "Run the spice client for a guest (VM/Container)",
167 additionalProperties
=> 0,
169 remote
=> get_standard_option
('pveclient-remote-name'),
170 vmid
=> get_standard_option
('pve-vmid'),
173 returns
=> { type
=> 'null'},
177 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
178 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
180 my $config = PVE
::APIClient
::Config-
>load();
181 my $conn = PVE
::APIClient
::Config-
>remote_conn($config, $remote);
183 my $resource = PVE
::APIClient
::Helpers
::get_vmid_resource
($conn, $vmid);
185 my $res = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/spiceproxy", {});
187 my $vvsetup = "[virt-viewer]\n";
188 foreach my $k (keys %$res) {
189 $vvsetup .= "$k=$res->{$k}\n";
192 my ($fh, $filename) = tempfile
( "tempXXXXX", SUFFIX
=> '.vv', TMPDIR
=> 1);
193 syswrite($fh, $vvsetup);
195 system("nohup remote-viewer $filename 1>/dev/null 2>&1 &");
197 print "failed to execute remote-viewer: $!\n";