Skip to content

Commit

Permalink
IPI disk removal
Browse files Browse the repository at this point in the history
Signed-off-by: Shay Rozen <[email protected]>
  • Loading branch information
shyRozen committed Dec 11, 2024
1 parent 748fdf7 commit 0dac516
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
5 changes: 4 additions & 1 deletion ocs_ci/cleanup/vsphere/cleanup.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,13 @@ def delete_ipi_nodes(vsphere, cluster_name):

vms_ipi = []
for vm in vms_dc:
if cluster_name in vm.name:
if cluster_name in vm.name and "generated-zone" not in vm.name:
vms_ipi.append(vm)
logger.info(vm.name)
if vms_ipi:
for vm in vms_ipi:
logger.info(f"removing disk for vm {vm.name}")
vsphere.remove_disks_with_main_disk(vm)
vsphere.destroy_vms(vms_ipi)


Expand Down
9 changes: 9 additions & 0 deletions ocs_ci/deployment/vmware.py
Original file line number Diff line number Diff line change
Expand Up @@ -1604,6 +1604,15 @@ def destroy_cluster(self, log_level="DEBUG"):
template_folder = get_infra_id(self.cluster_path)
else:
logger.warning("metadata.json file doesn't exist.")
vsphere = VSPHERE(
config.ENV_DATA["vsphere_server"],
config.ENV_DATA["vsphere_user"],
config.ENV_DATA["vsphere_password"],
)
all_vms = vsphere.get_vms_by_string(config.ENV_DATA["cluster_name"])
vsphere.stop_vms(all_vms)
for vm in all_vms:
vsphere.remove_disks_with_main_disk(vm)

try:
run_cmd(
Expand Down
54 changes: 54 additions & 0 deletions ocs_ci/utility/vsphere.py
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,36 @@ def get_used_unit_number(self, vm):
if hasattr(device.backing, "fileName") and device.unitNumber != 0
]

def remove_disks_with_main_disk(self, vm):
"""
Removes all disks for a VM
Args:
vm (vim.VirtualMachine): VM instance
"""
extra_disk_unit_numbers = self.get_used_unit_number_with_all_unit_number(vm)
if extra_disk_unit_numbers:
for each_disk_unit_number in extra_disk_unit_numbers:
self.remove_disk(vm=vm, identifier=each_disk_unit_number)

def get_used_unit_number_with_all_unit_number(self, vm):
"""
Gets the used unit numbers including main disk for a VM
Args:
vm (vim.VirtualMachine): VM instance
Returns:
list: list of unit numbers
"""
return [
device.unitNumber
for device in vm.config.hardware.device
if hasattr(device.backing, "fileName")
]

def check_folder_exists(self, name, cluster, dc):
"""
Checks whether folder exists in Templates
Expand Down Expand Up @@ -1742,3 +1772,27 @@ def get_volume_path(self, volume_id, datastore_name, datacenter_name):
volume_path = vstorage_object.config.backing.filePath
logger.debug(f"File path for volume {volume_id} is `{volume_path}`")
return volume_path

def get_vms_by_string(self, str_to_match):
"""
Gets the VM's with search string
Args:
str_to_match (str): String to match VM's
Returns:
list: VM instance
"""

content = self.get_content
container = content.rootFolder
view_type = [vim.VirtualMachine]
recursive = True

container_view = content.viewManager.CreateContainerView(
container, view_type, recursive
)
vms = [vm for vm in container_view.view if str_to_match in vm.name]
container_view.Destroy()
return vms

0 comments on commit 0dac516

Please sign in to comment.