Duplicate a node

        :param node_id: Node identifier
        :returns: New node instance

def duplicate_node(self, source_node_id, destination_node_id):
        """
        Duplicate a node

        :param node_id: Node identifier
        :returns: New node instance
        """

        source_node = self.get_node(source_node_id)
        destination_node = self.get_node(destination_node_id)

        # Not a Dynamips router
        if not hasattr(source_node, "startup_config_path"):
            return (yield from super().duplicate_node(source_node_id, destination_node_id))

        try:
            with open(source_node.startup_config_path) as f:
                startup_config = f.read()
        except OSError:
            startup_config = None
        try:
            with open(source_node.private_config_path) as f:
                private_config = f.read()
        except OSError:
            private_config = None
        yield from self.set_vm_configs(destination_node, {
            "startup_config_content": startup_config,
            "private_config_content": private_config
        })

        # Force refresh of the name in configuration files
        new_name = destination_node.name
        yield from destination_node.set_name(source_node.name)
        yield from destination_node.set_name(new_name)
        return destination_node