Service Catalog

TICKETING — PAID PLUGIN

A ServiceNow-style catalog of pre-filled ticket templates. Users browse cards by category, click one, fill in one or two fields, and the rest (priority, assignee group, workflow, SLA) is set automatically. The whole catalog is GitOps-declared in Helm values — no in-app editor.

What it is

The service catalog is the front door for non-technical users. Instead of asking everyone to learn the difference between HIGH and CRITICAL, or which group handles network problems, you publish a set of named cards: “Network Outage”, “Access Request”, “New VM”. The user clicks the one that matches their situation, types a short description, and submits.

Each card behind the scenes is a pre-filled ticket template — the platform fills in priority, assignee group, workflow and SLA target from the YAML, then opens a normal ticket. From the moment of submission the catalog item is gone: the rest of the lifecycle is plain ticketing.

Why GitOps, not a UI editor

Catalog content is operational policy: who handles what, what counts as an incident vs a request, what the response time should be. That policy belongs in Git, next to the rest of your infrastructure, for three reasons:

Categories

Items are grouped under categories that map to tabs on the “New ticket” page. A typical setup:

You can add as many categories as you like; the UI lays them out as horizontal tabs and falls back to a dropdown on narrow screens.

YAML declaration

Catalog content lives under ticketing.catalog in your Helm values. The shape:

ticketing:
  catalog:
    categories:
      - {name: incidents, displayName: "Incidents", icon: report_problem}
      - {name: requests,  displayName: "Requests",  icon: assignment}
    items:
      - name: network_outage
        category: incidents
        displayName: "Network Outage"
        description: "Connectivity or DNS failure"
        icon: wifi_off
        workflow: incident_response
        defaults: {priority: HIGH, assigneeGroup: network-team}
        sla:      {responseMinutes: 15, resolutionMinutes: 240}
      - name: access_request
        category: requests
        displayName: "Access Request"
        workflow: incident_response
        defaults: {priority: MEDIUM}
        sla:      {responseMinutes: 60, resolutionMinutes: 1440}

Field reference:

FieldRequiredPurpose
nameyesStable identifier. Used as the foreign key on tickets.
categoryyesMust match a declared category name.
displayNameyesCard title shown to users.
descriptionnoCard subtitle. Shown under the title.
iconnoMaterial Symbols name. Defaults to a generic ticket icon.
workflowyesMust match a declared workflow under ticketing.workflows.
defaults.prioritynoPre-filled priority. User can override.
defaults.assigneeGroupnoGroup that auto-receives the ticket.
sla.responseMinutesnoSLA target for first response. If omitted, falls back to priority defaults.
sla.resolutionMinutesnoSLA target for resolution. If omitted, falls back to priority defaults.

Incremental: start small, grow over time

Today you might ship a catalog with four items. In a month you notice that “new mailbox” requests are coming in as “Access Request” with confusing free-text descriptions. You add a fifth item:

- name: new_mailbox
  category: requests
  displayName: "New Mailbox"
  description: "Create or migrate a mailbox"
  icon: mail
  workflow: incident_response
  defaults: {priority: LOW, assigneeGroup: it-helpdesk}
  sla:      {responseMinutes: 240, resolutionMinutes: 2880}

Helm upgrade. The card appears. Existing tickets are untouched, the new card starts catching new requests. No downtime, no migration, no UI form to maintain.

Reconciliation behaviour

On every chart upgrade the plugin reconciles the declared catalog against the database:

Example flow

  1. User clicks “Network Outage” card.
  2. Form opens with priority pre-filled to HIGH, assignee group network-team, SLA 15min/4h, workflow incident_response.
  3. User types title (“DNS resolution failing in eu-west-1”) and a one-line description.
  4. Submit → ticket created in OPEN, network-team gets notified, SLA timer starts.
  5. From here on it is a normal ticket; see Tickets for the rest of the lifecycle.

See also