{
  "description": "Generator information:\n- Generated from: /storage/resource-manager/Microsoft.Storage/stable/2022-09-01/blob.json\n- ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/blobServices/default/containers/{containerName}",
  "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": {
      "properties": {
        "azureName": {
          "description": "AzureName: The name of the resource in Azure. This is often the same as the name of the resource in Kubernetes but it\ndoesn't have to be.",
          "maxLength": 63,
          "minLength": 3,
          "type": "string"
        },
        "defaultEncryptionScope": {
          "description": "DefaultEncryptionScope: Default the container to use specified encryption scope for all writes.",
          "type": "string"
        },
        "denyEncryptionScopeOverride": {
          "description": "DenyEncryptionScopeOverride: Block override of encryption scope from the container default.",
          "type": "boolean"
        },
        "enableNfsV3AllSquash": {
          "description": "EnableNfsV3AllSquash: Enable NFSv3 all squash on blob container.",
          "type": "boolean"
        },
        "enableNfsV3RootSquash": {
          "description": "EnableNfsV3RootSquash: Enable NFSv3 root squash on blob container.",
          "type": "boolean"
        },
        "immutableStorageWithVersioning": {
          "description": "ImmutableStorageWithVersioning: The object level immutability property of the container. The property is immutable and\ncan only be set to true at the container creation time. Existing containers must undergo a migration process.",
          "properties": {
            "enabled": {
              "description": "Enabled: This is an immutable property, when set to true it enables object level immutability at the container level.",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "metadata": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Metadata: A name-value pair to associate with the container as metadata.",
          "type": "object"
        },
        "operatorSpec": {
          "description": "OperatorSpec: The specification for configuring operator behavior. This field is interpreted by the operator and not\npassed directly to Azure",
          "properties": {
            "configMapExpressions": {
              "description": "ConfigMapExpressions: configures where to place operator written dynamic ConfigMaps (created with CEL expressions).",
              "items": {
                "description": "DestinationExpression is a CEL expression and a destination to store the result in. The destination may\nbe a secret or a configmap. The value of the expression is stored at the specified location in\nthe destination.",
                "properties": {
                  "key": {
                    "description": "Key is the key in the ConfigMap or Secret being written to. If the CEL expression in Value returns a string\nthis is required to identify what key to write to. If the CEL expression in Value returns a map[string]string\nKey must not be set, instead the keys written will be determined dynamically based on the keys of the resulting\nmap[string]string.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name is the name of the Kubernetes configmap or secret to write to.\nThe configmap or secret will be created in the same namespace as the resource.",
                    "type": "string"
                  },
                  "value": {
                    "description": "Value is a CEL expression. The CEL expression may return a string or a map[string]string. For more information\non CEL in ASO see https://azure.github.io/azure-service-operator/guide/expressions/",
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "value"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "secretExpressions": {
              "description": "SecretExpressions: configures where to place operator written dynamic secrets (created with CEL expressions).",
              "items": {
                "description": "DestinationExpression is a CEL expression and a destination to store the result in. The destination may\nbe a secret or a configmap. The value of the expression is stored at the specified location in\nthe destination.",
                "properties": {
                  "key": {
                    "description": "Key is the key in the ConfigMap or Secret being written to. If the CEL expression in Value returns a string\nthis is required to identify what key to write to. If the CEL expression in Value returns a map[string]string\nKey must not be set, instead the keys written will be determined dynamically based on the keys of the resulting\nmap[string]string.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name is the name of the Kubernetes configmap or secret to write to.\nThe configmap or secret will be created in the same namespace as the resource.",
                    "type": "string"
                  },
                  "value": {
                    "description": "Value is a CEL expression. The CEL expression may return a string or a map[string]string. For more information\non CEL in ASO see https://azure.github.io/azure-service-operator/guide/expressions/",
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "value"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "owner": {
          "description": "Owner: The owner of the resource. The owner controls where the resource goes when it is deployed. The owner also\ncontrols the resources lifecycle. When the owner is deleted the resource will also be deleted. Owner is expected to be a\nreference to a storage.azure.com/StorageAccountsBlobService resource",
          "properties": {
            "armId": {
              "pattern": "(?i)(^(/subscriptions/([^/]+)(/resourcegroups/([^/]+))?)?/providers/([^/]+)/([^/]+/[^/]+)(/([^/]+/[^/]+))*$|^/subscriptions/([^/]+)(/resourcegroups/([^/]+))?$)",
              "type": "string"
            },
            "name": {
              "description": "This is the name of the Kubernetes resource to reference.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "publicAccess": {
          "description": "PublicAccess: Specifies whether data in the container may be accessed publicly and the level of access.",
          "enum": [
            "Blob",
            "Container",
            "None"
          ],
          "type": "string"
        }
      },
      "required": [
        "owner"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "properties": {
        "conditions": {
          "description": "Conditions: The observed state of the resource",
          "items": {
            "description": "Condition defines an extension to status (an observation) of a resource",
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "Message is a human readable message indicating details about the transition. This field may be empty.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "ObservedGeneration is the .metadata.generation that the condition was set based upon. For instance, if\n.metadata.generation is currently 12, but the .status.condition[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": "Reason for the condition's last transition.\nReasons are upper CamelCase (PascalCase) with no spaces. A reason is always provided, this field will not be empty.",
                "type": "string"
              },
              "severity": {
                "description": "Severity with which to treat failures of this type of condition.\nFor conditions which have positive polarity (Status == True is their normal/healthy state), this will be omitted when Status == True\nFor conditions which have negative polarity (Status == False is their normal/healthy state), this will be omitted when Status == False.\nThis is omitted in all cases when Status == Unknown",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, or Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type of condition.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "defaultEncryptionScope": {
          "description": "DefaultEncryptionScope: Default the container to use specified encryption scope for all writes.",
          "type": "string"
        },
        "deleted": {
          "description": "Deleted: Indicates whether the blob container was deleted.",
          "type": "boolean"
        },
        "deletedTime": {
          "description": "DeletedTime: Blob container deletion time.",
          "type": "string"
        },
        "denyEncryptionScopeOverride": {
          "description": "DenyEncryptionScopeOverride: Block override of encryption scope from the container default.",
          "type": "boolean"
        },
        "enableNfsV3AllSquash": {
          "description": "EnableNfsV3AllSquash: Enable NFSv3 all squash on blob container.",
          "type": "boolean"
        },
        "enableNfsV3RootSquash": {
          "description": "EnableNfsV3RootSquash: Enable NFSv3 root squash on blob container.",
          "type": "boolean"
        },
        "etag": {
          "description": "Etag: Resource Etag.",
          "type": "string"
        },
        "hasImmutabilityPolicy": {
          "description": "HasImmutabilityPolicy: The hasImmutabilityPolicy public property is set to true by SRP if ImmutabilityPolicy has been\ncreated for this container. The hasImmutabilityPolicy public property is set to false by SRP if ImmutabilityPolicy has\nnot been created for this container.",
          "type": "boolean"
        },
        "hasLegalHold": {
          "description": "HasLegalHold: The hasLegalHold public property is set to true by SRP if there are at least one existing tag. The\nhasLegalHold public property is set to false by SRP if all existing legal hold tags are cleared out. There can be a\nmaximum of 1000 blob containers with hasLegalHold=true for a given account.",
          "type": "boolean"
        },
        "id": {
          "description": "Id: Fully qualified resource ID for the resource. Ex -\n/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}",
          "type": "string"
        },
        "immutabilityPolicy": {
          "description": "ImmutabilityPolicy: The ImmutabilityPolicy property of the container.",
          "properties": {
            "allowProtectedAppendWrites": {
              "description": "AllowProtectedAppendWrites: This property can only be changed for unlocked time-based retention policies. When enabled,\nnew blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks\ncan be added and any existing blocks cannot be modified or deleted. This property cannot be changed with\nExtendImmutabilityPolicy API.",
              "type": "boolean"
            },
            "allowProtectedAppendWritesAll": {
              "description": "AllowProtectedAppendWritesAll: This property can only be changed for unlocked time-based retention policies. When\nenabled, new blocks can be written to both 'Append and Bock Blobs' while maintaining immutability protection and\ncompliance. Only new blocks can be added and any existing blocks cannot be modified or deleted. This property cannot be\nchanged with ExtendImmutabilityPolicy API. The 'allowProtectedAppendWrites' and 'allowProtectedAppendWritesAll'\nproperties are mutually exclusive.",
              "type": "boolean"
            },
            "etag": {
              "description": "Etag: ImmutabilityPolicy Etag.",
              "type": "string"
            },
            "immutabilityPeriodSinceCreationInDays": {
              "description": "ImmutabilityPeriodSinceCreationInDays: The immutability period for the blobs in the container since the policy creation,\nin days.",
              "type": "integer"
            },
            "state": {
              "description": "State: The ImmutabilityPolicy state of a blob container, possible values include: Locked and Unlocked.",
              "type": "string"
            },
            "updateHistory": {
              "description": "UpdateHistory: The ImmutabilityPolicy update history of the blob container.",
              "items": {
                "description": "An update history of the ImmutabilityPolicy of a blob container.",
                "properties": {
                  "allowProtectedAppendWrites": {
                    "description": "AllowProtectedAppendWrites: This property can only be changed for unlocked time-based retention policies. When enabled,\nnew blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks\ncan be added and any existing blocks cannot be modified or deleted. This property cannot be changed with\nExtendImmutabilityPolicy API.",
                    "type": "boolean"
                  },
                  "allowProtectedAppendWritesAll": {
                    "description": "AllowProtectedAppendWritesAll: This property can only be changed for unlocked time-based retention policies. When\nenabled, new blocks can be written to both 'Append and Bock Blobs' while maintaining immutability protection and\ncompliance. Only new blocks can be added and any existing blocks cannot be modified or deleted. This property cannot be\nchanged with ExtendImmutabilityPolicy API. The 'allowProtectedAppendWrites' and 'allowProtectedAppendWritesAll'\nproperties are mutually exclusive.",
                    "type": "boolean"
                  },
                  "immutabilityPeriodSinceCreationInDays": {
                    "description": "ImmutabilityPeriodSinceCreationInDays: The immutability period for the blobs in the container since the policy creation,\nin days.",
                    "type": "integer"
                  },
                  "objectIdentifier": {
                    "description": "ObjectIdentifier: Returns the Object ID of the user who updated the ImmutabilityPolicy.",
                    "type": "string"
                  },
                  "tenantId": {
                    "description": "TenantId: Returns the Tenant ID that issued the token for the user who updated the ImmutabilityPolicy.",
                    "type": "string"
                  },
                  "timestamp": {
                    "description": "Timestamp: Returns the date and time the ImmutabilityPolicy was updated.",
                    "type": "string"
                  },
                  "update": {
                    "description": "Update: The ImmutabilityPolicy update type of a blob container, possible values include: put, lock and extend.",
                    "type": "string"
                  },
                  "upn": {
                    "description": "Upn: Returns the User Principal Name of the user who updated the ImmutabilityPolicy.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "immutableStorageWithVersioning": {
          "description": "ImmutableStorageWithVersioning: The object level immutability property of the container. The property is immutable and\ncan only be set to true at the container creation time. Existing containers must undergo a migration process.",
          "properties": {
            "enabled": {
              "description": "Enabled: This is an immutable property, when set to true it enables object level immutability at the container level.",
              "type": "boolean"
            },
            "migrationState": {
              "description": "MigrationState: This property denotes the container level immutability to object level immutability migration state.",
              "type": "string"
            },
            "timeStamp": {
              "description": "TimeStamp: Returns the date and time the object level immutability was enabled.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "lastModifiedTime": {
          "description": "LastModifiedTime: Returns the date and time the container was last modified.",
          "type": "string"
        },
        "leaseDuration": {
          "description": "LeaseDuration: Specifies whether the lease on a container is of infinite or fixed duration, only when the container is\nleased.",
          "type": "string"
        },
        "leaseState": {
          "description": "LeaseState: Lease state of the container.",
          "type": "string"
        },
        "leaseStatus": {
          "description": "LeaseStatus: The lease status of the container.",
          "type": "string"
        },
        "legalHold": {
          "description": "LegalHold: The LegalHold property of the container.",
          "properties": {
            "hasLegalHold": {
              "description": "HasLegalHold: The hasLegalHold public property is set to true by SRP if there are at least one existing tag. The\nhasLegalHold public property is set to false by SRP if all existing legal hold tags are cleared out. There can be a\nmaximum of 1000 blob containers with hasLegalHold=true for a given account.",
              "type": "boolean"
            },
            "protectedAppendWritesHistory": {
              "description": "ProtectedAppendWritesHistory: Protected append blob writes history.",
              "properties": {
                "allowProtectedAppendWritesAll": {
                  "description": "AllowProtectedAppendWritesAll: When enabled, new blocks can be written to both 'Append and Bock Blobs' while maintaining\nlegal hold protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted.",
                  "type": "boolean"
                },
                "timestamp": {
                  "description": "Timestamp: Returns the date and time the tag was added.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "tags": {
              "description": "Tags: The list of LegalHold tags of a blob container.",
              "items": {
                "description": "A tag of the LegalHold of a blob container.",
                "properties": {
                  "objectIdentifier": {
                    "description": "ObjectIdentifier: Returns the Object ID of the user who added the tag.",
                    "type": "string"
                  },
                  "tag": {
                    "description": "Tag: The tag value.",
                    "type": "string"
                  },
                  "tenantId": {
                    "description": "TenantId: Returns the Tenant ID that issued the token for the user who added the tag.",
                    "type": "string"
                  },
                  "timestamp": {
                    "description": "Timestamp: Returns the date and time the tag was added.",
                    "type": "string"
                  },
                  "upn": {
                    "description": "Upn: Returns the User Principal Name of the user who added the tag.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "metadata": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Metadata: A name-value pair to associate with the container as metadata.",
          "type": "object"
        },
        "name": {
          "description": "Name: The name of the resource",
          "type": "string"
        },
        "publicAccess": {
          "description": "PublicAccess: Specifies whether data in the container may be accessed publicly and the level of access.",
          "type": "string"
        },
        "remainingRetentionDays": {
          "description": "RemainingRetentionDays: Remaining retention days for soft deleted blob container.",
          "type": "integer"
        },
        "type": {
          "description": "Type: The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\"",
          "type": "string"
        },
        "version": {
          "description": "Version: The version of the deleted blob container.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
