ApplicationSet Web UI

ApplicationSet Web UI

Argo CD 웹 UI는 ApplicationSet 리소스를 조회·미리보기(preview)할 수 있어요. UI는 ApplicationSetService API, ApplicationSet CR, 그리고 API 서버의 RBAC 강제라는 세 계층으로 ApplicationSet과 통합돼요. UI에서 실제 쓰는 API 엔드포인트와 RBAC 동작 방식을 설명해요.

출처: 문서

본문

UI 자체의 최종 사용자 문서는 Web UI에서 ApplicationSet 관리를 참고하세요.

Web UI는 세 계층을 통해 ApplicationSet과 통합돼요.

  1. ApplicationSetService API — Argo CD API 서버가 노출하는 API(server/applicationset/applicationset.proto에 정의).
  2. ApplicationSet CR — 이 엔드포인트들을 통해 읽음. UI는 spec과 status 양쪽의 필드를 렌더링해요 — spec.template, status.conditions, status.resources, status.health.
  3. RBAC 강제 — API 서버가 모든 요청에 대해 CLI가 사용하는 것과 같은 applicationsets 리소스와 액션을 사용해 수행.

API 엔드포인트

Web UI는 다음 엔드포인트를 사용해요. 모든 호출에 RBAC가 강제되며, 세 번째 열은 검사되는 액션을 보여줘요.

엔드포인트 UI 사용처 강제되는 RBAC 액션
GET /api/v1/applicationsets 목록 페이지(/applicationsets) applicationsets, get (항목별)
GET /api/v1/applicationsets/{name} 상세 페이지 헤더와 슬라이드아웃 요약 applicationsets, get
GET /api/v1/applicationsets/{name}/resource-tree 리소스 트리 시각화 applicationsets, get
GET /api/v1/applicationsets/{name}/events 슬라이드아웃 패널의 Events 탭 applicationsets, get
GET /api/v1/stream/applicationsets 목록·상세 페이지의 실시간 업데이트 applicationsets, get (이벤트별)
POST /api/v1/applicationsets/generate Preview 탭 applicationsets, create

RBAC

ApplicationSet RBAC 객체는 템플릿의 대상 Application 프로젝트 — 즉 Spec.Template.Spec.Project — 와 ApplicationSet의 네임스페이스·이름으로 스코프가 지정돼요. 이는 CLI와 직접 API 클라이언트가 보는 것과 같은 스코핑이며, UI는 이를 그대로 상속해요.

읽기 경로 (Read paths)

위에 나열된 모든 읽기 엔드포인트(Get, List, ResourceTree, ListResourceEvents, Watch)는 각 ApplicationSet을 반환하기 전에 applicationsets, get을 검사해요. ListWatch는 결과 집합을 항목별로 필터링하므로, 사용자는 get 권한이 있는 ApplicationSet만 볼 수 있어요.

사용자가 어떤 ApplicationSet에 get 권한이 있으면, UI의 모든 읽기 뷰(목록 페이지, 상세 페이지, 리소스 트리, 이벤트 탭, 실시간 watch 스트림)에서 그것을 볼 수 있어요.

미리보기 (Preview)

Preview 탭은 get보다 더 많은 권한을 요구하는 유일한 작업이에요. 이것은 Generate를 호출하며, 서버 측에서 (사용자가 편집했을 수도 있는) ApplicationSet 스펙으로부터 후보 Application들을 렌더링해요. 미리보기 렌더링은 컨트롤러가 Application을 만들 때 수행하는 것과 같은 연산이므로, API 서버는 템플릿의 프로젝트에 대해 applicationsets, create 를 강제해요 — 이는 렌더링된 Application을 실제로 생성하는 데 필요한 것과 같은 권한이에요.

ApplicationSet을 볼 수 있지만 프로젝트 템플릿에 create 권한이 없는 사용자는 Preview 탭에서 권한 거부(permission-denied) 응답을 보게 돼요. ApplicationSet RBAC 모델 전체는 Security를 참고하세요.

ApplicationSet CR의 status.health

ApplicationSet 컨트롤러는 각 ApplicationSet에 status.health 필드(statusmessage 포함)를 작성하며, 이는 ApplicationSet의 status.conditions에서 계산돼요. UI는 이 필드를 일반적인 Get, List, Watch 엔드포인트를 통해 읽으며, 별도의 health 평가 API 호출은 없어요.

컨트롤러가 적용하는 규칙은 순서대로 다음과 같아요.

  1. status.conditions가 비어 있으면 → Unknown ("No status conditions found for ApplicationSet").
  2. ErrorOccurred 조건이 status: True이면 → Degraded, 그 조건의 메시지 포함.
  3. 그렇지 않고 RolloutProgressing 조건이 status: True이면 → Progressing, 그 조건의 메시지 포함.
  4. 그렇지 않고 ResourcesUpToDate 조건이 status: True이면 → Healthy, 그 조건의 메시지 포함.
  5. 그 외 → Unknown ("Waiting for health status to be determined").

더 알아보기 (Learn more)