]>
git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Ipams/PhpIpamPlugin.pm
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, $noerr) = @_;
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_prefix_id
($url, $cidr, $headers);
58 my $params = { subnet
=> $network,
60 sectionId
=> $section,
64 PVE
::Network
::SDN
::api_request
("POST", "$url/subnets/", $headers, $params);
67 die "error add subnet to ipam: $@" if !$noerr;
74 my ($class, $plugin_config, $subnetid, $subnet, $noerr) = @_;
76 my $cidr = $subnet->{cidr
};
77 my $url = $plugin_config->{url
};
78 my $token = $plugin_config->{token
};
79 my $section = $plugin_config->{section
};
80 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
82 my $internalid = get_prefix_id
($url, $cidr, $headers);
83 return if !$internalid;
85 return; #fixme: check that prefix is empty exluding gateway, before delete
88 PVE
::Network
::SDN
::api_request
("DELETE", "$url/subnets/$internalid", $headers);
91 die "error deleting subnet from ipam: $@" if !$noerr;
97 my ($class, $plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway, $noerr) = @_;
99 my $cidr = $subnet->{cidr
};
100 my $url = $plugin_config->{url
};
101 my $token = $plugin_config->{token
};
102 my $section = $plugin_config->{section
};
103 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
105 my $internalid = get_prefix_id
($url, $cidr, $headers);
107 my $params = { ip
=> $ip,
108 subnetId
=> $internalid,
109 hostname
=> $hostname,
110 description
=> $description,
112 $params->{is_gateway
} = 1 if $is_gateway;
113 $params->{mac
} = $mac if $mac;
116 PVE
::Network
::SDN
::api_request
("POST", "$url/addresses/", $headers, $params);
121 die "error add subnet ip to ipam: ip $ip already exist: $@" if !is_ip_gateway
($url, $ip, $headers) && !$noerr;
123 die "error add subnet ip to ipam: ip $ip already exist: $@" if !$noerr;
129 my ($class, $plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway, $noerr) = @_;
131 my $cidr = $subnet->{cidr
};
132 my $url = $plugin_config->{url
};
133 my $token = $plugin_config->{token
};
134 my $section = $plugin_config->{section
};
135 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
137 my $ip_id = get_ip_id
($url, $ip, $headers);
138 die "can't find ip addresse in ipam" if !$ip_id;
141 hostname
=> $hostname,
142 description
=> $description,
144 $params->{is_gateway
} = 1 if $is_gateway;
145 $params->{mac
} = $mac if $mac;
148 PVE
::Network
::SDN
::api_request
("PATCH", "$url/addresses/$ip_id", $headers, $params);
152 die "ipam: error update subnet ip $ip: $@" if !$noerr;
156 sub add_next_freeip
{
157 my ($class, $plugin_config, $subnetid, $subnet, $hostname, $mac, $description, $noerr) = @_;
159 my $cidr = $subnet->{cidr
};
160 my $mask = $subnet->{mask
};
161 my $url = $plugin_config->{url
};
162 my $token = $plugin_config->{token
};
163 my $section = $plugin_config->{section
};
164 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
166 my $internalid = get_prefix_id
($url, $cidr, $headers);
168 my $params = { hostname
=> $hostname,
169 description
=> $description,
172 $params->{mac
} = $mac if $mac;
176 my $result = PVE
::Network
::SDN
::api_request
("POST", "$url/addresses/first_free/$internalid/", $headers, $params);
177 $ip = $result->{data
};
181 die "can't find free ip in subnet $cidr: $@" if !$noerr;
184 return "$ip/$mask" if $ip && $mask;
188 my ($class, $plugin_config, $subnetid, $subnet, $ip, $noerr) = @_;
192 my $url = $plugin_config->{url
};
193 my $token = $plugin_config->{token
};
194 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
196 my $ip_id = get_ip_id
($url, $ip, $headers);
200 PVE
::Network
::SDN
::api_request
("DELETE", "$url/addresses/$ip_id", $headers);
203 die "error delete ip $ip: $@" if !$noerr;
208 my ($class, $plugin_config) = @_;
210 my $url = $plugin_config->{url
};
211 my $token = $plugin_config->{token
};
212 my $sectionid = $plugin_config->{section
};
213 my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'Token' => $token];
216 PVE
::Network
::SDN
::api_request
("GET", "$url/sections/$sectionid", $headers);
219 die "Can't connect to phpipam api: $@";
224 my ($class, $plugin_config) = @_;
226 PVE
::Network
::SDN
::Ipams
::PhpIpamPlugin
::verify_api
($class, $plugin_config);
233 my ($url, $cidr, $headers) = @_;
235 my $result = PVE
::Network
::SDN
::api_request
("GET", "$url/subnets/cidr/$cidr", $headers);
236 my $data = @{$result->{data
}}[0];
237 my $internalid = $data->{id
};
242 my ($url, $ip, $headers) = @_;
243 my $result = PVE
::Network
::SDN
::api_request
("GET", "$url/addresses/search/$ip", $headers);
244 my $data = @{$result->{data
}}[0];
245 my $ip_id = $data->{id
};
250 my ($url, $ip, $headers) = @_;
251 my $result = PVE
::Network
::SDN
::api_request
("GET", "$url/addresses/search/$ip", $headers);
252 my $data = @{$result->{data
}}[0];
253 my $is_gateway = $data->{is_gateway
};