Skip to content

docs: README 설치 섹션 재작성 — mc-admin-cli 통합설치 안내 + canonical 메뉴 소스 명시 - #100

Closed
MZC-CSC wants to merge 224 commits into
m-cmp:developfrom
MZC-CSC:chore-readme-installer-menu-source
Closed

MZC-CSC wants to merge 224 commits into
m-cmp:developfrom
MZC-CSC:chore-readme-installer-menu-source

Conversation

@MZC-CSC

@MZC-CSC MZC-CSC commented Sep 2, 2026

Copy link
Copy Markdown
Member

Summary

  • 존재하지 않는 env 변수명(MCIAMMANAGER/MCINFRAMANAGER), 낡은 버전 핀(mc-iam-manager v0.2.0), 잘못된 진입점(go run ./cmd) 등 현재 코드와 맞지 않는 독립 docker-compose 설치 절차를 제거
  • 1차 권장 설치 경로로 mc-admin-cli installAll.sh(플랫폼 전체 통합 설치) 안내
  • 로컬 개발 경로는 CLAUDE.md에 정리된 실제 구조(front/api 분리 서버, conf/.env, conf/api.yaml)를 기준으로 재작성
  • conf/webconsole_menu_resources.yaml이 플랫폼 전체 메뉴 카탈로그의 canonical source라는 점과 mc-iam-manager와의 관계(MC_WEB_CONSOLE_MENUYAML) 명시

Test plan

  • grep -n "MCIAMMANAGER\|MCINFRAMANAGER\|5005\|v0.2.0\|go run ./cmd" README.md → 0건
  • 문서에 언급된 실제 진입점(api/cmd/main.go, front/cmd/app/main.go) 존재 확인
  • 리뷰어가 README 링크(CLAUDE.md, mc-admin-cli README) 육안 확인

yh-noh and others added 30 commits June 22, 2026 16:02
Move legacy manual test docs from doc/test to doc/mc-web-console-test,
add Playwright E2E test reference under doc/playwright-test, and remove
obsolete monitoring test docs from docs/test.

Co-authored-by: Cursor <cursoragent@cursor.com>
[chore]: Reorganize test documentation under doc and docs
Consolidate doc/ and docs/ under a single docs/ tree with role-based
subfolders, replace Swagger UI vendor bundles with CDN, and add e2e-snapshot
sync script for mcmp-e2e/deploy mirror.

Co-authored-by: Cursor <cursoragent@cursor.com>
Remove mc-web-console sync script; document mcmp-e2e as sync source.
Add swag annotations to API handlers, generate-swagger.sh, and update
docs/api/swagger.json from current Echo routes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Schedule refresh from JWT exp minus buffer on login and authenticated pages so idle sessions stay valid without waiting for API 401.
Replace JWT exp-based scheduling that retried every 30s with 5-minute setInterval, throttle duplicate refresh calls, and limit reactive refresh to 401 only.
[fix]: Use 5-minute interval for proactive token refresh
cb-tumblebug GetInfra API 응답 노드 객체에는 subGroupId 필드가 없고
nodeGroupId만 존재하여 groupBySubGroup()이 모든 VM을 "undefined" 키로
그룹핑하던 문제 수정.

- groupBySubGroup(): vm.subGroupId → vm.nodeGroupId
- vmDetailInfo(): aVm.subGroupId → aVm.nodeGroupId

Fixes: WEB-BUG-017
- vmDelete: pathParam vmId → nodeId (RegistryCache 경로변수 일치)
- postScaleOutSubGroup: pathParam subgroupId → nodegroupId, async fire-and-forget 전환
- cspimport_api: DeregisterMciVm → DeregisterInfraNode, pathParam 맞춤
- pmk_api: Getavailablek8sclusterversion → GetAvailableK8sVersion, Getavailablek8sclusternodeimage → GetAvailableK8sNodeImage
- clustercreate: K8s 버전 조회 시 regionName 프리픽스([CSP]) 제거 후 전달
- deleteMci/deleteVm: 삭제 요청 전 선택 상태 즉시 초기화하여 삭제된 리소스 재조회 방지
fix: deploy 시 expert mode 등 버그 수정
- region/zone: API 응답 소문자 키(region.region, region.zone)로 수정 (기존 Region/Zone 대문자 오류)
- Platform: addtionalDetails Architecture 키 대신 image.osType/osArchitecture 사용 (NHN/NCP/Alibaba 미존재 대응)
- Root Device: data.RootDeviceName(대문자) 필드로 수정, 하위호환 소문자 폴백 유지
- Access Id/Pwd: vmUserName undefined 시 '-' 표시 (기존 "undefined/ ***" 방지)
- User Id/Pwd: vmUserAccount → nodeUserName 필드 사용, 없을 시 '-' 표시
- vmDetailInfo(), subGroup_vmDetailInfo() 동일하게 적용 (2개 함수 모두 수정)
fix(pmk): Expert Creation Deploy 후 리다이렉트 URL 수정
…문자 수정

- desiredNodeSize/maxNodeSize/minNodeSize: string → int (parseInt)
- onAutoScaling: string '"false"' → boolean
- rootDiskSize: 빈 문자열 시 필드 제거 (tumblebug 400 방지)
- Request → request (소문자): CommonRequest json 태그와 일치
tumblebug이 onAutoScaling을 string('true'/'false')으로 기대하므로
boolean 변환 대신 String() 캐스팅으로 유지
- AutoScaling Off: min/max 셀렉트 disabled, 값 초기화, 요청 본문에서 제거
- AutoScaling On: min/max 셀렉트 활성화, 필수 입력 검증 후 전송
- Expert Creation (_clustercreate.html/clustercreate.js), Dynamic 폼 (pmkworkloads.html/pmk.js) 모두 적용
- Edit 모드 진입 시 기존 autoscaling 값에 따라 disabled 상태 반영
fix(pmk): PostK8sCluster 400 오류 수정 및 AutoScaling Off 시 min/max 비활성화
- docs/development/bug, docs/development/fix: 임시 개발 노트 삭제 (내용은 PR/커밋 히스토리로 대체)
- docs/e2e-snapshot: mcmp-e2e 레포로 이관 완료에 따라 mc-web-console에서 제거
refactor(docs): doc/docs 구조 통합 및 임시 파일 제거
cluster_provider_dynamic(Dynamic 모드)만 읽던 코드에
cluster_provider(Expert Creation 모드) fallback 추가
fix(pmk): Expert Creation Node Group Spec 팝업 Provider 미전달 버그 수정
…vmId→nodeId, subgroupId→nodegroupId)

front JS already uses infraId/nodeId/nodegroupId but api.yaml resourcePath
templates still had mciId/vmId/subgroupId, causing URL substitution to fail.
Updated 67 resourcePaths in mc-infra-manager section.
5개 iframe 플러그인 파일(observability, datamanager, softwaremanager,
workflowmanager, costoptimizer)의 코드 구조를 동일한 형태로 통일.

- var → const 변환 (host, apiHost)
- 따옴표 스타일 single quote로 통일
- targetDiv 상단 캐싱 후 재사용
- addIframe 호출 전 targetDiv.innerHTML = '' 초기화 추가
- change 핸들러에 setCurrentProject 통일 (observability에 추가)
- 객체 키 unquoted 형태로 통일
- costoptimizer: 불필요한 console.log·주석 블록 제거
refactor(plugins): iframe 플러그인 JS 패턴 통일
`vmDynamic` was sending rootDiskSize and subGroupSize as raw strings
from the DOM, causing type errors in mc-infra-manager.
Apply the same parseInt conversion pattern used in mciDynamic.
- pmk.js: NodeGroup 미선택 시 CSP 하드코딩 대신 API 동적 조회로 변경
  (getAvailableK8sClusterVersion, getAvailablek8sClusterNodeImage)
- users.js: HTML commonModal 콜백용 deleteUser() export 및
  executeWithToast() 헬퍼 추가 (Delete 버튼 동작 복원)
- package.json: glob v7 → v11 업그레이드 (globSync API 호환성)
…ksize

fix(pmk,users): NodeGroup spec 동적 조회 및 deleteUser 복원
- NodeGroup 없는 경우: GetAvailableK8sVersion으로 K8s 버전 동적 조회 후 version 필드 설정
- NodeGroup 없는 경우: 불필요한 pre-validation(checkK8sClusterDynamic) 제거
- NodeGroup 없는 경우: GetAvailableK8sNodeImage 호출 제거 (UNDER DEVELOPMENT API)
- NodeGroup 없는 경우: CSP별 하드코딩 specId/imageId 제거 → imageId는 "default" 사용
- NodeGroup 있는 경우: pre-validation 유지
- pmk_api.js: getAvailablek8sClusterNodeImage await 누락 수정 및 반환값 통일
- desiredNodeSize/minNodeSize/maxNodeSize/rootDiskSize를 int로 변환 (tumblebug 타입 불일치 해소)
- createNode 검증을 name/specId/imageId 필수로 완화 (autoScaling OFF 시 min/maxNodeSize 없음)
- clustercreate.js에서 createNode await 추가 및 검증 실패 시 early return 처리
- RecommendK8sNode 실패 시 CSP별 default specId fallback 적용 (NodeGroup-less 배포용)
- Add Node 시 Spec Recommendation 팝업에서 선택된 클러스터의 provider 자동 필터링
  (selectedPmkObj fallback 추가 — cluster_provider_dynamic이 없는 경우 대응)
- Image Recommendation 팝업에 is Kubernetes Image 토글 추가 (기본 ON)
  K8s 이미지가 없을 때 OFF로 전환해 전체 이미지 재조회 가능
yh-noh and others added 27 commits August 26, 2026 14:13
PostInfra(비-dynamic)는 응답을 받을 때까지 블로킹되는 API라 mciDynamic()의
fire-and-forget 패턴을 그대로 쓰면 브라우저가 navigate와 함께 요청을 끊어
502가 발생했다. 최초에는 mciStatic()이 응답을 기다리도록 바꾸고 Deploy
버튼에 스피너를 다는 방식으로 우회했으나, 실제 원인은 front의
ASYNC_TRACK_OPERATION_IDS/api의 AsyncTrackOperationIDs 허용목록에
PostInfra/PostInfraNode가 없어 async-requests 추적 대상으로 등록되지
않았던 것이었다.

두 허용목록에 PostInfra/PostInfraNode를 추가하고, mciStatic()/
createMciStatic()을 mciDynamic()과 동일한 fire-and-forget + 즉시 navigate
패턴으로 되돌렸다. 완료 확인은 async_request_poller가 추적하는
async-requests 잡 상태로 한다. 더 이상 쓰지 않는 Deploy 버튼 스피너/
await/#mci_deploy_btn id는 제거했다.
…false

Load conf/webconsole_menu_resources.yaml at boot and answer
GetAllAvailableMenus locally without proxying to mc-iam-manager,
returning the full menu list with no role filtering.
feat: serve local menu list for GetAllAvailableMenus when USE_IAM is false
…ert-mode

# Conflicts:
#	api/internal/service/async_track.go
#	front/assets/js/common/api/requestId.js
feat: Create Infra Expert Mode 보완
exportMenus() 기본 파일명이 날짜 단위(menu-\${date}.json)로만 생성돼
같은 날 재export 시 충돌했다. 초 단위 타임스탬프 헬퍼로 통일하고,
conf/에 실수로 반입되는 export 산출물을 막는 gitignore 패턴을 추가했다.
메뉴 아이콘이 sidebar.js의 iconsArr에 id 기준으로만 하드코딩돼 있어
메뉴 추가 시 yaml 수정과 프론트 코드 배포가 모두 필요했다.

- 정본 yaml에 icon 필드 추가(approvals 항목), mc-iam-manager DB 스키마
  확장(icon 컬럼, 별도 PR #181 완료)에 맞춤
- sidebar.js: resolveMenuIcon() 헬퍼로 menu.icon 우선 조회, 없으면 기존
  id 기반 조회로 하위호환, 대응 메뉴 없는 죽은 키 single 제거
- 메뉴 관리 화면(Create/Edit 모달, 상세 패널)에 아이콘 선택 필드 추가
Add a platform-admin screen for managing mc-iam-manager projects across
all workspaces (list/create/edit/delete + workspace assignment), distinct
from the existing per-workspace embedded Projects tab which is unchanged.

Assignment goes through the workspace-side addProjectToWorkspace endpoint
instead of the project-side one, which always returns 500 despite the
underlying write succeeding. Register the getProjectWorkspaces operation
in api.yaml and activate the pre-reserved projects menu entry.
feat: Workspaces > Projects 크로스-워크스페이스 프로젝트 관리 화면 추가
fix(menu): export 파일명 타임스탬프 통일
feat(menu): 아이콘 필드를 정본 yaml/DB/UI에 연동
다른 6개 API 서비스 파일(csp_accounts_api.js 등)은 이미 204 No Content
응답을 성공으로 처리하는 분기가 있었으나 groups_api.js만 빠져 있었다.
현재 groups_api.js가 unwrapResponse를 거치는 함수들의 upstream 응답은
전부 200/201이라 재현 가능한 라이브 버그는 아니지만, project_api.js의
removeWorkspaceFromProject에서 동일 패턴 결함이 실제로 발생했던 사례가
있어(같은 방식으로 복붙된 헬퍼) 예방적으로 맞춘다.
fix: groups_api.js unwrapResponse가 204 No Content 보완
The console's Copy KubeConfig button relayed cb-tumblebug's
GetK8sCluster AccessInfo.Kubeconfig, whose exec plugin targets
http://0.0.0.0:1024 — a loopback address only resolvable inside the
cb-spider process itself, so the copied value never worked for an
external client. It also leaked the shared default:default credential.

Switch to GetK8sClusterKubeconfig, which returns a CSP-native
kubeconfig (aws-iam-authenticator for EKS, gke-gcloud-auth-plugin for
GKE). Since cb-spider silently falls back to the old broken kubeconfig
with HTTP 200 for providers it doesn't support natively (AWS/GCP
only), gate the button by connectionConfig.providerName rather than
by response status, and show provider-specific setup guidance.
fix(k8s): switch Copy KubeConfig to cb-tumblebug's CSP-native endpoint
cb-tumblebug removed its K8s container remote-command API (PostCmdK8sCluster)
outright instead of fixing the underlying kubeconfig exec-plugin bug, so the
console can no longer offer this feature. Removes the Terminal entry point
and modals from the K8s cluster detail screen, the cluster branch in
postRemoteCmd()/buildCommandData(), the now-dead PMK terminal helpers, and
the retired operationId from api.yaml.

VM/NodeGroup/MCI Remote Command is untouched.
chore(k8s): remove PMK Remote Command Terminal feature
mc-iam-manager's deprecated CSV-based menu-permission-seeding endpoint
was removed outright (menu_service.go, its handler, and route
registration all deleted), so this file has had zero consumers since
that merge. The canonical pipeline is YAML-only now.
…leanup

chore(menu): remove webconsole_menu_permissions.csv
isKubernetesImage 토글이 기본 ON인데 OS Type 필드 기본값이 "ubuntu 22.04"로
채워져 있어, 사용자가 화면을 열어 기본 상태로 Search를 누르면 K8s 이미지는
osType이 타입 식별자(AL2023_ARM_64_STANDARD 등)라 매칭이 항상 0건이었다.
MCI 쪽 동일 필드는 이미 빈 값으로 시작하는 패턴이라 이에 맞춰 통일한다.
spec-table-pmk/image-table-pmk가 다중 선택 상태로 생성되는데
applySpecInfoPmk()/applyImageInfoPmk()는 항상 배열의 첫 번째 선택 항목만
사용한다. 모달을 닫았다 다시 열어도 이전 체크 상태가 남아있어, 새 spec/image를
선택해도 먼저 선택했던 항목이 여전히 배열의 첫 항목이라 Apply가 옛 값을
다시 적용하는 문제가 있었다. 두 테이블을 단일 선택으로 변경해 새 행을
체크하면 이전 선택이 자동 해제되도록 한다.

또한 spec을 바꾼 뒤 이미지 검색 모달을 다시 열면 이전 spec으로 조회했던
결과 목록이 그대로 남아있어, 재검색 없이 다른 아키텍처의 이미지를 그대로
Apply할 수 있는 문제가 있었다. 모달이 열릴 때마다 결과 테이블을 비워
사용자가 현재 spec 기준으로 다시 Search하도록 한다.
fix: PMK 이미지 검색 osType 기본값 및 spec, image 보완
spec-table이 다중 선택 상태로 생성되는데 applySpecInfo()는 항상 배열의
첫 번째 선택 항목만 사용한다. 모달을 닫았다 다시 열어도 이전 체크 상태가
남아있어, 새 spec을 선택해도 먼저 선택했던 항목이 테이블 순서상 여전히
첫 항목이라 Apply가 옛 값을 다시 적용하는 문제가 있었다. PMK 쪽의 동일한
결함(spec-table-pmk)을 단일 선택으로 고친 것과 같은 방식으로 수정한다.
fix: MCI Spec 재선택 시 Apply 보완
The header (containing the Workspace/Project selectors, theme toggle,
notifications, and user menu) was hidden entirely below 992px with no
mobile alternative, even though the collapse/toggler markup for it was
already in place. Removing the forced display:none re-enables the
existing navbar-expand-md responsive behavior.
fix: restore mobile navbar toggler by removing d-none d-lg-flex
- 존재하지 않는 env 변수명(MCIAMMANAGER/MCINFRAMANAGER), 낡은 버전 핀
  (mc-iam-manager v0.2.0), 잘못된 진입점(go run ./cmd) 등 현재 코드와 안 맞는
  독립 docker-compose 설치 절차를 제거
- 1차 권장 경로로 mc-admin-cli installAll.sh(플랫폼 전체 통합 설치) 안내
- 로컬 개발 경로는 CLAUDE.md에 정리된 실제 구조(front/api 분리 서버,
  conf/.env, conf/api.yaml)를 기준으로 재작성
- conf/webconsole_menu_resources.yaml이 플랫폼 전체 메뉴 카탈로그의
  canonical source라는 점과 mc-iam-manager와의 관계(MC_WEB_CONSOLE_MENUYAML)
  명시
@MZC-CSC

MZC-CSC commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

실수로 upstream을 대상으로 생성됨 — MZC-CSC(origin) 대상으로 다시 생성합니다.

@MZC-CSC MZC-CSC closed this Sep 2, 2026
@MZC-CSC
MZC-CSC deleted the chore-readme-installer-menu-source branch September 2, 2026 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants