]>
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'),
65 description
=> "Timeout in seconds",
71 returns
=> { type
=> 'null'},
75 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
76 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
78 $guest_status_command->($remote, $vmid, 'stop', $param);
83 __PACKAGE__-
>register_method ({
87 description
=> "Stop a guest (VM/Container).",
89 additionalProperties
=> 0,
91 remote
=> get_standard_option
('pveclient-remote-name'),
92 vmid
=> get_standard_option
('pve-vmid'),
94 description
=> "Make sure the Container/VM stops.",
99 description
=> "Timeout in seconds",
105 returns
=> { type
=> 'null'},
109 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
110 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
112 $guest_status_command->($remote, $vmid, 'shutdown', $param);
117 __PACKAGE__-
>register_method ({
121 description
=> "Suspend a guest VM.",
123 additionalProperties
=> 0,
125 remote
=> get_standard_option
('pveclient-remote-name'),
126 vmid
=> get_standard_option
('pve-vmid'),
129 returns
=> { type
=> 'null'},
133 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
134 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
136 $guest_status_command->($remote, $vmid, 'suspend', $param);
141 __PACKAGE__-
>register_method ({
145 description
=> "Resume a guest VM.",
147 additionalProperties
=> 0,
149 remote
=> get_standard_option
('pveclient-remote-name'),
150 vmid
=> get_standard_option
('pve-vmid'),
153 returns
=> { type
=> 'null'},
157 my $remote = PVE
::APIClient
::Tools
::extract_param
($param, 'remote');
158 my $vmid = PVE
::APIClient
::Tools
::extract_param
($param, 'vmid');
160 $guest_status_command->($remote, $vmid, 'resume', $param);
165 __PACKAGE__-
>register_method ({
169 description
=> "Run the spice client for a guest (VM/Container)",
171 additionalProperties
=> 0,
173 remote
=> get_standard_option
('pveclient-remote-name'),
174 vmid
=> get_standard_option
('pve-vmid'),
177 returns
=> { type
=> 'null'},
181 my $remote = PVE
::Tools
::extract_param
($param, 'remote');
182 my $vmid = PVE
::Tools
::extract_param
($param, 'vmid');
184 my $config = PVE
::APIClient
::Config-
>load();
185 my $conn = PVE
::APIClient
::Config-
>remote_conn($config, $remote);
187 my $resource = PVE
::APIClient
::Helpers
::get_vmid_resource
($conn, $vmid);
189 my $res = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/spiceproxy", {});
191 my $vvsetup = "[virt-viewer]\n";
192 foreach my $k (keys %$res) {
193 $vvsetup .= "$k=$res->{$k}\n";
196 my ($fh, $filename) = tempfile
( "tempXXXXX", SUFFIX
=> '.vv', TMPDIR
=> 1);
197 syswrite($fh, $vvsetup);
199 system("nohup remote-viewer $filename 1>/dev/null 2>&1 &");
201 print "failed to execute remote-viewer: $!\n";