명령어 API

엔드포인트: /api/events/commands/

원격 서버에서 명령어를 실행하고 관리합니다.

명령어 목록 조회

명령어 목록을 페이지네이션으로 조회합니다.

GET /api/events/commands/

쿼리 파라미터

파라미터타입설명
serverUUID서버 ID로 필터링 (정확히 일치)
shellstring셸 타입으로 필터링 (정확히 일치)
requested_byinteger요청자 사용자 ID로 필터링 (정확히 일치)
requested_by_isnullboolean요청자가 없는 명령어 필터링
is_scheduledbooleantrue: 미래 예약, false: 과거/즉시 실행
searchstring서버 이름, 명령어 줄, 요청자 이름으로 검색
orderingstring정렬 필드 (기본값: -scheduled_at). 옵션: added_at, scheduled_at, delivered_at, acked_at, handled_at
pageinteger페이지 번호
page_sizeinteger페이지당 결과 수 (기본값: 15, 최대: 100)

응답

{
  "count": 85,
  "next": "https://your-workspace.us1.alpacon.io/api/events/commands/?page=2",
  "previous": null,
  "results": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "shell": "system",
      "line": "df -h",
      "success": true,
      "result": "Filesystem  Size  Used Avail Use% Mounted on\n/dev/xvda1  20G  8.5G  11G  46% /",
      "status": {
        "text": "Success",
        "color": "success",
        "cancellable": false,
        "message": "Finished at 2024-01-15 10:30:45"
      },
      "response_delay": 0.125,
      "elapsed_time": 0.023,
      "added_at": "2024-01-15T10:30:44Z",
      "server": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
      "username": "ubuntu",
      "groupname": "alpacon",
      "requested_by": {
        "id": 1,
        "username": "admin",
        "email": "admin@example.com"
      },
      "scheduled_at": "2024-01-15T10:30:44Z"
    }
  ]
}

명령어 실행

하나 또는 여러 서버에서 명령어를 실행합니다. server(단일) 또는 servers(다중) 중 하나만 제공합니다.

POST /api/events/commands/

요청 파라미터

필드타입필수설명
serverUUIDYes*대상 서버 ID
serversarray[UUID]Yes*대상 서버 ID 목록 (쓰기 전용, 서버당 하나의 명령어 생성)
linestringYes실행할 명령어 (최대 512자)
usernamestringNo실행할 OS 사용자 (기본값: 현재 사용자)
groupnamestringNo실행할 OS 그룹 (기본값: alpacon)
envobjectNo환경 변수
datastringNo명령어에 대한 추가 데이터
scheduled_atdatetimeNo예약 실행 시각 (기본값: 즉시)
run_afterarray[UUID]No먼저 완료되어야 하는 명령어 ID

* server 또는 servers 중 하나는 반드시 제공해야 합니다.

root 사용자로 명령어를 실행하려면 MFA 인증이 필요합니다.

요청 본문

{
  "server": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
  "line": "df -h",
  "username": "ubuntu",
  "groupname": "alpacon",
  "env": {
    "CUSTOM_VAR": "value"
  }
}

요청 본문 (다중 서버)

{
  "servers": [
    "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
    "8f4985df-50bc-42e5-b827-32fcc6655111"
  ],
  "line": "apt update",
  "username": "root"
}

응답

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "line": "df -h",
  "env": null,
  "data": null,
  "username": "ubuntu",
  "groupname": "alpacon",
  "added_at": "2024-01-15T10:30:44Z",
  "scheduled_at": "2024-01-15T10:30:44Z",
  "server": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
  "requested_by": {
    "id": 1,
    "username": "admin",
    "email": "admin@example.com"
  },
  "run_after": []
}

명령어 상세 조회

특정 명령어의 전체 세부 정보와 결과를 조회합니다.

GET /api/events/commands/{command_id}/

경로 파라미터

파라미터타입설명
command_idUUID명령어 ID

응답

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "shell": "system",
  "line": "df -h",
  "env": null,
  "data": null,
  "success": true,
  "result": "Filesystem  Size  Used Avail Use% Mounted on\n/dev/xvda1  20G  8.5G  11G  46% /",
  "status": {
    "text": "Success",
    "color": "success",
    "cancellable": false,
    "message": "Finished at 2024-01-15 10:30:45"
  },
  "response_delay": 0.125,
  "elapsed_time": 0.023,
  "added_at": "2024-01-15T10:30:44Z",
  "scheduled_at": "2024-01-15T10:30:44Z",
  "delivered_at": "2024-01-15T10:30:44.500Z",
  "acked_at": "2024-01-15T10:30:44.625Z",
  "handled_at": "2024-01-15T10:30:44.648Z",
  "server": {
    "id": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
    "name": "web-server-01"
  },
  "requested_by": {
    "id": 1,
    "username": "admin",
    "email": "admin@example.com"
  }
}

명령어 취소

아직 서버로 전달되지 않은 명령어(delivered_at이 null)만 취소할 수 있습니다.

DELETE /api/events/commands/{command_id}/

경로 파라미터

파라미터타입설명
command_idUUID취소할 명령어 ID

응답

204 No Content

명령어 상태

각 명령어는 다음 타임스탬프를 순서대로 거칩니다:

필드설명
added_at명령어 생성 시각
scheduled_at예약 실행 시각
delivered_at서버로 전달된 시각
acked_at서버가 수신을 확인하고 실행을 시작한 시각
handled_at실행 완료 시각

status 객체는 text, color, cancellable, message 필드로 사람이 읽을 수 있는 상태 요약을 제공합니다.

오류 코드

상태오류 코드설명
400INVALID_COMMAND유효하지 않은 명령어
403API_TOKEN_ACL_NOT_ALLOWED토큰 ACL에 의해 명령어가 허용되지 않음
404COMMAND_NOT_FOUND명령어를 찾을 수 없음
409EVENT_COMMAND_ALREADY_SENT취소 불가 (이미 서버로 전달됨)
503SERVER_NOT_CONNECTED서버가 오프라인 상태