Please note that we group similar commands inside a single command class.
Our CLIHandler then nicely groups this commands inside help.
install -D -m 0644 PVE/APIClient/Config.pm ${LIB_DIR}/PVE/APIClient/Config.pm
install -D -m 0644 PVE/APIClient/Commands/remote.pm ${LIB_DIR}/PVE/APIClient/Commands/remote.pm
install -D -m 0644 PVE/APIClient/Commands/lxc.pm ${LIB_DIR}/PVE/APIClient/Commands/lxc.pm
+ install -D -m 0644 PVE/APIClient/Commands/GuestStatus.pm ${LIB_DIR}/PVE/APIClient/Commands/GuestStatus.pm
install -D -m 0644 pve-api-definition.dat ${LIB_DIR}/pve-api-definition.dat
install -D -m 0755 pveclient ${DESTDIR}/usr/bin/pveclient
install -D -m 0644 pveclient.bash-completion ${BASHCOMPLDIR}/pveclient
--- /dev/null
+package PVE::APIClient::Commands::GuestStatus;
+
+use strict;
+use warnings;
+
+use PVE::APIClient::Helpers;
+use PVE::APIClient::Config;
+
+use PVE::JSONSchema qw(get_standard_option);
+
+use PVE::CLIHandler;
+
+use base qw(PVE::CLIHandler);
+
+my $guest_status_command = sub {
+ my ($remote, $vmid, $cmd, $param) = @_,
+
+ my $config = PVE::APIClient::Config->load();
+ my $conn = PVE::APIClient::Config->remote_conn($config, $remote);
+
+ my $resource = PVE::APIClient::Helpers::get_vmid_resource($conn, $vmid);
+
+ my $upid = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/status/$cmd", $param);
+
+ print PVE::APIClient::Helpers::poll_task($conn, $resource->{node}, $upid) . "\n";
+};
+
+__PACKAGE__->register_method ({
+ name => 'start',
+ path => 'start',
+ method => 'POST',
+ description => "Start a guest (VM/Container).",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ remote => get_standard_option('pveclient-remote-name'),
+ vmid => get_standard_option('pve-vmid'),
+ },
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $remote = PVE::Tools::extract_param($param, 'remote');
+ my $vmid = PVE::Tools::extract_param($param, 'vmid');
+
+ $guest_status_command->($remote, $vmid, 'start', $param);
+
+ return undef;
+ }});
+
+__PACKAGE__->register_method ({
+ name => 'stop',
+ path => 'stop',
+ method => 'POST',
+ description => "Stop a guest (VM/Container).",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ remote => get_standard_option('pveclient-remote-name'),
+ vmid => get_standard_option('pve-vmid'),
+ },
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $remote = PVE::Tools::extract_param($param, 'remote');
+ my $vmid = PVE::Tools::extract_param($param, 'vmid');
+
+ $guest_status_command->($remote, $vmid, 'stop', $param);
+
+ return undef;
+ }});
+
+1;
+++ /dev/null
-package PVE::APIClient::Commands::start;
-
-use strict;
-use warnings;
-
-use PVE::APIClient::Helpers;
-use PVE::JSONSchema qw(get_standard_option);
-
-use PVE::CLIHandler;
-
-use base qw(PVE::CLIHandler);
-
-__PACKAGE__->register_method ({
- name => 'start',
- path => 'start',
- method => 'POST',
- description => "Start a Qemu VM/LinuX Container.",
- parameters => {
- additionalProperties => 0,
- properties => {
- remote => get_standard_option('pveclient-remote-name'),
- vmid => get_standard_option('pve-vmid'),
- },
- },
- returns => { type => 'null'},
- code => sub {
- my ($param) = @_;
-
- my $config = PVE::APIClient::Config->load();
- my $conn = PVE::APIClient::Config->remote_conn($config, $param->{remote});
-
- my $resource = PVE::APIClient::Helpers::get_vmid_resource($conn, $param->{vmid});
-
- my $upid = $conn->post("api2/json/nodes/$resource->{node}/$resource->{type}/$resource->{vmid}/status/start", {});
-
- print PVE::APIClient::Helpers::poll_task($conn, $resource->{node}, $upid) . "\n";
-
- return undef;
- }});
-
-our $cmddef = [ __PACKAGE__, 'start', ['remote', 'vmid']];
-
-1;
use PVE::APIClient::Commands::remote;
use PVE::APIClient::Commands::list;
use PVE::APIClient::Commands::lxc;
-use PVE::APIClient::Commands::start;
+use PVE::APIClient::Commands::GuestStatus;
use JSON;
lxc => $PVE::APIClient::Commands::lxc::cmddef,
remote => $PVE::APIClient::Commands::remote::cmddef,
- start => $PVE::APIClient::Commands::start::cmddef,
+ start => [ 'PVE::APIClient::Commands::GuestStatus', 'start', ['remote', 'vmid']],
+ stop => [ 'PVE::APIClient::Commands::GuestStatus', 'stop', ['remote', 'vmid']],
api => {
get => [ __PACKAGE__, 'pveclient_get', ['remote', 'api_path']],