]>
git.proxmox.com Git - pve-client.git/blob - PVE/APIClient/Commands/GuestStatus.pm
03e2e4aea3a6b65ddc5ccb85a7f44c6e4edc965b
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'),
65 description
=> "Timeout in seconds",
72 returns
=> { type
=> 'null'},
76 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
77 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
79 $guest_status_command->($remote, $vmid, 'stop', $param);
84 __PACKAGE__-
>register_method ({
88 description
=> "Stop a guest (VM/Container).",
90 additionalProperties
=> 0,
92 remote
=> get_standard_option
('pveclient-remote-name'),
93 vmid
=> get_standard_option
('pve-vmid'),
95 description
=> "Make sure the Container/VM stops.",
100 description
=> "Timeout in seconds",
107 returns
=> { type
=> 'null'},
111 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
112 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
114 $guest_status_command->($remote, $vmid, 'shutdown', $param);
119 __PACKAGE__-
>register_method ({
123 description
=> "Suspend a guest VM.",
125 additionalProperties
=> 0,
127 remote
=> get_standard_option
('pveclient-remote-name'),
128 vmid
=> get_standard_option
('pve-vmid'),
131 returns
=> { type
=> 'null'},
135 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
136 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
138 $guest_status_command->($remote, $vmid, 'suspend', $param);
143 __PACKAGE__-
>register_method ({
147 description
=> "Resume a guest VM.",
149 additionalProperties
=> 0,
151 remote
=> get_standard_option
('pveclient-remote-name'),
152 vmid
=> get_standard_option
('pve-vmid'),
155 returns
=> { type
=> 'null'},
159 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
160 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
162 $guest_status_command->($remote, $vmid, 'resume', $param);
167 __PACKAGE__-
>register_method ({
171 description
=> "Run the spice client for a guest (VM/Container)",
173 additionalProperties
=> 0,
175 remote
=> get_standard_option
('pveclient-remote-name'),
176 vmid
=> get_standard_option
('pve-vmid'),
179 returns
=> { type
=> 'null'},
183 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
184 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
186 my $config = PVE
::APIClient
::Config-
>load();
187 my $conn = PVE
::APIClient
::Config-
>remote_conn($config, $remote);
189 my $resource = PVE
::APIClient
::Helpers
::get_vmid_resource
($conn, $vmid);
191 my $res = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/spiceproxy", {});
193 my $vvsetup = "[virt-viewer]\n";
194 foreach my $k (keys %$res) {
195 $vvsetup .= "$k=$res->{$k}\n";
198 my ($fh, $filename) = tempfile
( "tempXXXXX", SUFFIX
=> '.vv', TMPDIR
=> 1);
199 syswrite($fh, $vvsetup);
201 system("nohup remote-viewer $filename 1>/dev/null 2>&1 &");
203 print "failed to execute remote-viewer: $!\n";