File Coverage

blib/lib/Net/Proxmox/VE/Cluster.pm
Criterion Covered Total %
statement 9 128 7.0
branch 0 124 0.0
condition n/a
subroutine 3 25 12.0
pod 22 22 100.0
total 34 299 11.3


line stmt bran cond sub pod time code
1             #!/bin/false
2             #
3             # PODNAME: Net::Proxmox::VE::Cluster
4             # ABSTRACT: Functions for the 'cluster' portion of the API
5              
6 1     1   6 use strict;
  1         1  
  1         28  
7 1     1   7 use warnings;
  1         2  
  1         47  
8              
9             package Net::Proxmox::VE::Cluster;
10             $Net::Proxmox::VE::Cluster::VERSION = '0.36';
11 1     1   7 use parent 'Exporter';
  1         1  
  1         8  
12              
13             our @EXPORT =
14             qw(
15             cluster
16             cluster_backup
17             create_cluster_backup
18             get_cluster_backup
19             update_cluster_backup
20             delete_cluster_backup
21             cluster_ha
22             get_cluster_ha_config
23             get_cluster_ha_changes
24             commit_cluster_ha_changes
25             revert_cluster_ha_changes
26             cluster_ha_groups
27             create_cluster_ha_groups
28             get_cluster_ha_groups
29             update_cluster_ha_groups
30             delete_cluster_ha_group
31             get_cluster_log
32             get_cluster_options
33             update_cluster_options
34             get_cluster_resources
35             get_cluster_status
36             get_cluster_tasks
37             );
38              
39              
40             my $base = '/cluster';
41              
42             sub cluster {
43              
44 0 0   0 1   my $self = shift or return;
45              
46 0           return $self->get($base)
47              
48             }
49              
50              
51             sub cluster_backup {
52              
53 0 0   0 1   my $self = shift or return;
54              
55 0           return $self->get($base, 'backup')
56              
57             }
58              
59              
60             sub create_cluster_backup {
61              
62 0 0   0 1   my $self = shift or return;
63              
64 0           my @p = @_;
65              
66 0 0         die 'No arguments for create_cluster_backup()' unless @p;
67 0           my %args;
68              
69 0 0         if ( @p == 1 ) {
70 0 0         die 'Single argument not a hash for create_cluster_backup()'
71             unless ref $a eq 'HASH';
72 0           %args = %{ $p[0] };
  0            
73             }
74             else {
75 0 0         die 'Odd number of arguments for create_cluster_backup()'
76             if ( scalar @p % 2 != 0 );
77 0           %args = @p;
78             }
79              
80 0           return $self->post( $base, 'backup', \%args )
81              
82             }
83              
84              
85             sub get_cluster_backup {
86              
87 0 0   0 1   my $self = shift or return;
88              
89 0 0         my $a = shift or die 'No id for get_cluster_backup()';
90 0 0         die 'id must be a scalar for get_cluster_backup()' if ref $a;
91              
92 0           return $self->get( $base, $a )
93              
94             }
95              
96              
97             sub update_cluster_backup {
98              
99 0 0   0 1   my $self = shift or return;
100              
101 0 0         my $a = shift or die 'No id for update_cluster_backup()';
102 0 0         die 'id must be a scalar for update_cluster_backup()' if ref $a;
103              
104 0           my @p = @_;
105              
106 0 0         die 'No arguments for update_cluster_backup()' unless @p;
107 0           my %args;
108              
109 0 0         if ( @p == 1 ) {
110 0 0         die 'Single argument not a hash for update_cluster_backup()'
111             unless ref $a eq 'HASH';
112 0           %args = %{ $p[0] };
  0            
113             }
114             else {
115 0 0         die 'Odd number of arguments for update_cluster_backup()'
116             if ( scalar @p % 2 != 0 );
117 0           %args = @p;
118             }
119              
120 0           return $self->put( $base, 'backup', $a, \%args )
121              
122             }
123              
124              
125             sub delete_cluster_backup {
126              
127 0 0   0 1   my $self = shift or return;
128              
129 0 0         my $a = shift or die 'No id for delete_cluster_backup()';
130 0 0         die 'id must be a scalar for delete_cluster_backup()' if ref $a;
131              
132 0           return $self->delete( $base, $a )
133              
134             }
135              
136              
137             sub cluster_ha {
138              
139 0 0   0 1   my $self = shift or return;
140              
141 0           return $self->get($base, 'ha')
142              
143             }
144              
145              
146             sub get_cluster_ha_config {
147              
148 0 0   0 1   my $self = shift or return;
149              
150 0           return $self->get($base, 'ha', 'config')
151              
152             }
153              
154              
155             sub get_cluster_ha_changes {
156              
157 0 0   0 1   my $self = shift or return;
158              
159 0           return $self->get($base, 'ha', 'changes')
160              
161             }
162              
163              
164             sub commit_cluster_ha_changes {
165              
166 0 0   0 1   my $self = shift or return;
167              
168 0           return $self->post($base, 'ha', 'changes')
169              
170             }
171              
172              
173             sub revert_cluster_ha_changes {
174              
175 0 0   0 1   my $self = shift or return;
176              
177 0           return $self->delete($base, 'ha', 'changes')
178              
179             }
180              
181              
182             sub cluster_ha_groups {
183              
184 0 0   0 1   my $self = shift or return;
185              
186 0           return $self->get($base, 'ha','groups')
187              
188             }
189              
190              
191             sub create_cluster_ha_groups {
192              
193 0 0   0 1   my $self = shift or return;
194              
195 0           my @p = @_;
196              
197 0 0         die 'No arguments for create_cluster_ha_groups()' unless @p;
198 0           my %args;
199              
200 0 0         if ( @p == 1 ) {
201 0 0         die 'Single argument not a hash for create_cluster_ha_groups()'
202             unless ref $a eq 'HASH';
203 0           %args = %{ $p[0] };
  0            
204             }
205             else {
206 0 0         die 'Odd number of arguments for create_cluster_ha_groups()'
207             if ( scalar @p % 2 != 0 );
208 0           %args = @p;
209             }
210              
211 0           return $self->put( $base, 'ha', 'groups', \%args )
212              
213             }
214              
215              
216             sub get_cluster_ha_groups {
217              
218 0 0   0 1   my $self = shift or return;
219              
220 0 0         my $a = shift or die 'No id for get_cluster_ha_groups()';
221 0 0         die 'id must be a scalar for get_cluster_ha_groups()' if ref $a;
222              
223 0           return $self->get( $base, 'ha', 'groups', $a )
224              
225             }
226              
227              
228              
229             sub update_cluster_ha_groups {
230              
231 0 0   0 1   my $self = shift or return;
232              
233 0 0         my $a = shift or die 'No id for update_cluster_ha_groups()';
234 0 0         die 'id must be a scalar for update_cluster_ha_groups()' if ref $a;
235              
236 0           my @p = @_;
237              
238 0 0         die 'No arguments for update_cluster_ha_groups()' unless @p;
239 0           my %args;
240              
241 0 0         if ( @p == 1 ) {
242 0 0         die 'Single argument not a hash for update_cluster_ha_groups()'
243             unless ref $a eq 'HASH';
244 0           %args = %{ $p[0] };
  0            
245             }
246             else {
247 0 0         die 'Odd number of arguments for update_cluster_ha_groups()'
248             if ( scalar @p % 2 != 0 );
249 0           %args = @p;
250             }
251              
252 0           return $self->put( $base, 'ha', 'groups', $a, \%args )
253              
254             }
255              
256              
257             sub delete_cluster_ha_group {
258              
259 0 0   0 1   my $self = shift or return;
260              
261 0 0         my $a = shift or die 'No id for delete_cluster_ha_group()';
262 0 0         die 'id must be a scalar for delete_cluster_ha_group()' if ref $a;
263              
264 0           return $self->delete( $base, 'ha', 'groups', $a )
265              
266             }
267              
268              
269             sub get_cluster_log {
270              
271 0 0   0 1   my $self = shift or return;
272              
273 0           my @p = @_;
274              
275 0 0         die 'No arguments for get_cluster_log()' unless @p;
276 0           my %args;
277              
278 0 0         if ( @p == 1 ) {
279 0 0         die 'Single argument not a hash for get_cluster_log()'
280             unless ref $a eq 'HASH';
281 0           %args = %{ $p[0] };
  0            
282             }
283             else {
284 0 0         die 'Odd number of arguments for get_cluster_log()'
285             if ( scalar @p % 2 != 0 );
286 0           %args = @p;
287             }
288              
289 0           return $self->get( $base, 'log', \%args )
290              
291             }
292              
293              
294             sub get_cluster_options {
295              
296 0 0   0 1   my $self = shift or return;
297              
298 0           return $self->get($base, 'options')
299              
300             }
301              
302              
303             sub update_cluster_options {
304              
305 0 0   0 1   my $self = shift or return;
306              
307 0           my @p = @_;
308              
309 0 0         die 'No arguments for update_cluster_options()' unless @p;
310 0           my %args;
311              
312 0 0         if ( @p == 1 ) {
313 0 0         die 'Single argument not a hash for update_cluster_options()'
314             unless ref $a eq 'HASH';
315 0           %args = %{ $p[0] };
  0            
316             }
317             else {
318 0 0         die 'Odd number of arguments for update_cluster_options()'
319             if ( scalar @p % 2 != 0 );
320 0           %args = @p;
321             }
322              
323 0           return $self->put( $base, 'log', \%args )
324              
325             }
326              
327              
328              
329             sub get_cluster_resources {
330              
331 0 0   0 1   my $self = shift or return;
332              
333 0           my @p = @_;
334              
335 0 0         die 'No arguments for get_cluster_resources()' unless @p;
336 0           my %args;
337              
338 0 0         if ( @p == 1 ) {
339 0 0         die 'Single argument not a hash for get_cluster_resources()'
340             unless ref $a eq 'HASH';
341 0           %args = %{ $p[0] };
  0            
342             }
343             else {
344 0 0         die 'Odd number of arguments for get_cluster_resources()'
345             if ( scalar @p % 2 != 0 );
346 0           %args = @p;
347             }
348              
349 0           return $self->get( $base, 'resources', \%args )
350              
351             }
352              
353              
354              
355             sub get_cluster_status {
356              
357 0 0   0 1   my $self = shift or return;
358              
359 0           return $self->get($base, 'status')
360              
361             }
362              
363              
364             sub get_cluster_tasks {
365              
366 0 0   0 1   my $self = shift or return;
367              
368 0           return $self->get($base, 'tasks')
369              
370             }
371              
372              
373             1;
374              
375             =pod
376              
377             =encoding UTF-8
378              
379             =head1 NAME
380              
381             Net::Proxmox::VE::Cluster - Functions for the 'cluster' portion of the API
382              
383             =head1 VERSION
384              
385             version 0.36
386              
387             =head1 SYNOPSIS
388              
389             # assuming $obj is a Net::Proxmox::VE object
390              
391             =head1 METHODS
392              
393             =head2 cluster
394              
395             Returns the 'Cluster index':
396              
397             @list = $obj->cluster()
398              
399             Note: Accessible by all authententicated users.
400              
401             =head2 cluster_backup
402              
403             List vzdump backup schedule.
404              
405             @list = $obj->cluster_backup()
406              
407             Note: Accessible by all authententicated users.
408              
409             =head2 create_cluster_backup
410              
411             Create new vzdump backup job.
412              
413             $ok = $obj->create_cluster_backup(\%args)
414              
415             node is a string in pve-node format
416              
417             I<%args> may items contain from the following list
418              
419             =over 4
420              
421             =item starttime
422              
423             String. Job start time, format is HH::MM. Required.
424              
425             =item all
426              
427             Boolean. Backup all known VMs on this host. Required.
428              
429             =item bwlimit
430              
431             Integer. Limit I/O bandwidth (KBytes per second). Optional.
432              
433             =item compress
434              
435             Enum. Either 0, 1, gzip or lzo. Comress dump file. Optional
436              
437             =item dow
438              
439             String. Day of the week in pve-day-of-week-list format. Optional.
440              
441             =item dumpdir
442              
443             String. Store resulting files to specified directory. Optional.
444              
445             =item exclude
446              
447             String. Exclude specified VMs (assumes --all) in pve-vmid-list. Optional.
448              
449             =item exclude-path
450              
451             String. Exclude certain files/directories (regex) in string-alist. Optional.
452              
453             =item ionice
454              
455             Integer. Set CFQ ionice priority. Optional.
456              
457             =item lockwait
458              
459             Integer. Maximal time to wait for the global lock (minutes). Optional.
460              
461             =item mailto
462              
463             String. List of email addresses in string-list format. Optional.
464              
465             =item maxfiles
466              
467             Integer. Maximal number of backup files per vm. Optional.
468              
469             =item mode
470              
471             Enum. A value from snapshot, suspend or stop. Backup mode. Optional.
472              
473             =item node
474              
475             String. Only run if executed on this node in pve-node format. Optional.
476              
477             =item quiet
478              
479             Boolean. Be quiet. Optional.
480              
481             =item remove
482              
483             Boolean. Remove old backup files if there are more than 'maxfiles' backup files. Optional.
484              
485             =item script
486              
487             String. Use specified hook script. Optional.
488              
489             =item size
490              
491             Integer. LVM snapshot size in MB. Optional.
492              
493             =item stdexcludes
494              
495             Boolean. Exclude temporary files and logs. Optional.
496              
497             =item stopwait
498              
499             Integer. Maximal time to wait until a VM is stopped (minutes). Optional.
500              
501             =item storage
502              
503             String. Store resulting file to this storage, in pve-storage-id format. Optional.
504              
505             =item tmpdir
506              
507             String. Store temporary files to specified directory. Optional.
508              
509             =item vmid
510              
511             String. The ID of the VM you want to backup in pve-vm-list format. Optional.
512              
513             =back
514              
515             Note: required permissions are ["perm","/",["Sys.Modify"]]
516              
517             =head2 get_cluster_backup
518              
519             Read vzdump backup job definition.
520              
521             $job = $obj->get_cluster_backup('id')
522              
523             id is the job ID
524              
525             Note: required permissions are ["perm","/",["Sys.Audit"]]
526              
527             =head2 update_cluster_backup
528              
529             Update vzdump backup job definition.
530              
531             $ok = $obj->update_cluster_backup(\%args)
532              
533             id is the job ID
534              
535             I<%args> may items contain from the following list
536              
537             =over 4
538              
539             =item starttime
540              
541             String. Job start time, format is HH::MM. Required.
542              
543             =item all
544              
545             Boolean. Backup all known VMs on this host. Required.
546              
547             =item bwlimit
548              
549             Integer. Limit I/O bandwidth (KBytes per second). Optional.
550              
551             =item compress
552              
553             Enum. Either 0, 1, gzip or lzo. Comress dump file. Optional
554              
555             =item dow
556              
557             String. Day of the week in pve-day-of-week-list format. Optional.
558              
559             =item dumpdir
560              
561             String. Store resulting files to specified directory. Optional.
562              
563             =item exclude
564              
565             String. Exclude specified VMs (assumes --all) in pve-vmid-list. Optional.
566              
567             =item exclude-path
568              
569             String. Exclude certain files/directories (regex) in string-alist. Optional.
570              
571             =item ionice
572              
573             Integer. Set CFQ ionice priority. Optional.
574              
575             =item lockwait
576              
577             Integer. Maximal time to wait for the global lock (minutes). Optional.
578              
579             =item mailto
580              
581             String. List of email addresses in string-list format. Optional.
582              
583             =item maxfiles
584              
585             Integer. Maximal number of backup files per vm. Optional.
586              
587             =item mode
588              
589             Enum. A value from snapshot, suspend or stop. Backup mode. Optional.
590              
591             =item node
592              
593             String. Only run if executed on this node in pve-node format. Optional.
594              
595             =item quiet
596              
597             Boolean. Be quiet. Optional.
598              
599             =item remove
600              
601             Boolean. Remove old backup files if there are more than 'maxfiles' backup files. Optional.
602              
603             =item script
604              
605             String. Use specified hook script. Optional.
606              
607             =item size
608              
609             Integer. LVM snapshot size in MB. Optional.
610              
611             =item stdexcludes
612              
613             Boolean. Exclude temporary files and logs. Optional.
614              
615             =item stopwait
616              
617             Integer. Maximal time to wait until a VM is stopped (minutes). Optional.
618              
619             =item storage
620              
621             String. Store resulting file to this storage, in pve-storage-id format. Optional.
622              
623             =item tmpdir
624              
625             String. Store temporary files to specified directory. Optional.
626              
627             =item vmid
628              
629             String. The ID of the VM you want to backup in pve-vm-list format. Optional.
630              
631             =back
632              
633             Note: required permissions are ["perm","/",["Sys.Modify"]]
634              
635             =head2 delete_cluster_backup
636              
637             Delete vzdump backup job definition.
638              
639             $job = $obj->delete_cluster_backup('id')
640              
641             id is the job ID
642              
643             Note: required permissions are ["perm","/",["Sys.Modify"]]
644              
645             =head2 cluster_ha
646              
647             List ha index
648              
649             @list = $obj->cluster_ha()
650              
651             Note: Required permissions are ["perm","/",["Sys.Audit"]]
652              
653             =head2 get_cluster_ha_config
654              
655             List ha config
656              
657             @list = $obj->get_cluster_ha_config()
658              
659             Note: Required permissions are ["perm","/",["Sys.Audit"]]
660              
661             =head2 get_cluster_ha_changes
662              
663             List ha changes
664              
665             @list = $obj->get_cluster_ha_changes()
666              
667             Note: Required permissions are ["perm","/",["Sys.Audit"]]
668              
669             =head2 commit_cluster_ha_changes
670              
671             Commit ha changes
672              
673             @list = $obj->commit_cluster_ha_changes()
674              
675             Note: Required permissions are ["perm","/",["Sys.Modify"]]
676              
677             =head2 revert_cluster_ha_changes
678              
679             Revert ha changes
680              
681             @list = $obj->revert_cluster_ha_changes()
682              
683             Note: Required permissions are ["perm","/",["Sys.Modify"]]
684              
685             =head2 cluster_ha_groups
686              
687             List resource groups
688              
689             @list = $obj->cluster_ha_groups()
690              
691             Note: Required permissions are ["perm","/",["Sys.Audit"]]
692              
693             =head2 create_cluster_ha_groups
694              
695             Create a new resource groups.
696              
697             $ok = $obj->create_cluster_ha_groups(\%args)
698              
699             I<%args> may items contain from the following list
700              
701             =over 4
702              
703             =item vmid
704              
705             Integer. The unique id of the vm in pve-vmid format. Required.
706              
707             =item autostart
708              
709             Boolean. As per the API spec - "Service is started when quorum forms". Optional.
710              
711             =back
712              
713             Note: required permissions are ["perm","/",["Sys.Modify"]]
714              
715             =head2 get_cluster_ha_groups
716              
717             List resource groups
718              
719             $job = $obj->get_cluster_ha_groups('id')
720              
721             id is the resource group id (for example pvevm:200)
722              
723             Note: required permissions are ["perm","/",["Sys.Audit"]]
724              
725             =head2 update_cluster_ha_groups
726              
727             Update resource groups settings
728              
729             $ok = $obj->update_cluster_ha_groups('id', \%args)
730              
731             id is the group ID for example pvevm:200
732              
733             I<%args> may items contain from the following list
734              
735             =over 4
736              
737             =item autostart
738              
739             Boolean. As per the API spec - "Service is started when quorum forms". Optional.
740              
741             =back
742              
743             Note: required permissions are ["perm","/",["Sys.Modify"]]
744              
745             =head2 delete_cluster_ha_group
746              
747             Delete resource group
748              
749             $ok = $obj->delete_cluster_ha_group('id')
750              
751             id is the group ID for example pvevm:200
752              
753             Note: required permissions are ["perm","/",["Sys.Modify"]]
754              
755             =head2 get_cluster_log
756              
757             Read cluster log
758              
759             $job = $obj->get_cluster_log(\%args)
760              
761             Note: Accessible by all authenticated users
762              
763             I<%args> may items contain from the following list
764              
765             =over 4
766              
767             =item max
768              
769             Integer. Maximum number of entries. Optional.
770              
771             =back
772              
773             =head2 get_cluster_options
774              
775             Get datacenter options (this is what the API says)
776              
777             @list = $obj->get_cluster_options()
778              
779             Note: Required permissions are ["perm","/",["Sys.Audit"]]
780              
781             =head2 update_cluster_options
782              
783             Update datacenter options (this is what the spec says)
784              
785             $job = $obj->update_cluster_options(\%args)
786              
787             Note: permissions required are ["perm","/",["Sys.Modify"]]
788              
789             I<%args> may items contain from the following list
790              
791             =over 4
792              
793             =item delete
794              
795             String. A list of settings you want to delete in pve-configid-list format. Optional
796              
797             =item http_proxy
798              
799             String. Specify external http proxy to use when downloading, ie http://user:pass@foo:port/. Optional.
800              
801             =item keyboard
802              
803             Enum. Default keyboard layout for VNC sessions. Selected from pt, ja, es, no, is, fr-ca, fr, pt-br, da, fr-ch, sl, de-ch, en-gb, it, en-us, fr-be, hu, pl, nl, mk, fi, lt, sv, de. Optional
804              
805             =item language
806              
807             Enum. Default GUI language. Either en or de. Optional.
808              
809             =back
810              
811             =head2 get_cluster_resources
812              
813             Resources index (cluster wide)
814              
815             @list = $obj->get_cluster_resources()
816              
817             Note: Accessible by all authententicated users.
818              
819             I<%args> may items contain from the following list
820              
821             =over 4
822              
823             =item Type
824              
825             Enum. One from vm, storage or node. Optional.
826              
827             =back
828              
829             =head2 get_cluster_status
830              
831             Get cluster status informations.
832              
833             @list = $obj->get_cluster_status()
834              
835             Note: Required permissions are ["perm","/",["Sys.Audit"]]
836              
837             =head2 get_cluster_tasks
838              
839             List recent tasks (cluster wide)
840              
841             @list = $obj->get_cluster_tasks()
842              
843             Note: Available to all authenticated users
844              
845             =head1 SEE ALSO
846              
847             L
848              
849             =head1 AUTHOR
850              
851             Brendan Beveridge , Dean Hamstead
852              
853             =head1 COPYRIGHT AND LICENSE
854              
855             This software is Copyright (c) 2022 by Dean Hamstad.
856              
857             This is free software, licensed under:
858              
859             The MIT (X11) License
860              
861             =cut
862              
863             __END__