{
  "description": "AdoptedResource is the schema for the AdoptedResource API.",
  "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": "AdoptedResourceSpec defines the desired state of the AdoptedResource.",
      "properties": {
        "aws": {
          "description": "AWSIdentifiers provide all unique ways to reference an AWS resource.",
          "properties": {
            "additionalKeys": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "AdditionalKeys represents any additional arbitrary identifiers used when\ndescribing the target resource.",
              "type": "object"
            },
            "arn": {
              "description": "ARN is the AWS Resource Name for the resource. It is a globally\nunique identifier.",
              "type": "string"
            },
            "nameOrID": {
              "description": "NameOrId is a user-supplied string identifier for the resource. It may\nor may not be globally unique, depending on the type of resource.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "kubernetes": {
          "description": "ResourceWithMetadata provides the values necessary to create a\nKubernetes resource and override any of its metadata values.",
          "properties": {
            "group": {
              "type": "string"
            },
            "kind": {
              "type": "string"
            },
            "metadata": {
              "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects\nusers must create.\nIt is not possible to use `metav1.ObjectMeta` inside spec, as the controller-gen\nautomatically converts this to an arbitrary string-string map.\nhttps://github.com/kubernetes-sigs/controller-tools/issues/385\n\nActive discussion about inclusion of this field in the spec is happening in this PR:\nhttps://github.com/kubernetes-sigs/controller-tools/pull/395\n\nUntil this is allowed, or if it never is, we will produce a subset of the object meta\nthat contains only the fields which the user is allowed to modify in the metadata.",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: http://kubernetes.io/docs/user-guide/annotations",
                  "type": "object"
                },
                "generateName": {
                  "description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will\nNOT return a 409 - instead, it will either return 201 Created or 500 with Reason\nServerTimeout indicating a unique name could not be found in the time allotted, and the client\nshould retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency",
                  "type": "string"
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/user-guide/labels",
                  "type": "object"
                },
                "name": {
                  "description": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/identifiers#names",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace defines the space within each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: http://kubernetes.io/docs/user-guide/namespaces",
                  "type": "string"
                },
                "ownerReferences": {
                  "description": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.",
                  "items": {
                    "description": "OwnerReference contains enough information to let you identify an owning\nobject. An owning object must be in the same namespace as the dependent, or\nbe cluster-scoped, so there is no namespace field.",
                    "properties": {
                      "apiVersion": {
                        "description": "API version of the referent.",
                        "type": "string"
                      },
                      "blockOwnerDeletion": {
                        "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then\nthe owner cannot be deleted from the key-value store until this\nreference is removed.\nSee https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion\nfor how the garbage collector interacts with this field and enforces the foreground deletion.\nDefaults to false.\nTo set this field, a user needs \"delete\" permission of the owner,\notherwise 422 (Unprocessable Entity) will be returned.",
                        "type": "boolean"
                      },
                      "controller": {
                        "description": "If true, this reference points to the managing controller.",
                        "type": "boolean"
                      },
                      "kind": {
                        "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                        "type": "string"
                      },
                      "name": {
                        "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names",
                        "type": "string"
                      },
                      "uid": {
                        "description": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids",
                        "type": "string"
                      }
                    },
                    "required": [
                      "apiVersion",
                      "kind",
                      "name",
                      "uid"
                    ],
                    "type": "object",
                    "x-kubernetes-map-type": "atomic",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "group",
            "kind"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "aws",
        "kubernetes"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "AdoptedResourceStatus defines the observed status of the AdoptedResource.",
      "properties": {
        "conditions": {
          "description": "A collection of `ackv1alpha1.Condition` objects that describe the various\nterminal states of the adopted resource CR and its target custom resource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service\ncontrollers to indicate terminal states  of the CR and its backend AWS\nservice 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"
        }
      },
      "required": [
        "conditions"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
