과거 버전 복원¶
POST /api/v1/pipeline_history/{pipeline_history_uuid}/restore
개요¶
과거 구성을 복원합니다. configVersion은 현재 구성 버전 번호이며, 만료된 경우 409를 반환합니다. 사전 테스트는 필요하지 않지만 이름과 source 충돌 시에는 여전히 오류가 보고됩니다. isForce는 기본 Pipeline 대체를 확인하는 용도로만 사용됩니다.
경로 파라미터¶
| 파라미터명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| pipeline_history_uuid | string | Y | 과거 목록 historyRecord[].uuid가 반환하는 과거 UUID로, Pipeline UUID나 숫자 id가 아닙니다. |
본문 요청 파라미터¶
| 파라미터명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| configVersion | integer | Y | 호출 전에 현재 Pipeline 상세 또는 과거 목록 첫 화면에서 읽어온 configVersion으로, 정수이며 1 이상이어야 합니다. 대상 과거 버전 번호가 아닙니다. 동시 수정을 감지하는 데 사용되며, 만료된 경우 409를 반환합니다. 빈 값 허용: False $minValue: 1 |
| isForce | boolean | 기본 Pipeline으로 복원할 때 기존 기본 Pipeline을 대체할지 확인하는 여부입니다. 빈 값 허용: False |
파라미터 추가 설명¶
지정된 과거 구성을 원래 Pipeline에 덮어씁니다. 이 작업은 고객 리소스 구성을 변경하므로, 먼저 대상 과거 상세 정보를 읽고 확인하십시오.
권장 호출 절차¶
- 현재 Pipeline 상세 또는 과거 목록 첫 화면을 조회하여 현재 configVersion을 가져옵니다.
- 과거 목록에서 대상 uuid를 선택하고 과거 상세 정보를 읽어 구성을 확인합니다.
- 현재 configVersion을 요청 본문에 넣고 대상 과거 uuid의 restore를 호출합니다.
- 성공 후 응답의 configVersion과 구성을 기준으로 로컬 캐시를 새로고침합니다.
예를 들어 현재 버전이 3이고 대상 과거 버전이 1이라면, 요청 본문에는 1이 아닌 {"configVersion":3}을 전달해야 합니다. 성공하고 구성이 실제로 변경되면 원래 현재 구성을 보관하고 새로운 현재 버전(예: 4)을 생성합니다. 현재 버전 번호를 1로 되돌리지 않으며, 대상 과거 스냅샷도 수정하지 않습니다. 복원 내용에는 활성화/비활성화 상태가 포함되지 않으므로 사전에 테스트를 실행할 필요가 없습니다. 대상 구성이 현재 구성과 동일하면 새 버전을 생성하지 않습니다.
충돌 및 확인¶
- HTTP 409 / ft.PipelineConfigVersionConflict: 현재 구성이 다른 호출에 의해 수정되었습니다. 덮어쓰기를 중지하고 최신 구성을 다시 읽어 비교한 후, 호출 측 확인을 거쳐 다시 제출하십시오. 새 버전 번호로 자동 재시도하지 마십시오.
- ft.PipelineSourceExists: 과거의 source가 다른 Pipeline에 이미 사용 중입니다. 충돌을 해결한 후 복원하십시오. isForce=true는 source 또는 버전 충돌을 우회할 수 없습니다.
- 기본 Pipeline으로 복원할 때 기존 기본 항목과 충돌하고 확인되지 않은 경우, 성공 응답의 content.confirm(예: {"confirm":["logging"]})이 반환될 수 있습니다. 이는 확인 안내일 뿐이며 복원이 완료되었음을 의미하지 않습니다. 호출 측이 확인한 후 isForce=true와 여전히 유효한 configVersion을 포함하여 다시 호출하십시오.
- 시간 초과 또는 연결이 끊기면 쓰기 결과를 알 수 없을 수 있습니다. 먼저 현재 구성과 버전을 조회한 후, 무조건 반복해서 쓰지 마십시오.
사용 전제 조건¶
소속 워크스페이스의 DF-API-KEY를 사용하여 OpenAPI 서비스를 호출합니다. 조회에는 읽기 권한이 필요하며, 복원 및 복제에는 Pipeline 관리 및 쓰기 권한이 필요합니다. 이 인터페이스는 요청 본문으로 다른 워크스페이스나 작업자를 지정할 수 없습니다. 예시의 Endpoint, 리소스 UUID, API-Key는 모두 플레이스홀더이므로 교체한 후 호출하고, 로그에 API Key를 출력하지 마십시오.
응답 예시는 가상의 리소스를 사용하여 일반적인 비즈니스 필드를 보여줍니다. 실제 응답에는 일반 Pipeline 인터페이스의 다른 필드가 포함될 수 있습니다. 호출 측은 새로 추가된 필드와 호환되어야 합니다.
버전 필드¶
| 필드 | 의미 |
|---|---|
| configVersion | 구성 버전 번호이며, 새 리소스는 1부터 시작합니다. 활성화/비활성화 시 이 버전이 증가하지 않습니다. |
| configVersionAt | 이 구성 버전의 생성 시간으로, Unix 초 단위 타임스탬프이며 밀리초가 아닙니다. |
| configVersionOperator / configVersionOperatorInfo | 작업자 식별자 및 표시 정보입니다. 표시 정보를 해석할 수 없는 경우 빈 객체일 수 있습니다. |
| configVersionSource / configVersionAction | 버전 출처 및 작업(예: openapi/modify, history/history_restore)입니다. |
| configVersionSourceInfo | 출처 추가 정보입니다. 과거 작업에는 pipelineHistoryUUID, pipelineUUID, configVersion이 포함됩니다. |
| createAt | 과거 스냅샷 보관 시간으로, configVersionAt보다 늦을 수 있습니다. 과거 목록 보존 기간은 이 필드를 기준으로 계산됩니다. |
과거 config.content와 config.testData는 Base64 인코딩 문자열입니다. 호출 측은 먼저 Base64 디코딩한 후 UTF-8로 읽어야 합니다. testData는 테스트 샘플이며, 조회 또는 복원 인터페이스를 통해 자동으로 실행되지 않습니다. configVersionSourceInfo의 출처 버전 번호를 현재 버전 번호로 간주하지 마십시오.
응답 설명¶
성공적으로 쓰인 content는 일반 수정 인터페이스의 Pipeline 객체를 따르며, uuid, 구성 필드 및 버전 메타데이터를 포함합니다. 확인 분기의 content에는 confirm만 포함됩니다. 리소스가 삭제되었거나 과거 이력이 정리되었거나 권한이 없는 경우 복원이 수행되지 않습니다.
요청 예시¶
curl -X POST 'https://openapi.guance.com/api/v1/pipeline_history/<pipeline_history_uuid>/restore' -H 'DF-API-KEY: <API-Key>' -H 'Content-Type: application/json' -d '{"configVersion":3,"isForce":false}'
응답¶
{
"code": 200,
"content": {
"name": "demo",
"type": "local",
"category": "logging",
"source": [
"nginx"
],
"content": "YWRkX2tleShjaXR5LCAic2hhbmdoYWkiKQ==",
"testData": "W10=",
"dataType": "line_protocol",
"asDefault": 0,
"enableByLogBackup": 0,
"extend": {},
"id": 10,
"uuid": "pl_example",
"workspaceUUID": "wksp_example",
"status": 0,
"creator": "acnt_example",
"updator": "acnt_example",
"createAt": 1788799900,
"updateAt": 1788800200,
"deleteAt": -1,
"configVersion": 4,
"configVersionAt": 1788800200,
"configVersionOperator": "acnt_example",
"configVersionSource": "history",
"configVersionAction": "history_restore",
"configVersionSourceInfo": {
"pipelineHistoryUUID": "plh_example",
"pipelineUUID": "pl_example",
"configVersion": 2
}
},
"errorCode": "",
"message": "",
"success": true,
"traceId": "TRACE_EXAMPLE"
}