[pve-devel] [PATCH pve-client v2] Add update-pve-common make target to move code to PVE/APIClient.

Dietmar Maurer dietmar at proxmox.com
Wed Jun 13 13:25:21 CEST 2018


From: René Jochum <r.jochum at proxmox.com>

Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---
Changes in v2:
- use make instead of separate shell file
- do not copy Exception.pm
- install to correct path
- remove "use lib ..." 

 Makefile                              |  42 ++++++----
 PVE/{ => APIClient}/CLIHandler.pm     |  27 +++----
 PVE/APIClient/Commands/GuestStatus.pm |   8 +-
 PVE/APIClient/Commands/config.pm      |   4 +-
 PVE/APIClient/Commands/lxc.pm         |   1 -
 PVE/APIClient/Commands/remote.pm      |   4 +-
 PVE/APIClient/Config.pm               |   2 +-
 PVE/APIClient/Helpers.pm              |   2 +-
 PVE/{ => APIClient}/JSONSchema.pm     |  10 +--
 PVE/{ => APIClient}/PTY.pm            |   2 +-
 PVE/{ => APIClient}/RESTHandler.pm    |  49 ++++++------
 PVE/{ => APIClient}/SafeSyslog.pm     |   2 +-
 PVE/{ => APIClient}/SectionConfig.pm  |  10 +--
 PVE/{ => APIClient}/Tools.pm          |   2 +-
 PVE/Exception.pm                      | 142 ----------------------------------
 pveclient                             |   2 -
 16 files changed, 89 insertions(+), 220 deletions(-)
 rename PVE/{ => APIClient}/CLIHandler.pm (94%)
 rename PVE/{ => APIClient}/JSONSchema.pm (99%)
 rename PVE/{ => APIClient}/PTY.pm (99%)
 rename PVE/{ => APIClient}/RESTHandler.pm (93%)
 rename PVE/{ => APIClient}/SafeSyslog.pm (95%)
 rename PVE/{ => APIClient}/SectionConfig.pm (97%)
 rename PVE/{ => APIClient}/Tools.pm (99%)
 delete mode 100644 PVE/Exception.pm

diff --git a/Makefile b/Makefile
index b37b3fe..4c9572a 100644
--- a/Makefile
+++ b/Makefile
@@ -6,10 +6,19 @@ DEB=${PACKAGE}_${PKGVER}-${PKGREL}_all.deb
 
 DESTDIR=
 
+PERL5_DIR=${DESTDIR}/usr/share/perl5
 LIB_DIR=${DESTDIR}/usr/share/${PACKAGE}
 DOCDIR=${DESTDIR}/usr/share/doc/${PACKAGE}
 BASHCOMPLDIR=${DESTDIR}/usr/share/bash-completion/completions/
 
+PVE_COMMON_FILES=    		\
+	CLIHandler.pm		\
+	JSONSchema.pm		\
+	PTY.pm			\
+	RESTHandler.pm		\
+	SafeSyslog.pm		\
+	SectionConfig.pm	\
+
 all: ${DEB}
 
 .PHONY: deb
@@ -21,29 +30,30 @@ deb ${DEB}:
 	lintian ${DEB}
 
 install:  pve-api-definition.dat
-	install -d -m 0755 ${LIB_DIR}/PVE
+	install -d -m 0755 ${PERL5_DIR}/PVE/APIClient
 	# install library tools from pve-common
-	install -m 0644 PVE/Tools.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/SafeSyslog.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/Exception.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/JSONSchema.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/RESTHandler.pm  ${LIB_DIR}/PVE
-	install -m 0644 PVE/CLIHandler.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/PTY.pm ${LIB_DIR}/PVE
-	install -m 0644 PVE/SectionConfig.pm ${LIB_DIR}/PVE
+	for i in ${PVE_COMMON_FILES}; do install -m 0644 PVE/APIClient/$$i ${PERL5_DIR}/PVE/APIClient; done
 	# install pveclient
-	install -D -m 0644 PVE/APIClient/Helpers.pm ${LIB_DIR}/PVE/APIClient/Helpers.pm
-	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/config.pm ${LIB_DIR}/PVE/APIClient/Commands/config.pm
-	install -D -m 0644 PVE/APIClient/Commands/list.pm ${LIB_DIR}/PVE/APIClient/Commands/list.pm
-	install -D -m 0644 PVE/APIClient/Commands/GuestStatus.pm ${LIB_DIR}/PVE/APIClient/Commands/GuestStatus.pm
+	install -D -m 0644 PVE/APIClient/Tools.pm ${PERL5_DIR}/PVE/APIClient/Tools.pm
+	install -D -m 0644 PVE/APIClient/Helpers.pm ${PERL5_DIR}/PVE/APIClient/Helpers.pm
+	install -D -m 0644 PVE/APIClient/Config.pm ${PERL5_DIR}/PVE/APIClient/Config.pm
+	install -D -m 0644 PVE/APIClient/Commands/remote.pm ${PERL5_DIR}/PVE/APIClient/Commands/remote.pm
+	install -D -m 0644 PVE/APIClient/Commands/lxc.pm ${PERL5_DIR}/PVE/APIClient/Commands/lxc.pm
+	install -D -m 0644 PVE/APIClient/Commands/config.pm ${PERL5_DIR}/PVE/APIClient/Commands/config.pm
+	install -D -m 0644 PVE/APIClient/Commands/list.pm ${PERL5_DIR}/PVE/APIClient/Commands/list.pm
+	install -D -m 0644 PVE/APIClient/Commands/GuestStatus.pm ${PERL5_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
 
 
+update-pve-common:
+	for i in ${PVE_COMMON_FILES}; do cp ../pve-common/src/PVE/$$i PVE/APIClient/; done
+	for i in ${PVE_COMMON_FILES}; do sed -i 's/PVE::/PVE::APIClient::/g' PVE/APIClient/$$i; done
+	# Remove INotify from CLIHandler.pm
+	sed -i 's/use PVE::APIClient::INotify;//' PVE/APIClient/CLIHandler.pm
+
+
 pve-api-definition.dat:
 	./extractapi.pl > pve-api-definition.dat.tmp
 	mv pve-api-definition.dat.tmp pve-api-definition.dat
diff --git a/PVE/CLIHandler.pm b/PVE/APIClient/CLIHandler.pm
similarity index 94%
rename from PVE/CLIHandler.pm
rename to PVE/APIClient/CLIHandler.pm
index 514906a..a1cd528 100644
--- a/PVE/CLIHandler.pm
+++ b/PVE/APIClient/CLIHandler.pm
@@ -1,13 +1,14 @@
-package PVE::CLIHandler;
+package PVE::APIClient::CLIHandler;
 
 use strict;
 use warnings;
 
-use PVE::SafeSyslog;
-use PVE::Exception qw(raise raise_param_exc);
-use PVE::RESTHandler;
+use PVE::APIClient::SafeSyslog;
+use PVE::APIClient::Exception qw(raise raise_param_exc);
+use PVE::APIClient::RESTHandler;
 
-use base qw(PVE::RESTHandler);
+
+use base qw(PVE::APIClient::RESTHandler);
 
 # $cmddef defines which (sub)commands are available in a specific CLI class.
 # A real command is always an array consisting of its class, name, array of
@@ -22,13 +23,13 @@ use base qw(PVE::RESTHandler);
 #
 # Examples:
 # $cmddef = {
-#     command => [ 'PVE::API2::Class', 'command', [ 'arg1', 'arg2' ], { node => $nodename } ],
+#     command => [ 'PVE::APIClient::API2::Class', 'command', [ 'arg1', 'arg2' ], { node => $nodename } ],
 #     do => {
-#         this => [ 'PVE::API2::OtherClass', 'method', [ 'arg1' ], undef, sub {
+#         this => [ 'PVE::APIClient::API2::OtherClass', 'method', [ 'arg1' ], undef, sub {
 #             my ($res) = @_;
 #             print "$res\n";
 #         }],
-#         that => [ 'PVE::API2::OtherClass', 'subroutine' [] ],
+#         that => [ 'PVE::APIClient::API2::OtherClass', 'subroutine' [] ],
 #     },
 #     dothat => { alias => 'do that' },
 # }
@@ -189,7 +190,7 @@ __PACKAGE__->register_method ({
     parameters => {
 	additionalProperties => 0,
 	properties => {
-	    'extra-args' => PVE::JSONSchema::get_standard_option('extra-args', {
+	    'extra-args' => PVE::APIClient::JSONSchema::get_standard_option('extra-args', {
 		description => 'Shows help for a specific command',
 		completion => $complete_command_names,
 	    }),
@@ -309,7 +310,7 @@ my $print_bash_completion = sub {
     my $cmdline = substr($ENV{COMP_LINE}, 0, $ENV{COMP_POINT});
     print STDERR "\nCMDLINE: $ENV{COMP_LINE}\n" if $debug;
 
-    my $args = PVE::Tools::split_args($cmdline);
+    my $args = PVE::APIClient::Tools::split_args($cmdline);
     shift @$args; # no need for program name
     my $print_result = sub {
 	foreach my $p (@_) {
@@ -400,7 +401,7 @@ sub verify_api {
     my ($class) = @_;
 
     # simply verify all registered methods
-    PVE::RESTHandler::validate_method_schemas();
+    PVE::APIClient::RESTHandler::validate_method_schemas();
 }
 
 my $get_exe_name = sub {
@@ -476,7 +477,7 @@ my $handle_cmd  = sub {
     # call verifyapi before setup_environment(), don't execute any real code in
     # this case
     if ($cmd eq 'verifyapi') {
-	PVE::RESTHandler::validate_method_schemas();
+	PVE::APIClient::RESTHandler::validate_method_schemas();
 	return;
     }
 
@@ -513,7 +514,7 @@ my $handle_simple_cmd = sub {
 	    print STDERR "$str\n\n";
 	    return;
 	} elsif ($args->[0] eq 'verifyapi') {
-	    PVE::RESTHandler::validate_method_schemas();
+	    PVE::APIClient::RESTHandler::validate_method_schemas();
 	    return;
 	}
     }
diff --git a/PVE/APIClient/Commands/GuestStatus.pm b/PVE/APIClient/Commands/GuestStatus.pm
index 50730db..4a50164 100644
--- a/PVE/APIClient/Commands/GuestStatus.pm
+++ b/PVE/APIClient/Commands/GuestStatus.pm
@@ -43,8 +43,8 @@ __PACKAGE__->register_method ({
     code => sub {
 	my ($param) = @_;
 
-	my $remote = PVE::Tools::extract_param($param, 'remote');
-	my $vmid = PVE::Tools::extract_param($param, 'vmid');
+	my $remote = PVE::APIClient::Tools::extract_param($param, 'remote');
+	my $vmid = PVE::APIClient::Tools::extract_param($param, 'vmid');
 
 	$guest_status_command->($remote, $vmid, 'start', $param);
 
@@ -67,8 +67,8 @@ __PACKAGE__->register_method ({
     code => sub {
 	my ($param) = @_;
 
-	my $remote = PVE::Tools::extract_param($param, 'remote');
-	my $vmid = PVE::Tools::extract_param($param, 'vmid');
+	my $remote = PVE::APIClient::Tools::extract_param($param, 'remote');
+	my $vmid = PVE::APIClient::Tools::extract_param($param, 'vmid');
 
 	$guest_status_command->($remote, $vmid, 'stop', $param);
 
diff --git a/PVE/APIClient/Commands/config.pm b/PVE/APIClient/Commands/config.pm
index 4015ad8..6f24e2c 100644
--- a/PVE/APIClient/Commands/config.pm
+++ b/PVE/APIClient/Commands/config.pm
@@ -5,7 +5,7 @@ use warnings;
 use Data::Dumper;
 
 use PVE::JSONSchema qw(get_standard_option);
-use PVE::Tools qw(extract_param);
+use PVE::APIClient::Tools qw(extract_param);
 use PVE::APIClient::Config;
 
 use PVE::CLIHandler;
@@ -60,7 +60,7 @@ __PACKAGE__->register_method ({
 
 	if ($delete) {
 	    my $options = $plugin->private()->{options}->{'defaults'};
-	    foreach my $k (PVE::Tools::split_list($delete)) {
+	    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"
diff --git a/PVE/APIClient/Commands/lxc.pm b/PVE/APIClient/Commands/lxc.pm
index 4e76f70..d535188 100644
--- a/PVE/APIClient/Commands/lxc.pm
+++ b/PVE/APIClient/Commands/lxc.pm
@@ -11,7 +11,6 @@ use MIME::Base64;
 use Digest::SHA;
 use HTTP::Response;
 
-use PVE::Tools;
 use PVE::JSONSchema qw(get_standard_option);
 use PVE::CLIHandler;
 use PVE::PTY;
diff --git a/PVE/APIClient/Commands/remote.pm b/PVE/APIClient/Commands/remote.pm
index 0f465ea..0c3d17a 100644
--- a/PVE/APIClient/Commands/remote.pm
+++ b/PVE/APIClient/Commands/remote.pm
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 use PVE::JSONSchema qw(get_standard_option);
-use PVE::Tools qw(extract_param);
+use PVE::APIClient::Tools qw(extract_param);
 use PVE::APIClient::Config;
 
 use PVE::CLIHandler;
@@ -127,7 +127,7 @@ __PACKAGE__->register_method ({
 
 	if ($delete) {
 	    my $options = $plugin->private()->{options}->{'remote'};
-	    foreach my $k (PVE::Tools::split_list($delete)) {
+	    foreach my $k (PVE::APIClient::Tools::APIClient::split_list($delete)) {
 		my $d = $options->{$k} ||
 		    die "no such option '$k'\n";
 		die "unable to delete required option '$k'\n"
diff --git a/PVE/APIClient/Config.pm b/PVE/APIClient/Config.pm
index 166a629..7189d8e 100644
--- a/PVE/APIClient/Config.pm
+++ b/PVE/APIClient/Config.pm
@@ -6,7 +6,7 @@ use JSON;
 
 use PVE::JSONSchema;
 use PVE::SectionConfig;
-use PVE::Tools qw(file_get_contents file_set_contents);
+use PVE::APIClient::Tools qw(file_get_contents file_set_contents);
 
 use base qw(PVE::SectionConfig);
 
diff --git a/PVE/APIClient/Helpers.pm b/PVE/APIClient/Helpers.pm
index 28fd1c4..1ea8a5e 100644
--- a/PVE/APIClient/Helpers.pm
+++ b/PVE/APIClient/Helpers.pm
@@ -175,7 +175,7 @@ sub extract_path_info {
 	    $test_path_properties->([$0, @ARGV]);
 	} elsif ($cmd eq 'bashcomplete') {
 	    my $cmdline = substr($ENV{COMP_LINE}, 0, $ENV{COMP_POINT});
-	    my $args = PVE::Tools::split_args($cmdline);
+	    my $args = PVE::APIClient::Tools::split_args($cmdline);
 	    $test_path_properties->($args);
 	}
     }
diff --git a/PVE/JSONSchema.pm b/PVE/APIClient/JSONSchema.pm
similarity index 99%
rename from PVE/JSONSchema.pm
rename to PVE/APIClient/JSONSchema.pm
index f014dc3..0c88b63 100644
--- a/PVE/JSONSchema.pm
+++ b/PVE/APIClient/JSONSchema.pm
@@ -1,4 +1,4 @@
-package PVE::JSONSchema;
+package PVE::APIClient::JSONSchema;
 
 use strict;
 use warnings;
@@ -7,8 +7,8 @@ use Getopt::Long;
 use Encode::Locale;
 use Encode;
 use Devel::Cycle -quiet; # todo: remove?
-use PVE::Tools qw(split_list $IPV6RE $IPV4RE);
-use PVE::Exception qw(raise);
+use PVE::APIClient::Tools qw(split_list $IPV6RE $IPV4RE);
+use PVE::APIClient::Exception qw(raise);
 use HTTP::Status qw(:constants);
 use Net::IP qw(:PROC);
 use Data::Dumper;
@@ -146,7 +146,7 @@ sub pve_verify_configid {
     return $id;
 }
 
-PVE::JSONSchema::register_format('pve-storage-id', \&parse_storage_id);
+PVE::APIClient::JSONSchema::register_format('pve-storage-id', \&parse_storage_id);
 sub parse_storage_id {
     my ($storeid, $noerr) = @_;
 
@@ -466,7 +466,7 @@ sub pve_parse_startup_order {
     return $res;
 }
 
-PVE::JSONSchema::register_standard_option('pve-startup-order', {
+PVE::APIClient::JSONSchema::register_standard_option('pve-startup-order', {
     description => "Startup and shutdown behavior. Order is a non-negative number defining the general startup order. Shutdown in done with reverse ordering. Additionally you can set the 'up' or 'down' delay in seconds, which specifies a delay to wait before the next VM is started or stopped.",
     optional => 1,
     type => 'string', format => 'pve-startup-order',
diff --git a/PVE/PTY.pm b/PVE/APIClient/PTY.pm
similarity index 99%
rename from PVE/PTY.pm
rename to PVE/APIClient/PTY.pm
index 23d76c0..00010df 100644
--- a/PVE/PTY.pm
+++ b/PVE/APIClient/PTY.pm
@@ -1,4 +1,4 @@
-package PVE::PTY;
+package PVE::APIClient::PTY;
 
 use strict;
 use warnings;
diff --git a/PVE/RESTHandler.pm b/PVE/APIClient/RESTHandler.pm
similarity index 93%
rename from PVE/RESTHandler.pm
rename to PVE/APIClient/RESTHandler.pm
index 5e70503..ef30ba9 100644
--- a/PVE/RESTHandler.pm
+++ b/PVE/APIClient/RESTHandler.pm
@@ -1,12 +1,12 @@
-package PVE::RESTHandler;
+package PVE::APIClient::RESTHandler;
 
 use strict;
 no strict 'refs'; # our autoload requires this
 use warnings;
-use PVE::SafeSyslog;
-use PVE::Exception qw(raise raise_param_exc);
-use PVE::JSONSchema;
-use PVE::Tools;
+use PVE::APIClient::SafeSyslog;
+use PVE::APIClient::Exception qw(raise raise_param_exc);
+use PVE::APIClient::JSONSchema;
+use PVE::APIClient::Tools;
 use HTTP::Status qw(:constants :is status_message);
 use Text::Wrap;
 use Clone qw(clone);
@@ -45,7 +45,7 @@ sub api_clone_schema {
 	    # NOTE: add typetext property for more complex types, to
 	    # make the web api viewer code simpler
 	    if (!(defined($tmp->{enum}) || defined($tmp->{pattern}))) {
-		my $typetext = PVE::JSONSchema::schema_get_type_text($tmp);
+		my $typetext = PVE::APIClient::JSONSchema::schema_get_type_text($tmp);
 		if ($tmp->{type} && ($tmp->{type} ne $typetext)) {
 		    $tmp->{typetext} = $typetext;
 		}
@@ -58,7 +58,7 @@ sub api_clone_schema {
 }
 
 sub api_dump_full {
-    my ($tree, $index, $class, $prefix) = @_;
+    my ($tree, $index, $class, $prefix, $raw_dump) = @_;
 
     $prefix = '' if !$prefix;
 
@@ -70,7 +70,7 @@ sub api_dump_full {
 	$path =~ s/\/+$//;
 
 	if ($info->{subclass}) {
-	    api_dump_full($tree, $index, $info->{subclass}, $path);
+	    api_dump_full($tree, $index, $info->{subclass}, $path, $raw_dump);
 	} else {
 	    next if !$path;
 
@@ -110,12 +110,15 @@ sub api_dump_full {
 			$k eq "path";
 
 		    my $d = $info->{$k};
-		    
-		    if ($k eq 'parameters') {
-			$data->{$k} = api_clone_schema($d);
-		    } else {
 
-			$data->{$k} = ref($d) ? clone($d) : $d;
+		    if ($raw_dump) {
+			$data->{$k} = $d;
+		    } else {
+			if ($k eq 'parameters') {
+			    $data->{$k} = api_clone_schema($d);
+			} else {
+			    $data->{$k} = ref($d) ? clone($d) : $d;
+			}
 		    }
 		} 
 		$res->{info}->{$info->{method}} = $data;
@@ -173,12 +176,12 @@ sub api_dump_remove_refs {
 }
 
 sub api_dump {
-    my ($class, $prefix) = @_;
+    my ($class, $prefix, $raw_dump) = @_;
 
     my $tree = [];
 
     my $index = {};
-    api_dump_full($tree, $index, $class);
+    api_dump_full($tree, $index, $class, $prefix, $raw_dump);
     api_dump_cleanup_tree($tree);
     return $tree;
 };
@@ -189,7 +192,7 @@ sub validate_method_schemas {
 	my $ma = $method_registry->{$class};
 
 	foreach my $info (@$ma) {
-	    PVE::JSONSchema::validate_method_info($info);
+	    PVE::APIClient::JSONSchema::validate_method_info($info);
 	}
     }
 }
@@ -402,7 +405,7 @@ sub handle {
 
     if (my $schema = $info->{parameters}) {
 	# warn "validate ". Dumper($param}) . "\n" . Dumper($schema);
-	PVE::JSONSchema::validate($param, $schema);
+	PVE::APIClient::JSONSchema::validate($param, $schema);
 	# untaint data (already validated)
 	my $extra = delete $param->{'extra-args'};
 	while (my ($key, $val) = each %$param) {
@@ -415,7 +418,7 @@ sub handle {
 
     # todo: this is only to be safe - disable?
     if (my $schema = $info->{returns}) {
-	PVE::JSONSchema::validate($result, $schema, "Result verification failed\n");
+	PVE::APIClient::JSONSchema::validate($result, $schema, "Result verification failed\n");
     }
 
     return $result;
@@ -444,7 +447,7 @@ my $get_property_description = sub {
 
     chomp $descr;
 
-    my $type_text = PVE::JSONSchema::schema_get_type_text($phash, $style);
+    my $type_text = PVE::APIClient::JSONSchema::schema_get_type_text($phash, $style);
 
     if ($hidepw && $name eq 'password') {
 	$type_text = '';
@@ -552,7 +555,7 @@ my $compute_param_mapping_hash = sub {
 	    ($name, $func, $desc, $interactive) = @$item;
 	} else {
 	    $name = $item;
-	    $func = sub { return PVE::Tools::file_get_contents($_[0]) };
+	    $func = sub { return PVE::APIClient::Tools::file_get_contents($_[0]) };
 	}
 	$desc //= '<filepath>';
 	$res->{$name} = { desc => $desc, func => $func, interactive => $interactive };
@@ -708,7 +711,7 @@ sub dump_properties {
 	next if !$prop_fmt;
 
 	if (ref($prop_fmt) ne 'HASH') {
-	    $prop_fmt = PVE::JSONSchema::get_format($prop_fmt);
+	    $prop_fmt = PVE::APIClient::JSONSchema::get_format($prop_fmt);
 	}
 
 	next if !(ref($prop_fmt) && (ref($prop_fmt) eq 'HASH'));
@@ -740,7 +743,7 @@ sub cli_handler {
     my $res;
     eval {
 	my $param_mapping_hash = $compute_param_mapping_hash->($param_mapping_func->($name)) if $param_mapping_func;
-	my $param = PVE::JSONSchema::get_options($info->{parameters}, $args, $arg_param, $fixed_param, $read_password_func, $param_mapping_hash);
+	my $param = PVE::APIClient::JSONSchema::get_options($info->{parameters}, $args, $arg_param, $fixed_param, $read_password_func, $param_mapping_hash);
 
 	if (defined($param_mapping_hash)) {
 	    &$replace_file_names_with_contents($param, $param_mapping_hash);
@@ -751,7 +754,7 @@ sub cli_handler {
     if (my $err = $@) {
 	my $ec = ref($err);
 
-	die $err if !$ec || $ec ne "PVE::Exception" || !$err->is_param_exc();
+	die $err if !$ec || $ec ne "PVE::APIClient::Exception" || !$err->is_param_exc();
 	
 	$err->{usage} = $self->usage_str($name, $prefix, $arg_param, $fixed_param, 'short', $read_password_func, $param_mapping_func);
 
diff --git a/PVE/SafeSyslog.pm b/PVE/APIClient/SafeSyslog.pm
similarity index 95%
rename from PVE/SafeSyslog.pm
rename to PVE/APIClient/SafeSyslog.pm
index 63b37f8..3b31c86 100644
--- a/PVE/SafeSyslog.pm
+++ b/PVE/APIClient/SafeSyslog.pm
@@ -1,4 +1,4 @@
-package PVE::SafeSyslog;
+package PVE::APIClient::SafeSyslog;
 
 use strict;
 use warnings;
diff --git a/PVE/SectionConfig.pm b/PVE/APIClient/SectionConfig.pm
similarity index 97%
rename from PVE/SectionConfig.pm
rename to PVE/APIClient/SectionConfig.pm
index cc03aea..28224e8 100644
--- a/PVE/SectionConfig.pm
+++ b/PVE/APIClient/SectionConfig.pm
@@ -1,10 +1,10 @@
-package PVE::SectionConfig;
+package PVE::APIClient::SectionConfig;
 
 use strict;
 use warnings;
 use Digest::SHA;
-use PVE::Exception qw(raise_param_exc);
-use PVE::JSONSchema qw(get_standard_option);
+use PVE::APIClient::Exception qw(raise_param_exc);
+use PVE::APIClient::JSONSchema qw(get_standard_option);
 
 use Data::Dumper;
 
@@ -251,7 +251,7 @@ sub check_value {
 
     if (!$skipSchemaCheck) {
 	my $errors = {};
-	PVE::JSONSchema::check_prop($value, $schema, '', $errors);
+	PVE::APIClient::JSONSchema::check_prop($value, $schema, '', $errors);
 	if (scalar(keys %$errors)) {
 	    die "$errors->{$key}\n" if $errors->{$key};
 	    die "$errors->{_root}\n" if $errors->{_root};
@@ -491,7 +491,7 @@ sub write_config {
 sub assert_if_modified {
     my ($cfg, $digest) = @_;
 
-    PVE::Tools::assert_if_modified($cfg->{digest}, $digest);
+    PVE::APIClient::Tools::assert_if_modified($cfg->{digest}, $digest);
 }
 
 1;
diff --git a/PVE/Tools.pm b/PVE/APIClient/Tools.pm
similarity index 99%
rename from PVE/Tools.pm
rename to PVE/APIClient/Tools.pm
index cd55932..754ecb5 100644
--- a/PVE/Tools.pm
+++ b/PVE/APIClient/Tools.pm
@@ -1,4 +1,4 @@
-package PVE::Tools;
+package PVE::APIClient::Tools;
 
 use strict;
 use warnings;
diff --git a/PVE/Exception.pm b/PVE/Exception.pm
deleted file mode 100644
index fa6b73a..0000000
--- a/PVE/Exception.pm
+++ /dev/null
@@ -1,142 +0,0 @@
-package PVE::Exception;
-
-# a way to add more information to exceptions (see man perlfunc (die))
-# use PVE::Exception qw(raise);
-# raise ("my error message", code => 400, errors => { param1 => "err1", ...} );
-
-use strict;
-use warnings;
-use vars qw(@ISA @EXPORT_OK);
-require Exporter;
-use Storable qw(dclone);       
-use HTTP::Status qw(:constants);
-
- at ISA = qw(Exporter);
-
-use overload '""' => sub {local $@; shift->stringify};
-use overload 'cmp' => sub {
-    my ($a, $b) = @_;
-    local $@;  
-    return "$a" cmp "$b"; # compare as string
-};
-
- at EXPORT_OK = qw(raise raise_param_exc raise_perm_exc);
-
-sub new {
-    my ($class, $msg, %param) = @_;
-
-    $class = ref($class) || $class;
-
-    my $self = {
-	msg => $msg,
-    };
-
-    foreach my $p (keys %param) {
-	next if defined($self->{$p}); 
-	my $v = $param{$p};
-	$self->{$p} = ref($v) ? dclone($v) : $v;
-    }
-
-    return bless $self;
-}
-
-sub raise {
-
-    my $exc = PVE::Exception->new(@_);
-    
-    my ($pkg, $filename, $line) = caller;
-
-    $exc->{filename} = $filename;
-    $exc->{line} = $line;
-
-    die $exc;
-}
-
-sub raise_perm_exc {
-    my ($what) = @_;
-
-    my $param = { code => HTTP_FORBIDDEN };
-
-    my $msg = "Permission check failed";
-    
-    $msg .= " ($what)" if $what;
-
-    my $exc = PVE::Exception->new("$msg\n", %$param);
-    
-    my ($pkg, $filename, $line) = caller;
-
-    $exc->{filename} = $filename;
-    $exc->{line} = $line;
-
-    die $exc;
-}
-
-sub is_param_exc {
-    my ($self) = @_;
-
-    return $self->{code} && $self->{code} eq HTTP_BAD_REQUEST;
-}
-
-sub raise_param_exc {
-    my ($errors, $usage) = @_;
-
-    my $param = {
-	 code => HTTP_BAD_REQUEST,
-	 errors => $errors,
-    };
-
-    $param->{usage} = $usage if $usage;
-
-    my $exc = PVE::Exception->new("Parameter verification failed.\n", %$param);
-    
-    my ($pkg, $filename, $line) = caller;
-
-    $exc->{filename} = $filename;
-    $exc->{line} = $line;
-
-    die $exc;
-}
-
-sub stringify {
-    my $self = shift;
-    
-    my $msg = $self->{code} ? "$self->{code} $self->{msg}" : $self->{msg};
-
-    if ($msg !~ m/\n$/) {
-
-	if ($self->{filename} && $self->{line}) {
-	    $msg .= " at $self->{filename} line $self->{line}";
-	}
-
-	$msg .= "\n";
-    }
-
-    if ($self->{errors}) {
-	foreach my $e (keys %{$self->{errors}}) {
-	    $msg .= "$e: $self->{errors}->{$e}\n";
-	}
-    }
-
-    if ($self->{propagate}) {
-	foreach my $pi (@{$self->{propagate}}) {
-	    $msg .= "\t...propagated at $pi->[0] line $pi->[1]\n";
-	}
-    }
-
-    if ($self->{usage}) {
-	$msg .= $self->{usage};
-	$msg .= "\n" if $msg !~ m/\n$/;
-    }
-
-    return $msg;
-}
-
-sub PROPAGATE {
-    my ($self, $file, $line) = @_;
-
-    push @{$self->{propagate}}, [$file, $line]; 
-
-    return $self;
-}
-
-1;
diff --git a/pveclient b/pveclient
index 01cb74b..ded6736 100755
--- a/pveclient
+++ b/pveclient
@@ -5,8 +5,6 @@ package PVE::CLI::pveclient;
 use strict;
 use warnings;
 use Cwd 'abs_path';
-use lib '/usr/share/pve-client';
-use lib '.';
 use Data::Dumper;
 
 use PVE::JSONSchema qw(register_standard_option get_standard_option);
-- 
2.11.0



More information about the pve-devel mailing list