{
  "typeName" : "AWS::ODB::CloudExadataInfrastructure",
  "description" : "The AWS::ODB::CloudExadataInfrastructure resource creates an Exadata Infrastructure",
  "definitions" : {
    "Tag" : {
      "description" : "A key-value pair to associate with a resource.",
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Key" : {
          "type" : "string",
          "description" : "The key name of the tag. You can specify a value that's 1 to 128 Unicode characters in length and can't be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., :, /, =, +, @, -, and \".",
          "minLength" : 1,
          "maxLength" : 128
        },
        "Value" : {
          "type" : "string",
          "description" : "The value for the tag. You can specify a value that's 1 to 256 characters in length. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
          "minLength" : 0,
          "maxLength" : 256
        }
      },
      "required" : [ "Key" ]
    },
    "CustomerContact" : {
      "type" : "object",
      "description" : "A contact to receive notification from Oracle about maintenance updates for a specific Exadata infrastructure.",
      "additionalProperties" : false,
      "properties" : {
        "Email" : {
          "type" : "string",
          "description" : "The email address of the contact."
        }
      }
    },
    "MaintenanceWindow" : {
      "description" : "The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.",
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "CustomActionTimeoutInMins" : {
          "type" : "integer",
          "description" : "The timeout duration for custom actions in minutes.",
          "minimum" : 15,
          "maximum" : 120
        },
        "DaysOfWeek" : {
          "type" : "array",
          "description" : "The days of the week when maintenance can be performed.",
          "uniqueItems" : true,
          "items" : {
            "type" : "string",
            "enum" : [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ]
          }
        },
        "HoursOfDay" : {
          "type" : "array",
          "description" : "The hours of the day when maintenance can be performed.",
          "uniqueItems" : true,
          "items" : {
            "type" : "integer"
          }
        },
        "IsCustomActionTimeoutEnabled" : {
          "type" : "boolean",
          "description" : "Indicates whether custom action timeout is enabled."
        },
        "LeadTimeInWeeks" : {
          "type" : "integer",
          "description" : "The lead time in weeks before the maintenance window.",
          "minimum" : 1,
          "maximum" : 4
        },
        "Months" : {
          "type" : "array",
          "description" : "The months when maintenance can be performed.",
          "uniqueItems" : true,
          "items" : {
            "type" : "string",
            "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ]
          }
        },
        "PatchingMode" : {
          "type" : "string",
          "description" : "The patching mode for the maintenance window."
        },
        "Preference" : {
          "type" : "string",
          "description" : "The preference for the maintenance window scheduling."
        },
        "WeeksOfMonth" : {
          "type" : "array",
          "description" : "The weeks of the month when maintenance can be performed.",
          "uniqueItems" : true,
          "items" : {
            "type" : "integer"
          }
        }
      }
    }
  },
  "properties" : {
    "ActivatedStorageCount" : {
      "type" : "integer",
      "description" : "The number of storage servers requested for the Exadata infrastructure."
    },
    "AdditionalStorageCount" : {
      "type" : "integer",
      "description" : "The number of storage servers requested for the Exadata infrastructure."
    },
    "AvailabilityZone" : {
      "type" : "string",
      "description" : "The name of the Availability Zone (AZ) where the Exadata infrastructure is located.",
      "minLength" : 1,
      "maxLength" : 255
    },
    "AvailabilityZoneId" : {
      "type" : "string",
      "description" : "The AZ ID of the AZ where the Exadata infrastructure is located.",
      "minLength" : 1,
      "maxLength" : 255
    },
    "AvailableStorageSizeInGBs" : {
      "type" : "integer",
      "description" : "The amount of available storage, in gigabytes (GB), for the Exadata infrastructure."
    },
    "CloudExadataInfrastructureArn" : {
      "type" : "string",
      "description" : "The Amazon Resource Name (ARN) for the Exadata infrastructure."
    },
    "CloudExadataInfrastructureId" : {
      "type" : "string",
      "description" : "The unique identifier for the Exadata infrastructure."
    },
    "MaintenanceWindow" : {
      "$ref" : "#/definitions/MaintenanceWindow",
      "description" : "The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window."
    },
    "ComputeCount" : {
      "type" : "integer",
      "description" : "The number of database servers for the Exadata infrastructure."
    },
    "ComputeModel" : {
      "type" : "string",
      "description" : "The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled."
    },
    "CpuCount" : {
      "type" : "integer",
      "description" : "The total number of CPU cores that are allocated to the Exadata infrastructure."
    },
    "CustomerContactsToSendToOCI" : {
      "type" : "array",
      "description" : "The email addresses of contacts to receive notification from Oracle about maintenance updates for the Exadata infrastructure.",
      "insertionOrder" : false,
      "uniqueItems" : false,
      "items" : {
        "$ref" : "#/definitions/CustomerContact"
      }
    },
    "DataStorageSizeInTBs" : {
      "type" : "number",
      "description" : "The size of the Exadata infrastructure's data disk group, in terabytes (TB)."
    },
    "DatabaseServerType" : {
      "type" : "string",
      "description" : "The database server model type of the Exadata infrastructure. For the list of valid model names, use the ListDbSystemShapes operation.",
      "pattern" : "^[a-zA-Z0-9_\\/.=-]+$",
      "minLength" : 1,
      "maxLength" : 255
    },
    "DbNodeStorageSizeInGBs" : {
      "type" : "integer",
      "description" : "The size of the Exadata infrastructure's local node storage, in gigabytes (GB)."
    },
    "DbServerVersion" : {
      "type" : "string",
      "description" : "The software version of the database servers (dom0) in the Exadata infrastructure."
    },
    "DisplayName" : {
      "type" : "string",
      "description" : "The user-friendly name for the Exadata infrastructure.",
      "pattern" : "^[a-zA-Z_](?!.*--)[a-zA-Z0-9_-]*$",
      "minLength" : 1,
      "maxLength" : 255
    },
    "MaxCpuCount" : {
      "type" : "integer",
      "description" : "The total number of CPU cores available on the Exadata infrastructure."
    },
    "MaxDataStorageInTBs" : {
      "type" : "number",
      "description" : "The total amount of data disk group storage, in terabytes (TB), that's available on the Exadata infrastructure."
    },
    "MaxDbNodeStorageSizeInGBs" : {
      "type" : "integer",
      "description" : "The total amount of local node storage, in gigabytes (GB), that's available on the Exadata infrastructure."
    },
    "MaxMemoryInGBs" : {
      "type" : "integer",
      "description" : "The total amount of memory, in gigabytes (GB), that's available on the Exadata infrastructure."
    },
    "MemorySizeInGBs" : {
      "type" : "integer",
      "description" : "The amount of memory, in gigabytes (GB), that's allocated on the Exadata infrastructure."
    },
    "OciResourceAnchorName" : {
      "type" : "string",
      "description" : "The name of the OCI resource anchor for the Exadata infrastructure."
    },
    "OciUrl" : {
      "type" : "string",
      "description" : "The HTTPS link to the Exadata infrastructure in OCI."
    },
    "Ocid" : {
      "type" : "string",
      "description" : "The OCID of the Exadata infrastructure."
    },
    "Shape" : {
      "type" : "string",
      "description" : "The model name of the Exadata infrastructure.",
      "pattern" : "^[a-zA-Z0-9_\\/.=-]+$",
      "minLength" : 1,
      "maxLength" : 255
    },
    "StorageCount" : {
      "type" : "integer",
      "description" : "The number of storage servers that are activated for the Exadata infrastructure."
    },
    "StorageServerType" : {
      "type" : "string",
      "description" : "The storage server model type of the Exadata infrastructure. For the list of valid model names, use the ListDbSystemShapes operation.",
      "pattern" : "^[a-zA-Z0-9_\\/.=-]+$",
      "minLength" : 1,
      "maxLength" : 255
    },
    "StorageServerVersion" : {
      "type" : "string",
      "description" : "The software version of the storage servers on the Exadata infrastructure."
    },
    "Tags" : {
      "type" : "array",
      "description" : "Tags to assign to the Exadata Infrastructure.",
      "insertionOrder" : false,
      "uniqueItems" : false,
      "items" : {
        "$ref" : "#/definitions/Tag"
      }
    },
    "TotalStorageSizeInGBs" : {
      "type" : "integer",
      "description" : "The total amount of storage, in gigabytes (GB), on the the Exadata infrastructure."
    },
    "DbServerIds" : {
      "type" : "array",
      "description" : "The list of database server identifiers for the Exadata infrastructure.",
      "insertionOrder" : false,
      "uniqueItems" : false,
      "items" : {
        "type" : "string"
      }
    }
  },
  "additionalProperties" : false,
  "createOnlyProperties" : [ "/properties/AvailabilityZone", "/properties/AvailabilityZoneId", "/properties/Shape", "/properties/DatabaseServerType", "/properties/StorageServerType", "/properties/DisplayName", "/properties/ComputeCount", "/properties/CustomerContactsToSendToOCI", "/properties/StorageCount" ],
  "readOnlyProperties" : [ "/properties/ActivatedStorageCount", "/properties/AdditionalStorageCount", "/properties/AvailableStorageSizeInGBs", "/properties/CloudExadataInfrastructureArn", "/properties/CloudExadataInfrastructureId", "/properties/ComputeModel", "/properties/CpuCount", "/properties/DataStorageSizeInTBs", "/properties/DbNodeStorageSizeInGBs", "/properties/DbServerVersion", "/properties/MaxCpuCount", "/properties/MaxDataStorageInTBs", "/properties/MaxDbNodeStorageSizeInGBs", "/properties/MaxMemoryInGBs", "/properties/MemorySizeInGBs", "/properties/OciResourceAnchorName", "/properties/OciUrl", "/properties/Ocid", "/properties/StorageServerVersion", "/properties/TotalStorageSizeInGBs", "/properties/DbServerIds" ],
  "primaryIdentifier" : [ "/properties/CloudExadataInfrastructureArn" ],
  "handlers" : {
    "create" : {
      "permissions" : [ "odb:CreateCloudExadataInfrastructure", "ec2:DescribeAvailabilityZones", "iam:CreateServiceLinkedRole", "odb:ListCloudExadataInfrastructures", "odb:GetCloudExadataInfrastructure", "odb:ListDbServers", "odb:TagResource", "sts:GetCallerIdentity", "odb:ListTagsForResource" ],
      "timeoutInMinutes" : 2160
    },
    "read" : {
      "permissions" : [ "odb:GetCloudExadataInfrastructure", "odb:ListDbServers", "sts:GetCallerIdentity", "odb:ListTagsForResource" ]
    },
    "update" : {
      "permissions" : [ "odb:UpdateCloudExadataInfrastructure", "odb:TagResource", "odb:UntagResource", "odb:ListCloudExadataInfrastructures", "odb:GetCloudExadataInfrastructure", "odb:ListDbServers", "sts:GetCallerIdentity", "odb:ListTagsForResource" ]
    },
    "delete" : {
      "permissions" : [ "odb:DeleteCloudExadataInfrastructure", "odb:ListCloudExadataInfrastructures", "odb:GetCloudExadataInfrastructure", "odb:ListDbServers", "sts:GetCallerIdentity", "odb:ListTagsForResource" ],
      "timeoutInMinutes" : 2160
    },
    "list" : {
      "permissions" : [ "odb:ListCloudExadataInfrastructures", "sts:GetCallerIdentity", "odb:ListTagsForResource", "odb:ListDbServers" ]
    }
  },
  "replacementStrategy" : "delete_then_create",
  "tagging" : {
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "cloudFormationSystemTags" : true,
    "tagProperty" : "/properties/Tags",
    "permissions" : [ "odb:TagResource", "odb:UntagResource", "odb:ListTagsForResource" ]
  }
}