Skip to content

Commit c42b38a

Browse files
authored
Merge pull request #836 from QualiSystems/feature/alex_merge_1.5.2_to_dev
alex merge 1.5.2 to dev
2 parents 8cfee2b + f3582eb commit c42b38a

8 files changed

Lines changed: 65 additions & 27 deletions

File tree

deployment_drivers/deploy_clone_from_vm/driver.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import jsonpickle
2-
from cloudshell.api.cloudshell_api import InputNameValue
2+
from cloudshell.api.cloudshell_api import InputNameValue, CommandExecutionCancelledResultInfo
33
from cloudshell.cp.vcenter.models.DeployFromTemplateDetails import DeployFromTemplateDetails
44
from cloudshell.cp.vcenter.models.vCenterCloneVMFromVMResourceModel import vCenterCloneVMFromVMResourceModel
55

@@ -59,4 +59,5 @@ def Deploy(self, context, Name=None):
5959
params,
6060
False)
6161

62-
return result.Output
62+
return self.cs_helper.proceed_command_execution_result(reservation_id=reservation_id, result=result,
63+
context=context)

deployment_drivers/deploy_from_image/driver.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import jsonpickle
2-
from cloudshell.api.cloudshell_api import InputNameValue
2+
from cloudshell.api.cloudshell_api import InputNameValue, CommandExecutionCancelledResultInfo
33
from cloudshell.shell.core.resource_driver_interface import ResourceDriverInterface
44

55
from cloudshell.cp.vcenter.models.DeployDataHolder import DeployDataHolder
@@ -50,13 +50,17 @@ def Deploy(self, context, Name=None):
5050

5151

5252
deployment_info = self._get_deployment_info(vcenter_image_resource_model, Name)
53+
54+
reservation_id = context.reservation.reservation_id
5355
result = session.ExecuteCommand(context.reservation.reservation_id,
5456
vcenter_res,
5557
"Resource",
5658
"deploy_from_image",
5759
self._get_command_inputs_list(deployment_info),
5860
False)
59-
return result.Output
61+
62+
return self.cs_helper.proceed_command_execution_result(reservation_id=reservation_id, result=result,
63+
context=context)
6064

6165
def _get_deployment_info(self, image_model, name):
6266
"""

deployment_drivers/deploy_from_linked_clone/driver.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import jsonpickle
2-
from cloudshell.api.cloudshell_api import InputNameValue
2+
from cloudshell.api.cloudshell_api import InputNameValue, CommandExecutionCancelledResultInfo
33
from cloudshell.cp.vcenter.models.DeployFromTemplateDetails import DeployFromTemplateDetails
44
from cloudshell.cp.vcenter.models.VCenterDeployVMFromLinkedCloneResourceModel import VCenterDeployVMFromLinkedCloneResourceModel
55

@@ -59,4 +59,5 @@ def Deploy(self, context, Name=None):
5959
params,
6060
False)
6161

62-
return result.Output
62+
return self.cs_helper.proceed_command_execution_result(reservation_id=reservation_id, result=result,
63+
context=context)

deployment_drivers/deploy_from_template/driver.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
from distutils import config
2+
13
import jsonpickle
2-
from cloudshell.api.cloudshell_api import InputNameValue
4+
from cloudshell.api.cloudshell_api import InputNameValue, CommandExecutionCancelledResultInfo
5+
6+
from cloudshell.cp.vcenter.common.utilites.context_based_logger_factory import ContextBasedLoggerFactory
37
from cloudshell.cp.vcenter.models.DeployFromTemplateDetails import DeployFromTemplateDetails
48
from cloudshell.cp.vcenter.models.vCenterVMFromTemplateResourceModel import vCenterVMFromTemplateResourceModel
59

@@ -59,4 +63,5 @@ def Deploy(self, context, Name=None):
5963
params,
6064
False)
6165

62-
return result.Output
66+
return self.cs_helper.proceed_command_execution_result(reservation_id=reservation_id, result=result,
67+
context=context)

package/cloudshell/cp/vcenter/common/cloud_shell/driver_helper.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from cloudshell.api.cloudshell_api import CloudShellAPISession
1+
from cloudshell.api.cloudshell_api import CloudShellAPISession, CommandExecutionCancelledResultInfo
22

3+
from cloudshell.cp.vcenter.common.utilites.context_based_logger_factory import ContextBasedLoggerFactory
34
from cloudshell.cp.vcenter.models.VCenterConnectionDetails import VCenterConnectionDetails
45

56

@@ -39,3 +40,13 @@ def get_connection_details(self, session, vcenter_resource_model, resource_conte
3940

4041
return VCenterConnectionDetails(vcenter_url, user, password)
4142

43+
def proceed_command_execution_result(self, reservation_id, result, context):
44+
if isinstance(result, CommandExecutionCancelledResultInfo):
45+
logger_factory = ContextBasedLoggerFactory()
46+
logger = logger_factory.create_logger_for_context(logger_name='vCenterShell',
47+
context=context)
48+
logger.info("Deploy from template for reservation '{0}': {1}".format(reservation_id, result.Message))
49+
return result.Message
50+
else:
51+
return result.Output
52+

package/cloudshell/cp/vcenter/common/wrappers/command_wrapper.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(self, pv_service, cloud_shell_helper, resource_model_parser, contex
4747
# add lock
4848
self.lock = Lock()
4949
self.si = None
50+
self.connection_details = None
5051

5152
@retry(stop_max_attempt_number=3, wait_fixed=2000, retry_on_exception=retry_if_auth_error)
5253
def execute_command_with_connection(self, context, command, *args):
@@ -59,8 +60,8 @@ def execute_command_with_connection(self, context, command, *args):
5960
"""
6061

6162
logger = self.context_based_logger_factory.create_logger_for_context(
62-
logger_name='vCenterShell',
63-
context=context)
63+
logger_name='vCenterShell',
64+
context=context)
6465

6566
if not command:
6667
logger.error(COMMAND_CANNOT_BE_NONE)
@@ -88,11 +89,11 @@ def execute_command_with_connection(self, context, command, *args):
8889
if connection_details:
8990
logger.info(INFO_CONNECTING_TO_VCENTER.format(connection_details.host))
9091
logger.debug(
91-
DEBUG_CONNECTION_INFO.format(connection_details.host,
92-
connection_details.username,
93-
connection_details.port))
92+
DEBUG_CONNECTION_INFO.format(connection_details.host,
93+
connection_details.username,
94+
connection_details.port))
9495

95-
si = self.get_py_service_connection(connection_details,logger)
96+
si = self.get_py_service_connection(connection_details, logger)
9697
if si:
9798
logger.info(CONNECTED_TO_CENTER.format(connection_details.host))
9899
command_args.append(si)
@@ -120,18 +121,33 @@ def execute_command_with_connection(self, context, command, *args):
120121
finally:
121122
logger.info(LOG_FORMAT.format(END, command_name))
122123

123-
def get_py_service_connection(self, connection_details, logger):
124+
def get_py_service_connection(self, req_connection_details, logger):
124125
logger.info("get_py_service_connection")
125-
if self.si is None:
126+
if self.si is None or self.has_connection_details_changed(req_connection_details):
126127
with self.lock:
127-
if self.si is None:
128+
if self.si is None or self.has_connection_details_changed(req_connection_details):
128129
logger.info("Creating a new connection.")
129-
self.si = self.pv_service.connect(connection_details.host,
130-
connection_details.username,
131-
connection_details.password,
132-
connection_details.port)
130+
self.si = self.pv_service.connect(req_connection_details.host,
131+
req_connection_details.username,
132+
req_connection_details.password,
133+
req_connection_details.port)
134+
self.connection_details = req_connection_details
133135
return self.si
134136

137+
def has_connection_details_changed(self, req_connection_details):
138+
"""
139+
:param cloudshell.cp.vcenter.models.VCenterConnectionDetails.VCenterConnectionDetails req_connection_details:
140+
:return:
141+
"""
142+
if self.connection_details is None and req_connection_details is None:
143+
return False
144+
if self.connection_details is None or req_connection_details is None:
145+
return True
146+
return not all([self.connection_details.host == req_connection_details.host,
147+
self.connection_details.username == req_connection_details.username,
148+
self.connection_details.password == req_connection_details.password,
149+
self.connection_details.port == req_connection_details.port])
150+
135151
@staticmethod
136152
def _get_domain(context):
137153
# noinspection PyBroadException

package/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.6.0
1+
1.6.0

vcentershell_driver/drivermetadata.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<Driver Description="this driver manage all the commands that runs at the vcenter context" MainClass="driver.VCenterShellDriver" Name="VCenter Driver" Version="1.6.0">
22
<Layout>
33
<Category Name="Deployment">
4-
<Command Description="" DisplayName="Deploy From Template" Name="deploy_from_template" Tags="allow_unreserved" />
5-
<Command Description="" DisplayName="Deploy Clone From VM" Name="deploy_clone_from_vm" Tags="allow_unreserved" />
6-
<Command Description="" DisplayName="Deploy from Linked Clone" Name="deploy_from_linked_clone" Tags="allow_unreserved" />
7-
<Command Description="" DisplayName="Deploy From Image" Name="deploy_from_image" Tags="allow_unreserved" />
4+
<Command Description="" DisplayName="Deploy From Template" EnableCancellation="true" Name="deploy_from_template" Tags="allow_unreserved" />
5+
<Command Description="" DisplayName="Deploy Clone From VM" EnableCancellation="true" Name="deploy_clone_from_vm" Tags="allow_unreserved" />
6+
<Command Description="" DisplayName="Deploy from Linked Clone" EnableCancellation="true" Name="deploy_from_linked_clone" Tags="allow_unreserved" />
7+
<Command Description="" DisplayName="Deploy From Image" EnableCancellation="true" Name="deploy_from_image" Tags="allow_unreserved" />
88
</Category>
99
<Category Name="Connectivity">
1010
<Command Description="" DisplayName="Refresh IP" EnableCancellation="true" Name="remote_refresh_ip" Tags="remote_connectivity,allow_shared" />

0 commit comments

Comments
 (0)