pve-client/PVE/APIClient/Commands/config.pm
2018-07-04 10:12:04 +02:00

94 lines
2.3 KiB
Perl

package PVE::APIClient::Commands::config;
use strict;
use warnings;
use Data::Dumper;
use PVE::APIClient::Helpers;
use PVE::APIClient::JSONSchema qw(get_standard_option);
use PVE::APIClient::Tools qw(extract_param);
use PVE::APIClient::Config;
use PVE::APIClient::CLIHandler;
use base qw(PVE::APIClient::CLIHandler);
my $list_return_props = { %{PVE::APIClient::DefaultsConfig->updateSchema(1)->{properties}} };
delete $list_return_props->{delete};
__PACKAGE__->register_method ({
name => 'list',
path => 'list',
method => 'GET',
description => "Dump default configuration.",
parameters => {
additionalProperties => 0,
},
returns => {
type => 'object',
properties => $list_return_props,
},
code => sub {
my $config = PVE::APIClient::Config->load();
my $defaults = PVE::APIClient::Config->get_defaults($config);
$defaults->{digest} = $config->{digest};
return $defaults;
}});
__PACKAGE__->register_method ({
name => 'set',
path => 'set',
method => 'PUT',
description => "Update a remote configuration.",
parameters => PVE::APIClient::DefaultsConfig->updateSchema(1),
returns => { type => 'null'},
code => sub {
my ($param) = @_;
my $digest = extract_param($param, 'digest');
my $delete = extract_param($param, 'delete');
my $code = sub {
my $config = PVE::APIClient::Config->load();
my $defaults = PVE::APIClient::Config->get_defaults($config);
my $plugin = PVE::APIClient::Config->lookup('defaults');
my $opts = $plugin->check_config('defaults', $param, 0, 1);
foreach my $k (%$opts) {
$defaults->{$k} = $opts->{$k};
}
if ($delete) {
my $options = $plugin->private()->{options}->{'defaults'};
foreach my $k (PVE::APIClient::Tools::split_list($delete)) {
my $d = $options->{$k} ||
die "no such option '$k'\n";
die "unable to delete required option '$k'\n"
if !$d->{optional};
die "unable to delete fixed option '$k'\n"
if $d->{fixed};
delete $defaults->{$k};
}
}
PVE::APIClient::Config->save($config);
};
PVE::APIClient::Config->lock_config(undef, $code);
return undef;
}});
our $cmddef = {
set => [ __PACKAGE__, 'set',],
list => [__PACKAGE__, 'list', undef, undef, sub { PVE::APIClient::Helpers::print_result(@_);}],
};
1;