Deployment Freezes
Block deployments during specific time windows.
What is a Deployment Freeze?
Section titled βWhat is a Deployment Freeze?βA deployment freeze prevents deployments during configured time periods:
Common Use Cases
Section titled βCommon Use Casesβ| Use Case | Freeze Type | Example |
|---|---|---|
| Holiday freeze | One-time | Dec 20 - Jan 2 |
| Change freeze | One-time | During audit |
| Nightly maintenance | Recurring daily | 2 AM - 6 AM |
| Weekend freeze | Recurring weekly | Sat-Sun |
| Month-end freeze | Recurring monthly | Last 3 days |
Freeze Types
Section titled βFreeze TypesβOne-Time Freeze
Section titled βOne-Time FreezeβBlocks deployments during a specific date range:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ One-Time Freeze: Holiday Freeze 2024 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Start: December 20, 2024 00:00 ββ End: January 2, 2025 23:59 ββ ββ Status: β Active (5 days remaining) ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββRecurring Freeze
Section titled βRecurring FreezeβRepeats on a schedule:
| Recurrence | Description | Example |
|---|---|---|
| Daily | Same time every day | 2 AM - 6 AM nightly |
| Weekly | Specific days each week | Weekends only |
| Monthly | Specific days each month | Last 3 days |
| Yearly | Same dates each year | Dec 20 - Jan 2 |
Creating a Freeze
Section titled βCreating a FreezeβVia Lens UI
Section titled βVia Lens UIβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Create Deployment Freeze ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Name * ββ [Holiday Freeze 2024 ] ββ ββ Description ββ [No deployments during holiday season ] ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Freeze Type: ββ β One-Time ββ β Recurring ββ ββ Start Date/Time * ββ [2024-12-20] [00:00] ββ ββ End Date/Time * ββ [2025-01-02] [23:59] ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Scope (leave empty for global freeze): ββ Tenant: [All βΌ] ββ Solution: [All βΌ] ββ Environment: [Production βΌ] ββ ββ β Enabled ββ ββ [Cancel] [Create] ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββVia REST API
Section titled βVia REST APIβDeployment freezes are managed through the /api/v1/deployment-freezes endpoint
(or the Lens UI). There is no mantisctl freeze subcommand.
# Create a one-time freeze scoped to an environmentcurl -X POST "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Holiday Freeze 2024", "environment_id": "<environment-id>", "start_time": "2024-12-20T00:00:00Z", "end_time": "2025-01-02T23:59:59Z" }'
# Create a recurring daily freezecurl -X POST "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Nightly Maintenance", "start_time": "2024-06-01T02:00:00Z", "end_time": "2024-06-01T06:00:00Z", "recurrence_type": "daily" }'Supported recurrence_type values are daily, weekly, monthly, and
yearly; omit the field for a one-time freeze.
Time zones
Section titled βTime zonesβA freezeβs start_time and end_time are wall-clock times in the freezeβs own
zone, named by the optional timezone field. It takes an IANA name and defaults to
UTC:
curl -X POST "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Nightly Maintenance", "start_time": "2024-06-01T02:00:00", "end_time": "2024-06-01T06:00:00", "timezone": "America/New_York", "recurrence_type": "daily" }'Wall-clock is what makes a recurring window survive a daylight-saving change: the freeze
above stays 02:00β06:00 in New York on both sides of the shift, rather than drifting an
hour. A value that carries an offset β 2024-06-01T02:00:00Z, or +02:00 β names an
instant instead, and is converted into the freezeβs zone before it is stored. Responses
return these fields without a trailing Z, because they are not UTC.
recurrence_end_date is read the same way, and applies only to recurring freezes; a
one-time freeze that sets it is refused. An occurrence that has already started runs to
the end of its window even if the end date falls partway through.
Freeze Scope
Section titled βFreeze ScopeβGlobal Freeze
Section titled βGlobal FreezeβBlocks all deployments across the system:
# No tenant_id/solution_id/environment_id = global freezecurl -X POST "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "System Maintenance", "start_time": "2024-06-15T22:00:00Z", "end_time": "2024-06-16T06:00:00Z" }'Scoped Freeze
Section titled βScoped FreezeβTarget specific resources:
| Scope Level | Blocks |
|---|---|
| Tenant | All deployments for the tenant |
| Solution | All deployments of the solution |
| Environment | All deployments to the environment |
| Combined | Only matching combinations |
Scope a freeze by setting one or more of tenant_id, solution_id, and
environment_id on the create request:
// Production-only freeze{ "name": "Prod Freeze", "environment_id": "<env-id>", "start_time": "...", "end_time": "..." }
// Specific solution in production{ "name": "Portal Freeze", "solution_id": "<solution-id>", "environment_id": "<env-id>", "start_time": "...", "end_time": "..." }
// Tenant-specific freeze{ "name": "Acme Freeze", "tenant_id": "<tenant-id>", "start_time": "...", "end_time": "..." }Recurring Configuration
Section titled βRecurring ConfigurationβDaily Freeze
Section titled βDaily Freezeβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Recurring Freeze: Daily ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Time Window: ββ Start Time: [02:00] End Time: [06:00] ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Freeze is active from 02:00 to 06:00 every day β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Recurrence End Date (optional): ββ [2025-12-31] ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββWeekly Freeze
Section titled βWeekly Freezeβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Recurring Freeze: Weekly ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Days of Week: ββ β Monday β Tuesday β Wednesday β Thursday ββ β Friday β Saturday β Sunday ββ ββ Time Window: ββ Start Time: [00:00] End Time: [23:59] ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Freeze is active all day on Saturday and Sunday β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββMonthly Freeze
Section titled βMonthly Freezeβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Recurring Freeze: Monthly ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Days of Month: ββ [29, 30, 31 ] ββ Last 3 days of each month ββ ββ Time Window: ββ Start Time: [00:00] End Time: [23:59] ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Freeze is active on days 29, 30, 31 of each month β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββFreeze List View
Section titled βFreeze List Viewβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Deployment Freezes ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ [+ New Freeze] Filter: [All βΌ] ββ ββ Active Freezes: ββ βββββββββββββββββββ¬βββββββββββββββ¬ββββββββββββ¬βββββββββββ ββ β Name β Scope β Type β Status β ββ βββββββββββββββββββΌβββββββββββββββΌββββββββββββΌβββββββββββ€ ββ β Holiday 2024 β Production β One-time β β Active β ββ β Weekend Freeze β Global β Weekly β β Active β ββ β Nightly Maint. β All β Daily β β Inactiveβ ββ βββββββββββββββββββ΄βββββββββββββββ΄ββββββββββββ΄βββββββββββ ββ ββ Upcoming Freezes: ββ βββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββββββββ ββ β Name β Scope β Starts β ββ βββββββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββ€ ββ β Q1 Audit Freeze β All β Jan 15, 2025 β ββ βββββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββFreeze Behavior
Section titled βFreeze BehaviorβDeployment Blocked
Section titled βDeployment BlockedβWhen a freeze is active:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Deployment Blocked ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ β Cannot deploy: Active deployment freeze ββ ββ Freeze: Holiday Freeze 2024 ββ Scope: Production ββ End Time: January 2, 2025 23:59 ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Deployments to Production are blocked until the β ββ β freeze ends. Contact admin for emergency override. β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ [View Freeze] [Request Override] ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββScope Matching
Section titled βScope MatchingβA freeze blocks a deployment if ALL its non-null scopes match:
| Freeze Scope | Deployment Scope | Blocked? |
|---|---|---|
| Tenant: Acme | Tenant: Acme | Yes |
| Tenant: Acme | Tenant: Beta | No |
| Environment: Prod | Any to Prod | Yes |
| Solution: Portal, Env: Prod | Portal to Prod | Yes |
| Solution: Portal, Env: Prod | Portal to Staging | No |
Override System
Section titled βOverride SystemβRequesting an Override
Section titled βRequesting an OverrideβFor emergencies, request a freeze override:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Request Freeze Override ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Freeze: Holiday Freeze 2024 ββ Deployment: customer-portal v1.4.1 to Production ββ ββ Reason for Override * ββ [Critical security patch - CVE-2024-XXXX requires ]ββ [immediate deployment to fix authentication bypass ]ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Override requests are logged and audited. β ββ β Only users with override permission can proceed. β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ [Cancel] [Override] ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββOverride Record
Section titled βOverride RecordβOverrides are permanently recorded:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Freeze Overrides: Holiday Freeze 2024 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββββ ββ β Deployment β Overridden By β Reason β ββ βββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββ€ ββ β portal v1.4.1 β alice β Security patch β ββ β auth v2.1.1 β bob β Critical bug fix β ββ βββββββββββββββββββ΄βββββββββββββββββ΄βββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββVia REST API
Section titled βVia REST APIβFreeze override is requested per deployment via the override_freeze and
override_reason fields on the create request (requires the
deployments:override_freeze permission, which can be granted to any role β
not exclusively admin). The mantisctl deployment create command does not
expose these flags.
curl -X POST "$MANTIS_URL/api/v1/deployments" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "solution_id": "<solution-id>", "environment_id": "<environment-id>", "override_freeze": true, "override_reason": "Critical security patch CVE-2024-XXXX" }'Managing Freezes
Section titled βManaging FreezesβList Freezes
Section titled βList Freezesβ# List all freezes (paginated)curl "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN"
# List only currently-active freezescurl "$MANTIS_URL/api/v1/deployment-freezes/active" \ -H "Authorization: Bearer $TOKEN"Update Freeze
Section titled βUpdate Freezeβ# Extend a freeze (PUT with the fields to change, by freeze ID)curl -X PUT "$MANTIS_URL/api/v1/deployment-freezes/<freeze-id>" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "end_time": "2025-01-05T23:59:59Z" }'Delete Freeze
Section titled βDelete Freezeβ# Delete a freeze (by freeze ID)curl -X DELETE "$MANTIS_URL/api/v1/deployment-freezes/<freeze-id>" \ -H "Authorization: Bearer $TOKEN"Checking Freeze Status
Section titled βChecking Freeze StatusβBefore Deployment
Section titled βBefore Deploymentβ# Check whether a deployment would be blockedcurl "$MANTIS_URL/api/v1/deployment-freezes/check?solution_id=<solution-id>&environment_id=<environment-id>" \ -H "Authorization: Bearer $TOKEN"If a freeze is active for the target scope, creating a deployment is blocked
with a 409 (DEPLOYMENT_FROZEN) error; the deployment preview does NOT check active freezes (its warnings field only
reports offline/stale targets). Use GET /api/v1/deployment-freezes/check with the
relevant solution_id/environment_id to test whether a deployment would be blocked.
(There is no freeze_status field on the preview response.)
List Active Freezes
Section titled βList Active Freezesβ# List all active freezescurl "$MANTIS_URL/api/v1/deployment-freezes/active" \ -H "Authorization: Bearer $TOKEN"Best Practices
Section titled βBest Practicesβ1. Plan Freezes in Advance
Section titled β1. Plan Freezes in AdvanceβSchedule freezes before theyβre needed:
# Schedule a freeze 2 weeks earlycurl -X POST "$MANTIS_URL/api/v1/deployment-freezes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Q1 Audit", "start_time": "2025-01-15T00:00:00Z", "end_time": "2025-01-20T23:59:59Z" }'2. Use Appropriate Scope
Section titled β2. Use Appropriate ScopeβAvoid global freezes when possible:
| Situation | Recommended Scope |
|---|---|
| Holiday season | Production only |
| Tenant audit | Specific tenant |
| Solution upgrade | Specific solution |
| System maintenance | Global (only when necessary) |
3. Document Override Policy
Section titled β3. Document Override PolicyβDefine when overrides are acceptable:
## Override Policy
Overrides are permitted for:- Security vulnerabilities (CVE)- Production-breaking bugs- Compliance requirements
Required for override:- Approval from on-call lead- Documented justification- Post-deployment verification4. Review Recurring Freezes
Section titled β4. Review Recurring FreezesβPeriodically audit recurring freezes:
- Are they still needed?
- Is the schedule still appropriate?
- Should scope be adjusted?
5. Communicate Freezes
Section titled β5. Communicate FreezesβNotify teams of upcoming freezes:
Deployment Freeze Notice:- Holiday Freeze: Dec 20 - Jan 2- Scope: Production environment- Override: Contact on-call leadTroubleshooting
Section titled βTroubleshootingβFreeze Not Blocking
Section titled βFreeze Not BlockingβCause: Scope doesnβt match deployment
Solution:
- Check freeze scope settings
- Verify environment/solution/tenant matches
- Confirm freeze is enabled
Recurring Freeze Not Activating
Section titled βRecurring Freeze Not ActivatingβCause: Time zone or configuration issue
Solution:
- Check the freezeβs
timezonefield β the window is wall-clock in that zone, and it defaults toUTC, so a window entered in local time without setting it fires at the wrong hour - Check days-of-week/month configuration; each recurrence type reads only its own fields, and setting one it does not read is refused rather than ignored
- Confirm recurrence end date hasnβt passed
Cannot Override Freeze
Section titled βCannot Override FreezeβCause: Insufficient permissions
Solution:
- Check if user has override permission
- Contact administrator for emergency access
- Request role upgrade if needed regularly
Next Steps
Section titled βNext Stepsβ- Tags - Organize resources
- Audit Logs - Track system changes
