  def _GetValue(self, *keys: str, default: Any = None) -> Any:
    """Gets a nested value from this cluster's 'GET' using a list of keys.

    Args:
      *keys (str): The key path to the nested value.
      default (Any): Optional. If a key from the key path is not present,
          this value will be returned. Defaults to None.

    Returns:
      Any: The value at the end of the key path, or the default value if
          a key was not present

    Raises:
      KeyError: If an object along the key path was not a dict.
    """
    current = self.GetOperation()
    for key in keys:
      if isinstance(current, dict):
        if key in current:
          current = current[key]
        else:
          return default
      else:
        raise KeyError('Nested object was not a dict.')
    return current
Gets a nested value from this cluster's 'GET' using a list of keys.

Args:
*keys (str): The key path to the nested value.
default (Any): Optional. If a key from the key path is not present,
this value will be returned. Defaults to None.

Returns:
Any: The value at the end of the key path, or the default value if
a key was not present

Raises:
KeyError: If an object along the key path was not a dict.
libcloudforensics/providers/gcp/internal/gke.py