At the moment IP is short-circuited when there are no available IP
addresses. However, if some IP addresses are already allocated then
"no available IP addresses" means that all the addresses should
(probably) be released. The current short-circuit means that no
already hosted IP addresses will be released.
The short-circuit exists to avoid lots of messages saying that all IP
addresses can not be assigned at startup time. So, add a check to
ipalloc_can_host_ips() so that it succeeds if IP addresses are already
allocated to nodes.
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
return (ipalloc_state->all_ips != NULL);
}
+/* This can only return false if there are no available IPs *and*
+ * there are no IP addresses currently allocated. If the latter is
+ * true then the cluster can clearly host IPs... just not necessarily
+ * right now... */
bool ipalloc_can_host_ips(struct ipalloc_state *ipalloc_state)
{
int i;
+ struct public_ip_list *ip_list;
+
+
+ for (ip_list = ipalloc_state->all_ips;
+ ip_list != NULL;
+ ip_list = ip_list->next) {
+ if (ip_list->pnn != -1) {
+ return true;
+ }
+ }
for (i=0; i < ipalloc_state->num; i++) {
if (ipalloc_state->available_public_ips[i].num != 0) {