Skip to content

Commit e5ac99c

Browse files
Merge pull request #976 from QualiSystems/bug/autodiscovery_should_identify_resource_pool_under_host_system
autodiscovery should now correctly identify resource pool when it is …
2 parents fe51c64 + 55299f5 commit e5ac99c

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

package/cloudshell/cp/vcenter/common/vcenter/model_auto_discovery.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
from cloudshell.cp.vcenter.common.utilites.common_utils import back_slash_to_front_converter
1818

19+
1920
DOMAIN = 'Global'
2021
ADDRESS = 'address'
2122
USER = 'User'
@@ -36,8 +37,16 @@
3637
VM_RESOURCE_POOL, VM_CLUSTER]
3738

3839

40+
class ResourcePoolParams(object):
41+
def __init__(self):
42+
self.cluster_name = ''
43+
self.resource_pool = ''
44+
self.si = None
45+
46+
3947
class VCenterAutoModelDiscovery(object):
4048
def __init__(self):
49+
self.dc = None
4150
self.parser = ResourceModelParser()
4251
self.pv_service = pyVmomiService(SmartConnect, Disconnect, SynchronousTaskWaiter())
4352
self.context_based_logger_factory = ContextBasedLoggerFactory()
@@ -54,7 +63,6 @@ def validate_and_discover(self, context):
5463
"""
5564
:type context: models.QualiDriverModels.AutoLoadCommandContext
5665
"""
57-
5866
logger = self._get_logger(context)
5967
logger.info('Autodiscovery started')
6068
si = None
@@ -77,6 +85,7 @@ def validate_and_discover(self, context):
7785
try:
7886
all_dc = self.pv_service.get_all_items_in_vcenter(si, vim.Datacenter)
7987
dc = self._validate_datacenter(si, all_dc, auto_attr, resource.attributes)
88+
self.dc = dc
8089

8190
all_items_in_dc = self.pv_service.get_all_items_in_vcenter(si, None, dc)
8291
dc_name = dc.name
@@ -247,12 +256,19 @@ def _validate_vm_cluster(self, si, all_items_in_vc, auto_att, dc_name, attribute
247256
return cluster
248257

249258
def _validate_vm_resource_pool(self, si, all_items_in_vc, auto_att, dc_name, attributes, key):
250-
cluster = self._validate_vm_cluster(si, all_items_in_vc, auto_att, dc_name, attributes, VM_CLUSTER)
251-
252259
if key not in attributes or not attributes[key]:
253260
return
261+
262+
cluster = self._validate_vm_cluster(si, all_items_in_vc, auto_att, dc_name, attributes, VM_CLUSTER)
263+
254264
pool_name = attributes[key]
255-
pool = self._find_resource_pool_by_path(pool_name, cluster)
265+
266+
rp_params = ResourcePoolParams()
267+
rp_params.cluster_name = cluster.name
268+
rp_params.resource_pool = pool_name
269+
rp_params.si = si
270+
271+
pool = self.pv_service.get_resource_pool(self.dc, rp_params)
256272
if pool:
257273
auto_att.append(AutoLoadAttribute('', key, pool_name))
258274
return

package/cloudshell/cp/vcenter/common/vcenter/vmomi_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ def clone_vm(self, clone_params, logger, cancellation_context):
448448

449449
snapshot = self._get_snapshot(clone_params, template)
450450

451-
resource_pool, host = self._get_resource_pool(datacenter.name, clone_params)
451+
resource_pool, host = self.get_resource_pool(datacenter.name, clone_params)
452452

453453
if not resource_pool and not host:
454454
raise ValueError('The specifed host, cluster or resource pool could not be found')
@@ -539,7 +539,7 @@ def _get_datastore(self, clone_params):
539539
raise ValueError('Could not find Datastore: "{0}"'.format(clone_params.datastore_name))
540540
return datastore
541541

542-
def _get_resource_pool(self, datacenter_name, clone_params):
542+
def get_resource_pool(self, datacenter_name, clone_params):
543543

544544
obj_name = '{0}/{1}/{2}'.format(datacenter_name,
545545
clone_params.cluster_name,

package/cloudshell/tests/test_common/test_vcenter/test_vmomi_service.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def test_clone_vm_power_on_false(self):
6969
pv_service.get_obj = Mock()
7070
pv_service.get_folder = Mock(return_value=datacenter)
7171
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
72-
pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
72+
pv_service.get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
7373

7474
params = pv_service.CloneVmParameters(si=si,
7575
template_name='my_temp',
@@ -111,7 +111,7 @@ def test_clone_vm_resource_pool_is_not_empty(self):
111111
pv_service.get_obj = Mock()
112112
pv_service.get_folder = Mock(return_value=datacenter)
113113
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
114-
pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
114+
pv_service.get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
115115

116116
params = pv_service.CloneVmParameters(si=si,
117117
template_name='my_temp',
@@ -153,7 +153,7 @@ def test_clone_vm_datastore_name_is_not_none(self):
153153
pv_service.get_obj = Mock()
154154
pv_service.get_folder = Mock(return_value=datacenter)
155155
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
156-
pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
156+
pv_service.get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
157157

158158
params = pv_service.CloneVmParameters(si=si,
159159
template_name='my_temp',
@@ -195,7 +195,7 @@ def test_clone_vm_destenation_folder_is_unsupported(self):
195195
pv_service.get_obj = Mock()
196196
pv_service.get_folder = Mock(return_value=folder)
197197
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
198-
pv_service._get_resource_pool = Mock(return_value=Mock(spec=vim.ResourcePool))
198+
pv_service.get_resource_pool = Mock(return_value=Mock(spec=vim.ResourcePool))
199199

200200
params = pv_service.CloneVmParameters(si=si,
201201
template_name='my_temp',
@@ -233,7 +233,7 @@ def test_clone_vm_destenation_folder_is_folder_type(self):
233233
pv_service.get_obj = Mock()
234234
pv_service.get_folder = Mock(return_value=folder)
235235
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
236-
pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
236+
pv_service.get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
237237

238238
params = pv_service.CloneVmParameters(si=si,
239239
template_name='my_temp',
@@ -273,7 +273,7 @@ def test_clone_vm_datastore_name_is_none(self):
273273
pv_service.get_obj = Mock()
274274
pv_service.get_folder = Mock(return_value=datacenter)
275275
pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore))
276-
pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
276+
pv_service.get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None))
277277

278278
params = pv_service.CloneVmParameters(si=si,
279279
template_name='my_temp',

0 commit comments

Comments
 (0)