feat: Infra Done 사전검증, Cloud Resources 8종 화면, Node MyImage, CSP Role 관리 개선 외 버그 수정 - #99
Merged
Conversation
- 메뉴 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가 스크롤 없이 그냥 잘려서 보이지 않던 문제 수정.
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>
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.
Summary