11import traceback
2-
3- import jsonpickle
2+ import time
43
54from 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
3855class DeploymentDetailsProviderFromAppJson (object ):
3956 def __init__ (self , deployment_service ):
0 commit comments