code: def duplicate_node(self, source_node_id, destination_node_id):
          
  
          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
docs: Duplicate a node
  
          :param node_id: Node identifier
          :returns: New node instance