diff --git a/package/cloudshell/cp/vcenter/commands/vm_details.py b/package/cloudshell/cp/vcenter/commands/vm_details.py index a3d9f4b7..30badbbf 100644 --- a/package/cloudshell/cp/vcenter/commands/vm_details.py +++ b/package/cloudshell/cp/vcenter/commands/vm_details.py @@ -22,6 +22,9 @@ def get_vm_details(self, si, logger, resource_context, requests, cancellation_co try: vm = self.pyvmomi_service.find_by_uuid(si, request.deployedAppJson.vmdetails.uid) + + wait_for_ip = next((p.value for p in request.deployedAppJson.vmdetails.vmCustomParams if p.name == 'wait_for_ip'), 'False') + self._wait_for_vm_to_be_ready(vm, request, logger) result = self.vm_details_provider.create( @@ -30,6 +33,7 @@ def get_vm_details(self, si, logger, resource_context, requests, cancellation_co reserved_networks=resource_context.attributes.get('Reserved Networks', '').split(';'), ip_regex=next((p.value for p in request.deployedAppJson.vmdetails.vmCustomParams if p.name=='ip_regex'), None), deployment_details_provider=DeploymentDetailsProviderFromAppJson(request.appRequestJson.deploymentService), + wait_for_ip=wait_for_ip, logger=logger) except Exception as e: diff --git a/package/cloudshell/cp/vcenter/vm/deploy.py b/package/cloudshell/cp/vcenter/vm/deploy.py index 7f9cb27f..4753891b 100644 --- a/package/cloudshell/cp/vcenter/vm/deploy.py +++ b/package/cloudshell/cp/vcenter/vm/deploy.py @@ -207,6 +207,7 @@ def _safely_get_vm_details(self, vm, vm_name, vcenter_model, deploy_model, logge reserved_networks=vcenter_model.reserved_networks, ip_regex=deploy_model.ip_regex, deployment_details_provider=DeploymentDetailsProviderFromTemplateModel(deploy_model), + wait_for_ip = deploy_model.wait_for_ip, logger=logger) except Exception: logger.error("Error getting vm details for '{0}': {1}".format(vm_name, traceback.format_exc())) diff --git a/package/cloudshell/cp/vcenter/vm/vm_details_provider.py b/package/cloudshell/cp/vcenter/vm/vm_details_provider.py index f114d108..4b0785f1 100644 --- a/package/cloudshell/cp/vcenter/vm/vm_details_provider.py +++ b/package/cloudshell/cp/vcenter/vm/vm_details_provider.py @@ -11,11 +11,23 @@ def __init__(self, pyvmomi_service, ip_manager): self.pyvmomi_service = pyvmomi_service # type: pyVmomiService self.ip_manager = ip_manager # type: VMIPManager - def create(self, vm, name, reserved_networks, ip_regex, deployment_details_provider, logger): - """""" + def create(self, vm, name, reserved_networks, ip_regex, deployment_details_provider, wait_for_ip, logger): + """ + creates the details provider + :param vm: + :param name: + :param reserved_networks: + :param ip_regex: + :param deployment_details_provider: + :param wait_for_ip: type: string contains 'True' or 'False' + :param logger: + :return: + """ + + logger.info('waiting for ip = {0}'.format(wait_for_ip)) vm_instance_data = self._get_vm_instance_data(vm, deployment_details_provider) - vm_network_data = self._get_vm_network_data(vm, reserved_networks, ip_regex, logger) + vm_network_data = self._get_vm_network_data(vm, reserved_networks, ip_regex, wait_for_ip, logger) return VmDetailsData(vmInstanceData=vm_instance_data, vmNetworkData=vm_network_data) @@ -39,10 +51,14 @@ def _get_vm_instance_data(self, vm, deployment_details_provider): return data - def _get_vm_network_data(self, vm, reserved_networks, ip_regex, logger): + def _get_vm_network_data(self, vm, reserved_networks, ip_regex, wait_for_ip, logger): network_interfaces = [] - primary_ip = self._get_primary_ip(vm, ip_regex, logger) + if wait_for_ip == 'True': + primary_ip = self._get_primary_ip(vm, ip_regex, logger) + else: + primary_ip = None; + net_devices = [d for d in vm.config.hardware.device if isinstance(d, vim.vm.device.VirtualEthernetCard)] for device in net_devices: diff --git a/package/cloudshell/tests/test_commands/test_vm_details.py b/package/cloudshell/tests/test_commands/test_vm_details.py index 0b32aaf1..05dc5e3e 100644 --- a/package/cloudshell/tests/test_commands/test_vm_details.py +++ b/package/cloudshell/tests/test_commands/test_vm_details.py @@ -25,12 +25,15 @@ def test(self, get_network_by_device): si = Mock() pyvmomi_service = Mock() pyvmomi_service.find_by_uuid = Mock(return_value=vm) - param = Mock() - param.name = 'ip_regex' - param.value = '.*' + ip_regex_param = Mock() + ip_regex_param.name = 'ip_regex' + ip_regex_param.value = '.*' + wait_for_ip_param = Mock() + wait_for_ip_param.name = 'wait_for_ip' + wait_for_ip_param.value = 'True' request = Mock() request.deployedAppJson.name = 'App1' - request.deployedAppJson.vmdetails.vmCustomParams = [param] + request.deployedAppJson.vmdetails.vmCustomParams = [ip_regex_param, wait_for_ip_param] request.appRequestJson.deploymentService.model = 'vCenter Clone VM From VM' request.appRequestJson.deploymentService.attributes = [Mock()] resource_context = Mock() diff --git a/package/version.txt b/package/version.txt index cd99d386..a32d5a6a 100644 --- a/package/version.txt +++ b/package/version.txt @@ -1 +1 @@ -1.14.0 \ No newline at end of file +1.14.2 \ No newline at end of file diff --git a/vcentershell_driver/drivermetadata.xml b/vcentershell_driver/drivermetadata.xml index 66811cf8..fb2ed9dc 100644 --- a/vcentershell_driver/drivermetadata.xml +++ b/vcentershell_driver/drivermetadata.xml @@ -1,4 +1,4 @@ - + diff --git a/version.txt b/version.txt index cd99d386..533ddb5c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.14.0 \ No newline at end of file +1.14.1.175