에이전트 업그레이드

엔드포인트: /api/servers/servers/{server_id}/agent-upgrades/, /api/servers/agent-upgrades/

워크스페이스의 에이전트 업데이트 정책에 따라 시작된 자동 업그레이드와 에이전트 카드 또는 upgrade_agent 작업으로 시작된 수동 업그레이드 기록을 모두 조회합니다. 콘솔의 업그레이드 이력에도 같은 기록이 표시됩니다.

두 엔드포인트는 읽기 전용입니다. 서버 목록과 마찬가지로 호출자가 볼 수 있는 서버의 기록만 반환하며, API 토큰에는 server:read 범위가 필요합니다. 업그레이드 이력 기능이 도입된 뒤의 기록만 포함되며 이전 업그레이드는 포함되지 않습니다.

서버별 업그레이드 목록

서버 한 대의 에이전트 업그레이드를 최신순으로 조회합니다.

요청

GET /api/servers/servers/{server_id}/agent-upgrades/

경로 매개변수

매개변수유형필수 여부설명
server_idUUID예서버 ID

쿼리 매개변수

매개변수유형설명
page정수페이지 번호
page_size정수페이지당 결과 수(기본값: 15, 최대: 100)

호출자가 볼 수 없는 서버를 요청하면 404가 반환됩니다.

응답

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "3b1f6f0e-8a52-4c1d-9d6e-5f2a7c9e1b40",
      "server": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
      "server_name": "web-server-01",
      "from_version": "1.4.2",
      "target_version": "1.5.0",
      "to_version": "1.5.0",
      "outcome": "success",
      "error_class": null,
      "detail": null,
      "requested_at": "2026-09-21T02:14:05Z",
      "acknowledged_at": "2026-09-21T02:14:07Z",
      "reported_at": "2026-09-21T02:19:40Z",
      "origin": "scheduled",
      "policy_mode": "latest",
      "initiator": {
        "kind": "policy",
        "id": null,
        "label": "Alpacon automatic policy (latest)"
      }
    },
    {
      "id": "a0c4d2b7-19e3-4f56-8b0a-2d7e6c1f9a33",
      "server": "7e3984de-49ab-4cc6-bcdf-21fbd35858b8",
      "server_name": "web-server-01",
      "from_version": "1.4.1",
      "target_version": null,
      "to_version": "1.4.1",
      "outcome": "failed",
      "error_class": "download_failed",
      "detail": null,
      "requested_at": "2026-09-14T09:30:12Z",
      "acknowledged_at": "2026-09-14T09:30:13Z",
      "reported_at": "2026-09-14T09:31:02Z",
      "origin": "manual",
      "policy_mode": null,
      "initiator": {
        "kind": "user",
        "id": "a540bf0f-8b37-4f03-8546-dd71c6b03329",
        "label": "admin"
      }
    }
  ]
}

각 필드의 의미는 필드를 참고하세요.

예시

curl -X GET "https://your-workspace.ap1.alpacon.io/api/servers/servers/7e3984de-49ab-4cc6-bcdf-21fbd35858b8/agent-upgrades/" \
  -H "Authorization: token=\"alpat-xxxxxxxxxxxxxxxxxx\""

필드

필드유형설명
idUUID업그레이드 기록 ID
serverUUID서버 ID
server_name문자열서버 이름
from_version문자열 또는 null업그레이드 전 에이전트 버전
target_version문자열 또는 null에이전트에 설치를 요청한 릴리스. 특정 릴리스 대신 최신 버전으로 업그레이드하라는 일반 요청을 보냈다면 null
to_version문자열 또는 null업그레이드 후 에이전트 버전. 에이전트가 결과를 보고하기 전까지는 null
outcome문자열pending(진행 중), success(성공), rolled_back(새 버전이 정상적으로 시작되지 않아 에이전트가 이전 버전으로 돌아감), failed(실패), timed_out(에이전트가 제때 확인하지 않음), refused(에이전트에 전달되기 전에 요청이 철회됨)
error_class문자열 또는 null업그레이드가 적용되지 않은 이유. 오류가 없으면 null
detail문자열 또는 null업그레이드가 거부된 이유 등 Alpacon이 제공하는 간단한 설명
requested_at날짜·시간업그레이드를 요청한 시각
acknowledged_at날짜·시간 또는 null에이전트가 업그레이드를 받은 시각
reported_at날짜·시간 또는 null에이전트가 결과를 보고한 시각
origin문자열자동 업그레이드는 scheduled, 멤버나 토큰이 시작한 업그레이드는 manual
policy_mode문자열 또는 null자동 업그레이드에 적용된 업데이트 정책(latest 또는 n_minus_1). 수동 업그레이드는 null
initiator객체업그레이드를 시작한 주체(아래 참고)

initiator는 업그레이드 요청 시점에 저장한 정보이므로, 멤버나 토큰이 삭제된 뒤에도 이름이 남습니다.

필드유형설명
kind문자열자동 업그레이드는 policy, 수동 업그레이드는 user 또는 token
id문자열 또는 null사용자 또는 토큰 ID. policy이면 null
label문자열업그레이드를 시작한 주체의 이름: 멤버의 사용자 이름, 토큰 이름 또는 Alpacon automatic policy (latest)(n_minus_1 정책에서는 (N-1)). 한국어로 요청하면 Alpacon 자동 정책 (latest)

error_class 값과 콘솔에 표시되는 이름은 다음과 같습니다.

값콘솔 표시 이름의미
signature_invalid서명 불일치릴리스의 서명을 검증하지 못해 에이전트가 설치하지 않음
digest_mismatch다이제스트 불일치다운로드한 패키지가 게시된 체크섬과 일치하지 않음
download_failed다운로드 실패에이전트가 릴리스를 다운로드하지 못함
swap_failed교체 실패에이전트가 바이너리를 새 버전으로 교체하지 못함
health_check_failed상태 확인 실패새 버전이 상태 확인을 통과하지 못함
package_manager패키지 관리자 오류시스템 패키지 관리자에서 오류가 발생함
window_closed시간대 종료업그레이드가 에이전트에 도달하기 전에 유지보수 시간대가 닫힘
keys_unavailableAlpacon 설정 문제로 조치할 필요 없어요Alpacon 측 문제로 서버에서 변경할 사항이 없으며 알림도 발생하지 않음
unknown알 수 없음원인을 알 수 없는 실패

업그레이드가 실패하거나 롤백되면 keys_unavailable을 제외하고 서버에 경고 업그레이드 실패 알림이 발생합니다. 각 업그레이드는 전송 시점과 종료 시점에 활동 로그에도 기록됩니다.

오류 응답

상태오류 코드설명
401—인증 정보가 잘못되었거나 없음. 오류 코드 없이 {"detail": "..."} 응답이 반환됨
403api_token_scope_missingAPI 토큰에 server:read 범위가 없음
404—서버를 찾을 수 없거나 호출자에게 보이지 않음. 오류 코드 없이 {"detail": "..."} 응답이 반환됨
최종 수정: