{
  "description": "A Usage defines a deletion blocking relationship between two resources.\n\nUsages prevent accidental deletion of a single resource or deletion of\nresources with dependent resources.\n\nRead the Crossplane documentation for\n[more information about Usages](https://docs.crossplane.io/latest/concepts/usages).\n\nDeprecated: Use protection.crossplane.io Usage or ClusterUsage.",
  "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": "UsageSpec defines the desired state of Usage.",
      "properties": {
        "by": {
          "description": "By is the resource that is \"using the other resource\".",
          "properties": {
            "apiVersion": {
              "description": "API version of the referent.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "resourceRef": {
              "description": "Reference to the resource.",
              "properties": {
                "name": {
                  "description": "Name of the referent.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "resourceSelector": {
              "description": "Selector to the resource.\nThis field will be ignored if ResourceRef is set.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "x-kubernetes-validations": [
            {
              "message": "either a resource reference or a resource selector should be set.",
              "rule": "has(self.resourceRef) || has(self.resourceSelector)"
            }
          ],
          "additionalProperties": false
        },
        "of": {
          "description": "Of is the resource that is \"being used\".",
          "properties": {
            "apiVersion": {
              "description": "API version of the referent.",
              "type": "string"
            },
            "kind": {
              "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
              "type": "string"
            },
            "resourceRef": {
              "description": "Reference to the resource.",
              "properties": {
                "name": {
                  "description": "Name of the referent.",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "resourceSelector": {
              "description": "Selector to the resource.\nThis field will be ignored if ResourceRef is set.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "x-kubernetes-validations": [
            {
              "message": "either a resource reference or a resource selector should be set.",
              "rule": "has(self.resourceRef) || has(self.resourceSelector)"
            }
          ],
          "additionalProperties": false
        },
        "reason": {
          "description": "Reason is the reason for blocking deletion of the resource.",
          "type": "string"
        },
        "replayDeletion": {
          "description": "ReplayDeletion will trigger a deletion on the used resource during the deletion of the usage itself, if it was attempted to be deleted at least once.",
          "type": "boolean"
        }
      },
      "required": [
        "of"
      ],
      "type": "object",
      "x-kubernetes-validations": [
        {
          "message": "either \"spec.by\" or \"spec.reason\" must be specified.",
          "rule": "has(self.by) || has(self.reason)"
        }
      ],
      "additionalProperties": false
    },
    "status": {
      "description": "UsageStatus defines the observed state of Usage.",
      "properties": {
        "conditions": {
          "description": "Conditions of the resource.",
          "items": {
            "description": "A Condition that may apply to a resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time this condition transitioned from one\nstatus to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A Message containing details about this condition's last transition from\none status to another, if any.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "ObservedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "type": "integer"
              },
              "reason": {
                "description": "A Reason for this condition's last transition from one status to another.",
                "type": "string"
              },
              "status": {
                "description": "Status of this condition; is it currently True, False, or Unknown?",
                "type": "string"
              },
              "type": {
                "description": "Type of this condition. At most one of each condition type may apply to\na resource at any point in time.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
