Skip to content

feat: Infra Done 사전검증, Cloud Resources 8종 화면, Node MyImage, CSP Role 관리 개선 외 버그 수정 - #99

Merged
MZC-CSC merged 62 commits into
m-cmp:mainfrom
MZC-CSC:develop
Aug 11, 2026
Merged

feat: Infra Done 사전검증, Cloud Resources 8종 화면, Node MyImage, CSP Role 관리 개선 외 버그 수정#99
MZC-CSC merged 62 commits into
m-cmp:mainfrom
MZC-CSC:develop

Conversation

@dogfootman

@dogfootman dogfootman commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

  • Infra 생성 Done 시점 NodeGroup 단건 사전 검증 (#242)
  • Node MyImage 생성 및 조회/사용 popup (#241)
  • 알림센터 목록 pagination + 검색 처리 (#240)
  • Cloud Resources 8개 화면 구현 (NLB 포함) (#239)
  • PMK Add NodeGroup Root Disk Type 드롭다운 수정 (#238)
  • ScaleOut 요청 필드명 오류 수정 (numVMsToAdd → numNodesToAdd) (#237)
  • CSP Role 관리 authMethod 매핑 추가 + 필터 필드 불일치 수정 (#234, #235)
  • CSP 계정 등록 화면 Tencent/Alibaba 추가 (#232)
  • 표시 문구 용어 변경: MCI→Infra, PMK→K8s, VM/Server→Node (#231)
  • Workspace project 목록 조회 403 시 selector 멈춤 수정 (#243)
  • iframe 메뉴 시드 메타 3종 추가 + generic loader opts 우선순위 수정

yh-noh and others added 30 commits July 24, 2026 13:49
- 메뉴 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회 호출 확인), 결과 토스트 확인
… 삭제 action 추가

- Networks(VPC)에 적용한 것과 동일한 패턴: Import/Filter 아이콘 옆 Delete 아이콘,
  Tabulator rowSelection 체크박스 컬럼 + selectableRows:true, confirmBulkDelete/
  executeBulkDelete(Promise.allSettled로 화면별 delete API 호출)
- 브라우저 검증: SecurityGroups/SSHKeys는 실데이터로 0개 선택 경고·2개 선택 삭제(mock,
  API 2회 호출)·결과 토스트까지 확인. MyImages/Disks/NLB는 현재 데이터가 없어 Delete
  아이콘 노출과 0개 선택 경고 배선만 확인(로직은 이미 검증된 동일 패턴)
- cloudresources TC 17/17 회귀 없음 확인 — 체크박스 컬럼 추가로 셀 인덱스가 밀렸지만
  행 클릭이 rowClick을 그대로 트리거해 기존 TC(.tabulator-cell nth(1) 클릭 등) 영향 없음
…mages)에도 Provider/Region 표시 적용

- Networks(VPC)에 적용한 패턴을 공용 cspResource.js(getProvider/getRegion)로 나머지 화면에도 확대
- SecurityGroups/SSHKeys/Disks/NLB: connectionConfig.{providerName, regionDetail.regionName} 중첩 형태
- Specs/Images/MyImages: 최상위 providerName/regionName(Spec) 또는 regionList(Image) flat 형태
- 목록 칼럼의 Connection을 Provider/Region으로 교체(NLB는 기존에 Connection 자체가 없어 신규 추가),
  필터 옵션·상세 패널(SecurityGroups는 기존 Provider/Region 필드가 있어 Connection 항목만 제거)도 동일 반영
- Create/Import 모달의 Connection 선택 UI(실제 API 호출 대상 지정용)는 표시 목적이 아니므로 유지
- 브라우저 검증: SecurityGroups/Specs 실데이터로 목록·상세 모두 정상 표시 확인, Disks/NLB/Images는
  현재 데이터 없어 헤더 배선만 확인
- Specs 테이블: Spec Name 칼럼을 cspSpecName 표시로 변경, GPU(acceleratorCount)/
  Disk(rootDiskSize) 칼럼 추가. 상세 패널은 기존 그대로(Spec Name=name 유지)
- Images 검색조건: 단일 Connection 드롭다운을 Provider/Region 두 개로 분리
  (Region은 선택한 Provider의 실제 리전 목록으로 동적 필터링). 검색 criteria는
  configName 매핑 없이 provider/region 값을 직접 사용
- Images 테이블: Image Name 칼럼이 cspImageId가 있으면 그 값을, 없으면 name을
  표시하도록 변경(표시 전용 — 삭제 등 내부 로직은 name 그대로 사용)
- SecurityGroups 상세: UID 항목 제거

브라우저 검증: Specs(kt 제공자 실데이터로 CSP Spec Name/Provider/Region/GPU/Disk
전부 확인), Images(Provider=aws→Region 옵션 동적 채워짐, 검색 결과 423건, cspImageId
있는/없는 이미지 표시 분기 확인), SecurityGroups(UID 요소 제거 확인).
관련 TC(SPEC-01, IMG-01/02) mock·assertion 갱신, cloudresources TC 17/17 통과
mc-iam-manager 레지스트리의 updateCspRole이 가리키던 미등록 라우트 문제와
그 원인이었던 죽은 핸들러가 별도 IAM 수정으로 해결되어(원격 배포·동기화
반영 확인 완료), 임시로 사용하던 우회 이름 UpdateCspRoleRecord를 형제
액션(createCspRole/deleteCspRole/getCspRoleById)과 동일한 UpdateCspRole로
되돌림. 원격 재검증 결과 Description/IdpIdentifier/IamIdentifier/IamRoleId/
Path 전 필드 실제 DB 반영 확인.
navigatePages.js의 showSection()이 window load/hashchange 시 .section
클래스를 가진 모든 요소의 active를 무조건 제거하는데, #pageloader도
같은 class="section"을 재사용하고 있어 API 호출이 끝나기 전에 로딩
표시가 꺼져버렸다. pageloader는 셀렉터에서 제외하고, http.js의 활성
로더 카운트도 참조 카운팅 방식으로 바꿔 동시 호출 겹침에 대비했다.
Provider/Region/OS Type이 이미 별도 조회조건으로 분리되어 있어
Field select에 남아있던 동일 옵션은 불필요한 중복이었다.
getMciList()이 실제로 호출하는 GetAllInfra 응답은 responseData.infra
인데 nlbs.js는 존재하지 않는 responseData.mci를 읽고 있어, Infra가
있어도 Select Infra 드롭다운이 항상 비어 있었다. 이 때문에 project를
선택해도 infraId가 설정되지 않아 Create NLB 클릭 시 "Please select
an Infra first"가 나왔다.
…r/Region 조회조건 추가

Images/Specs 화면과 동일하게 Provider/Region을 Field select의 옵션이
아닌 별도 조회조건으로 분리해 일관성을 맞췄다. 6개 화면 모두 목록을
nsId 단위로 전체 로드하는 구조라 서버 재조회 대신, 이미 로드된 행의
_provider/_region 값을 Tabulator setFilter로 조합(AND)해 필터링한다.
Provider/Region 옵션은 GetConnConfigList 전체가 아니라 실제 로드된
리소스에서만 추출해, 리소스가 없는 provider/region은 노출하지 않는다.
공통 로직은 cspResource.js의 populateProviderFilterOptions/
populateRegionFilterOptions로 추출했다.
GetAllNLB는 nsId+infraId가 필수 경로 파라미터라 Infra 단위 조회 자체는
불가피하지만, 목록 화면에서 사용자가 미리 Infra를 선택해야만 조회가
되도록 만든 것은 불필요한 제약이었다. 이제 목록 진입 시 GetAllInfra로
전체 Infra를 조회한 뒤 Infra별로 GetAllNLB를 병렬 호출해 한 테이블에
합쳐서 보여준다. 각 행에 소속 Infra(_infraId)를 태그해 테이블에 Infra
컬럼을 추가했고, 상세/삭제/헬스체크는 행에 저장된 Infra를 사용한다.

Create NLB 폼의 Infra도 페이지에서 선택한 값을 읽기전용으로 물려받던
것을, 모달을 열 때 GetAllInfra로 직접 채우는 독립된 select로 바꿔
다른 Create 모달들(Connection select)과 동일한 패턴으로 통일했다.
Infra 변경 시 Target NodeGroup 목록도 다시 조회한다.
tumblebug 실제 swagger(model.NLBReq)를 확인해 두 가지 문제를 고쳤다.
1) targetGroup의 실제 필드명은 nodeGroupId인데 subGroupId로 보내고
   있어 빈 문자열로 처리되어 500(CheckString - empty string)이 났다.
2) healthChecker.interval/timeout/threshold는 int 필드인데 문자열
   "default"를 보내 400(Unmarshal type error)이 났다. 0을 보내면
   tumblebug가 자체 기본값을 적용하므로("0 = use default") 실제 API
   문서에 맞춰 0으로 수정했다. healthChecker에 없는 protocol/port도
   제거했다.

실제 원격 tumblebug(GCP infra)에 대해 생성→목록 반영→삭제까지
end-to-end로 검증 후 테스트로 만든 NLB는 정리했다.
Infra 목록은 이미 GetAllInfra 응답의 cluster별 providerNames/
regionNames를 담고 있어 별도 API 호출 없이도 "mc1 — gcp/asia-northeast3"
처럼 라벨을 구성할 수 있다. cluster가 여러 개인 멀티클라우드 infra는
"ws002 — alibaba/ap-northeast-2, aws/ap-northeast-1"처럼 쉼표로
나열한다.
AWS 등 일부 CSP 드라이버는 Running이 아닌 인스턴스를 NLB 타겟으로
등록하려 하면 "InvalidTarget: ... not in a running state"로 요청을
거부한다. 이를 API 호출 전에 걸러내기 위해 Infra 선택 시 GetInfra로
노드별 status를 함께 조회해두고, Target NodeGroup 선택 시 해당
노드들이 모두 Running인지 표시한다(예: "Node status: ng1-1=Suspended
— all nodes must be Running to create an NLB."). Running이 아니면
Create 버튼을 비활성화하고, 버튼 disabled 우회 대비로 실행 함수
내부에서도 동일한 체크를 한 번 더 한다.
Role 관리 화면의 CSP Role Mapping 카드(생성/수정)에 인증방식 선택 요소가
없어 saveRole()/updateRole()이 authMethod 없이 cspRoles를 전송했다.
이로 인해 mc-iam-manager 백엔드가 매핑을 항상 OIDC로 기본 반영해,
역할을 수정(저장)할 때마다 기존 SAML/Secret Key 매핑이 조용히 OIDC로
덮어써지는 문제가 있었다.

Create/Edit 양쪽 카드에 Auth Method 셀렉트(기본값 OIDC)를 추가하고,
handleAddCspRole/handleAddCspMapping이 선택값을 매핑 row에 저장하도록
하며, saveRole/updateRole의 cspRoles 페이로드에 authMethod를 포함하도록
수정. 매핑 테이블(View/Create/Edit 3곳)에 Auth Method 컬럼도 추가해
현재 값을 확인할 수 있게 함.
Detail 패널에 있던 Check Health/Delete 버튼을 제거하고, 목록 카드
헤더에 체크박스 선택 기반 Check Health 아이콘을 추가했다(Delete는
이미 있던 다중선택 삭제로 대체). 헬스체크 결과는 toast로 표시하면
놓치기 쉬워 확인 후 닫아야 하는 modal(commonShowDefaultModal)로
표시하도록 바꿨다. 체크한 NLB가 현재 열린 Detail과 같으면 Detail의
Health Status도 함께 갱신한다.

GetNLBHealth 파싱에 실제와 다른 필드명(healthz.allVMs 등)을 쓰고
있어 항상 healthy 0 / unhealthy 0 / total 0으로만 나오던 버그를
수정했다. 실제 tumblebug 응답은 healthz 래핑 없이 최상위
AllNodes/HealthyNodes/UnHealthyNodes(PascalCase)이다.

Listener IP/DNS, CSP Resource ID처럼 길어서 "..."로 잘리는 값은
hover 시 title 툴팁으로 전체 내용을 보여주고 끝에 복사 아이콘을
추가해 전체 값을 클립보드로 복사할 수 있게 했다.
fix: CSP Role Edit 저장, IDP 필드 추가, 목록 표시·정렬 버그 수정
Add CSP Role 모달에 authMethod 셀렉트가 없어 콘솔로 생성하는 CSP 역할이
항상 OIDC 신뢰 정책으로만 생성되고 SAML 신뢰 정책을 가진 역할은 API 직접
호출로만 만들 수 있었다. authMethod 셀렉트(기본값 OIDC)를 추가하고 생성
요청 페이로드에 포함시켜, API 레이어(csproles_api.js)가 이미 지원하던
authMethod 필드를 실제로 사용할 수 있게 한다.

Edit 모달에는 추가하지 않음 — 수정 API는 신뢰 정책을 재생성하지 않아
authMethod 변경이 실제 효과가 없기 때문.
…림 수정

#csp-roles-table을 감싸는 컨테이너가 max-height: 400px; overflow: hidden으로
고정되어 있어, Page Size를 5보다 크게(예: 20) 늘리면 넘치는 행과 페이지네이션
footer가 스크롤 없이 그냥 잘려서 보이지 않던 문제 수정.
yh-noh and others added 28 commits July 31, 2026 11:45
MCI 상세 화면에 Default/Group/Policy/Labels와 나란한 다섯 번째 탭으로 NLB를
추가한다. 이 탭은 window.currentMciId로 고정된 Infra의 NLB 목록/상세/생성/헬스
체크/삭제를 nlbs.js와 동일한 로직으로 제공한다(자체완결 partial+JS, Labels 탭과
동일한 구조).

- 탭 최초 표시 시 lazy-load, 탭 숨김 시 상세 패널 초기화
- 다른 MCI로 전환 시 캐시 무효화(resetForMciSwitch)로 다음 진입 시 재조회
feat(csp-roles): CSP Role 생성 시 Auth Method 선택 추가
…thod

feat(roles): CSP Role Mapping에 Auth Method 선택 추가
이전 커밋(194fa48)에서 화면 표시 텍스트만 MCI→Infra, Subgroup→NodeGroup 등으로
바꾸고 파일명·DOM id·JS 변수/함수명은 남겨뒀던 것을, front 영역에서 코드 레벨까지
정리한다.

- partials/operation/manage/ 하위 7개 템플릿 파일명 rename 및 partial() 참조 체인 갱신
  (_mcitabcards → _nodegroupvm_status → _nodegroupvmlist_status → _nodegroupvminfo →
   _nodegroup_servertabcards → _nodegroup_server_{detail,connection,monitoring})
- mci.js의 Group 탭 관련 전역 변수/함수명/DOM id 셀렉터, 사용자 노출 텍스트 정리
- remotecmd.js/remotecmd_api.js의 DOM id 및 내부 분기 태그 정리
- mcicreate.js 함수명/UI 텍스트, _policyinfo.html id 정리

서버로 전송되는 API 계약 필드(subGroupId 쿼리파라미터, subGroupSize 폼/요청 필드,
data?.subGroup 응답 폴백)는 이번 범위에서 제외하고 그대로 유지했다. mcmp-e2e 레포의
관련 셀렉터/함수명 참조 갱신은 별도 작업으로 남겨둔다.
…of hardcoding

start-fr004.sh printed a hardcoded IAM host:port that duplicated conf/api.yaml's
services.mc-iam-manager.baseurl and silently went stale whenever that changed.
- Attach 팝업의 "Disk" 필드가 input(readonly)인데 textContent로 채워서 항상
  비어보이던 버그 수정 (value로 채우도록 변경)
- Infra select를 디스크와 동일 CSP(provider)를 가진 Infra만 노출하도록 필터링
- Node select에서 Running 상태가 아닌(Stopped/Suspended) VM은 제외
- List 헤더에 Attach 아이콘 추가(체크된 디스크 1개 대상), Detail의 단일
  Attach/Delete 버튼은 제거 — List의 Attach 아이콘과 기존 "Delete selected"
  벌크 삭제로 대체
…로 이동

Image/Spec은 system 네임스페이스 고정 리소스라 project(=namespace) 선택과
무관하다. project select change 핸들러 및 초기 로드시 projectId 체크
게이트를 제거해 project 선택 여부와 무관하게 항상 로드되도록 한다.

Detail의 단일 Delete 버튼을 제거하고, Network 화면과 동일한 패턴으로 List
헤더에 "Delete selected" 아이콘(체크박스 다중선택 기반 벌크 삭제)을 추가한다.
keyValueList의 값이 JSON이면 pretty-print하고, CSP 드라이버가 Go map을
quote 없이 stringify해서 준(유효 JSON 아닌) 값은 원본을 바꾸지 않고
중괄호/대괄호 깊이 기준으로 줄바꿈만 넣어 한 줄 blob 대신 구조를 알아볼 수
있게 표시한다.
pre 블록이 너무 길어지면 페이지가 한없이 늘어나던 문제를 max-height +
overflow-y:auto로 제한.
# Conflicts:
#	front/templates/pages/settings/environment/cloudresources/myimages.html
feat-web-terminology-rename 병합 시 currentSubGroupId 계열 변수가 전부
currentNodeGroupId 계열로 이름이 바뀌었는데, 이번 세션에서 추가한
_diskContext()가 여전히 옛 이름(currentSubGroupVmId)을 참조하고 있어 Group
탭에서 Node Detail을 열면 ReferenceError가 나는 상태였다. 참조를
currentNodeGroupVmId로 맞추고, 같은 이유로 남아있던
subgroup_block_device_section id(HTML+JS 양쪽)도 nodegroup_block_device_section으로
통일했다.
cb-tumblebug NodeGroup ScaleOut API는 numNodesToAdd 필드를 사용하지만
postScaleOutSubGroup이 numVMsToAdd로 전송해 값이 0으로 바인딩되고
1대만 생성되던 문제를 수정. MCI→Infra/VM→Node 명칭 변경 시 이 호출부만
누락되어 있었음.
fix(mci): ScaleOut 요청 필드명 오류로 노드 수 지정 무시되는 문제 수정
fix(scripts): read mc-iam-manager address from conf/api.yaml instead of hardcoding
Expert Cluster 생성 흐름에서만 쓰이던 disk_api.getCommonLookupDiskInfo()를
Add NodeGroup(#node_rootdisk)과 Dynamic NodeGroup 생성(#nodegroup_rootdisk_dynamic)
두 폼에도 연결해 CSP/리전별 실제 유효한 root disk type을 조회하도록 수정.

PMK 페이지에 disk_api.js 스크립트 태그 자체가 누락되어 있어 두 폼의 조회
호출이 조용히 실패하던 문제도 함께 수정 (_clustercreate.html에 태그 추가).
fix: PMK Add NodeGroup/Dynamic NodeGroup Root Disk Type 조회 연결
…귀 수정

- Networks: Edit(Subnet 관리)을 Detail 패널에서 테이블 툴바 "Edit selected"로 이동
  (체크박스 선택 기반, 정확히 1개 선택 시에만 동작)
- SecurityGroups: Edit 기능 신규 구축 (firewall rule 추가/삭제, PutSecurityGroup 연동)
  - ALL 프로토콜 규칙이 있는 SG는 백엔드 제약(cb-tumblebug UpdateFirewallRules가
    ALL 예외를 누락)으로 저장이 항상 실패하므로, 경고 배너 + Save 비활성화로 방어
- Detail 패널의 Edit/Delete 버튼 제거 (Networks/SecurityGroups 둘 다 테이블 툴바로 통합)
- Tabulator 체크박스 다중선택 버그 수정: row 클릭이 체크박스도 함께 토글하던 문제를
  고치면서 selectableRows를 false로 두면 Tabulator 자체 cap-check 버그로 다중선택이
  아예 불가능해짐 → selectableRows:true 유지 + rowClick에서 체크박스가 아닌 클릭이면
  자동토글을 되돌리는 방식으로 재수정, Cloud Resources 9개 화면 전체 적용
feat: Cloud Resources 8개 화면 구현
…ation popup

- Add 'Create MyImage' node action with dedicated modal (node snapshot via PostInfraNodeSnapshot, requestId async tracking incl. server-side allowlist)
- Add image source radio (Public Image / MyImage) to recommend image popup: Public keeps SearchImage on system ns, MyImage lists customImages from the selected workspace ns filtered by spec connection
- Show root disk notice when a MyImage is applied (server ignores root disk inputs for custom images)
- Extract shared ImageInfo-to-row mapping for both sources; reset source to Public on modal reopen
- Remove dead CreateSnapshot hooks in modal.js (undefined createSnapshot references)
- Fix duplicated image-search modal: mciworkloads.html included imagerecommendation partial twice (direct + via mcicreate partial)
- Fix createVmDynamic dead code referencing undefined checked_array after navigation
- GET /api/async-requests now accepts q/offset/limit and returns
  {items, total, hasMore} (default page size 20, max 100)
- keyword search matches label/operation_id/request_id/status/message
  case-insensitively and combines with paging
- dropdown loads older history via Load more and searches server-side
  with a debounced input; live badge/toast/poll-stop behavior unchanged
- tracker parses both new and legacy list payloads; new fetchJobsPage()
  performs history/search reads without touching the live cache or timers
feat: 알림센터 목록 pagination + 검색 추가
- Done 클릭 시 해당 NodeGroup 단건을 PostInfraDynamicReview(단건 배열)로
  사전 검증 — Error(spec 매진·이전 실패 이력 등)면 공용 alert 모달로 사유를
  표시하고 목록에 담지 않아 spec/image 재선택 유도, Warning·검증 불능 시
  공용 confirm 모달로 추가 여부 선택
- Infra Name 미입력 시 검증용 더미명(precheck-*) 사용, name 최종 검사는
  Deploy 전체 review가 수행
- Extend VM(Add NodeGroup) Done은 PostInfraDynamicNodeGroupNodeReview로
  동일 검증 적용 (vmDynamicReview 신설)
- 검증 중 Done 버튼 로딩 표시 + 이중 클릭 방지
- Deploy 시점 노드별 오류 상세 미표시 회귀 수정: 응답 소비부를
  vmReviews→nodeReviews(nodeName/nodeGroupSize) 계약으로 정정, 사유
  escape 처리 후 toast 렌더
- createMciDynamic 사용자 노출 한글 문구 영문화
- Confirm before Create MyImage on providers that require a running node (IBM): notice with proceed/cancel instead of a post-hoc failure
- Show STATUS column in the image recommendation table and confirm before applying a MyImage that is not Available yet (e.g. Creating on Tencent/NHN)
feat: 노드 MyImage 생성 및 이미지 조회 popup MyImage 소스 추가
feat: Infra 생성 Done 시점 NodeGroup 사전 검증 추가
commonAPIPost는 403 등 에러 응답을 throw로 전파하는데
getProjectListByWorkspaceId 호출부에 이를 잡는 처리가 없어, 호출자인
setPrjSelectBox의 project select box 갱신 로직 전체가 중단되고
사용자에게는 원인 불명의 빈 project 셀렉터로 보였다. try/catch로 감싸
에러 시 빈 배열을 반환하도록 한다.
fix(workspace): project 목록 조회 403 시 project 셀렉터가 멈추는 문제 수정 (IAM-BUG-022)
webconsole_menu_resources.yaml에 frameworkservice/path/viewtype 필드가
없어 iframe 메뉴 5종(workflows/costanalysis/datamigrations/observability/
swcatalogs)이 DB 기본값(view_type=local, framework_service=mc-web-console-front)
으로 시드되고, 클린 설치·재시드마다 잘못된 host/route로 향하던 문제를 수정한다.

- 5개 메뉴에 iframe 메타 3종 추가 (재시드 내성 확보)
- genericMenuLoader의 frameworkService/path 결정 우선순위를 DB 우선에서
  opts(페이지가 전달하는 known-good 값) 우선으로 변경

Co-authored-by: yh-noh <yhnoh@mz.co.kr>
@dogfootman dogfootman changed the title Sync develop with recent feature/fix work feat: Infra Done 사전검증, Cloud Resources 8종 화면, Node MyImage, CSP Role 관리 개선 외 버그 수정 Aug 11, 2026
@MZC-CSC
MZC-CSC merged commit 9e3cea8 into m-cmp:main Aug 11, 2026
4 checks passed
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