class_docstr: Abstract base class for all Kubernetes Resource operators.
  
  :param yaml_conf: string. Contains the kubernetes resources to Create or Delete
  :param namespace: string. Contains the namespace to create all resources inside.
      The namespace must preexist otherwise the resource creation will fail.
      If the API object in the yaml file already contains a namespace definition then
      this parameter has no effect.
  :param kubernetes_conn_id: The :ref:`kubernetes connection id <howto/connection:kubernetes>`
      for the Kubernetes cluster.
code: def get_crd_fields(self, body: dict) -> tuple[str, str, str, str]:
      api_version = body["apiVersion"]
      group = api_version[0 : api_version.find("/")]
      version = api_version[api_version.find("/") + 1 :]
  
      namespace = None
      if body.get("metadata"):
          metadata: dict = body.get("metadata", None)
          namespace = metadata.get("namespace", None)
      if namespace is None:
          namespace = self.get_namespace()
  
      plural = body["kind"].lower() + "s"
  
      return group, version, namespace, plural
  
imports: from __future__ import annotations
  from functools import cached_property
  from typing import TYPE_CHECKING
  import yaml
  from kubernetes.utils import create_from_yaml
  from airflow.models import BaseOperator
  from airflow.providers.cncf.kubernetes.hooks.kubernetes import KubernetesHook
  from airflow.providers.cncf.kubernetes.utils.delete_from import delete_from_yaml
  from airflow.providers.cncf.kubernetes.utils.k8s_resource_iterator import k8s_resource_iterator
label_desc: Use image node_id 6 for calling the KubernetesResourceBaseOperator obj's underlying member method code with example usage: obj.get_crd_fields(body) and returns: group,  version,  namespace,  plural