]>
git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Ipams/PhpIpamPlugin.pm
f89ef297b337d5f9e4ff3e0d01edc57ed00faf58
1 package PVE
::Network
::SDN
::Ipams
::PhpIpamPlugin
;
9 use base
('PVE::Network::SDN::Ipams::Plugin');
32 url
=> { optional
=> 0},
33 token
=> { optional
=> 0 },
34 section
=> { optional
=> 0 },
38 # Plugin implementation
41 my ($class, $plugin_config, $subnetid, $subnet) = @_;
43 my $cidr = $subnet->{cidr
};
44 my $network = $subnet->{network
};
45 my $mask = $subnet->{mask
};
47 my $gateway = $subnet->{gateway
};
48 my $url = $plugin_config->{url
};
49 my $token = $plugin_config->{token
};
50 my $section = $plugin_config->{section
};
51 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
54 my $internalid = get_internalid
($url, $cidr, $headers);
59 my $params = { subnet
=> $network,
61 sectionId
=> $section,
65 PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("POST", "$url/subnets/", $headers, $params);
68 die "error add subnet to ipam: $@";
75 my ($class, $plugin_config, $subnetid, $subnet) = @_;
77 my $cidr = $subnet->{cidr
};
78 my $url = $plugin_config->{url
};
79 my $token = $plugin_config->{token
};
80 my $section = $plugin_config->{section
};
81 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
83 my $internalid = get_internalid
($url, $cidr, $headers);
84 return if !$internalid;
86 return; #fixme: check that prefix is empty exluding gateway, before delete
89 PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("DELETE", "$url/subnets/$internalid", $headers);
92 die "error deleting subnet from ipam: $@";
98 my ($class, $plugin_config, $subnetid, $subnet, $ip, $is_gateway) = @_;
100 my $cidr = $subnet->{cidr
};
101 my $url = $plugin_config->{url
};
102 my $token = $plugin_config->{token
};
103 my $section = $plugin_config->{section
};
104 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
106 my $internalid = get_internalid
($url, $cidr, $headers);
108 my $params = { ip
=> $ip,
109 subnetId
=> $internalid,
110 is_gateway
=> $is_gateway,
114 PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("POST", "$url/addresses/", $headers, $params);
118 die "error add subnet ip to ipam: ip $ip already exist: $@";
122 sub add_next_freeip
{
123 my ($class, $plugin_config, $subnetid, $subnet, $internalid, $hostname) = @_;
125 my $cidr = $subnet->{cidr
};
126 my $mask = $subnet->{mask
};
127 my $url = $plugin_config->{url
};
128 my $token = $plugin_config->{token
};
129 my $section = $plugin_config->{section
};
130 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
132 $internalid = get_internalid
($url, $cidr, $headers) if !$internalid;
138 my $result = PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("POST", "$url/addresses/first_free/$internalid/", $headers, $params);
139 $ip = $result->{data
};
143 die "can't find free ip in subnet $cidr: $@";
150 my ($class, $plugin_config, $subnetid, $subnet, $ip) = @_;
154 my $url = $plugin_config->{url
};
155 my $token = $plugin_config->{token
};
156 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
158 my $ip_id = get_ip_id
($url, $ip, $headers);
162 PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("DELETE", "$url/addresses/$ip_id", $headers);
165 die "error delete ip $ip: $@";
170 my ($class, $plugin_config) = @_;
172 my $url = $plugin_config->{url
};
173 my $token = $plugin_config->{token
};
174 my $sectionid = $plugin_config->{section
};
175 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
178 PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("GET", "$url/sections/$sectionid", $headers);
181 die "Can't connect to phpipam api: $@";
186 my ($class, $plugin_config) = @_;
188 PVE
::Network
::SDN
::Ipams
::PhpIpamPlugin
::verify_api
($class, $plugin_config);
195 my ($url, $cidr, $headers) = @_;
197 my $result = PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("GET", "$url/subnets/cidr/$cidr", $headers);
198 my $data = @{$result->{data
}}[0];
199 my $internalid = $data->{id
};
204 my ($url, $ip, $headers) = @_;
205 my $result = PVE
::Network
::SDN
::Ipams
::Plugin
::api_request
("GET", "$url/addresses/search/$ip", $headers);
206 my $data = @{$result->{data
}}[0];
207 my $ip_id = $data->{id
};