]> git.proxmox.com Git - pve-client.git/blob - PVE/APIClient/Commands/config.pm
use packages from PVE::APIClient
[pve-client.git] / PVE / APIClient / Commands / config.pm
1 package PVE::APIClient::Commands::config;
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 use PVE::APIClient::JSONSchema qw(get_standard_option);
8 use PVE::APIClient::Tools qw(extract_param);
9 use PVE::APIClient::Config;
10
11 use PVE::APIClient::CLIHandler;
12
13 use base qw(PVE::APIClient::CLIHandler);
14
15 __PACKAGE__->register_method ({
16 name => 'list',
17 path => 'list',
18 method => 'GET',
19 description => "Dump default configuration.",
20 parameters => {
21 additionalProperties => 0,
22 },
23 returns => { type => 'null' },
24 code => sub {
25
26 my $config = PVE::APIClient::Config->load();
27
28 my $defaults = PVE::APIClient::Config->get_defaults($config);
29
30
31 print Dumper($config);
32
33 return undef;
34 }});
35
36 __PACKAGE__->register_method ({
37 name => 'set',
38 path => 'set',
39 method => 'PUT',
40 description => "Update a remote configuration.",
41 parameters => PVE::APIClient::DefaultsConfig->updateSchema(1),
42 returns => { type => 'null'},
43 code => sub {
44 my ($param) = @_;
45
46 # fixme: lock config file
47
48 my $digest = extract_param($param, 'digest');
49 my $delete = extract_param($param, 'delete');
50
51 my $config = PVE::APIClient::Config->load();
52 my $defaults = PVE::APIClient::Config->get_defaults($config);
53
54 my $plugin = PVE::APIClient::Config->lookup('defaults');
55 my $opts = $plugin->check_config('defaults', $param, 0, 1);
56
57 foreach my $k (%$opts) {
58 $defaults->{$k} = $opts->{$k};
59 }
60
61 if ($delete) {
62 my $options = $plugin->private()->{options}->{'defaults'};
63 foreach my $k (PVE::APIClient::Tools::split_list($delete)) {
64 my $d = $options->{$k} ||
65 die "no such option '$k'\n";
66 die "unable to delete required option '$k'\n"
67 if !$d->{optional};
68 die "unable to delete fixed option '$k'\n"
69 if $d->{fixed};
70 delete $defaults->{$k};
71 }
72 }
73
74 PVE::APIClient::Config->save($config);
75
76 return undef;
77 }});
78
79
80 our $cmddef = {
81 set => [ __PACKAGE__, 'set',],
82 list => [__PACKAGE__, 'list'],
83 };
84
85 1;