diff --git a/src/locales/en.json b/src/locales/en.json
index 6885335c..2ed7ea26 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -1037,6 +1037,7 @@
"Hard Reboot": "Hard Reboot",
"Hard Rebooting": "Hard Rebooting",
"Hash": "Hash",
+ "Health Checking Log": "Health Checking Log",
"Health Monitor Delay": "Health Monitor Delay",
"Health Monitor Detail": "Health Monitor Detail",
"Health Monitor Max Retries": "Health Monitor Max Retries",
@@ -1044,7 +1045,6 @@
"Health Monitor Timeout": "Health Monitor Timeout",
"Health Monitor Type": "Health Monitor Type",
"Health Status": "Health Status",
- "Health Status Reason": "Health Status Reason",
"HealthMonitor": "HealthMonitor",
"HealthMonitor Type": "HealthMonitor Type",
"Healthy": "Healthy",
@@ -1144,7 +1144,6 @@
"Image Backup": "Image Backup",
"Image Detail": "Image Detail",
"Image Driver": "Image Driver",
- "Image ID": "Image ID",
"Image Info": "Image Info",
"Image Name": "Image Name",
"Image Pending Upload": "Image Pending Upload",
diff --git a/src/locales/zh.json b/src/locales/zh.json
index 31d9cdcc..e587740e 100644
--- a/src/locales/zh.json
+++ b/src/locales/zh.json
@@ -1037,6 +1037,7 @@
"Hard Reboot": "硬重启",
"Hard Rebooting": "硬重启中",
"Hash": "Hash",
+ "Health Checking Log": "健康检查日志",
"Health Monitor Delay": "检查间隔(秒)",
"Health Monitor Detail": "健康检查器详情",
"Health Monitor Max Retries": "最大重试次数",
@@ -1044,7 +1045,6 @@
"Health Monitor Timeout": "检查超时时间(秒)",
"Health Monitor Type": "健康检查器类型",
"Health Status": "健康状况",
- "Health Status Reason": "健康状况原因",
"HealthMonitor": "健康检查器",
"HealthMonitor Type": "健康检查类型",
"Healthy": "健康",
@@ -1144,7 +1144,6 @@
"Image Backup": "镜像备份",
"Image Detail": "镜像详情",
"Image Driver": "镜像驱动程序",
- "Image ID": "镜像ID",
"Image Info": "镜像信息",
"Image Name": "镜像名称",
"Image Pending Upload": "镜像待上传",
diff --git a/src/pages/container-infra/containers/Clusters/Detail/BaseDetail.jsx b/src/pages/container-infra/containers/Clusters/Detail/BaseDetail.jsx
index fce0cf63..9eaa36bd 100644
--- a/src/pages/container-infra/containers/Clusters/Detail/BaseDetail.jsx
+++ b/src/pages/container-infra/containers/Clusters/Detail/BaseDetail.jsx
@@ -28,7 +28,7 @@ export class BaseDetail extends Base {
get templateCard() {
const { template = {} } = this.detailData;
- const templateUrl = template
+ const templateUrl = template?.name
? this.getLinkRender(
'containerInfraClusterTemplateDetail',
template.name,
@@ -37,24 +37,17 @@ export class BaseDetail extends Base {
}
)
: '-';
+
const options = [
{
label: t('Name'),
dataIndex: 'template.name',
content: templateUrl,
},
- {
- label: t('ID'),
- dataIndex: 'template.uuid',
- },
{
label: t('COE'),
dataIndex: 'template.coe',
},
- {
- label: t('Image ID'),
- dataIndex: 'template.image_id',
- },
];
return {
@@ -251,10 +244,20 @@ export class BaseDetail extends Base {
}
get stackCard() {
+ const { stack: { id, stack_name: name } = {} } = this.detailData || {};
+
+ const stackUrl = id
+ ? this.getLinkRender('stackDetail', id, {
+ id,
+ name,
+ })
+ : '-';
+
const options = [
{
label: t('Stack ID'),
dataIndex: 'stack_id',
+ content: stackUrl,
},
{
label: t('Stack Faults'),
@@ -282,6 +285,37 @@ export class BaseDetail extends Base {
options,
};
}
+
+ get healthCard() {
+ const { health_status_reason = {} } = this.detailData || {};
+
+ const logContent = !isEmpty(health_status_reason) ? (
+
+ {Object.entries(health_status_reason).map(([key, val]) => {
+ return (
+ -
+ {key} : {val}
+
+ );
+ })}
+
+ ) : (
+ '-'
+ );
+
+ const options = [
+ {
+ label: t('Log'),
+ content: logContent,
+ },
+ ];
+
+ return {
+ title: t('Health Checking Log'),
+ labelCol: 2,
+ options,
+ };
+ }
}
export default inject('rootStore')(observer(BaseDetail));
diff --git a/src/pages/container-infra/containers/Clusters/Detail/index.jsx b/src/pages/container-infra/containers/Clusters/Detail/index.jsx
index 1e192ef2..544e43a5 100644
--- a/src/pages/container-infra/containers/Clusters/Detail/index.jsx
+++ b/src/pages/container-infra/containers/Clusters/Detail/index.jsx
@@ -16,7 +16,6 @@ import { inject, observer } from 'mobx-react';
import Base from 'containers/TabDetail';
import { clusterStatus, healthStatus } from 'resources/magnum/cluster';
import globalClustersStore from 'src/stores/magnum/clusters';
-import { isEmpty } from 'lodash';
import BaseDetail from './BaseDetail';
import actionConfigs from '../actions';
@@ -74,11 +73,6 @@ export class ClustersDetail extends Base {
dataIndex: 'health_status',
render: (value) => healthStatus[value] || value || '-',
},
- {
- title: t('Health Status Reason'),
- dataIndex: 'health_status_reason',
- render: (value) => (isEmpty(value) ? '-' : JSON.stringify(value)),
- },
];
}
diff --git a/src/pages/container-infra/containers/Clusters/actions/Delete.jsx b/src/pages/container-infra/containers/Clusters/actions/Delete.jsx
index c540ed8d..a755629f 100644
--- a/src/pages/container-infra/containers/Clusters/actions/Delete.jsx
+++ b/src/pages/container-infra/containers/Clusters/actions/Delete.jsx
@@ -40,7 +40,11 @@ export default class DeleteClusters extends ConfirmAction {
allowedCheckFunc = (item) => {
const { stack_id, status } = item;
- return !!stack_id && status !== 'DELETE_IN_PROGRESS';
+ const disableDelete =
+ status === 'DELETE_IN_PROGRESS' ||
+ (status === 'CREATE_IN_PROGRESS' && !stack_id);
+
+ return !disableDelete;
};
onSubmit = (data) => globalClustersStore.delete({ id: data.id });
diff --git a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepLabel/index.jsx b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepLabel/index.jsx
index dcd6b914..f7b7ab34 100644
--- a/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepLabel/index.jsx
+++ b/src/pages/container-infra/containers/Clusters/actions/StepCreate/StepLabel/index.jsx
@@ -47,6 +47,11 @@ export class StepLabel extends Base {
type: 'add-select',
itemComponent: KeyValueInput,
addText: t('Add Label'),
+ onChange: (value) => {
+ this.updateContext({
+ additionalLabels: value,
+ });
+ },
},
];
}
diff --git a/src/stores/magnum/clusters.js b/src/stores/magnum/clusters.js
index b3f0838b..17db97fa 100644
--- a/src/stores/magnum/clusters.js
+++ b/src/stores/magnum/clusters.js
@@ -37,6 +37,10 @@ export class ClustersStore extends Base {
return client.neutron.subnets;
}
+ get stackClient() {
+ return client.heat.stacks;
+ }
+
get listWithDetail() {
return true;
}
@@ -70,16 +74,18 @@ export class ClustersStore extends Base {
const masterFlavorId = item.master_flavor_id || templateMasterFlavorId;
const fixedNetworkId = item.fixed_network || templateFixedNetworkId;
const fixedSubnetId = item.fixed_subnet || templateSubnetId;
- const [fr = {}, mfr = {}, fx = {}, sub = {}] = await Promise.all([
+ const [fr = {}, mfr = {}, fx = {}, sub = {}, stack] = await Promise.all([
flavorId ? this.flavorClient.show(flavorId) : {},
masterFlavorId ? this.flavorClient.show(masterFlavorId) : {},
fixedNetworkId ? this.networkClient.show(fixedNetworkId) : {},
fixedSubnetId ? this.subnetClient.show(fixedSubnetId) : {},
+ item.stack_id ? this.stackClient.list({ id: item.stack_id }) : {},
]);
const { flavor } = fr;
const { flavor: masterFlavor } = mfr;
const { network: fixedNetwork } = fx;
const { subnet: fixedSubnet } = sub;
+ const { stacks = [] } = stack;
if (flavor) {
item.flavor = flavor;
}
@@ -92,6 +98,9 @@ export class ClustersStore extends Base {
if (fixedSubnet) {
item.fixedSubnet = fixedSubnet;
}
+ if (stacks[0]) {
+ item.stack = stacks[0];
+ }
return item;
}