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