Repository navigation
feat: Show associated Nodes (Used By) for Networks/Security Groups/SSH Keys - #109
Merged
Merged
Conversation
fix: navbar 워크스페이스/프로젝트 셀렉터를 본인 소속 범위로 스코프
Getprojectbyid/Updateprojectbyid/Deleteprojectbyid가 모두 Buffalo 시절
경로 /api/prj/project/id/{projectId}를 가리키고 있었는데, 이 경로는
현재 mc-iam-manager(Echo)에 존재하지 않아 항상 404가 났다.
실제 라우트는 /api/projects/id/{projectId} (swagger operationId
getProjectByID/updateProject/deleteProject)이므로 그에 맞게 수정.
프론트에서 아직 이 operationId들을 호출하는 코드는 없어 회귀 영향 없음.
fix: project 단건조회/수정/삭제 operationId legacy 경로 수정
- mciDynamic/mciDynamicReview nodeGroups 매핑에 zone, nodeUserPassword, label, vNetTemplateId, sgTemplateId 추가 (값 있을 때만 포함) - mciDynamicReview의 vmUserPassword 필드가 서버 실제 필드명(nodeUserPassword)과 불일치해 무시되던 죽은 코드 정정 — Review/Dynamic 매핑 대칭화 - 서버 구성 수정 모드에서 통째 교체를 merge로 보완 — 폼에 없는 carry-through 필드(template 프리필 값) 보존
feat(mci): MCI 배포 nodeGroups 매핑에 정식 필드 5개 추가 및 매핑 버그 수정
- asyncRequestTracker: stopListRefresh 신설, 서버 목록 Handling 0개 + 활성 GetRequest 타이머 없음이면 목록 인터벌 정지, fallback 모드에서도 정지 - track() 시 기존 ensureListRefresh 경로로 자동 재개 - asyncRequestNotify: 벨 드롭다운 open 시 refreshNow 1회 호출로 폴링 중단 상태에서도 최신 목록 보장
- 토스트 원장(mcwc_async_toasted, sessionStorage) 도입 — terminal 토스트는 실시간 전환 또는 최근 30초 내 완료 건만 requestId당 1회 표시 - pollOnce 직접 토스트와 목록 refresh 전환 토스트가 겹치던 완료 토스트 이중 표시 해소 (maybeFinishToast 공통화) - Handling progress 토스트는 track() 시점에만 표시 — 새로고침/페이지 이동 후에는 배지·알림센터 목록으로만 노출
fix: navbar 알림 폴링 정지 조건 추가 및 완료 토스트 반복 표시 제거
Organization(그룹) API 대신 플랫폼 싱글톤 Company API로 조회·생성·수정을 연동한다.
[feat]: Company Info 화면을 Company API로 전환
…of localhost hardcoding
Remote command and file transfer handlers hardcoded mc-infra-manager as
http://localhost:1323/tumblebug, so commands never reached target VMs on
remote installations.
- front/actions/apihosts.go: framework-common resolver — MC_WEB_CONSOLE_{NAME}_URL
env override first (for hosts outside the docker network), then getapihosts
(60s TTL cache of the full service map), then legacy fallback with warning
- api apihosts.go: expose AuthType (basic/bearer) alongside BaseURL so callers
apply the auth each framework requires; credentials stay hidden
- applyFrameworkAuth: basic -> MC_WEB_CONSOLE_{NAME}_USER/PASS env account,
bearer -> forward the user's Authorization header, none -> no auth header
- cmd.go/upload.go use the resolver; INFRA_MANAGER_* globals removed from env.go
fix(front): remote command localhost 하드코딩 제거 — getapihosts 기반 주소 해석
feat(mci): 편집 폼 template carry-through 필드 read-only 표시 및 Extend VM template Add NodeGroup 지원
- renderCarryThroughSection: 값이 있는 필드만 렌더 → 5필드(zone/ nodeUserPassword/label/vNetTemplateId/sgTemplateId) 항상 렌더, 값 없으면 빈 read-only 입력 (섹션 숨김 분기 제거) - password는 값이 있을 때만 마스킹 표시 - 섹션 제목의 '(read-only)' 문구 제거, carry-through-readonly 스타일 (회색 채움·회색 텍스트)로 잠김 표현
feat: template carry-through 필드 항상 표시 및 잠김 스타일 구분
- 메뉴 6개 isaction:true 활성화 (securitygroups/sshkeys/serverspecs/serverimages/myimages/disks) - SecurityGroups/SSHKeys: filter·toast·webconsolejs 패턴 정렬 - Specs/Images: Networks 패턴 적용 + nsId 'system' 고정 - MyImages: myimage_api.js(CustomImage) 신규 + Networks 골격 재작성 - Disks: datadisk → disks 로 파일명 정렬, disk_api CRUD·import 정비
- 메뉴 nlbs 추가 (menu yaml + permissions csv + selfiammenu, menunumber 1555) - nlb_api.js: GetAllNLB/GetNLB/PostNLB/DelNLB/GetNLBHealth/GetInfraGroupIds 래퍼 - nlbs.html/js: Networks 기준 포맷, 페이지 내 Infra 셀렉터, 목록/상세/생성/삭제/헬스체크
- serverspec_api: FilterSpecsByRange에 limit(기본 500) 적용 — 무제한 조회 시 응답 수백 MB로 타임아웃 - serverimage_api: Getallimage(17만+ 건 전량 반환) 폐기, SearchImage(maxResults) 전환 - serverimages 화면: 자동 전체 조회 제거, Connection(provider/region)+OS Type 조건 검색 UI 추가 - 등록/삭제 후에는 마지막 검색 조건으로 재검색
refactor: 표시 문구 용어 변경 (MCI→Infra, PMK→K8s, VM/Server→Node, Subgroup→NodeGroup)
- TOAST_TYPES.WARNING이 PROGRESS 설정(autohide:false, spinner 아이콘)을 그대로 사용하고 있어 검증 실패 경고가 수동으로 닫기 전까지 화면에 계속 남아있었음 - 토스트 id가 매 호출마다 Date.now() 기반으로 새로 생성되어 이전 토스트를 대체하지 않고 계속 쌓이는 구조라, '경고 → 필드 수정 → 재시도 성공'의 두 클릭이 화면에서는 '경고가 떴는데도 생성됨'처럼 보였음 (검증 로직 자체는 정상 — 실패 시 API 호출 0건 재현 확인) - WARNING을 SUCCESS/ERROR와 동일하게 autohide:true(4000ms)로 변경, 아이콘도 스피너 대신 경고 아이콘으로 수정
CSP Provider 드롭다운·뱃지에 Tencent Cloud/Alibaba Cloud 추가. 계정 생성/조회 페이로드가 백엔드 스키마(snake_case)와 불일치해 기존 AWS/GCP/Azure 계정 등록도 항상 실패하고 목록의 Provider·Active· Created At이 표시되지 않던 문제를 함께 수정.
Edit 모달 저장이 존재하지 않는 API 함수를 호출해 항상 실패하던 문제 수리.
Add 모달과 동등하게 IDP Identifier/IAM Identifier/IAM Role ID/Path 필드를
Edit에도 추가하고, 동작하지 않던 Trust Policy 필드는 제거.
목록 Provider 컬럼이 필드명 불일치로 항상 빈 값이던 문제와, id 컬럼이
문자열로 정렬되어("9" > "19") 신규 생성 role이 뒷페이지에 가려 목록에
없는 것처럼 보이던 문제를 함께 수정.
feat: CSP 계정 등록 화면에 Tencent/Alibaba 추가 및 페이로드 정합 버그 수정
- Alibaba Data Disk 생성 시 CSP가 500(InvalidDataDiskCategory.NotSupported)을 반환해도 commonAPIPost가 return error로 에러를 삼켜 await가 정상 resolve됨 → 호출부가 성공 분기를 타 '생성 성공' 토스트를 띄우고 모달을 닫아버리는 오탐 발생 (429/404/403/500 및 catch-all 분기가 throw 없이 return하던 것이 원인. err?.response?.status로 실패를 판별하는 기존 8개 화면의 catch 블록과 계약이 어긋나 있었음) - 429/404/403/500/catch-all 분기를 throw로 수정해 호출부 try/catch가 정상 동작하도록 함 - disks.js: 에러 메시지를 err?.response?.data?.responseData?.message(API 프록시가 실제로 감싸는 구조)에서 추출하도록 수정 — 축약된 axios 메시지 대신 CSP SDK 원인이 그대로 노출됨 - 브라우저 재현으로 검증: 모달 유지·거짓 성공 없음·실제 에러 메시지 노출 확인, cloudresources TC 17/17 회귀 없음
- Cloud Resources 8개 화면(Disks/Networks VPC·Subnet/SecurityGroups/SSHKeys/ Specs/Images/MyImages/NLB)의 삭제 확인이 전부 브라우저 네이티브 window.confirm()을 쓰고 있어 스타일링 불가·브라우저별 UX 상이·테스트 자동화 시 별도 dialog 핸들링 필요 등 문제가 있었음 - 이미 프로젝트에 있는 공용 컴포넌트로 통일: partials/layout/modal.js의 commonConfirmModal(targetModalId, title, content, func, argument) — networktemplates.js 등 기존 화면에서 쓰던 것과 동일한 패턴 (전역 commonDefaultModal 마크업 재사용, 템플릿 변경 불필요) - 각 화면의 confirmDeleteXxx()를 '모달 오픈 트리거'와 'executeDeleteXxx() 실제 삭제 실행'으로 분리, webconsolejs 등록 블록에 executeDeleteXxx 추가 - networks.js의 Subnet 삭제(deleteSubnet)는 유일하게 argument(subnetId)가 필요한 케이스라 confirmDeleteSubnet/executeDeleteSubnet으로 개명하고 인라인 onclick도 갱신 - 브라우저 검증: Disks/VPC/Subnet(argument 전달 포함) 전부 모달 정상 표시·Cancel 시 삭제 안 됨·네이티브 confirm() dialog 미발생 확인, cloudresources TC 17/17 회귀 없음
- Cloud Resources 8개 화면(Disks/Networks/SecurityGroups/SSHKeys/Specs/Images/ MyImages/NLB) 템플릿에 #pageloader 요소가 없어서, commonAPIPost의 activePageLoader()가 매 API 호출마다 조용히 실패(콘솔에 'pageloader is not exist'만 출력)하고 있었음 — 특히 삭제 확인 모달이 즉시 닫히는 최근 변경과 맞물려 진행 중임을 알리는 표시가 전혀 없는 것처럼 보였음 - 다른 화면들(companyinfo/users/roles/groups 등)과 동일하게 partials/layout/ pageloader.html 파티셜을 각 템플릿에 포함해 #pageloader 엘리먼트 확보 - 브라우저 검증: mock 지연 응답으로 삭제 진행 중 pageloader의 active 클래스가 정상적으로 붙었다 사라지는 것 확인
- Import/Filter 아이콘 옆에 Delete 아이콘 추가, Tabulator rowSelection 체크박스 컬럼 + selectableRows:true로 다중선택 지원 - confirmBulkDelete: 미선택 시 commonShowDefaultModal 경고, 선택 시 개수 포함 commonConfirmModal 확인창 - executeBulkDelete: Promise.allSettled로 선택 항목 각각 delVNet 호출, 성공/실패 개수 요약 토스트, 완료 후 선택 해제·목록 갱신 - infra workload(MCI) 화면은 실제로는 단일선택+단일삭제 패턴이라 참조할 다중선택 일괄삭제 구현이 없어 신규 설계 (확인모달/체크박스 컬럼 부품만 재사용) - 브라우저 검증: 0개 선택 경고, 2개 선택 삭제(mock, API 2회 호출 확인), 결과 토스트 확인
fix: 사이드바 메뉴 활성화 표시 오류 수정 (iframe 부모 미펼침, 형제 항목 동시 강조)
- Infra Workloads Node Info(Server/Group 탭) Install SW: 페이지 이동 대신 모달 iframe으로 AM 설치 화면을 열고 infraId·nodeGroupId·nodeId·requestId를 전달 - Group 탭 Node List 카드에 NodeGroup 전체 대상 Install SW 버튼 추가 - IFRAME_READY 수신 후 token·workspace·project를 AM origin으로 postMessage 전달, source/origin/type/requestId 검증 후 DEPLOY_SUCCEEDED/FAILED/FORM_ERROR/CANCELLED 처리 - 세션 토큰이 없는 탭에서는 Authorization 쿠키를 사용 - 단순 페이지 이동만 하던 installSwtoVm() 제거
- Node Info의 Install SW는 해당 Node가 Running일 때만 활성화, NodeGroup 단위는 소속 Node 중 Running이 1대 이상일 때 활성화 (비활성 시 hover 사유 표시, 클릭하면 사유 토스트) - AM 설치 화면이 targetType=VM, mciId, vmId 외 파라미터를 거부하므로 콘솔 용어(infra/node)를 buildInstallParams에서 AM 규약으로 변환 - AM CONFIGURATION_ERROR 이벤트를 에러로 처리
feat: Install SW 버튼을 mc-application-manager 설치 화면 iframe 팝업으로 연동
- K8s 클러스터·Infra 목록에서 체크박스로 1건 선택하면 행 클릭과 같은 경로로 현재 선택을 맞춘다
(체크박스 클릭은 rowClick을 발생시키지 않아 삭제 요청이 전송되지 않거나 빈 id로 나갔다)
- K8s 클러스터 다중 체크 상태의 Delete는 1건만 선택하도록 안내한다
- Group 탭 노드 Delete가 Group 탭에서 고른 노드를 지우도록 deleteVm('nodegroup')으로 분리
(기존에는 빈 nodeId가 나가거나 Server 탭에서 고른 다른 노드가 지워질 수 있었다)
- deleteMci/deleteVm에 빈 id 검증 추가
- Infra/Node 삭제 option을 force에서 terminate로 변경 (force는 기록만 지워 CSP 인스턴스가 남는다)
- 노드 상세가 GetInfraNode 응답을 목록 캐시에 반영하지 못하던 비교 조건 수정 (Server/Group 탭) - Running인데 저장된 publicIP가 비어 있으면 GetInfraNode option=accessinfo로 CSP 실값을 채운다 (cb-tumblebug 0.13.4는 Resume 직후 빈 publicIP를 저장하고 갱신하지 않는다)
fix: Running 노드 public IP 표시 보완
- AWS 선택 시 Subnet을 다중 선택으로 바꾸고 항목에 zone·CIDR 표시 - 생성 전 서로 다른 AZ가 2개 미만이면 요청 없이 안내 (AWS EKS가 "at least two different AZs"로 거부) - CreateCluster·Export JSON이 선택한 subnet 전체를 subnetIds로 전송 - 다른 CSP는 기존처럼 단일 선택 유지
- 상세 조회 결과가 Active일 때만 GetK8sClusterKubeconfig 호출 (Creating 등에서는 N/A) - http.js 진행 토스트를 지정 id로 띄워 완료·실패 시 닫히게 수정 (showProgressToast(fileName, status)를 (toastId, label)로 호출해 고정 id로 등록되고 닫히지 않았다) - 401 토큰 갱신 재시도 전에 기존 로더를 닫아 토스트가 쌓이지 않게 함
- 생성 직후에만 보이던 Private Key를 상세에서 항상 ****** 로 표시 (cb-tumblebug 목록·상세 응답의 privateKey 사용) - Show/Hide 토글과 Copy 버튼 추가 — Copy는 표시 여부와 관계없이 원문 복사 - Private Key가 없으면 "Not available", Public Key가 없으면 "Not provided by the CSP"로 안내
…subnets fix: K8s Expert 생성에서 AWS는 서로 다른 AZ의 subnet을 2개 이상 선택하도록 수정
…toast fix: K8s 상세 kubeconfig는 Active일 때만 조회하고 진행 토스트가 닫히지 않던 문제 수정
fix: SSH Key 상세에서 Private Key를 복사할 수 있도록 보완
PostCmdInfra 응답의 실패 사유는 error(문자열) 필드로 오는데 err 필드만 확인하고 있어 bastion 미선정 등 실패가 빈 stdout으로 처리되었다. error를 우선 확인하고 이전 응답 형태인 err(객체)도 계속 처리한다.
fix: Terminal에서 원격 명령 실패 사유가 표시 보완
페이지 로드 시 project 목록은 로그인 때 저장한 세션 캐시만 읽는데, refresh 버튼은 캐시가 있으면 다시 조회하지 않았고 workspace 선택 시 실시간 조회한 목록도 캐시에 반영하지 않았다. refresh 버튼은 캐시를 무시하고 다시 조회해 갱신하고(실패 시 기존 캐시 유지), workspace 선택 시 조회한 project 목록을 캐시에도 기록한다.
fix: workspace 목록 refresh 기능 보완
chore: api.yaml의 mc-iam-manager 버전을 0.6.4로 갱신
- Query 성공 시 조회 범위(mode, connection, resource type)를 저장하고, 이후 Search Conditions가 바뀌면 재조회 전까지 Run Sync를 비활성화 - Run Sync 대상: 표 선택 행 → Query Partial 조회 connection → Query All일 때만 전체. 별도 Target Provider 선택 제거, 대상 요약 표시 - Run Sync Resource Type 기본값을 Query 유형에 맞춤 - sync 필터를 provider/region/zone으로 지정해 connection 단위로 좁힘(zone 정보 없으면 connectionName) - Query All + Resource Type All 조회 시 type 컬럼이 비던 문제, sync 후 Sync Result 대신 NS Sync 탭이 활성화되던 문제 수정
fix: Resource Sync Run Sync 대상을 Query 조회 범위에 연동
chore: KT provider 로고 이미지 추가
chore: KT provider 로고 이미지 교체
… 리소스 보호 추가 - 목록: Used By 컬럼(associatedObjectList 기준, null/[] 모두 0)과 Usage 필터(All/In use/Unused) - 상세: Associated Nodes 섹션 — infraId별 GetInfra 1회(동시 3) 조회, 없는 Infra/Node는 Stale reference, 일시 실패는 Unavailable, Infra Workloads 딥링크(?mciID=&nodeId=) - Networks: Subnet별 사용 Node 수 표시, Edit 모드에서 사용 중 Subnet 삭제 비활성 - Security Groups: 규칙 Edit 시 사용 중 경고 배너 - 삭제: 사용 중 항목은 요청하지 않고 안내(VPC withsubnets 부분 삭제 방지), 실패 시 항목별 실제 사유 표시 - 공통 모듈 common/utils/resourceUsage.js 신설, disks.js의 parseNodeRef/extractErrorMessage 이동 - 삭제 API 래퍼(vpc/securitygroup/sshkey)에 commonAPIPost options 전달 인자 추가
…lCSP)으로 변경 - Provider 선택 시 cloudos metainfo의 CredentialCSP를 조회해 Key 행 생성 (ForwardAnyReqToAny 경유) - 조회 실패 시 CSP 형식 기본 목록으로 폴백, 조회 중 Provider 변경 시 이전 응답 무시 - 등록 실패 시 서버 거부 사유를 토스트에 표시하고 공통 500 토스트는 억제
fix: Credential 등록 형식(CredentialCSP) 현행화
feat: Networks·Security Groups·SSH Keys 화면에 연관 Node(Used By) 조회와 사용 중 리소스 보호 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What's Changed
Cloud Resources — associated Nodes (Used By) and in-use protection
Networks (VPC), Security Groups and SSH Keys now show which Nodes use each resource, based on mc-infra-manager's
associatedObjectList.Used Bycolumn (number of Nodes) and aUsagefilter (All / In use / Unused)Associated Nodestable (Infra / Node / Subnet / Status / IP) with a link to Infra Workloadscommon/utils/resourceUsage.js(Node reference parsing moved fromdisks.js)Others
img_logo_kt.png)