152 lines
5.6 KiB
JSON
152 lines
5.6 KiB
JSON
{
|
|
"apiVersion": "apiextensions.k8s.io/v1",
|
|
"kind": "CustomResourceDefinition",
|
|
"metadata": {
|
|
"name": "mysqlinstancecrds.flowercore.io"
|
|
},
|
|
"spec": {
|
|
"group": "flowercore.io",
|
|
"names": {
|
|
"kind": "MySqlInstanceCrd",
|
|
"listKind": "MySqlInstanceCrdList",
|
|
"plural": "mysqlinstancecrds",
|
|
"singular": "mysqlinstancecrd",
|
|
"shortNames": [
|
|
"mysql",
|
|
"mysqlinst"
|
|
]
|
|
},
|
|
"scope": "Namespaced",
|
|
"versions": [
|
|
{
|
|
"name": "v1",
|
|
"served": true,
|
|
"storage": true,
|
|
"schema": {
|
|
"openAPIV3Schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"spec": {
|
|
"type": "object",
|
|
"properties": {
|
|
"action": {
|
|
"type": "string",
|
|
"description": "Action to execute (e.g., provision, backup, restore, scale, decommission, healthcheck). Dispatched by the reconciler when this value changes."
|
|
},
|
|
"labels": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "Key-value labels for provisioning config (image-tag, mysql-version [deprecated], storage-size, replicas, port, max-connections) and billing/filtering."
|
|
}
|
|
}
|
|
},
|
|
"status": {
|
|
"type": "object",
|
|
"properties": {
|
|
"lastAction": {
|
|
"type": "string",
|
|
"description": "Name of the last action dispatched for this resource."
|
|
},
|
|
"lastActionStatus": {
|
|
"type": "string",
|
|
"description": "Outcome of the last action (Completed, Failed)."
|
|
},
|
|
"lastActionTimestamp": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "UTC timestamp when the last action was dispatched."
|
|
},
|
|
"message": {
|
|
"type": "string",
|
|
"description": "Human-readable message, typically populated on failure."
|
|
},
|
|
"ready": {
|
|
"type": "string",
|
|
"description": "Convenience field mirroring the Ready condition status (True, False, Unknown). Used by printer columns since JSONPath cannot filter condition arrays."
|
|
},
|
|
"retryCount": {
|
|
"type": "integer",
|
|
"description": "Number of consecutive transient failure retries for the current action. Reset to zero on success or when a new action is dispatched."
|
|
},
|
|
"nextRetryAt": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "UTC timestamp for the next retry attempt. Set on transient failure using exponential backoff (2^retryCount seconds, max 5 minutes)."
|
|
},
|
|
"conditions": {
|
|
"type": "array",
|
|
"description": "Kubernetes-style status conditions.",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Condition type (e.g., Ready, Degraded)."
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"description": "Condition status (True, False, Unknown)."
|
|
},
|
|
"lastTransitionTime": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"description": "UTC timestamp of last status transition."
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Machine-readable reason code."
|
|
},
|
|
"message": {
|
|
"type": "string",
|
|
"description": "Human-readable details about the condition."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"subresources": {
|
|
"status": {}
|
|
},
|
|
"additionalPrinterColumns": [
|
|
{
|
|
"name": "Ready",
|
|
"type": "string",
|
|
"jsonPath": ".status.ready",
|
|
"description": "Whether the instance is ready"
|
|
},
|
|
{
|
|
"name": "Action",
|
|
"type": "string",
|
|
"jsonPath": ".spec.action",
|
|
"description": "Current action"
|
|
},
|
|
{
|
|
"name": "Status",
|
|
"type": "string",
|
|
"jsonPath": ".status.lastActionStatus",
|
|
"description": "Last action status"
|
|
},
|
|
{
|
|
"name": "Message",
|
|
"type": "string",
|
|
"jsonPath": ".status.message",
|
|
"description": "Status message",
|
|
"priority": 1
|
|
},
|
|
{
|
|
"name": "Age",
|
|
"type": "date",
|
|
"jsonPath": ".metadata.creationTimestamp"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|