docstr: Resolve the node id from a given node ip.
  
  Args:
      node_ip: The node ip.
  
  Returns:
      node_id if there's a node id that matches the given node ip and is alive.
      None otherwise.
docstr_tok: ["Resolve","the","node","id","from","a","given","node","ip",".","Args",":","node_ip",":","The","node","ip",".","Returns",":","node_id","if","there","'s","a","node","id","that","matches","the","given","node","ip","and","is","alive",".","None","otherwise","."]
code: def ip_to_node_id(self, node_ip: Optional[str]):
      """Resolve the node id from a given node ip.
  
      Args:
          node_ip: The node ip.
  
      Returns:
          node_id if there's a node id that matches the given node ip and is alive.
          None otherwise.
      """
      return self.client.ip_to_node_id(node_ip)
  
file_path: ray/python/ray/dashboard/modules/log/log_manager.py
imports: import logging
  import re
  from collections import defaultdict
  from typing import List, Optional, Dict, AsyncIterable, Tuple, Callable
  from ray.dashboard.modules.job.common import JOB_LOGS_PATH_TEMPLATE
  from ray.util.state.common import GetLogOptions, protobuf_to_task_state_dict, DEFAULT_RPC_TIMEOUT
  from ray.util.state.exception import DataSourceUnavailable
  from ray.util.state.state_manager import StateDataSourceClient
  from ray._private.pydantic_compat import BaseModel
  from ray.dashboard.datacenter import DataSource
label_desc: Use image node_id 3 for calling the LogsManager obj's underlying member method code with example usage: obj.ip_to_node_id(node_ip) and returns: self