Skip to content

Commit 3732549

Browse files
authored
Merge pull request #901 from QualiSystems/feature/assaf_GetVmDetails
Added wait before getting vm_details
2 parents 5b5bce4 + 2c1d94a commit 3732549

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

package/cloudshell/cp/vcenter/commands/vm_details.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import traceback
2-
3-
import jsonpickle
2+
import time
43

54
from cloudshell.cp.vcenter.vm.vm_details_provider import VmDetails, VmDataField
65

@@ -9,6 +8,8 @@ class VmDetailsCommand(object):
98
def __init__(self, pyvmomi_service, vm_details_provider):
109
self.pyvmomi_service = pyvmomi_service
1110
self.vm_details_provider = vm_details_provider
11+
self.timeout = 30
12+
self.delay = 1
1213

1314
def get_vm_details(self, si, logger, resource_context, requests, cancellation_context):
1415
results = []
@@ -18,6 +19,7 @@ def get_vm_details(self, si, logger, resource_context, requests, cancellation_co
1819
app_name = request.deployedAppJson.name
1920
try:
2021
vm = self.pyvmomi_service.find_by_uuid(si, request.deployedAppJson.vmdetails.uid)
22+
self._wait_for_vm_to_be_ready(vm, request, logger)
2123
result = self.vm_details_provider.create(
2224
vm=vm,
2325
name=app_name,
@@ -34,6 +36,21 @@ def get_vm_details(self, si, logger, resource_context, requests, cancellation_co
3436

3537
return results
3638

39+
def _wait_for_vm_to_be_ready(self, vm, request, logger):
40+
start_time = time.time()
41+
while time.time()-start_time<self.timeout and (self._not_guest_net(vm) or self._no_guest_ip(vm, request)):
42+
time.sleep(self.delay)
43+
logger.info('_wait_for_vm_to_be_ready: '+str(time.time()-start_time)+' sec')
44+
45+
@staticmethod
46+
def _not_guest_net(vm):
47+
return not vm.guest.net
48+
49+
@staticmethod
50+
def _no_guest_ip(vm, request):
51+
wait_for_ip = next((p.value for p in request.deployedAppJson.vmdetails.vmCustomParams if p.name == 'wait_for_ip'), False)
52+
return wait_for_ip and not vm.guest.ipAddress
53+
3754

3855
class DeploymentDetailsProviderFromAppJson(object):
3956
def __init__(self, deployment_service):

0 commit comments

Comments
 (0)