mirror of
https://github.com/itsdave-de/msp.git
synced 2026-08-14 07:30:05 -03:00
chore: commit uncommitted production changes for v16 migration
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# TacticalRMM API Zugriff
|
||||
|
||||
## RMM Instanz
|
||||
|
||||
**Name:** `RMMINST-Default (Migrated from MSP Settings)`
|
||||
**API URL:** `https://api.itsdave.de`
|
||||
**API Key:** `VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5`
|
||||
|
||||
## Credentials aus Frappe abrufen
|
||||
|
||||
```python
|
||||
import frappe
|
||||
|
||||
rmm = frappe.get_doc("RMM Instance", "RMMINST-Default (Migrated from MSP Settings)")
|
||||
api_url, headers, verify = rmm.get_api_credentials()
|
||||
# api_url = "https://api.itsdave.de"
|
||||
# headers = {"X-API-KEY": "..."}
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Agents
|
||||
|
||||
```bash
|
||||
# Alle Agents abrufen
|
||||
curl -s "https://api.itsdave.de/agents/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
|
||||
# Agent Details
|
||||
curl -s "https://api.itsdave.de/agents/{agent_id}/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
```
|
||||
|
||||
### Scripts
|
||||
|
||||
```bash
|
||||
# Alle Scripts auflisten
|
||||
curl -s "https://api.itsdave.de/scripts/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
|
||||
# Script Details
|
||||
curl -s "https://api.itsdave.de/scripts/{script_id}/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
```
|
||||
|
||||
### Script erstellen
|
||||
|
||||
```bash
|
||||
# Script Content escapen
|
||||
SCRIPT_CONTENT=$(cat mein_script.ps1 | python3 -c "import sys, json; print(json.dumps(sys.stdin.read()))")
|
||||
|
||||
# Script hochladen
|
||||
curl -s -X POST "https://api.itsdave.de/scripts/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"name\": \"MSP - Mein Script\",
|
||||
\"description\": \"Beschreibung des Scripts\",
|
||||
\"shell\": \"powershell\",
|
||||
\"category\": \"MSP\",
|
||||
\"supported_platforms\": [\"windows\"],
|
||||
\"script_body\": ${SCRIPT_CONTENT},
|
||||
\"default_timeout\": 120
|
||||
}"
|
||||
```
|
||||
|
||||
### Script auf Agent ausführen
|
||||
|
||||
**WICHTIG:** Das Feld `run_on_server` muss explizit auf `false` gesetzt werden!
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://api.itsdave.de/agents/{agent_id}/runscript/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"output": "wait",
|
||||
"emails": [],
|
||||
"emailMode": "default",
|
||||
"custom_field": null,
|
||||
"save_all_output": false,
|
||||
"script": 154,
|
||||
"args": [],
|
||||
"env_vars": [],
|
||||
"timeout": 120,
|
||||
"run_as_user": false,
|
||||
"run_on_server": false
|
||||
}'
|
||||
```
|
||||
|
||||
**Output-Modi:**
|
||||
- `"wait"` - Wartet auf Ergebnis und gibt es zurück
|
||||
- `"forget"` - Führt aus ohne auf Ergebnis zu warten
|
||||
- `"email"` - Sendet Ergebnis per E-Mail
|
||||
|
||||
### Windows Updates
|
||||
|
||||
```bash
|
||||
# Patches für Agent abrufen
|
||||
curl -s "https://api.itsdave.de/winupdate/{agent_id}/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
|
||||
# Update-Scan starten
|
||||
curl -s -X POST "https://api.itsdave.de/winupdate/{agent_id}/scan/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
|
||||
# Approved Updates installieren
|
||||
curl -s -X POST "https://api.itsdave.de/winupdate/{agent_id}/install/" \
|
||||
-H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
```
|
||||
|
||||
## Python Beispiel
|
||||
|
||||
```python
|
||||
import requests
|
||||
import json
|
||||
|
||||
API_URL = "https://api.itsdave.de"
|
||||
API_KEY = "VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"
|
||||
|
||||
headers = {"X-API-KEY": API_KEY, "Content-Type": "application/json"}
|
||||
|
||||
def run_script(agent_id, script_id, timeout=120):
|
||||
"""Führt ein Script auf einem Agent aus und gibt das Ergebnis zurück."""
|
||||
payload = {
|
||||
"output": "wait",
|
||||
"emails": [],
|
||||
"emailMode": "default",
|
||||
"custom_field": None,
|
||||
"save_all_output": False,
|
||||
"script": script_id,
|
||||
"args": [],
|
||||
"env_vars": [],
|
||||
"timeout": timeout,
|
||||
"run_as_user": False,
|
||||
"run_on_server": False # WICHTIG!
|
||||
}
|
||||
|
||||
r = requests.post(
|
||||
f"{API_URL}/agents/{agent_id}/runscript/",
|
||||
headers=headers,
|
||||
json=payload,
|
||||
timeout=timeout + 30
|
||||
)
|
||||
|
||||
if r.status_code == 200:
|
||||
return json.loads(r.json()) # Doppeltes JSON-Parsing nötig
|
||||
else:
|
||||
raise Exception(f"API Error {r.status_code}: {r.text}")
|
||||
|
||||
# Beispiel: Windows Update Diagnostics auf CWWS12
|
||||
result = run_script(
|
||||
agent_id="HTTlEmzqhqGyRNISuTeOMcKWcPEaATdZiSdWcwTR",
|
||||
script_id=154
|
||||
)
|
||||
print(f"Status: {result['status']}")
|
||||
print(f"Issues: {result['issues']}")
|
||||
```
|
||||
|
||||
## MSP Scripts in TacticalRMM
|
||||
|
||||
| ID | Name | Beschreibung |
|
||||
|-----|------|--------------|
|
||||
| 153 | MSP - Windows Update Diagnostics | Text-Ausgabe für manuelle Analyse |
|
||||
| 154 | MSP - Windows Update Diagnostics JSON | JSON-Ausgabe für programmatische Verarbeitung |
|
||||
|
||||
## Bekannte Probleme
|
||||
|
||||
1. **500 Fehler bei Script-Ausführung:** Prüfen ob `run_on_server: false` gesetzt ist
|
||||
2. **Leere Antwort:** Agent ist möglicherweise offline
|
||||
3. **Timeout:** Script-Timeout + 30 Sekunden für Request-Timeout verwenden
|
||||
|
||||
## Swagger UI
|
||||
|
||||
API-Dokumentation verfügbar unter:
|
||||
`https://api.itsdave.de/api/schema/swagger-ui/`
|
||||
Reference in New Issue
Block a user