#!/usr/bin/env bash # # ticket-create.sh — Create a GLPI ticket # # Usage: ticket-create.sh -t -c <content> [-p priority] [-y type] # # Options: # -t title Ticket title (required) # -c content Ticket description (required) # -p priority 1=VeryLow, 2=Low, 3=Medium (default), 4=High, 5=VeryHigh, 6=Major # -y type 1=Incident (default), 2=Request # -f format Output format: table (default), json # -h Show this help set -euo pipefail MOSAIC_HOME="${MOSAIC_HOME:-$HOME/.config/mosaic}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$MOSAIC_HOME/tools/_lib/credentials.sh" load_credentials glpi TITLE="" CONTENT="" PRIORITY=3 TYPE=1 FORMAT="table" while getopts "t:c:p:y:f:h" opt; do case $opt in t) TITLE="$OPTARG" ;; c) CONTENT="$OPTARG" ;; p) PRIORITY="$OPTARG" ;; y) TYPE="$OPTARG" ;; f) FORMAT="$OPTARG" ;; h) head -13 "$0" | grep "^#" | sed 's/^# \?//'; exit 0 ;; *) echo "Usage: $0 -t <title> -c <content> [-p priority] [-y type]" >&2; exit 1 ;; esac done if [[ -z "$TITLE" || -z "$CONTENT" ]]; then echo "Error: -t title and -c content are required" >&2 exit 1 fi SESSION_TOKEN=$("$SCRIPT_DIR/session-init.sh" -q) payload=$(jq -n \ --arg name "$TITLE" \ --arg content "$CONTENT" \ --argjson priority "$PRIORITY" \ --argjson type "$TYPE" \ '{input: {name: $name, content: $content, priority: $priority, type: $type}}') response=$(curl -sk -w "\n%{http_code}" -X POST \ -H "App-Token: $GLPI_APP_TOKEN" \ -H "Session-Token: $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d "$payload" \ "${GLPI_URL}/Ticket") http_code=$(echo "$response" | tail -n1) body=$(echo "$response" | sed '$d') if [[ "$http_code" != "201" && "$http_code" != "200" ]]; then echo "Error: Failed to create ticket (HTTP $http_code)" >&2 echo "$body" | jq -r '.' 2>/dev/null >&2 || echo "$body" >&2 exit 1 fi if [[ "$FORMAT" == "json" ]]; then echo "$body" | jq '.' else ticket_id=$(echo "$body" | jq -r '.id // .message // .') echo "Ticket created: #$ticket_id" echo " Title: $TITLE" echo " Priority: $PRIORITY" echo " Type: $([ "$TYPE" = "1" ] && echo "Incident" || echo "Request")" fi