|
1 | 1 | import qualipy.scripts.cloudshell_scripts_helpers as helpers |
2 | 2 | from qualipy.api.cloudshell_api import InputNameValue |
| 3 | +from common.utilites.common_utils import first_or_default |
3 | 4 |
|
4 | | -session = helpers.get_api_session() |
5 | | -reservation_id = helpers.get_reservation_context_details().id |
6 | | -connectors = session.GetReservationDetails(reservation_id).ReservationDescription.Connectors |
7 | | -attributes = helpers.get_resource_context_details().attributes |
8 | | -vlan = attributes['VLAN Id'] |
9 | | -access_mode = attributes['Access Mode'] |
10 | | -resource_name = helpers.get_resource_context_details().name |
11 | | - |
12 | | -connectedResources = [connector.Target for connector in connectors if connector.Source == resource_name] + \ |
13 | | - [connector.Source for connector in connectors if connector.Target == resource_name] |
14 | | - |
15 | | -if not connectedResources: |
16 | | - raise Exception('There is no visual connectors connected to this VLAN') |
17 | | - |
18 | | -for connectedResource in connectedResources: |
19 | | - session.ExecuteCommand(reservation_id, connectedResource, 'Resource', 'Connect', |
20 | | - [InputNameValue('COMMAND', "connect"), |
21 | | - InputNameValue('VLAN_ID', vlan), |
22 | | - InputNameValue('VLAN_SPEC_TYPE', access_mode)], |
23 | | - True) |
| 5 | +from common.model_factory import ResourceModelParser |
| 6 | + |
| 7 | + |
| 8 | +class EnvironmentConnector(object): |
| 9 | + |
| 10 | + def connect_all(self): |
| 11 | + """ |
| 12 | + Connects all the VLAN Auto services to all the Deployed Apps in the same Environment |
| 13 | + :return: |
| 14 | + """ |
| 15 | + session = helpers.get_api_session() |
| 16 | + reservation_id = helpers.get_reservation_context_details().id |
| 17 | + |
| 18 | + # GetReservationDetails is performance heavy operation |
| 19 | + reservation_details = session.GetReservationDetails(reservation_id) |
| 20 | + vlan_services = self._get_vlan_auto_services(reservation_details) |
| 21 | + |
| 22 | + connectors = self._get_connectors(reservation_details) |
| 23 | + |
| 24 | + if not vlan_services or not connectors: |
| 25 | + return |
| 26 | + |
| 27 | + for vlan_service in vlan_services: |
| 28 | + |
| 29 | + if not len(vlan_service.Attributes): |
| 30 | + raise ValueError('No attributes on service {0}'.format(vlan_service.ServiceName)) |
| 31 | + |
| 32 | + access_mode = self._get_attribute(vlan_service.Attributes, 'Access Mode') |
| 33 | + virtual_network = self._get_attribute(vlan_service.Attributes, 'Virtual Network') |
| 34 | + |
| 35 | + # Get Deployed App connected to VLAN Auto service |
| 36 | + connected_resources = self._get_connected_resources(connectors, vlan_service) |
| 37 | + |
| 38 | + if not connected_resources: |
| 39 | + continue |
| 40 | + |
| 41 | + for connected_resource in connected_resources: |
| 42 | + self._execute_connect_command_on_connected_resource(access_mode, connected_resource, reservation_id, |
| 43 | + session, virtual_network) |
| 44 | + |
| 45 | + @staticmethod |
| 46 | + def _get_attribute(attributes, attribute_name): |
| 47 | + attribute = next(item for item in attributes if item.Name == attribute_name) |
| 48 | + if not attribute or not attribute.Value: |
| 49 | + raise ValueError('Attribute {0} is missing'.format(attribute_name)) |
| 50 | + return attribute.Value |
| 51 | + |
| 52 | + @staticmethod |
| 53 | + def _get_connectors(reservation_details): |
| 54 | + connectors = [connector for connector in reservation_details.ReservationDescription.Connectors] |
| 55 | + return connectors |
| 56 | + |
| 57 | + @staticmethod |
| 58 | + def _get_vlan_auto_services(reservation_details): |
| 59 | + vlan_services = [service for service in reservation_details.ReservationDescription.Services |
| 60 | + if service.ServiceName == 'VLAN Auto'] |
| 61 | + return vlan_services |
| 62 | + |
| 63 | + @staticmethod |
| 64 | + def _execute_connect_command_on_connected_resource(access_mode, connected_resource, reservation_id, session, |
| 65 | + virtual_network): |
| 66 | + session.ExecuteCommand(reservation_id, connected_resource, 'Resource', 'Connect', |
| 67 | + [InputNameValue('VLAN_ID', virtual_network), |
| 68 | + InputNameValue('VLAN_SPEC_TYPE', access_mode)], |
| 69 | + True) |
| 70 | + |
| 71 | + @staticmethod |
| 72 | + def _get_connected_resources(connectors, vlan_service): |
| 73 | + connected_resources = [connector.Target for connector in connectors if |
| 74 | + connector.Source == vlan_service.ServiceName] + \ |
| 75 | + [connector.Source for connector in connectors if |
| 76 | + connector.Target == vlan_service.ServiceName] |
| 77 | + return connected_resources |
0 commit comments