Skip to content

Commit 31f1e35

Browse files
committed
Merge branch 'develop' into feature/borismod_40_save_vnic
2 parents 8ffcd17 + 4dacc1a commit 31f1e35

7 files changed

Lines changed: 92 additions & 27 deletions

File tree

orchestration_service/orchestrator.py

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def execute_app_orchestration():
1212
helpers.get_resource_context_details()
1313
app_name = resource_details["name"]
1414
deployment_service = resource_details["appData"]["deploymentService"]["name"]
15+
installation_service_data = resource_details["appData"]["installationService"]
1516

1617
# Start api session
1718
api = helpers.get_api_session()
@@ -29,18 +30,75 @@ def execute_app_orchestration():
2930
[AttributeNameValue("VM_UUID", deployment_result.VmUuid),
3031
AttributeNameValue("Cloud Provider", deployment_result.CloudProviderResourceName)])])
3132

32-
# logical resource execute "Power On"
33+
# connect all
34+
connect_all(api, reservation_id)
35+
36+
# "Power On"
3337
power_on_deployed_app(api, app_name, deployment_result, reservation_id)
3438

3539
# if install service exists on app execute it
36-
# TODO
40+
execute_installation_if_exist(api, deployment_result, installation_service_data, reservation_id)
41+
42+
# refresh ip
43+
#refresh_ip(api, deployment_result, reservation_id)
3744

3845
# Set live status - deployment done
3946
api.SetResourceLiveStatus(deployment_result.LogicalResourceName, "Online", "Active")
4047

4148
logger.info("Deployed {0} Successfully".format(app_name))
4249

4350

51+
def connect_all(api, reservation_id):
52+
try:
53+
api.ExecuteEnvironmentCommand(reservation_id, "Connect All")
54+
except CloudShellAPIError as exc:
55+
logger.error("Error executing connect all. Error: {0}".format(exc.rawxml))
56+
exit(1)
57+
except Exception as exc:
58+
logger.error("Error executing connect all. Error: {0}".format(str(exc)))
59+
exit(1)
60+
61+
62+
def refresh_ip(api, deployment_result, reservation_id):
63+
logger.info("Waiting to get IP for deployed app resource {0}...".format(deployment_result.LogicalResourceName))
64+
try:
65+
# TODO update the script inputs with data from the installation service
66+
api.ExecuteCommand(reservation_id, deployment_result.CloudProviderResourceName,
67+
"Resource" "Refresh IP", [InputNameValue('VM_UUID',
68+
deployment_result.VmUuid),
69+
InputNameValue('RESOURCE_NAME',
70+
deployment_result.LogicalResourceName)])
71+
except CloudShellAPIError as exc:
72+
logger.error("Error refreshing ip for deployed app {0}. Error: {1}"
73+
.format(deployment_result.LogicalResourceName, exc.rawxml))
74+
exit(1)
75+
except Exception as exc:
76+
logger.error("Error refreshing ip for deployed app {0}. Error: {1}"
77+
.format(deployment_result.LogicalResourceName, str(exc)))
78+
exit(1)
79+
80+
81+
def execute_installation_if_exist(api, deployment_result, installation_service_data, reservation_id):
82+
if not installation_service_data:
83+
return
84+
installation_service_name = installation_service_data["name"]
85+
logger.info("Executing installation '{0}' on deployed app resource '{1}'..."
86+
.format(installation_service_name, deployment_result.LogicalResourceName))
87+
try:
88+
# TODO update the script inputs with data from the installation service
89+
installation_result = api.ExecuteInstallAppCommand(reservation_id, deployment_result.LogicalResourceName,
90+
"Install", [InputNameValue('STAM', "- its just a demo")])
91+
logger.debug("installation_result: " + installation_result.Output)
92+
except CloudShellAPIError as exc:
93+
logger.error("Error installing deployed app {0}. Error: {1}"
94+
.format(deployment_result.LogicalResourceName, exc.rawxml))
95+
exit(1)
96+
except Exception as exc:
97+
logger.error(
98+
"Error installing deployed app {0}. Error: {1}".format(deployment_result.LogicalResourceName, str(exc)))
99+
exit(1)
100+
101+
44102
def power_on_deployed_app(api, app_name, deployment_result, reservation_id):
45103
try:
46104
logger.info("Powering on deployed app {0}".format(deployment_result.LogicalResourceName))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[Packaging]
2+
driver_folder: vCenterShell
3+
include_dirs: common,models,vCenterShell
4+
target_name: Refresh IP
5+
target_dir: Resource Scripts

run_packager.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ python driver_packager.py packeger_configs\\deploy_from_template_command.ini
77
python driver_packager.py packeger_configs\\destroy_vm_command.ini
88
python driver_packager.py packeger_configs\\power_on_command.ini
99
python driver_packager.py packeger_configs\\power_off_command.ini
10+
python driver_packager.py packeger_configs\\refresh_ip_command.ini
1011
python driver_packager.py packeger_configs\\connect_command.ini
1112
python driver_packager.py packeger_configs\\vlan_auto_service.ini
1213
python driver_packager.py packeger_configs\\orchestration_service.ini

tests/test_commands/test_refresh_ip.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ def test_refresh_ip(self):
3232

3333
refresh_ip_command = RefreshIpCommand(pyvmomi_service, Mock(), qualipy_helpers, resource_model_parser)
3434

35+
si = Mock()
36+
3537
# Act
36-
refresh_ip_command.refresh_ip('1234-5678', 'machine1')
38+
refresh_ip_command.refresh_ip(si, '1234-5678', 'machine1')
3739

3840
# Assert
3941
session.UpdateResourceAddress.assert_called_with('machine1', '192.168.1.1')

vCenterShell/command_executer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ def refresh_ip(self):
158158
connection_details = self.connection_retriever.connection_details()
159159

160160
# execute command
161-
self.execute_command_with_connection(connection_details,
162-
self.refresh_ip_command.refresh_ip,
163-
vm_uuid,
164-
resource_name)
161+
self.command_wrapper.execute_command_with_connection(connection_details,
162+
self.refresh_ip_command.refresh_ip,
163+
vm_uuid,
164+
resource_name)
165165

166166

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import qualipy.scripts.cloudshell_scripts_helpers as helpers
21
import time
32

43

@@ -11,47 +10,39 @@ def __init__(self, pyvmomi_service, cs_retriever_rervice, qualipy_helpers, resou
1110
self.cs_retriever_rervice = cs_retriever_rervice
1211
self.resource_model_parser = resource_model_parser
1312

14-
def refresh_ip(self, vm_uuid, resource_name):
13+
def refresh_ip(self, si, vm_uuid, resource_name):
1514
"""
1615
Refreshes IP address of virtual machine and updates Address property on the resource
1716
:param vm_uuid: UUID of Virtual Machine
1817
:param resource_name: Logical resource name to update address property on
1918
"""
2019

21-
session = self.qualipy_helpers.get_api_session()
22-
resource_details = session.GetResourceDetails(resource_name)
20+
api = self.qualipy_helpers.get_api_session()
21+
vcenter_resource_context = self.qualipy_helpers.get_resource_context_details()
2322

24-
# GenericAppModelResourceModel
25-
vm_resource = self.resource_model_parser.convert_to_resource_model(resource_details)
26-
27-
resource_context = self.qualipy_helpers.get_resource_context_details()
28-
connection_details = self.cs_retriever_rervice.getVCenterConnectionDetails(resource_context)
29-
30-
si = self.pyvmomi_service.connect(connection_details.host,
31-
connection_details.username,
32-
connection_details.password,
33-
connection_details.port)
23+
# vCenterResourceModel
24+
vcenter_resource_model = self.resource_model_parser.convert_to_resource_model(vcenter_resource_context)
3425

3526
vm = self.pyvmomi_service.find_by_uuid(si, vm_uuid)
3627

3728
# where vm. is the MOR of the VM
3829
# guest_primary_ipaddress = vm.guest.ipAddress
3930

40-
ip = self._obtain_ip(vm, vm_resource)
31+
ip = self._obtain_ip(vm, vcenter_resource_model.default_network)
4132

4233
if ip is None:
4334
raise ValueError('IP address of VM {0} could not be obtained during {1} seconds',
4435
resource_name,
4536
self.TIMEOUT)
4637

47-
session.UpdateResourceAddress(resource_name, ip)
38+
api.UpdateResourceAddress(resource_name, ip)
4839

49-
def _obtain_ip(self, vm, vm_resource):
40+
def _obtain_ip(self, vm, default_network):
5041
time_elapsed = 0
5142
ip = None
5243
interval = self.TIMEOUT / 10
5344
while time_elapsed < self.TIMEOUT and ip is None:
54-
ips = RefreshIpCommand._get_ip_addresses(vm, vm_resource)
45+
ips = RefreshIpCommand._get_ip_addresses(vm, default_network)
5546
if len(ips) >= 1:
5647
ip = ips[0]
5748
else:
@@ -60,10 +51,10 @@ def _obtain_ip(self, vm, vm_resource):
6051
return ip
6152

6253
@staticmethod
63-
def _get_ip_addresses(vm, vm_resource):
54+
def _get_ip_addresses(vm, default_network):
6455
ips = []
6556
for nic in vm.guest.net:
66-
if nic.network != vm_resource.default_network:
57+
if nic.network != default_network:
6758
for addr in nic.ipAddress:
6859
ips.append(addr)
6960
return ips

vCenterShellPackage/DataModel/datamodel.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@
163163
<ScriptName>Power Off</ScriptName>
164164
<ScriptName>Connect VM</ScriptName>
165165
<ScriptName>Destroy VM</ScriptName>
166+
<ScriptName>Refresh IP</ScriptName>
166167
</Scripts>
167168
</ResourceModel>
168169
</Models>
@@ -368,6 +369,13 @@
368369
<ScriptInput Name="VM_UUID" />
369370
</ScriptInputs>
370371
</ScriptDescriptor>
372+
<ScriptDescriptor Name="Refresh IP">
373+
<ScriptInputs>
374+
<ScriptInput Name="COMMAND" DefaultValue="refresh_ip" />
375+
<ScriptInput Name="VM_UUID" />
376+
<ScriptInput Name="RESOURCE_NAME" />
377+
</ScriptInputs>
378+
</ScriptDescriptor>
371379
<ScriptDescriptor Name="Connect VM">
372380
<ScriptInputs>
373381
<ScriptInput Name="COMMAND" DefaultValue="connect" />

0 commit comments

Comments
 (0)