class_docstr: A node provider that merely reports the current cluster state.
  
  This is used for laptop mode / manual cluster setup modes, in order to
  provide status reporting in the same way for users.
class_docstr_tok: ["A","node","provider","that","merely","reports","the","current","cluster","state",".","This","is","used","for","laptop","mode","\/","manual","cluster","setup","modes",",","in","order","to","provide","status","reporting","in","the","same","way","for","users","."]
docstr: Update the set of nodes in the cluster.
  
  Args:
      nodes: List of (node_id, node_manager_address) tuples.
docstr_tok: ["Update","the","set","of","nodes","in","the","cluster",".","Args",":","nodes",":","List","of","(","node_id",",","node_manager_address",")","tuples","."]
code: def _set_nodes(self, nodes: List[Tuple[str, str]]):
      """Update the set of nodes in the cluster.
  
      Args:
          nodes: List of (node_id, node_manager_address) tuples.
      """
      new_nodes = {}
      for node_id, node_manager_address in nodes:
          # We make up a fake node type for each node (since each node
          # could have its own unique configuration).
          new_nodes[node_id] = {
              # Keep prefix in sync with node config gen in monitor.py
              "node_type": format_readonly_node_type(node_id),
              "ip": node_manager_address,
          }
      self.nodes = new_nodes
  
file_path: ray/python/ray/autoscaler/_private/readonly/node_provider.py
imports: from typing import List, Tuple
  from ray.autoscaler._private.util import format_readonly_node_type
  from ray.autoscaler.node_provider import NodeProvider
  from ray.autoscaler.tags import NODE_KIND_HEAD, STATUS_UP_TO_DATE, TAG_RAY_NODE_KIND, TAG_RAY_NODE_NAME, TAG_RAY_NODE_STATUS, TAG_RAY_USER_NODE_TYPE
label_desc: Use image node_id 3 for calling the ReadOnlyNodeProvider obj's underlying member method code with example usage: obj._set_nodes(nodes) without return types