Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP]vmware: move get_folder() in module_utils #54620

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 30 additions & 0 deletions lib/ansible/module_utils/vmware.py
Expand Up @@ -1382,3 +1382,33 @@ def to_json(self, obj, properties=None):
else:
result = self._jsonify(obj)
return result

def get_folder_type_obj(self, type):
return {
'vm': self.datacenter_obj.vmFolder,
'host': self.datacenter_obj.hostFolder,
'datastore': self.datacenter_obj.datastoreFolder,
'network': self.datacenter_obj.networkFolder,
}[type]


def get_folder(self, datacenter_name, folder_name, folder_type, parent_folder=None):
"""
Get managed object of folder by name
Returns: Managed object of folder by name

"""
# TODO(Gonéri): use self.datacenter_obj instead of datacenter_name
folder_objs = get_all_objs(self.content, [vim.Folder], parent_folder)
expected_type = self.get_folder_type_obj(folder_type).childType
for folder in folder_objs:
if parent_folder:
if folder.name == folder_name and expected_type == folder.childType:
return folder
else:
if folder.name == folder_name and \
self.get_folder_type_obj(folder_type).childType == folder.childType and \
folder.parent.parent.name == datacenter_name: # e.g. folder.parent.parent.name == /DC01/host/folder
return folder

return None
19 changes: 0 additions & 19 deletions lib/ansible/modules/cloud/vmware/vcenter_folder.py
Expand Up @@ -280,25 +280,6 @@ def ensure(self):
" exception %s " % to_native(gen_exec))
self.module.exit_json(**results)

def get_folder(self, datacenter_name, folder_name, folder_type, parent_folder=None):
"""
Get managed object of folder by name
Returns: Managed object of folder by name

"""
folder_objs = get_all_objs(self.content, [vim.Folder], parent_folder)
for folder in folder_objs:
if parent_folder:
if folder.name == folder_name and \
self.datacenter_folder_type[folder_type].childType == folder.childType:
return folder
else:
if folder.name == folder_name and \
self.datacenter_folder_type[folder_type].childType == folder.childType and \
folder.parent.parent.name == datacenter_name: # e.g. folder.parent.parent.name == /DC01/host/folder
return folder

return None


def main():
Expand Down
33 changes: 0 additions & 33 deletions lib/ansible/modules/cloud/vmware/vmware_guest.py
Expand Up @@ -1993,39 +1993,6 @@ def get_scsi_type(self):
self.module.fail_json(msg="hardware.scsi attribute should be 'paravirtual' or 'lsilogic'")
return disk_controller_type

def find_folder(self, searchpath):
""" Walk inventory objects one position of the searchpath at a time """

# split the searchpath so we can iterate through it
paths = [x.replace('/', '') for x in searchpath.split('/')]
paths_total = len(paths) - 1
position = 0

# recursive walk while looking for next element in searchpath
root = self.content.rootFolder
while root and position <= paths_total:
change = False
if hasattr(root, 'childEntity'):
for child in root.childEntity:
if child.name == paths[position]:
root = child
position += 1
change = True
break
elif isinstance(root, vim.Datacenter):
if hasattr(root, 'vmFolder'):
if root.vmFolder.name == paths[position]:
root = root.vmFolder
position += 1
change = True
else:
root = None

if not change:
root = None

return root

def get_resource_pool(self, cluster=None, host=None, resource_pool=None):
""" Get a resource pool, filter on cluster, esxi_hostname or resource_pool if given """

Expand Down
14 changes: 2 additions & 12 deletions lib/ansible/modules/cloud/vmware/vmware_host.py
Expand Up @@ -319,17 +319,6 @@ def check_host_state(self):
state = 'absent'
return state

def search_folder(self, folder_name):
"""
Search folder in vCenter
Returns: folder object
"""
search_index = self.content.searchIndex
folder_obj = search_index.FindByInventoryPath(folder_name)
if not (folder_obj and isinstance(folder_obj, vim.Folder)):
self.module.fail_json(msg="Folder '%s' not found" % folder_name)
return folder_obj

def search_cluster(self, datacenter_name, cluster_name, esxi_hostname):
"""
Search cluster in vCenter
Expand Down Expand Up @@ -363,8 +352,9 @@ def state_add_host(self):
esxi_license = None
resource_pool = None
task = None
self.datacenter_obj = self.find_datacenter_by_name(self.datacenter_name)
if self.folder_name:
self.folder = self.search_folder(self.folder_name)
self.folder = self.get_folder(self.datacenter_name, self.folder_name, folder_type='host')
try:
task = self.folder.AddStandaloneHost(
spec=host_connect_spec, compResSpec=resource_pool,
Expand Down