Skip to content

Scenario Library KO

elecbug edited this page Oct 7, 2026 · 9 revisions

시나리오 라이브러리

Wiki home › 한국어 문서 · 영어 원문

문서 안내 · 소스 저장소

대시보드는 재사용할 검증된 YAML 시나리오를 Controller에 저장합니다. 라이브러리와 실험 결과는 서로 독립적입니다. 시나리오 저장만으로 실행되지 않고 편집한 YAML을 실행해도 자동 저장되지 않으며, 어느 한쪽을 삭제해도 다른 쪽은 삭제되지 않습니다.

대시보드에서 사용하기

  1. Run experiment을 엽니다. 현재 Controller에서 Saved scenarios 목록을 불러옵니다.
  2. + New를 누르고 알아보기 쉬운 Saved scenario name을 입력한 뒤 YAML을 편집합니다.
  3. Save scenario를 누릅니다. 새 항목이 선택된 저장 시나리오가 됩니다.
  4. 목록에서 시나리오 이름(Load →)을 누르면 해당 이름과 YAML로 편집기 내용을 교체합니다. 선택한 항목은 Editing 표시와 함께 강조됩니다.
  5. 이름 또는 YAML을 편집하고 Save changes를 누르면 선택한 항목을 갱신합니다. 원본을 유지한 채 새 항목을 만들려면 Save as new를 누릅니다.
  6. 휴지통 아이콘과 Confirm delete를 차례로 눌러 항목을 삭제합니다. Cancel을 누르면 삭제를 취소합니다. 새로고침 아이콘은 Controller에서 목록을 다시 읽습니다.

디바이스의 파일을 추가하려면 Scenario editor 헤더의 Choose files를 누릅니다. 모바일에서는 먼저 + New 또는 Editor를 엽니다. UTF-8 .yaml 또는 .yml 파일을 선택하며, 파일마다 1 MiB 이하이고 한 번에 최대 100개·총 16 MiB까지 지원합니다. 저장 이름은 마지막 확장자를 뺀 파일명입니다. 예를 들어 mesh.er.yaml은 mesh.er가 됩니다. YAML 최상위 name은 바꾸지 않습니다.

  • 한 파일: 내용이 새 미저장 초안으로 들어갑니다. 이름과 YAML을 검토하고 Validate로 확인한 뒤 Save scenario로 저장합니다.
  • 여러 파일: 현재 편집 초안을 보존한 채 파일별 저장 이름과 상태를 검토 목록에 표시합니다. 제외할 파일의 체크를 해제하고 Import selected를 누르면 선택한 파일을 차례로 검증·저장합니다. 빈 파일, 읽기 실패, 잘못된 UTF-8, 크기 초과, 선택 목록 안의 저장 이름 중복은 파일별로 표시합니다. Cancel 또는 Done을 누르면 보존한 초안으로 돌아갑니다.

파일 선택만으로 저장하거나 실행하지 않습니다. 가져오는 중 Stop after current를 누르면 현재 요청을 마친 뒤 멈추고 나머지 파일을 검토 목록에 남깁니다. 저장 중 편집기를 닫아도 같은 방식으로 멈추며 다시 열면 검토 목록과 저장이 확인된 상태를 유지합니다. 최초 디바이스 읽기 중 닫으면 초안을 바꾸지 않고 읽기를 취소합니다. 이미 저장한 파일은 재시도에서 제외합니다. 그룹 할당만 실패한 경우 Import selected는 시나리오를 다시 생성하지 않고 할당만 재시도합니다. Status unknown은 서버가 이미 저장했을 수 있다는 뜻으로, 처리를 멈추며 해당 검토 목록에서는 그 파일을 재시도할 수 없습니다. 검토를 닫고 저장 목록을 새로고침하여 저장 여부를 확인한 뒤 필요한 파일만 다시 선택하십시오.

PC에서는 목록과 편집기를 나란히 표시합니다. 모바일에서는 Saved scenarios와 Editor를 전환하며, 항목을 불러오면 키보드를 자동으로 열지 않고 편집 화면으로 이동합니다. 실행 버튼은 어느 화면에서나 하단에 유지됩니다. 이름이나 ID로 검색하면 현재 편집 내용과 최근 수정 순서를 유지하면서 목록을 필터링하고 일치하는 항목 수를 표시합니다. 검색을 지우면 전체 목록을 다시 볼 수 있습니다.

New는 편집기를 기본 예제로 초기화하고 선택한 저장 항목을 해제합니다. 다른 항목을 불러오거나 한 파일을 선택하거나 새 항목을 시작하면 저장하지 않은 편집 내용은 복구 사본 없이 교체됩니다. 여러 파일 검토는 초안을 보존하고 편집기 제목 영역과 실행 설정을 숨겨 파일 목록 공간을 확보합니다. Cancel 또는 Done을 누르면 다시 표시합니다. Run은 저장 여부와 관계없이 편집기에 있는 YAML을 실행하며 1~100회 반복할 수 있습니다.

이름은 앞뒤 공백을 제거한 뒤 검사하며 필수이고, Unicode 128자 이하이며 제어 문자를 포함할 수 없습니다. YAML도 필수이며 1 MiB 이하이고 저장 전에 일반 시나리오 검증을 통과해야 합니다. 이름은 중복될 수 있으며 각 항목에는 별도의 생성 ID가 부여됩니다. 목록은 최근 수정 순으로 정렬합니다.

라이브러리 이름과 YAML 최상위 name은 독립적입니다. 전자는 저장한 편집기 입력을 구분하고 후자는 실험 run의 이름으로 사용합니다. 저장은 시나리오 schema를 검증하며 Agent 용량 예약이나 Docker, 커널 지원, 연결성 검사는 수행하지 않습니다.

선택한 시나리오 다운로드

Saved scenarios에서 Select를 누르고 항목을 선택한 뒤 Download ZIP을 누릅니다. Select visible은 현재 그룹·검색 조건에 맞는 항목을 선택합니다. ZIP에는 저장된 YAML을 그대로 담은 <저장 시나리오 이름>.yaml이 항목별로 들어갑니다. 저장하지 않은 편집 내용은 제외합니다. 파일명은 Unicode를 유지하고 사용할 수 없는 문자를 치환하며, 긴 이름을 줄이고 중복 이름에 숫자 접미사를 붙입니다. 압축을 푼 YAML 파일은 Choose files로 다시 가져올 수 있습니다. 그룹 소속은 YAML 내보내기에 포함하지 않습니다.

준비 과정과 다운로드 한도는 일괄 다운로드 API를 참고하십시오.

공유 그룹

Saved scenarios와 Saved results는 같은 그룹을 사용합니다. 현재 페이지에서 Group 필터도 공유하므로 한쪽에서 그룹을 선택하면 다른 쪽에도 적용합니다. All groups는 모든 그룹을, Ungrouped는 그룹에 속하지 않은 항목을 표시합니다. 검색과 결과 상태 필터는 표시 범위를 추가로 좁힙니다.

  1. Groups에서 이름을 입력하고 Create로 그룹을 만듭니다. 그룹의 Edit에서 이름을 바꾸거나 Delete group을 누르고 확인하여 삭제합니다.
  2. 어느 목록에서든 Select를 누르면 선택 체크박스가 나타납니다. 개별 항목을 선택하거나 Select visible을 사용합니다. 전체 선택 범위는 현재 그룹·검색·결과 상태 필터를 따릅니다.
  3. 대상 그룹을 고르고 Move로 이동합니다. Ungrouped를 고르면 그룹 소속을 해제합니다. Clear는 선택을 지우고 Done은 선택 모드를 종료합니다.

각 저장 시나리오와 결과 묶음은 최대 한 그룹에 속합니다. 반복 실험은 이전 시도·재시도·나중에 추가한 회차를 포함한 배치 전체가 하나의 결과 묶음이며, 단독 run도 하나의 결과 묶음입니다. 배치를 이동하면 해당 run들이 함께 이동합니다. Delete group은 그룹을 지우고 저장 시나리오와 결과를 Ungrouped에 남깁니다. 결과 작업의 Delete batch는 확인 후 해당 배치의 저장 결과를 삭제합니다.

Save as new를 포함한 새 시나리오 저장은 저장을 시작할 때 선택한 그룹을 사용합니다. 여러 파일 가져오기는 검토를 열 때 그룹을 고정하고 목록 위에 표시하므로 이후 필터를 바꿔도 가져올 대상 그룹은 바뀌지 않습니다. All groups와 Ungrouped에서는 그룹 없는 시나리오를 만듭니다. 기존 시나리오의 Save changes는 소속을 유지합니다.

저장 시나리오를 선택해 실행하면 새 결과는 서버에서 확인한 해당 시나리오의 현재 그룹에 자동으로 들어갑니다. 편집기에 저장하지 않은 변경이 있어도 같습니다. Run은 편집기의 YAML을 실행하고, 선택한 저장 항목은 그룹을 찾는 데 사용합니다. 한 번만 실행하는 경우와 전체 반복 회차 모두 새 실행 접수 시 그룹을 상속합니다. 그룹 없는 저장 시나리오나 새 미저장 입력의 결과는 현재 필터와 관계없이 Ungrouped가 됩니다. 접수 후 Dashboard가 그룹 소속을 새로고침하여 결과를 해당 그룹에 표시합니다.

이후 원본 시나리오를 이동하거나 삭제해도 기존 결과의 그룹은 바뀌지 않습니다. Select → Move로 옮긴 결과는 재시도·이어하기·추가 실행에서도 선택한 그룹을 유지합니다. 이 작업들은 기존 결과 묶음의 소속을 그대로 사용합니다. 그룹 조회나 저장에 실패하면 새 실행을 시작하지 않습니다. 표시된 오류를 해결한 뒤 다시 제출하십시오.

그룹과 소속은 다른 사용자와 공유하며 로컬 <data-dir>/library-groups.json에 저장되어 Controller 재시작 후에도 유지됩니다. 이 파일을 Controller 백업에 포함하십시오. 다른 브라우저의 변경은 목록 새로고침 또는 Groups → Refresh로 불러옵니다. 동시 수정 충돌 시 현재 그룹을 다시 읽고 검토한 뒤 재시도하며, 저장 여부가 불확실한 경우 먼저 새로고침해야 합니다. 그룹 이름·한도·API 규약은 공통 라이브러리 그룹 API에 정의되어 있습니다.

작성 중인 시나리오 검증

YAML scenario 옆의 Validate를 누르면 저장·실행과 같은 파서로 현재 내용을 검증합니다. 작성 칸 아래 패널에 성공 시 시나리오 이름과 phase 개수를, 실패 시 오류 원인을 표시합니다. YAML 파서가 제공하면 줄 번호도 표시하며 설정 오류에는 관련 필드나 phase가 포함됩니다. 긴 오류는 스크롤하거나 복사할 수 있습니다.

검증은 로그인 세션을 사용하며 저장용 이름이 필요 없고 저장·실행도 하지 않습니다. YAML은 한 문서여야 하고 1 MiB 이하여야 합니다. YAML 수정, New, 한 파일 선택, 다른 시나리오 불러오기는 이전 결과를 지우며 예전 입력에 대한 늦은 응답은 무시합니다. 여러 파일 검토는 기존 초안과 검증 상태를 보존합니다. 요청·네트워크 실패와 잘못된 YAML은 구분해서 표시합니다. 검증 성공이 Agent 용량, Docker 지원이나 실행 시 연결성까지 확인한 것은 아닙니다.

예상 종료 시각

실시간 진행 예측과 불확실성은 실행 예상 종료 시각을 참고하십시오.

REST API

요청 본문, 응답, 제한과 curl 예제는 시나리오 라이브러리 API에 있습니다.

저장과 백업

각 항목은 <data-dir>/scenarios 아래의 개별 JSON 파일에 저장됩니다. Swarm은 Controller 영구 데이터 볼륨을 /var/lib/kpl/data에 마운트하므로 일반적인 서비스 재시작과 scripts/swarm.sh remove 후에도 라이브러리를 보존합니다. 시나리오 라이브러리와 실험 결과를 함께 보존하려면 Controller 데이터 디렉터리 전체를 백업하십시오. 라이브러리는 해당 Controller에만 있으며 control node 사이에 복제되지 않습니다.

Controller는 임시 파일과 원자적 파일시스템 연산으로 각 항목을 기록합니다. 목록 또는 항목을 읽을 때 형식이 잘못되거나 예상하지 않은 내용이 있으면 부분적으로 신뢰한 시나리오를 반환하지 않고 오류로 처리합니다.

저장, payload 한도와 검증은 internal/controller/scenarios.go, 편집기 사용 흐름은 internal/webui/static/app.js에 구현되어 있습니다.

Clone this wiki locally