{
  "description": "CachePolicy is the Schema for the CachePolicies API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More 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. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "CachePolicySpec defines the desired state of CachePolicy. \n A cache policy. \n When it's attached to a cache behavior, the cache policy determines the following: \n - The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer. \n - The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache. \n The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find a valid object in its cache that matches the request's cache key. If you want to send values to the origin but not include them in the cache key, use OriginRequestPolicy.",
      "properties": {
        "cachePolicyConfig": {
          "description": "A cache policy configuration.",
          "properties": {
            "comment": {
              "type": "string"
            },
            "defaultTTL": {
              "format": "int64",
              "type": "integer"
            },
            "maxTTL": {
              "format": "int64",
              "type": "integer"
            },
            "minTTL": {
              "format": "int64",
              "type": "integer"
            },
            "name": {
              "type": "string"
            },
            "parametersInCacheKeyAndForwardedToOrigin": {
              "description": "This object determines the values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer. \n The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find an object in its cache that matches the request's cache key. If you want to send values to the origin but not include them in the cache key, use OriginRequestPolicy.",
              "properties": {
                "cookiesConfig": {
                  "description": "An object that determines whether any cookies in viewer requests (and if so, which cookies) are included in the cache key and in requests that CloudFront sends to the origin.",
                  "properties": {
                    "cookieBehavior": {
                      "type": "string"
                    },
                    "cookies": {
                      "description": "Contains a list of cookie names.",
                      "properties": {
                        "items": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "quantity": {
                          "format": "int64",
                          "type": "integer"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "enableAcceptEncodingBrotli": {
                  "type": "boolean"
                },
                "enableAcceptEncodingGzip": {
                  "type": "boolean"
                },
                "headersConfig": {
                  "description": "An object that determines whether any HTTP headers (and if so, which headers) are included in the cache key and in requests that CloudFront sends to the origin.",
                  "properties": {
                    "headerBehavior": {
                      "type": "string"
                    },
                    "headers": {
                      "description": "Contains a list of HTTP header names.",
                      "properties": {
                        "items": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "quantity": {
                          "format": "int64",
                          "type": "integer"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "queryStringsConfig": {
                  "description": "An object that determines whether any URL query strings in viewer requests (and if so, which query strings) are included in the cache key and in requests that CloudFront sends to the origin.",
                  "properties": {
                    "queryStringBehavior": {
                      "type": "string"
                    },
                    "queryStrings": {
                      "description": "Contains a list of query string names.",
                      "properties": {
                        "items": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "quantity": {
                          "format": "int64",
                          "type": "integer"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "cachePolicyConfig"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "CachePolicyStatus defines the observed state of CachePolicy",
      "properties": {
        "ackResourceMetadata": {
          "description": "All CRs managed by ACK have a common `Status.ACKResourceMetadata` member that is used to contain resource sync state, account ownership, constructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a globally-unique identifier and is set only by the ACK service controller once the controller has orchestrated the creation of the resource OR when it has verified that an \"adopted\" resource (a resource where the ARN annotation was set by the Kubernetes user on the CR) exists and matches the supplied CR's Spec field values. TODO(vijat@): Find a better strategy for resources that do not have ARN in CreateOutputResponse https://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the backend AWS service API resource.",
              "type": "string"
            },
            "region": {
              "description": "Region is the AWS region in which the resource exists or will exist.",
              "type": "string"
            }
          },
          "required": [
            "ownerAccountID",
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "All CRS managed by ACK have a common `Status.Conditions` member that contains a collection of `ackv1alpha1.Condition` objects that describe the various terminal states of the CR and its backend AWS service API resource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service controllers to indicate terminal states  of the CR and its backend AWS service API resource",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the Condition",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "eTag": {
          "description": "The current version of the cache policy.",
          "type": "string"
        },
        "id": {
          "description": "The unique identifier for the cache policy.",
          "type": "string"
        },
        "lastModifiedTime": {
          "description": "The date and time when the cache policy was last modified.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
