]>
Commit | Line | Data |
---|---|---|
70b03506 AD |
1 | package PVE::Network::SDN::Ipams::Plugin; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | ||
6 | use PVE::Tools qw(run_command); | |
7 | use PVE::JSONSchema; | |
8 | use PVE::Cluster; | |
9 | use HTTP::Request; | |
10 | use LWP::UserAgent; | |
11 | use JSON; | |
12 | ||
13 | use Data::Dumper; | |
14 | use PVE::JSONSchema qw(get_standard_option); | |
15 | use base qw(PVE::SectionConfig); | |
16 | ||
17 | PVE::Cluster::cfs_register_file('sdn/ipams.cfg', | |
18 | sub { __PACKAGE__->parse_config(@_); }, | |
19 | sub { __PACKAGE__->write_config(@_); }); | |
20 | ||
21 | PVE::JSONSchema::register_standard_option('pve-sdn-ipam-id', { | |
22 | description => "The SDN ipam object identifier.", | |
23 | type => 'string', format => 'pve-sdn-ipam-id', | |
24 | }); | |
25 | ||
26 | PVE::JSONSchema::register_format('pve-sdn-ipam-id', \&parse_sdn_ipam_id); | |
27 | sub parse_sdn_ipam_id { | |
28 | my ($id, $noerr) = @_; | |
29 | ||
30 | if ($id !~ m/^[a-z][a-z0-9]*[a-z0-9]$/i) { | |
31 | return undef if $noerr; | |
32 | die "ipam ID '$id' contains illegal characters\n"; | |
33 | } | |
34 | return $id; | |
35 | } | |
36 | ||
37 | my $defaultData = { | |
38 | ||
39 | propertyList => { | |
40 | type => { | |
41 | description => "Plugin type.", | |
42 | type => 'string', format => 'pve-configid', | |
43 | type => 'string', | |
44 | }, | |
45 | ipam => get_standard_option('pve-sdn-ipam-id', | |
46 | { completion => \&PVE::Network::SDN::Ipams::complete_sdn_ipam }), | |
47 | }, | |
48 | }; | |
49 | ||
50 | sub private { | |
51 | return $defaultData; | |
52 | } | |
53 | ||
54 | sub parse_section_header { | |
55 | my ($class, $line) = @_; | |
56 | ||
57 | if ($line =~ m/^(\S+):\s*(\S+)\s*$/) { | |
58 | my ($type, $id) = (lc($1), $2); | |
59 | my $errmsg = undef; # set if you want to skip whole section | |
60 | eval { PVE::JSONSchema::pve_verify_configid($type); }; | |
61 | $errmsg = $@ if $@; | |
62 | my $config = {}; # to return additional attributes | |
63 | return ($type, $id, $errmsg, $config); | |
64 | } | |
65 | return undef; | |
66 | } | |
67 | ||
68 | ||
69 | sub add_subnet { | |
70 | my ($class, $plugin_config, $subnetid, $subnet) = @_; | |
dd54b5a3 AD |
71 | |
72 | die "please implement inside plugin"; | |
70b03506 AD |
73 | } |
74 | ||
75 | sub del_subnet { | |
76 | my ($class, $plugin_config, $subnetid, $subnet) = @_; | |
dd54b5a3 AD |
77 | |
78 | die "please implement inside plugin"; | |
70b03506 AD |
79 | } |
80 | ||
81 | sub add_ip { | |
e9365ab0 | 82 | my ($class, $plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway) = @_; |
70b03506 | 83 | |
dd54b5a3 AD |
84 | die "please implement inside plugin"; |
85 | } | |
86 | ||
87 | sub update_ip { | |
88 | my ($class, $plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway) = @_; | |
89 | # only update ip attributes (mac,hostname,..). Don't change the ip addresses itself, as some ipam | |
90 | # don't allow ip address change without del/add | |
91 | ||
92 | die "please implement inside plugin"; | |
70b03506 AD |
93 | } |
94 | ||
95 | sub add_next_freeip { | |
e9365ab0 | 96 | my ($class, $plugin_config, $subnetid, $subnet, $hostname, $mac, $description) = @_; |
dd54b5a3 AD |
97 | |
98 | die "please implement inside plugin"; | |
70b03506 AD |
99 | } |
100 | ||
101 | sub del_ip { | |
e8736dac | 102 | my ($class, $plugin_config, $subnetid, $subnet, $ip) = @_; |
dd54b5a3 AD |
103 | |
104 | die "please implement inside plugin"; | |
70b03506 AD |
105 | } |
106 | ||
107 | sub on_update_hook { | |
108 | my ($class, $plugin_config) = @_; | |
109 | } | |
110 | ||
70b03506 | 111 | 1; |