mirror of
https://github.com/jbowdre/phpIPAM-for-vRA8.git
synced 2024-11-22 06:52:19 +00:00
implement allocate_ip
This commit is contained in:
parent
629f70a96c
commit
b31e96d42b
2 changed files with 21 additions and 22 deletions
|
@ -1 +1,2 @@
|
||||||
requests==2.21.0
|
requests==2.21.0
|
||||||
|
datetime
|
|
@ -110,7 +110,7 @@ def do_allocate_ip(self, auth_credentials, cert):
|
||||||
allocation_result.append(allocate(resource, allocation, self.context, self.inputs["endpoint"], bundle))
|
allocation_result.append(allocate(resource, allocation, self.context, self.inputs["endpoint"], bundle))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
try:
|
try:
|
||||||
rollback(allocation_result)
|
rollback(allocation_result, bundle)
|
||||||
except Exception as rollback_e:
|
except Exception as rollback_e:
|
||||||
logging.error(f"Error during rollback of allocation result {str(allocation_result)}")
|
logging.error(f"Error during rollback of allocation result {str(allocation_result)}")
|
||||||
logging.error(rollback_e)
|
logging.error(rollback_e)
|
||||||
|
@ -149,24 +149,18 @@ def allocate_in_range(range_id, resource, allocation, context, endpoint, bundle)
|
||||||
'description': f'Reserved by vRA for {owner} at {datetime.now()}'
|
'description': f'Reserved by vRA for {owner} at {datetime.now()}'
|
||||||
}
|
}
|
||||||
allocate_uri = f'{uri}/addresses/first_free/{str(range_id)}/'
|
allocate_uri = f'{uri}/addresses/first_free/{str(range_id)}/'
|
||||||
req = requests.post(allocate_uri, data=payload, token=token, verify=cert)
|
allocate_req = requests.post(allocate_uri, data=payload, headers=token, verify=cert)
|
||||||
|
allocate_req = allocate_req.json()
|
||||||
|
if allocate_req['success']:
|
||||||
result = {
|
result = {
|
||||||
"ipAllocationId": allocation['id'],
|
"ipAllocationId": allocation['id'],
|
||||||
"ipRangeId": range_id,
|
"ipRangeId": range_id,
|
||||||
"ipVersion":
|
"ipVersion": "IPv4",
|
||||||
|
"ipAddresses": [allocate_req['data']]
|
||||||
}
|
}
|
||||||
|
logging.info(f"Successfully reserved {str(result['ipAddresses'])} for {vmName}.")
|
||||||
|
else:
|
||||||
|
raise Exception("Unable to allocate IP!")
|
||||||
|
|
||||||
result = {
|
|
||||||
"ipAllocationId": allocation["id"],
|
|
||||||
"ipRangeId": range_id,
|
|
||||||
"ipVersion": "IPv4"
|
|
||||||
}
|
|
||||||
|
|
||||||
result["ipAddresses"] = ["10.23.117.5"]
|
|
||||||
result["properties"] = {"customPropertyKey1": "customPropertyValue1"}
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
|
@ -175,11 +169,15 @@ def allocate_in_range(range_id, resource, allocation, context, endpoint, bundle)
|
||||||
raise Exception("Not implemented")
|
raise Exception("Not implemented")
|
||||||
|
|
||||||
## Rollback any previously allocated addresses in case this allocation request contains multiple ones and failed in the middle
|
## Rollback any previously allocated addresses in case this allocation request contains multiple ones and failed in the middle
|
||||||
def rollback(allocation_result):
|
def rollback(allocation_result, bundle):
|
||||||
|
uri = bundle['uri']
|
||||||
|
token = bundle['token']
|
||||||
|
cert = bundle['cert']
|
||||||
for allocation in reversed(allocation_result):
|
for allocation in reversed(allocation_result):
|
||||||
logging.info(f"Rolling back allocation {str(allocation)}")
|
logging.info(f"Rolling back allocation {str(allocation)}")
|
||||||
ipAddresses = allocation.get("ipAddresses", None)
|
ipAddresses = allocation.get("ipAddresses", None)
|
||||||
|
for ipAddress in ipAddresses:
|
||||||
## release the address
|
rollback_uri = f'{uri}/addresses/{allocation.get("id")}/'
|
||||||
|
requests.delete(rollback_uri, headers=token, verify=cert)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue