{
  "typeName" : "AWS::SSM::MaintenanceWindow",
  "description" : "Resource type definition for AWS::SSM::MaintenanceWindow",
  "additionalProperties" : false,
  "properties" : {
    "WindowId" : {
      "type" : "string",
      "description" : "The ID of the maintenance window."
    },
    "StartDate" : {
      "type" : "string",
      "description" : "The date and time, in ISO-8601 Extended format, for when the maintenance window is scheduled to become active. StartDate allows you to delay activation of the maintenance window until the specified future date."
    },
    "Description" : {
      "type" : "string",
      "description" : "A description of the maintenance window."
    },
    "AllowUnassociatedTargets" : {
      "type" : "boolean",
      "description" : "Enables a maintenance window task to run on managed instances, even if you have not registered those instances as targets. If enabled, then you must specify the unregistered instances (by instance ID) when you register a task with the maintenance window."
    },
    "Cutoff" : {
      "type" : "integer",
      "description" : "The number of hours before the end of the maintenance window that AWS Systems Manager stops scheduling new tasks for execution."
    },
    "Schedule" : {
      "type" : "string",
      "description" : "The schedule of the maintenance window in the form of a cron or rate expression."
    },
    "Duration" : {
      "type" : "integer",
      "description" : "The duration of the maintenance window in hours."
    },
    "ScheduleOffset" : {
      "type" : "integer",
      "description" : "The number of days to wait to run a maintenance window after the scheduled cron expression date and time."
    },
    "EndDate" : {
      "type" : "string",
      "description" : "The date and time, in ISO-8601 Extended format, for when the maintenance window is scheduled to become inactive."
    },
    "Tags" : {
      "type" : "array",
      "description" : "Optional metadata that you assign to a resource in the form of an arbitrary set of tags (key-value pairs). Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a maintenance window to identify the type of tasks it will run, the types of targets, and the environment it will run in.",
      "uniqueItems" : false,
      "insertionOrder" : false,
      "items" : {
        "$ref" : "#/definitions/Tag"
      }
    },
    "Name" : {
      "type" : "string",
      "description" : "The name of the maintenance window."
    },
    "ScheduleTimezone" : {
      "type" : "string",
      "description" : "The time zone that the scheduled maintenance window executions are based on, in Internet Assigned Numbers Authority (IANA) format."
    }
  },
  "definitions" : {
    "Tag" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Value" : {
          "type" : "string",
          "description" : "The value of the tag."
        },
        "Key" : {
          "type" : "string",
          "description" : "The name of the tag."
        }
      },
      "required" : [ "Value", "Key" ]
    }
  },
  "required" : [ "AllowUnassociatedTargets", "Cutoff", "Schedule", "Duration", "Name" ],
  "primaryIdentifier" : [ "/properties/WindowId" ],
  "readOnlyProperties" : [ "/properties/WindowId" ],
  "tagging" : {
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "cloudFormationSystemTags" : true,
    "tagProperty" : "/properties/Tags",
    "permissions" : [ "ssm:ListTagsForResource", "ssm:AddTagsToResource", "ssm:RemoveTagsFromResource" ]
  },
  "handlers" : {
    "create" : {
      "permissions" : [ "ssm:CreateMaintenanceWindow", "ssm:AddTagsToResource" ]
    },
    "read" : {
      "permissions" : [ "ssm:GetMaintenanceWindow", "ssm:ListTagsForResource" ]
    },
    "update" : {
      "permissions" : [ "ssm:UpdateMaintenanceWindow", "ssm:AddTagsToResource", "ssm:RemoveTagsFromResource" ]
    },
    "delete" : {
      "permissions" : [ "ssm:DeleteMaintenanceWindow", "ssm:GetMaintenanceWindow" ]
    },
    "list" : {
      "permissions" : [ "ssm:DescribeMaintenanceWindows" ]
    }
  }
}