[pve-devel] [PATCH pve-cluster 1/3] jobs: move base plugin from pve-manager

Fabian Grünbichler f.gruenbichler at proxmox.com
Fri Apr 8 09:40:48 CEST 2022


On March 22, 2022 8:34 am, Hannes Laimer wrote:
> Signed-off-by: Hannes Laimer <h.laimer at proxmox.com>
> ---
>  data/PVE/Jobs/Makefile     |  11 ++++
>  data/PVE/Jobs/Plugin.pm    | 101 +++++++++++++++++++++++++++++++++++++
>  data/PVE/Makefile          |   2 +-
>  debian/pve-cluster.install |   1 +

AIUI Thomas would like this to be the start of a new package for 
node-specific things that can't live in pve-manager, and not be part of 
the main pve-cluster package.

other than that this patch looks good to me!

>  4 files changed, 114 insertions(+), 1 deletion(-)
>  create mode 100644 data/PVE/Jobs/Makefile
>  create mode 100644 data/PVE/Jobs/Plugin.pm
> 
> diff --git a/data/PVE/Jobs/Makefile b/data/PVE/Jobs/Makefile
> new file mode 100644
> index 0000000..4320369
> --- /dev/null
> +++ b/data/PVE/Jobs/Makefile
> @@ -0,0 +1,11 @@
> +PVEDIR=${DESTDIR}/usr/share/perl5/PVE
> +
> +SOURCES=Plugin.pm
> +
> +.PHONY: install
> +install: ${SOURCES}
> +	install -d -m 0755 ${PVEDIR}/Jobs
> +	for f in ${SOURCES}; do install -D -m 0644 $$f ${PVEDIR}/Jobs/$$f; done
> +
> +.PHONY: clean
> +clean:
> diff --git a/data/PVE/Jobs/Plugin.pm b/data/PVE/Jobs/Plugin.pm
> new file mode 100644
> index 0000000..6098360
> --- /dev/null
> +++ b/data/PVE/Jobs/Plugin.pm
> @@ -0,0 +1,101 @@
> +package PVE::Jobs::Plugin;
> +
> +use strict;
> +use warnings;
> +
> +use PVE::Cluster qw(cfs_register_file);
> +
> +use base qw(PVE::SectionConfig);
> +
> +cfs_register_file(
> +    'jobs.cfg',
> +     sub { __PACKAGE__->parse_config(@_); },
> +     sub { __PACKAGE__->write_config(@_); }
> +);
> +
> +my $defaultData = {
> +    propertyList => {
> +	type => { description => "Section type." },
> +	id => {
> +	    description => "The ID of the VZDump job.",
> +	    type => 'string',
> +	    format => 'pve-configid',
> +	    maxLength => 64,
> +	},
> +	enabled => {
> +	    description => "Determines if the job is enabled.",
> +	    type => 'boolean',
> +	    default => 1,
> +	    optional => 1,
> +	},
> +	schedule => {
> +	    description => "Backup schedule. The format is a subset of `systemd` calendar events.",
> +	    type => 'string', format => 'pve-calendar-event',
> +	    maxLength => 128,
> +	},
> +	comment => {
> +	    optional => 1,
> +	    type => 'string',
> +	    description => "Description for the Job.",
> +	    maxLength => 512,
> +	},
> +    },
> +};
> +
> +sub private {
> +    return $defaultData;
> +}
> +
> +sub parse_config {
> +    my ($class, $filename, $raw) = @_;
> +
> +    my $cfg = $class->SUPER::parse_config($filename, $raw);
> +
> +    foreach my $id (sort keys %{$cfg->{ids}}) {
> +	my $data = $cfg->{ids}->{$id};
> +
> +	$data->{id} = $id;
> +	$data->{enabled}  //= 1;
> +
> +	if (defined($data->{comment})) {
> +	    $data->{comment} = PVE::Tools::decode_text($data->{comment});
> +	}
> +   }
> +
> +   return $cfg;
> +}
> +
> +# call the plugin specific decode/encode code
> +sub decode_value {
> +    my ($class, $type, $key, $value) = @_;
> +
> +    my $plugin = __PACKAGE__->lookup($type);
> +    return $plugin->decode_value($type, $key, $value);
> +}
> +
> +sub encode_value {
> +    my ($class, $type, $key, $value) = @_;
> +
> +    my $plugin = __PACKAGE__->lookup($type);
> +    return $plugin->encode_value($type, $key, $value);
> +}
> +
> +sub write_config {
> +    my ($class, $filename, $cfg) = @_;
> +
> +    for my $job (values $cfg->{ids}->%*) {
> +	if (defined($job->{comment})) {
> +	    $job->{comment} = PVE::Tools::encode_text($job->{comment});
> +	}
> +    }
> +
> +    $class->SUPER::write_config($filename, $cfg);
> +}
> +
> +sub run {
> +    my ($class, $cfg) = @_;
> +    # implement in subclass
> +    die "not implemented";
> +}
> +
> +1;
> diff --git a/data/PVE/Makefile b/data/PVE/Makefile
> index 8ea5383..eecf9f9 100644
> --- a/data/PVE/Makefile
> +++ b/data/PVE/Makefile
> @@ -10,7 +10,7 @@ PVE_VENDORARCH=${DESTDIR}/${PERL_VENDORARCH}/auto/PVE/IPCC
>  
>  PERL_DOC_INC_DIRS:=..
>  
> -SUBDIRS=Cluster CLI API2
> +SUBDIRS=Cluster CLI API2 Jobs
>  SOURCES=IPCC.pm Cluster.pm Corosync.pm RRD.pm DataCenterConfig.pm SSHInfo.pm
>  
>  all:
> diff --git a/debian/pve-cluster.install b/debian/pve-cluster.install
> index f66cd06..eb15b55 100644
> --- a/debian/pve-cluster.install
> +++ b/debian/pve-cluster.install
> @@ -3,6 +3,7 @@ usr/bin/create_pmxcfs_db
>  usr/bin/pmxcfs
>  usr/lib/
>  usr/share/man/man8/pmxcfs.8
> +usr/share/perl5/PVE/Jobs/Plugin.pm
>  usr/share/perl5/PVE/Cluster.pm
>  usr/share/perl5/PVE/Cluster/IPCConst.pm
>  usr/share/perl5/PVE/IPCC.pm
> -- 
> 2.30.2
> 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 
> 





More information about the pve-devel mailing list