Skip to content

Deployment Freezes

Block deployments during specific time windows.

A deployment freeze prevents deployments during configured time periods:

Use CaseFreeze TypeExample
Holiday freezeOne-timeDec 20 - Jan 2
Change freezeOne-timeDuring audit
Nightly maintenanceRecurring daily2 AM - 6 AM
Weekend freezeRecurring weeklySat-Sun
Month-end freezeRecurring monthlyLast 3 days

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) │
│ │
└─────────────────────────────────────────────────────────────┘

Repeats on a schedule:

RecurrenceDescriptionExample
DailySame time every day2 AM - 6 AM nightly
WeeklySpecific days each weekWeekends only
MonthlySpecific days each monthLast 3 days
YearlySame dates each yearDec 20 - Jan 2
┌─────────────────────────────────────────────────────────────┐
│ 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] │
│ │
└─────────────────────────────────────────────────────────────┘

Deployment freezes are managed through the /api/v1/deployment-freezes endpoint (or the Lens UI). There is no mantisctl freeze subcommand.

Terminal window
# Create a one-time freeze scoped to an environment
curl -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 freeze
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: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.

Blocks all deployments across the system:

Terminal window
# No tenant_id/solution_id/environment_id = global freeze
curl -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"
}'

Target specific resources:

Scope LevelBlocks
TenantAll deployments for the tenant
SolutionAll deployments of the solution
EnvironmentAll deployments to the environment
CombinedOnly 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 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] │
│ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 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 │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 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 │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 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 │ │
│ └─────────────────┴──────────────┴──────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

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] │
│ │
└─────────────────────────────────────────────────────────────┘

A freeze blocks a deployment if ALL its non-null scopes match:

Freeze ScopeDeployment ScopeBlocked?
Tenant: AcmeTenant: AcmeYes
Tenant: AcmeTenant: BetaNo
Environment: ProdAny to ProdYes
Solution: Portal, Env: ProdPortal to ProdYes
Solution: Portal, Env: ProdPortal to StagingNo

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] │
│ │
└─────────────────────────────────────────────────────────────┘

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 │ │
│ └─────────────────┴────────────────┴──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

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.

Terminal window
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"
}'
Terminal window
# List all freezes (paginated)
curl "$MANTIS_URL/api/v1/deployment-freezes" \
-H "Authorization: Bearer $TOKEN"
# List only currently-active freezes
curl "$MANTIS_URL/api/v1/deployment-freezes/active" \
-H "Authorization: Bearer $TOKEN"
Terminal window
# 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" }'
Terminal window
# Delete a freeze (by freeze ID)
curl -X DELETE "$MANTIS_URL/api/v1/deployment-freezes/<freeze-id>" \
-H "Authorization: Bearer $TOKEN"
Terminal window
# Check whether a deployment would be blocked
curl "$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.)

Terminal window
# List all active freezes
curl "$MANTIS_URL/api/v1/deployment-freezes/active" \
-H "Authorization: Bearer $TOKEN"

Schedule freezes before they’re needed:

Terminal window
# Schedule a freeze 2 weeks early
curl -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"
}'

Avoid global freezes when possible:

SituationRecommended Scope
Holiday seasonProduction only
Tenant auditSpecific tenant
Solution upgradeSpecific solution
System maintenanceGlobal (only when necessary)

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 verification

Periodically audit recurring freezes:

  • Are they still needed?
  • Is the schedule still appropriate?
  • Should scope be adjusted?

Notify teams of upcoming freezes:

Deployment Freeze Notice:
- Holiday Freeze: Dec 20 - Jan 2
- Scope: Production environment
- Override: Contact on-call lead

Cause: Scope doesn’t match deployment

Solution:

  1. Check freeze scope settings
  2. Verify environment/solution/tenant matches
  3. Confirm freeze is enabled

Cause: Time zone or configuration issue

Solution:

  1. Verify time settings are in correct timezone
  2. Check days-of-week/month configuration
  3. Confirm recurrence end date hasn’t passed

Cause: Insufficient permissions

Solution:

  1. Check if user has override permission
  2. Contact administrator for emergency access
  3. Request role upgrade if needed regularly