From b9af3d45565fb0338ea51154acd8b6b5f8ac672d Mon Sep 17 00:00:00 2001 From: yh-noh Date: Fri, 26 Jun 2026 10:47:17 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(mci):=20VM=20Server=20Info=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=ED=91=9C=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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개 함수 모두 수정) --- front/assets/js/pages/operation/manage/mci.js | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/front/assets/js/pages/operation/manage/mci.js b/front/assets/js/pages/operation/manage/mci.js index 2d78f95e..11e98573 100644 --- a/front/assets/js/pages/operation/manage/mci.js +++ b/front/assets/js/pages/operation/manage/mci.js @@ -1094,8 +1094,8 @@ export async function vmDetailInfo(vmId) { var operatingSystem = "Ubuntu"; // Architecture 정보만 추출 - var architecture = "" - if (data.addtionalDetails && Array.isArray(data.addtionalDetails)) { + var architecture = data.image?.osType || data.image?.osArchitecture || "" + if (!architecture && data.addtionalDetails && Array.isArray(data.addtionalDetails)) { var archDetail = data.addtionalDetails.find(detail => detail.key === "Architecture") if (archDetail) { architecture = archDetail.value @@ -1131,8 +1131,8 @@ export async function vmDetailInfo(vmId) { $("#server_info_csp").text(providerName) // Row 2: Region, Zone, Config Name - var region = data.region.Region - var zone = data.region.Zone + var region = data.region?.region ?? data.region?.Region ?? '' + var zone = data.region?.zone ?? data.region?.Zone ?? '' var connectionName = data.connectionName $("#server_info_region").text(region) $("#server_info_zone").text(zone) @@ -1171,11 +1171,11 @@ export async function vmDetailInfo(vmId) { // $("#server_detail_view_private_ip").text(data.privateIP) $("#server_detail_view_image_id").text(imageId) $("#server_detail_view_os").text(operatingSystem); - $("#server_detail_view_user_id_pass").text(data.vmUserAccount + "/ *** ") + $("#server_detail_view_user_id_pass").text(data.nodeUserName ? data.nodeUserName + ' / ***' : (data.vmUserAccount ? data.vmUserAccount + ' / ***' : '-')) - var region = data.region.Region + var region = data.region?.region ?? data.region?.Region ?? '' - var zone = data.region.Zone + var zone = data.region?.zone ?? data.region?.Zone ?? '' // connection tab var connectionName = data.connectionName @@ -1206,11 +1206,11 @@ export async function vmDetailInfo(vmId) { var vmDetail = data.cspViewVmDetail; // var vmDetailKeyValueList = vmDetail.KeyValueList var addtionalDetails = data.addtionalDetails - var architecture = ""; + var architecture = data.image?.osType || data.image?.osArchitecture || ""; var vpcId = "" var subnetId = "" - if (addtionalDetails) { + if (!architecture && addtionalDetails) { for (var i = 0; i < addtionalDetails.length; i++) { if (addtionalDetails[i].key === "Architecture") { architecture = addtionalDetails[i].value; @@ -1233,9 +1233,9 @@ export async function vmDetailInfo(vmId) { $("#server_detail_view_subnet_id").text(subnetId + "(" + subnetSystemId + ")") $("#server_detail_view_eth").text(eth) $("#server_detail_view_root_device_type").text(data.rootDiskType); - $("#server_detail_view_root_device").text(data.rootDeviceName); + $("#server_detail_view_root_device").text(data.RootDeviceName ?? data.rootDeviceName ?? ''); $("#server_detail_view_keypair_name").text(data.sshKeyId) - $("#server_detail_view_access_id_pass").text(data.vmUserName + "/ *** ") + $("#server_detail_view_access_id_pass").text(data.vmUserName ? data.vmUserName + ' / ***' : '-') // server spec @@ -1385,11 +1385,11 @@ export async function subGroup_vmDetailInfo(vmId) { // $("#server_detail_view_private_ip").text(data.privateIP) $("#subgroup_server_detail_view_image_id").text(imageId) $("#subgroup_server_detail_view_os").text(operatingSystem); - $("#subgroup_server_detail_view_user_id_pass").text(data.vmUserAccount + "/ *** ") + $("#subgroup_server_detail_view_user_id_pass").text(data.nodeUserName ? data.nodeUserName + ' / ***' : (data.vmUserAccount ? data.vmUserAccount + ' / ***' : '-')) - var region = data.region.Region + var region = data.region?.region ?? data.region?.Region ?? '' - var zone = data.region.Zone + var zone = data.region?.zone ?? data.region?.Zone ?? '' // connection tab var connectionName = data.connectionName @@ -1420,11 +1420,11 @@ export async function subGroup_vmDetailInfo(vmId) { var vmDetail = data.cspViewVmDetail; // var vmDetailKeyValueList = vmDetail.KeyValueList var addtionalDetails = data.addtionalDetails - var architecture = ""; + var architecture = data.image?.osType || data.image?.osArchitecture || ""; var vpcId = "" var subnetId = "" - if (addtionalDetails) { + if (!architecture && addtionalDetails) { for (var i = 0; i < addtionalDetails.length; i++) { if (addtionalDetails[i].key === "Architecture") { architecture = addtionalDetails[i].value; @@ -1447,9 +1447,9 @@ export async function subGroup_vmDetailInfo(vmId) { $("#subgroup_server_detail_view_subnet_id").text(subnetId + "(" + subnetSystemId + ")") $("#subgroup_server_detail_view_eth").text(eth) $("#subgroup_server_detail_view_root_device_type").text(data.rootDiskType); - $("#subgroup_server_detail_view_root_device").text(data.rootDeviceName); + $("#subgroup_server_detail_view_root_device").text(data.RootDeviceName ?? data.rootDeviceName ?? ''); $("#subgroup_server_detail_view_keypair_name").text(data.sshKeyId) - $("#subgroup_server_detail_view_access_id_pass").text(data.vmUserName + "/ *** ") + $("#subgroup_server_detail_view_access_id_pass").text(data.vmUserName ? data.vmUserName + ' / ***' : '-') // server spec From 23d4408983a2cf76ff49accaabedd18ba50e4a6a Mon Sep 17 00:00:00 2001 From: yh-noh Date: Mon, 6 Jul 2026 14:20:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix(mci):=20nodeGroupSize=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EB=AA=85=20=EC=98=A4=EB=A5=98=EB=A1=9C=20VM=20?= =?UTF-8?q?=EB=8C=80=EC=88=98=20=EC=A7=80=EC=A0=95=20=EB=AC=B4=EC=8B=9C?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cb-tumblebug 동적 노드그룹 생성 API는 nodeGroupSize 필드를 사용하지만 mci_api.js가 subGroupSize로 전송해 값이 항상 0으로 무시되고 1대만 생성되던 문제를 수정. Policy(Auto-Scaling) 기능도 동일한 원인으로 nodeGroupDynamicReq 래퍼 키와 nodeGroupSize 필드가 잘못되어 있어 함께 수정. --- front/assets/js/common/api/services/mci_api.js | 6 +++--- front/assets/js/pages/operation/manage/mci.js | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/front/assets/js/common/api/services/mci_api.js b/front/assets/js/common/api/services/mci_api.js index b3e7a4e1..42006c25 100644 --- a/front/assets/js/common/api/services/mci_api.js +++ b/front/assets/js/common/api/services/mci_api.js @@ -225,7 +225,7 @@ export async function mciDynamicReview(mciName, mciDesc, Express_Server_Config_A specId: config.commonSpec, imageId: config.commonImage, name: config.name, - subGroupSize: parseInt(config.subGroupSize) || 1, + nodeGroupSize: parseInt(config.subGroupSize) || 1, connectionName: config.connectionName, description: config.description, rootDiskSize: (config.rootDiskSize !== "" && config.rootDiskSize !== undefined) ? parseInt(config.rootDiskSize) : 0, @@ -274,7 +274,7 @@ export async function mciDynamic(mciName, mciDesc, Express_Server_Config_Arr, ns specId: config.commonSpec, imageId: config.commonImage, name: config.name, - subGroupSize: parseInt(config.subGroupSize) || 1, + nodeGroupSize: parseInt(config.subGroupSize) || 1, connectionName: config.connectionName, description: config.description, rootDiskSize: (config.rootDiskSize !== "" && config.rootDiskSize !== undefined) ? parseInt(config.rootDiskSize) : 0, @@ -332,7 +332,7 @@ export async function vmDynamic(mciId, nsId, Express_Server_Config_Arr) { "description": obj.description, // "label": "", "name": obj.name, - "subGroupSize": parseInt(obj.subGroupSize) || 1, + "nodeGroupSize": parseInt(obj.subGroupSize) || 1, "rootDiskSize": (obj.rootDiskSize !== "" && obj.rootDiskSize !== undefined) ? parseInt(obj.rootDiskSize) : 0, "rootDiskType": obj.rootDiskType, } diff --git a/front/assets/js/pages/operation/manage/mci.js b/front/assets/js/pages/operation/manage/mci.js index 3256c7b0..ff1cf7e2 100644 --- a/front/assets/js/pages/operation/manage/mci.js +++ b/front/assets/js/pages/operation/manage/mci.js @@ -2607,7 +2607,7 @@ function transformPolicyResponse(resp) { actionType = '', placementAlgo = '', postCommand = {}, - vmDynamicReq = {} + nodeGroupDynamicReq = {} } = autoAction; const { @@ -2621,8 +2621,8 @@ function transformPolicyResponse(resp) { description: vmDescription = '', label = {}, name: vmName = '', - subGroupSize = '' - } = vmDynamicReq; + nodeGroupSize: subGroupSize = '' + } = nodeGroupDynamicReq; // API 응답에 없는 필드들은 기본값으로 설정 const connectionName = ''; @@ -3020,7 +3020,7 @@ function buildPolicyRequestData(data) { command: data.command ? [data.command] : [], userName: data.userName }, - subGroupDynamicReq: { + nodeGroupDynamicReq: { imageId: data.commonImage, specId: data.commonSpec, connectionName: data.connectionName, @@ -3032,7 +3032,7 @@ function buildPolicyRequestData(data) { name: data.name, rootDiskSize: data.rootDiskSize, rootDiskType: data.rootDiskType, - subGroupSize: data.subGroupSize, + nodeGroupSize: data.subGroupSize, vmUserPassword: "" } },