{
  "description": "EngineFrontend is where Longhorn stores engine frontend object for v2 data engine initiator.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "EngineFrontendSpec defines the desired state of the Longhorn engine frontend (v2 initiator)",
      "properties": {
        "active": {
          "type": "boolean"
        },
        "dataEngine": {
          "enum": [
            "v1",
            "v2"
          ],
          "type": "string"
        },
        "desireState": {
          "type": "string"
        },
        "disableFrontend": {
          "type": "boolean"
        },
        "engineName": {
          "description": "EngineName is the name of the v2 engine target (required for EngineFrontend instance creation)",
          "type": "string"
        },
        "frontend": {
          "enum": [
            "blockdev",
            "iscsi",
            "nvmf",
            "ublk",
            ""
          ],
          "type": "string"
        },
        "image": {
          "type": "string"
        },
        "logRequested": {
          "type": "boolean"
        },
        "nodeID": {
          "type": "string"
        },
        "salvageRequested": {
          "type": "boolean"
        },
        "size": {
          "description": "Size is the desired size of the frontend device in bytes, as requested\nby the volume owner. The EngineFrontend controller drives the frontend\ndevice toward this size independently of the engine's target size.",
          "format": "int64",
          "type": "string"
        },
        "targetIP": {
          "description": "TargetIP is the IP address of the v2 engine target",
          "type": "string"
        },
        "targetPort": {
          "description": "TargetPort is the port of the v2 engine target",
          "type": "integer"
        },
        "ublkNumberOfQueue": {
          "description": "ublkNumberOfQueue controls the number of queues for ublk frontend.",
          "type": "integer"
        },
        "ublkQueueDepth": {
          "description": "ublkQueueDepth controls the depth of each queue for ublk frontend.",
          "type": "integer"
        },
        "volumeName": {
          "type": "string"
        },
        "volumeSize": {
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "EngineFrontendStatus defines the observed state of the Longhorn engine frontend",
      "properties": {
        "activePath": {
          "description": "ActivePath is the currently active frontend path address.",
          "type": "string"
        },
        "conditions": {
          "items": {
            "properties": {
              "lastProbeTime": {
                "description": "Last time we probed the condition.",
                "type": "string"
              },
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "type": "string"
              },
              "message": {
                "description": "Human-readable message indicating details about last transition.",
                "type": "string"
              },
              "reason": {
                "description": "Unique, one-word, CamelCase reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status is the status of the condition.\nCan be True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the condition.",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "nullable": true,
          "type": "array"
        },
        "currentImage": {
          "type": "string"
        },
        "currentSize": {
          "description": "CurrentSize is the current size of the frontend device in bytes, as\nobserved from the data plane. It is 0 while the engine frontend is not\nrunning.",
          "format": "int64",
          "type": "string"
        },
        "currentState": {
          "type": "string"
        },
        "endpoint": {
          "description": "Endpoint is the initiator endpoint (e.g., /dev/longhorn/vol-name)",
          "type": "string"
        },
        "instanceManagerName": {
          "type": "string"
        },
        "ip": {
          "type": "string"
        },
        "logFetched": {
          "type": "boolean"
        },
        "ownerID": {
          "type": "string"
        },
        "paths": {
          "description": "Paths describes the currently known frontend multipath state.",
          "items": {
            "properties": {
              "anaState": {
                "type": "string"
              },
              "engineName": {
                "type": "string"
              },
              "nguid": {
                "type": "string"
              },
              "nqn": {
                "type": "string"
              },
              "targetIP": {
                "type": "string"
              },
              "targetPort": {
                "type": "integer"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "port": {
          "type": "integer"
        },
        "preferredPath": {
          "description": "PreferredPath is the preferred frontend path address.",
          "type": "string"
        },
        "salvageExecuted": {
          "type": "boolean"
        },
        "started": {
          "type": "boolean"
        },
        "starting": {
          "type": "boolean"
        },
        "storageIP": {
          "type": "string"
        },
        "switchoverPhase": {
          "description": "SwitchoverPhase is the last completed switchover phase reported by the data plane.",
          "type": "string"
        },
        "targetIP": {
          "description": "TargetIP is the currently connected IP address of the v2 engine target",
          "type": "string"
        },
        "targetPort": {
          "description": "TargetPort is the currently connected port of the v2 engine target",
          "type": "integer"
        },
        "ublkID": {
          "format": "int32",
          "type": "integer"
        },
        "uuid": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
