correctly delete disks associated with vms
This commit is contained in:
parent
9aff204f63
commit
cdcaa2d6a0
1 changed files with 22 additions and 4 deletions
|
@ -346,8 +346,6 @@ def terminate_virtual_machine(module, azure):
|
||||||
module : AnsibleModule object
|
module : AnsibleModule object
|
||||||
azure: authenticated azure ServiceManagementService object
|
azure: authenticated azure ServiceManagementService object
|
||||||
|
|
||||||
Not yet supported: handle deletion of attached data disks.
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
True if a new virtual machine was deleted, false otherwise
|
True if a new virtual machine was deleted, false otherwise
|
||||||
"""
|
"""
|
||||||
|
@ -380,13 +378,33 @@ def terminate_virtual_machine(module, azure):
|
||||||
role_props = azure.get_role(name, deployment.name, role.role_name)
|
role_props = azure.get_role(name, deployment.name, role.role_name)
|
||||||
if role_props.os_virtual_hard_disk.disk_name not in disk_names:
|
if role_props.os_virtual_hard_disk.disk_name not in disk_names:
|
||||||
disk_names.append(role_props.os_virtual_hard_disk.disk_name)
|
disk_names.append(role_props.os_virtual_hard_disk.disk_name)
|
||||||
|
except WindowsAzureError as e:
|
||||||
|
module.fail_json(msg="failed to get the role %s, error was: %s" % (role.role_name, str(e)))
|
||||||
|
|
||||||
|
try:
|
||||||
result = azure.delete_deployment(name, deployment.name)
|
result = azure.delete_deployment(name, deployment.name)
|
||||||
_wait_for_completion(azure, result, wait_timeout, "delete_deployment")
|
_wait_for_completion(azure, result, wait_timeout, "delete_deployment")
|
||||||
|
except WindowsAzureError as e:
|
||||||
|
module.fail_json(msg="failed to delete the deployment %s, error was: %s" % (deployment.name, str(e)))
|
||||||
|
|
||||||
for disk_name in disk_names:
|
# It's unclear when disks associated with terminated deployment get detatched.
|
||||||
azure.delete_disk(disk_name, True)
|
# Thus, until the wait_timeout is reached, we continue to delete disks as they
|
||||||
|
# become detatched by polling the list of remaining disks and examining the state.
|
||||||
|
wait_start = time.time()
|
||||||
|
while len(disk_names) > 0:
|
||||||
|
try:
|
||||||
|
for disk_name in disk_names:
|
||||||
|
disk = azure.get_disk(disk_name)
|
||||||
|
if disk.attached_to is None:
|
||||||
|
azure.delete_disk(disk.name, True)
|
||||||
|
disk_names.remove(disk_name)
|
||||||
|
except WindowsAzureError as e:
|
||||||
|
module.fail_json(msg="failed to get or delete disk, error was: %s" % (disk_name, str(e)))
|
||||||
|
|
||||||
|
if (time.time() - wait_start) > wait_timeout:
|
||||||
|
module.fail_json(msg="Timeout reached while waiting for disks to become detached.")
|
||||||
|
|
||||||
|
try:
|
||||||
# Now that the vm is deleted, remove the cloud service
|
# Now that the vm is deleted, remove the cloud service
|
||||||
result = azure.delete_hosted_service(service_name=name)
|
result = azure.delete_hosted_service(service_name=name)
|
||||||
_wait_for_completion(azure, result, wait_timeout, "delete_hosted_service")
|
_wait_for_completion(azure, result, wait_timeout, "delete_hosted_service")
|
||||||
|
|
Loading…
Reference in a new issue