{
  "description": "BackupStorageLocation is a location where Velero stores backup objects",
  "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",
        "null"
      ]
    },
    "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",
        "null"
      ]
    },
    "metadata": {
      "type": [
        "object",
        "null"
      ]
    },
    "spec": {
      "additionalProperties": false,
      "description": "BackupStorageLocationSpec defines the desired state of a Velero BackupStorageLocation",
      "properties": {
        "accessMode": {
          "description": "AccessMode defines the permissions for the backup storage location.",
          "enum": [
            "ReadOnly",
            "ReadWrite"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "backupSyncPeriod": {
          "description": "BackupSyncPeriod defines how frequently to sync backup API objects from object storage. A value of 0 disables sync.",
          "nullable": true,
          "type": [
            "string",
            "null"
          ]
        },
        "config": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Config is for provider-specific configuration fields.",
          "type": [
            "object",
            "null"
          ]
        },
        "credential": {
          "additionalProperties": false,
          "description": "Credential contains the credential information intended to be used with this location",
          "properties": {
            "key": {
              "description": "The key of the secret to select from.  Must be a valid secret key.",
              "type": "string"
            },
            "name": {
              "default": "",
              "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
              "type": [
                "string",
                "null"
              ]
            },
            "optional": {
              "description": "Specify whether the Secret or its key must be defined",
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          "required": [
            "key"
          ],
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-map-type": "atomic"
        },
        "default": {
          "description": "Default indicates this location is the default backup storage location.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "objectStorage": {
          "additionalProperties": false,
          "description": "ObjectStorageLocation specifies the settings necessary to connect to a provider's object storage.",
          "properties": {
            "bucket": {
              "description": "Bucket is the bucket to use for object storage.",
              "type": "string"
            },
            "caCert": {
              "description": "CACert defines a CA bundle to use when verifying TLS connections to the provider.",
              "format": "byte",
              "type": [
                "string",
                "null"
              ]
            },
            "prefix": {
              "description": "Prefix is the path inside a bucket to use for Velero storage. Optional.",
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "bucket"
          ],
          "type": "object"
        },
        "provider": {
          "description": "Provider is the provider of the backup storage.",
          "type": "string"
        },
        "validationFrequency": {
          "description": "ValidationFrequency defines how frequently to validate the corresponding object storage. A value of 0 disables validation.",
          "nullable": true,
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "objectStorage",
        "provider"
      ],
      "type": [
        "object",
        "null"
      ]
    },
    "status": {
      "additionalProperties": false,
      "description": "BackupStorageLocationStatus defines the observed state of BackupStorageLocation",
      "properties": {
        "accessMode": {
          "description": "AccessMode is an unused field.\n\nDeprecated: there is now an AccessMode field on the Spec and this field\nwill be removed entirely as of v2.0.",
          "enum": [
            "ReadOnly",
            "ReadWrite"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "lastSyncedRevision": {
          "description": "LastSyncedRevision is the value of the `metadata/revision` file in the backup\nstorage location the last time the BSL's contents were synced into the cluster.\n\nDeprecated: this field is no longer updated or used for detecting changes to\nthe location's contents and will be removed entirely in v2.0.",
          "type": [
            "string",
            "null"
          ]
        },
        "lastSyncedTime": {
          "description": "LastSyncedTime is the last time the contents of the location were synced into\nthe cluster.",
          "format": "date-time",
          "nullable": true,
          "type": [
            "string",
            "null"
          ]
        },
        "lastValidationTime": {
          "description": "LastValidationTime is the last time the backup store location was validated\nthe cluster.",
          "format": "date-time",
          "nullable": true,
          "type": [
            "string",
            "null"
          ]
        },
        "message": {
          "description": "Message is a message about the backup storage location's status.",
          "type": [
            "string",
            "null"
          ]
        },
        "phase": {
          "description": "Phase is the current state of the BackupStorageLocation.",
          "enum": [
            "Available",
            "Unavailable"
          ],
          "type": [
            "string",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "type": "object"
}