'Given a lease on a dataset and configuration and state, return
calculated changes.
:param Manifestation configured: The configured ``Manifestation``.
:param Manifestation actual: The ``Manifestation`` in the node\'s state.
:param UUID lease_node: Node for which we have lease.
:param UUID configured_node: Node for which we have configuration.
:param UUID actual_node: Node for which we have state.
:return: Result of ``P2PManifestationDeployer.calculate_changes``.'

def changes_when_leased(self, configured, actual, lease_node=NODE_ID, configured_node=NODE_ID, actual_node=NODE_ID):

    node = Node(uuid=configured_node, manifestations={configured.dataset_id: configured})
    desired = Deployment(nodes=[node], leases=Leases().acquire(self.NOW, UUID(configured.dataset_id), lease_node))
    other_actual_node = (self.NODE_ID if (actual_node is self.NODE_ID2) else self.NODE_ID2)
    actual_node_state = NodeState(uuid=actual_node, hostname=self.NODE_HOSTNAMES[actual_node], applications={}, devices={}, paths={}, manifestations={actual.dataset_id: actual})
    current = DeploymentState(nodes=[actual_node_state, NodeState(uuid=other_actual_node, hostname=self.NODE_HOSTNAMES[other_actual_node], applications={}, devices={}, paths={}, manifestations={})])
    api = P2PManifestationDeployer(self.NODE_HOSTNAMES[actual_node], create_volume_service(self), node_uuid=actual_node)
    return api.calculate_changes(desired, current, NodeLocalState(node_state=actual_node_state))
