def _connector_actions(self, requested_backup_resources, override): actions_container = ActionsContainer() for backup_resource in requested_backup_resources: cs_resource = copy(backup_resource) # self._resource_operations.update_details(cs_resource) # self._resource_operations.load_resource_ports(cs_resource) # self._logical_route_operations.get_logical_routes_table(cs_resource) actions_container.update(self._connector_actions_for_resource(backup_resource, cs_resource, override)) return actions_container
def _initialize_logical_route_actions(self, resource_pair): actions_container = ActionsContainer() for resource in resource_pair: remove_route_actions = map( lambda logical_route: RemoveRouteAction( logical_route, self._route_connector_operations, self. _logger), resource.associated_logical_routes) create_route_actions = map( lambda logical_route: CreateRouteAction( logical_route, self._route_connector_operations, self. _updated_connections, self._logger), resource.associated_logical_routes) actions_container.update( ActionsContainer(remove_routes=remove_route_actions, create_routes=create_route_actions)) return actions_container
def _connector_actions_for_resource(self, backup_resource, cs_resource, override): # remove_connector_actions = map( # lambda connector: RemoveConnectorAction(connector, self._route_connector_operations, self._logger), # src_resource.associated_connectors) create_connector_actions = map( lambda connector: CreateConnectorAction(connector, self._route_connector_operations, self._updated_connections, self._logger), backup_resource.associated_connectors) return ActionsContainer(create_connectors=create_connector_actions)
def initialize_actions(self, resources_pairs, override): actions_container = ActionsContainer() for pair in resources_pairs: self._load_resources(pair) actions_container.update( self._initialize_logical_route_actions(pair)) actions_container.update( self._initialize_connection_actions(pair, override)) actions_container.update( self._initialize_connector_actions(pair, override)) return actions_container
def define_actions(self, requested_backup_resources, connections, routes, connectors, override): if not connections and not routes and not connectors: routes = connections = connectors = True actions_container = ActionsContainer() if routes: actions_container.update(self._route_actions(requested_backup_resources, override)) if connections: actions_container.update(self._connection_actions(requested_backup_resources, override)) if connectors: actions_container.update(self._connector_actions(requested_backup_resources, override)) return actions_container
def _initialize_connection_actions(self, resource_pair, override): src_resource, dst_resource = resource_pair port_associator = PortAssociator(src_resource, dst_resource, self._config_operations, self._logger) connection_actions = [] for src_port, dst_port in port_associator.associated_pairs(): if override or not dst_port.connected_to: connection_actions.append( UpdateConnectionAction(src_port, dst_port, self._resource_operations, self._updated_connections, self._logger)) return ActionsContainer(update_connections=connection_actions)
def _initialize_connector_actions(self, resource_pair, override): src_resource = resource_pair[0] """ :type src_resource: cloudshell.migration.entities.Resource """ remove_connector_actions = map( lambda connector: RemoveConnectorAction( connector, self._route_connector_operations, self._logger), src_resource.associated_connectors) create_connector_actions = map( lambda connector: CreateConnectorAction( connector, self._route_connector_operations, self. _updated_connections, self._logger), src_resource.associated_connectors) return ActionsContainer(remove_connectors=remove_connector_actions, create_connectors=create_connector_actions)
def _connection_actions_for_resource(self, backup_resource, cs_resource, override): """ :type backup_resource: cloudshell.migration.entities.Resource :type cs_resource: cloudshell.migration.entities.Resource :type override: bool """ if len(backup_resource.ports) != len(cs_resource.ports): raise MigrationToolException( 'CS Resource "{}" does not match backup resource "{}"'.format(backup_resource, cs_resource)) remove_route_actions = [] update_connection_actions = [] create_route_actions = [] for backup_port, cs_port in zip(sorted(backup_resource.ports), sorted(cs_resource.ports)): if not override and backup_port.connected_to and not cs_port.connected_to: connected_port_details = self._api.GetResourceDetails(backup_port.connected_to) if connected_port_details and not connected_port_details.Connections: update_connection_actions.append( UpdateConnectionAction(backup_port, cs_port, self._resource_operations, self._updated_connections, self._logger)) if override and backup_port.connected_to != cs_port.connected_to: update_connection_actions.append( UpdateConnectionAction(backup_port, cs_port, self._resource_operations, self._updated_connections, self._logger)) logical_route = self._route_connector_operations.logical_routes_by_segment.get(cs_port.name) if logical_route: remove_route_actions.append( RemoveRouteAction(logical_route[0], self._route_connector_operations, self._logger)) create_route_actions.append( CreateRouteAction(logical_route[0], self._route_connector_operations, self._updated_connections, self._logger)) # connected_to_logical_route = self._logical_route_operations.logical_routes_by_segment.get(backup_port.connected_to) # if connected_to_logical_route: # remove_route_actions.append( # RemoveRouteAction(connected_to_logical_route[0], self._logical_route_operations, self._logger)) # create_route_actions.append( # CreateRouteAction(connected_to_logical_route[0], self._logical_route_operations, self._logger)) return ActionsContainer(remove_route_actions, update_connection_actions, create_route_actions)
def _route_actions_for_resource(self, backup_resource, override): """ :type backup_resource: cloudshell.migration.entities.Resource :type override: bool """ create_route_actions = set() remove_route_actions = set() for route in backup_resource.associated_logical_routes: src_related_route = self._route_connector_operations.logical_routes_by_segment.get(route.source) dst_related_route = self._route_connector_operations.logical_routes_by_segment.get(route.target) if not src_related_route and not dst_related_route: create_route_actions.add( CreateRouteAction(route, self._route_connector_operations, self._updated_connections, self._logger)) elif override: if src_related_route: remove_route_actions.add( RemoveRouteAction(src_related_route[0], self._route_connector_operations, self._logger)) if dst_related_route: remove_route_actions.add( RemoveRouteAction(dst_related_route[0], self._route_connector_operations, self._logger)) create_route_actions.add( CreateRouteAction(route, self._route_connector_operations, self._updated_connections, self._logger)) return ActionsContainer(remove_route_actions, None, create_route_actions)
def _route_actions(self, requested_backup_resources, override): actions_container = ActionsContainer() for resource in requested_backup_resources: actions_container.update(self._route_actions_for_resource(resource, override)) return actions_container