feat: Support manila instance page

1. Add manila instance list page
2. Add manila instance detail page
3. Refactor request to better config request

Change-Id: I81207ac67d550297057f121842e2f736e450079f
This commit is contained in:
Jingwei.Zhang
2022-04-22 16:16:33 +08:00
parent 443daf560a
commit 9b6787121d
11 changed files with 487 additions and 26 deletions

View File

@@ -46,6 +46,52 @@ export class HttpRequest {
}
}
addRequestId(config) {
const uuid = uuidv4();
config.headers['X-Openstack-Request-Id'] = `req-${uuid}`;
}
addToken(config) {
const keystoneToken = getLocalStorageItem('keystone_token') || '';
if (keystoneToken) {
config.headers['X-Auth-Token'] = keystoneToken;
}
}
addVersion(config, url) {
const { getOpenstackApiVersion } = require('./constants');
const apiVersionMap = getOpenstackApiVersion(url);
if (apiVersionMap) {
config.headers[apiVersionMap.key] = apiVersionMap.value;
}
}
updateHeaderByConfig(config) {
const { options: { headers, isFormData, ...rest } = {} } = config;
if (!isEmpty(headers)) {
config.headers = {
...config.headers,
...headers,
};
console.log('new config headers', config.headers);
}
if (isFormData) {
delete config.headers['Content-Type'];
}
Object.keys(rest).forEach((key) => {
config[key] = rest[key];
});
}
updateRequestConfig(config, url) {
this.addRequestId(config);
this.addToken(config);
this.addVersion(config, url);
this.updateHeaderByConfig(config);
return config;
}
/**
* @param instance instance of axios
* @param url request url
@@ -55,32 +101,7 @@ export class HttpRequest {
interceptors(instance, url) {
instance.interceptors.request.use(
(config) => {
const uuid = uuidv4();
config.headers['X-Openstack-Request-Id'] = `req-${uuid}`;
const keystoneToken = getLocalStorageItem('keystone_token') || '';
const { getOpenstackApiVersion } = require('./constants');
const apiVersionMap = getOpenstackApiVersion(url);
if (keystoneToken) {
config.headers['X-Auth-Token'] = keystoneToken;
}
if (apiVersionMap) {
config.headers[apiVersionMap.key] = apiVersionMap.value;
}
const { options: { headers, isFormData, ...rest } = {} } = config;
if (!isEmpty(headers)) {
config.headers = {
...config.headers,
...headers,
};
console.log('new config headers', config.headers);
}
if (isFormData) {
delete config.headers['Content-Type'];
}
Object.keys(rest).forEach((key) => {
config[key] = rest[key];
});
return config;
return this.updateRequestConfig(config, url);
},
(err) => Promise.reject(err)
);

View File

@@ -90,6 +90,24 @@ class ManilaClient extends Base {
},
],
},
{
name: 'shareInstances',
key: 'share_instances',
responseKey: 'share_instance',
extendOperations: [
{
key: 'action',
method: 'post',
},
],
subResources: [
{
name: 'exportLocations',
key: 'export_locations',
responseKey: 'export_location',
},
],
},
];
}
}

View File

@@ -437,6 +437,22 @@ const renderMenu = (t) => {
},
],
},
{
path: '/share/share-instance-admin',
name: t('Share Instance'),
key: 'shareInstanceAdmin',
level: 1,
endpoints: 'manilav2',
children: [
{
path: /^\/share\/share-instance-admin\/detail\/.[^/]+$/,
name: t('Share Instance Detail'),
key: 'shareInstanceDetailAdmin',
level: 2,
routePath: '/share/share-instance-admin/detail/:id',
},
],
},
],
},
{

View File

@@ -37,6 +37,7 @@
"Abandoning this stack will preserve the resources deployed by the stack.": "Abandoning this stack will preserve the resources deployed by the stack.",
"Accept Volume Transfer": "Accept Volume Transfer",
"Access Control": "Access Control",
"Access Rules Status": "Access Rules Status",
"Access Type": "Access Type",
"Access Type Setting": "Access Type Setting",
"Action": "Action",
@@ -263,6 +264,7 @@
"Cancel upload successfully.": "Cancel upload successfully.",
"Capacity (GB)": "Capacity (GB)",
"Cape Verde": "Cape Verde",
"Cast Rules To Read Only": "Cast Rules To Read Only",
"Category": "Category",
"Cayman Islands": "Cayman Islands",
"CentOS": "CentOS",
@@ -446,6 +448,7 @@
"Created At": "Created At",
"Created Time": "Created Time",
"Creating": "Creating",
"Creating From Snapshot": "Creating From Snapshot",
"Creation Timeout (Minutes)": "Creation Timeout (Minutes)",
"Credential Type": "Credential Type",
"Croatia (local name: Hrvatska)": "Croatia (local name: Hrvatska)",
@@ -742,10 +745,13 @@
"Expand Advanced Options": "Expand Advanced Options",
"Expired Time": "Expired Time",
"Expires At": "Expires At",
"Export Location": "Export Location",
"Export Locations": "Export Locations",
"Extend Root Volume": "Extend Root Volume",
"Extend Volume": "Extend Volume",
"Extend volume": "Extend volume",
"Extending": "Extending",
"Extending Error": "Extending Error",
"External": "External",
"External Fixed IP": "External Fixed IP",
"External Fixed IPs": "External Fixed IPs",
@@ -972,6 +978,7 @@
"In the last 7 days": "In the last 7 days",
"In the last hour": "In the last hour",
"In-use": "In-use",
"Inactive": "Inactive",
"Increment Backup": "Increment Backup",
"Incremental": "Incremental",
"Incremental Backup": "Incremental Backup",
@@ -1063,6 +1070,7 @@
"Ironic Instance Name": "Ironic Instance Name",
"Is Current Project": "Is Current Project",
"Is Public": "Is Public",
"Is admin only": "Is admin only",
"Is associate to floating ip: ": "Is associate to floating ip: ",
"Is external network port": "Is external network port",
"Isolate": "Isolate",
@@ -1175,11 +1183,13 @@
"Mali": "Mali",
"Malta": "Malta",
"Manage Access": "Manage Access",
"Manage Error": "Manage Error",
"Manage Host": "Manage Host",
"Manage Metadata": "Manage Metadata",
"Manage QoS": "Manage QoS",
"Manage Resource Types": "Manage Resource Types",
"Manage Security Group": "Manage Security Group",
"Manage Starting": "Manage Starting",
"Manage State": "Manage State",
"Manage User": "Manage User",
"Manage User Group": "Manage User Group",
@@ -1230,6 +1240,7 @@
"Migrate Volume": "Migrate Volume",
"Migrate volume": "Migrate volume",
"Migrating": "Migrating",
"Migrating To": "Migrating To",
"Min Memory": "Min Memory",
"Min Memory(GB)": "Min Memory(GB)",
"Min System Disk": "Min System Disk",
@@ -1375,6 +1386,7 @@
"Other Service": "Other Service",
"Others": "Others",
"Out Cluster": "Out Cluster",
"Out of Sync": "Out of Sync",
"Outputs": "Outputs",
"Overlapping allocation pools: {pools}": "Overlapping allocation pools: {pools}",
"Owned Network": "Owned Network",
@@ -1403,6 +1415,7 @@
"Password must be the same with confirm password.": "Password must be the same with confirm password.",
"Paste": "Paste",
"Paste File": "Paste File",
"Path": "Path",
"Pause": "Pause",
"Pause Instance": "Pause Instance",
"Paused": "Paused",
@@ -1535,12 +1548,14 @@
"Pre-Shared Key(PSK) String": "Pre-Shared Key(PSK) String",
"Prefer": "Prefer",
"Prefer(Thread siblings are preferred)": "Prefer(Thread siblings are preferred)",
"Preferred": "Preferred",
"Prefix": "Prefix",
"Prep Resize": "Prep Resize",
"Prepare Template": "Prepare Template",
"Previous": "Previous",
"Private": "Private",
"Profile": "Profile",
"Progress": "Progress",
"Project": "Project",
"Project Admin": "Project Admin",
"Project Detail": "Project Detail",
@@ -1633,6 +1648,7 @@
"Remove Router": "Remove Router",
"Rename": "Rename",
"Rename is to copy the current file to the new file address and delete the current file, which will affect the creation time of the file.": "Rename is to copy the current file to the new file address and delete the current file, which will affect the creation time of the file.",
"Replication Change": "Replication Change",
"Republic Of The Congo": "Republic Of The Congo",
"Request ID": "Request ID",
"Require": "Require",
@@ -1674,6 +1690,7 @@
"Revert Resize or Migrate": "Revert Resize or Migrate",
"Revert Resize/Migrate": "Revert Resize/Migrate",
"Reverting": "Reverting",
"Reverting Error": "Reverting Error",
"Reverting Resize or Migrate": "Reverting Resize or Migrate",
"Role": "Role",
"Role Detail": "Role Detail",
@@ -1753,6 +1770,11 @@
"Share File Storage": "Share File Storage",
"Share Group Type": "Share Group Type",
"Share Group Type Detail": "Share Group Type Detail",
"Share Id": "Share Id",
"Share Instance": "Share Instance",
"Share Instance Detail": "Share Instance Detail",
"Share Network": "Share Network",
"Share Server": "Share Server",
"Share Type": "Share Type",
"Share Type Detail": "Share Type Detail",
"Shared": "Shared",
@@ -1770,6 +1792,9 @@
"Show All Domain": "Show All Domain",
"Show Instance": "Show Instance",
"Show all Data": "Show all Data",
"Shrinking": "Shrinking",
"Shrinking Error": "Shrinking Error",
"Shrinking Possible Data Loss Error": "Shrinking Possible Data Loss Error",
"Shut Down": "Shut Down",
"Shut Off": "Shut Off",
"Shutoff": "Shutoff",
@@ -1884,6 +1909,7 @@
"Switch Language": "Switch Language",
"Switch Project": "Switch Project",
"Switzerland": "Switzerland",
"Syncing": "Syncing",
"Syrian Arab Republic": "Syrian Arab Republic",
"System": "System",
"System Admin": "System Admin",
@@ -2057,6 +2083,9 @@
"Unlimit": "Unlimit",
"Unlock": "Unlock",
"Unlock Instance": "Unlock Instance",
"Unmanage Error": "Unmanage Error",
"Unmanage Starting": "Unmanage Starting",
"Unmanaged": "Unmanaged",
"Unpause": "Unpause",
"Unpause Instance": "Unpause Instance",
"Unrescuing": "Unrescuing",
@@ -2405,6 +2434,8 @@
"services": "services",
"settings": "settings",
"share group type": "share group type",
"share instance": "share instance",
"share instances": "share instances",
"share type": "share type",
"share types": "share types",
"shelve instance": "shelve instance",

View File

@@ -37,6 +37,7 @@
"Abandoning this stack will preserve the resources deployed by the stack.": "废弃此堆栈将保留堆栈部署的资源。",
"Accept Volume Transfer": "接受云硬盘转让",
"Access Control": "访问控制",
"Access Rules Status": "访问规则状态",
"Access Type": "访问类型",
"Access Type Setting": "访问类型设置",
"Action": "操作",
@@ -263,6 +264,7 @@
"Cancel upload successfully.": "取消上传成功。",
"Capacity (GB)": "容量(GB)",
"Cape Verde": "佛得角",
"Cast Rules To Read Only": "规则强制只读",
"Category": "类别",
"Cayman Islands": "开曼群岛",
"CentOS": "",
@@ -446,6 +448,7 @@
"Created At": "创建于",
"Created Time": "创建时间",
"Creating": "创建中",
"Creating From Snapshot": "正在从快照创建共享",
"Creation Timeout (Minutes)": "创建超时(分钟)",
"Credential Type": "凭证类型",
"Croatia (local name: Hrvatska)": "克罗地亚",
@@ -742,10 +745,13 @@
"Expand Advanced Options": "展开高级选项",
"Expired Time": "到期时间",
"Expires At": "到期时间",
"Export Location": "导入位置",
"Export Locations": "导入位置",
"Extend Root Volume": "扩容根硬盘",
"Extend Volume": "扩容云硬盘",
"Extend volume": "扩容云硬盘",
"Extending": "扩展中",
"Extending Error": "扩展失败",
"External": "外部网络",
"External Fixed IP": "外部固定IP",
"External Fixed IPs": "外部固定IP",
@@ -972,6 +978,7 @@
"In the last 7 days": "最近7天",
"In the last hour": "最近1小时",
"In-use": "正在使用",
"Inactive": "非活动状态",
"Increment Backup": "增量备份",
"Incremental": "增量",
"Incremental Backup": "增量备份",
@@ -1063,6 +1070,7 @@
"Ironic Instance Name": "裸机名称",
"Is Current Project": "属于当前项目",
"Is Public": "公有",
"Is admin only": "仅限管理员",
"Is associate to floating ip: ": "已绑定浮动IP",
"Is external network port": "是外部网络的网卡",
"Isolate": "",
@@ -1175,11 +1183,13 @@
"Mali": "马里",
"Malta": "马尔他",
"Manage Access": "访问管理",
"Manage Error": "管理失败",
"Manage Host": "管理主机",
"Manage Metadata": "管理元数据",
"Manage QoS": "管理QoS",
"Manage Resource Types": "管理资源类型",
"Manage Security Group": "管理安全组",
"Manage Starting": "管理开始",
"Manage State": "管理状态",
"Manage User": "管理用户",
"Manage User Group": "管理用户组",
@@ -1230,6 +1240,7 @@
"Migrate Volume": "迁移云硬盘",
"Migrate volume": "迁移云硬盘",
"Migrating": "迁移",
"Migrating To": "迁移目标",
"Min Memory": "最小内存",
"Min Memory(GB)": "最小内存(GB)",
"Min System Disk": "最小系统盘",
@@ -1375,6 +1386,7 @@
"Other Service": "其他服务",
"Others": "其他",
"Out Cluster": "集群外",
"Out of Sync": "不同步",
"Outputs": "输出",
"Overlapping allocation pools: {pools}": "重叠的分配地址池: {pools}",
"Owned Network": "所属网络",
@@ -1403,6 +1415,7 @@
"Password must be the same with confirm password.": "密码和确认密码必须一致。",
"Paste": "粘贴",
"Paste File": "粘贴文件",
"Path": "路径",
"Pause": "暂停",
"Pause Instance": "暂停云主机",
"Paused": "已暂停",
@@ -1535,12 +1548,14 @@
"Pre-Shared Key(PSK) String": "预共享密钥(PSK)",
"Prefer": "",
"Prefer(Thread siblings are preferred)": "Prefer最好有多线程, 若有的话则使用线程的兄弟节点)",
"Preferred": "首选",
"Prefix": "前缀",
"Prep Resize": "预调整",
"Prepare Template": "准备模板",
"Previous": "上一步",
"Private": "私有",
"Profile": "概要",
"Progress": "进度",
"Project": "项目",
"Project Admin": "项目管理权限",
"Project Detail": "项目详情",
@@ -1633,6 +1648,7 @@
"Remove Router": "移除路由器",
"Rename": "重命名",
"Rename is to copy the current file to the new file address and delete the current file, which will affect the creation time of the file.": "重命名是把当前文件复制到新文件地址,并删除当前文件,会影响文件的创建时间。",
"Replication Change": "复制更改中",
"Republic Of The Congo": "刚果共和国",
"Request ID": "请求ID",
"Require": "强制",
@@ -1674,6 +1690,7 @@
"Revert Resize or Migrate": "回滚修改配置/迁移",
"Revert Resize/Migrate": "回滚修改配置/迁移",
"Reverting": "恢复中",
"Reverting Error": "恢复失败",
"Reverting Resize or Migrate": "正在回滚修改配置/迁移",
"Role": "角色",
"Role Detail": "角色详情",
@@ -1753,6 +1770,11 @@
"Share File Storage": "文件存储",
"Share Group Type": "共享组类型",
"Share Group Type Detail": "共享组类型详情",
"Share Id": "共享ID",
"Share Instance": "共享实例",
"Share Instance Detail": "共享实例详情",
"Share Network": "共享网络",
"Share Server": "共享服务器",
"Share Type": "共享类型",
"Share Type Detail": "共享类型详情",
"Shared": "共享",
@@ -1770,6 +1792,9 @@
"Show All Domain": "展开所有域",
"Show Instance": "展示云主机",
"Show all Data": "展开所有数据",
"Shrinking": "缩容中",
"Shrinking Error": "缩容失败",
"Shrinking Possible Data Loss Error": "由数据丢失导致的缩容失败",
"Shut Down": "关闭",
"Shut Off": "关闭",
"Shutoff": "关闭",
@@ -1884,6 +1909,7 @@
"Switch Language": "切换语言",
"Switch Project": "切换项目",
"Switzerland": "瑞士",
"Syncing": "同步中",
"Syrian Arab Republic": "叙利亚",
"System": "系统",
"System Admin": "系统管理权限",
@@ -2057,6 +2083,9 @@
"Unlimit": "无限制",
"Unlock": "解锁",
"Unlock Instance": "解锁云主机",
"Unmanage Error": "取消管理出错",
"Unmanage Starting": "取消管理已开始",
"Unmanaged": "已取消管理",
"Unpause": "恢复",
"Unpause Instance": "恢复云主机",
"Unrescuing": "",
@@ -2405,6 +2434,8 @@
"services": "服务",
"settings": "配置",
"share group type": "共享组类型",
"share instance": "共享实例",
"share instances": "共享实例",
"share type": "共享类型",
"share types": "共享类型",
"shelve instance": "归档云主机",

View File

@@ -0,0 +1,110 @@
// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import React from 'react';
import { inject, observer } from 'mobx-react';
import Base from 'containers/BaseDetail';
import { accessRuleStatus } from 'resources/share';
import { getYesNo } from 'utils/index';
export class BaseDetail extends Base {
get leftCards() {
return [this.baseInfoCard];
}
get rightCards() {
return [this.exportLocations];
}
get baseInfoCard() {
const options = [
{
label: t('Host'),
dataIndex: 'host',
},
{
label: t('Availability Zone'),
dataIndex: 'availability_zone',
},
{
label: t('Share Network'),
dataIndex: 'share_network_id',
},
{
label: t('Share Server'),
dataIndex: 'share_server_id',
},
{
label: t('Share Id'),
dataIndex: 'share_id',
},
{
label: t('Access Rules Status'),
dataIndex: 'access_rules_status',
render: (value) => accessRuleStatus[value] || value,
},
{
label: t('Progress'),
dataIndex: 'progress',
},
{
label: t('Cast Rules To Read Only'),
dataIndex: 'cast_rules_to_readonly',
valueRender: 'yesNo',
},
];
return {
title: t('Base Info'),
options,
};
}
get exportLocations() {
const { exportLocations = [] } = this.detailData || {};
const options = exportLocations.map((location, index) => {
return {
label: `${t('Export Location')} ${index + 1}`,
dataIndex: 'exportLocations',
render: () => {
return (
<div key={location.id}>
<div>
<span style={{ fontWeight: 'bold' }}>{t('Path')}: </span>
{location.path}
</div>
<div>
<span style={{ fontWeight: 'bold' }}>{t('Preferred')}: </span>
{getYesNo(location.preferred)}
</div>
<div>
<span style={{ fontWeight: 'bold' }}>
{t('Is admin only')}:
</span>
{getYesNo(location.is_admin_only)}
</div>
</div>
);
},
};
});
return {
title: t('Export Locations'),
options,
labelCol: 4,
};
}
}
export default inject('rootStore')(observer(BaseDetail));

View File

@@ -0,0 +1,73 @@
// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { inject, observer } from 'mobx-react';
import { ShareInstanceStore } from 'stores/manila/share-instance';
import Base from 'containers/TabDetail';
import { shareStatus } from 'resources/share';
import BaseDetail from './BaseDetail';
export class Detail extends Base {
get name() {
return t('share instance');
}
get policy() {
return 'manila:share_instance:show';
}
get listUrl() {
return this.getRoutePath('shareInstance');
}
get detailInfos() {
return [
{
title: t('Host'),
dataIndex: 'host',
},
{
title: t('Status'),
dataIndex: 'status',
render: (value) => shareStatus[value] || value,
},
{
title: t('Created'),
dataIndex: 'created_at',
valueRender: 'toLocalTime',
},
{
title: t('Updated'),
dataIndex: 'updated_at',
valueRender: 'toLocalTime',
},
];
}
get tabs() {
return [
{
title: t('Base Info'),
key: 'baseInfo',
component: BaseDetail,
},
];
}
init() {
this.store = new ShareInstanceStore();
}
}
export default inject('rootStore')(observer(Detail));

View File

@@ -0,0 +1,73 @@
// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { observer, inject } from 'mobx-react';
import Base from 'containers/List';
import globalShareInstanceStore from '@/stores/manila/share-instance';
import { shareStatus } from 'resources/share';
export class ShareInstance extends Base {
init() {
this.store = globalShareInstanceStore;
}
get policy() {
return 'manila:share_instance:index';
}
get name() {
return t('share instances');
}
get fetchDataByAllProjects() {
return false;
}
getColumns = () => [
{
title: t('ID'),
dataIndex: 'id',
routeName: 'shareInstanceDetailAdmin',
isLink: true,
},
{
title: t('Host'),
dataIndex: 'host',
isHideable: true,
},
{
title: t('Status'),
dataIndex: 'status',
render: (value) => shareStatus[value] || value,
},
{
title: t('Availability Zone'),
dataIndex: 'availability_zone',
},
{
title: t('Share Network'),
dataIndex: 'share_network_id',
},
{
title: t('Share Server'),
dataIndex: 'share_server_id',
},
{
title: t('Share Id'),
dataIndex: 'share_id',
},
];
}
export default inject('rootStore')(observer(ShareInstance));

View File

@@ -18,6 +18,8 @@ import ShareType from '../containers/ShareType';
import ShareTypeDetail from '../containers/ShareType/Detail';
import ShareGroupType from '../containers/ShareGroupType';
import ShareGroupTypeDetail from '../containers/ShareGroupType/Detail';
import ShareInstance from '../containers/ShareInstance';
import ShareInstanceDetail from '../containers/ShareInstance/Detail';
const PATH = '/share';
export default [
@@ -41,6 +43,16 @@ export default [
component: ShareGroupTypeDetail,
exact: true,
},
{
path: `${PATH}/share-instance-admin`,
component: ShareInstance,
exact: true,
},
{
path: `${PATH}/share-instance-admin/detail/:id`,
component: ShareInstanceDetail,
exact: true,
},
{ path: '*', component: E404 },
],
},

38
src/resources/share.js Normal file
View File

@@ -0,0 +1,38 @@
export const shareStatus = {
creating: t('Creating'),
creating_from_snapshot: t('Creating From Snapshot'),
deleting: t('Deleting'),
deleted: t('Deleted'),
error: t('Error'),
error_deleting: t('Error Deleting'),
available: t('Available'),
inactive: t('Inactive'),
manage_starting: t('Manage Starting'),
manage_error: t('Manage Error'),
unmanage_starting: t('Unmanage Starting'),
unmanage_error: t('Unmanage Error'),
unmanaged: t('Unmanaged'),
extending: t('Extending'),
extending_error: t('Extending Error'),
shrinking: t('Shrinking'),
shrinking_error: t('Shrinking Error'),
shrinking_possible_data_loss_error: t('Shrinking Possible Data Loss Error'),
migrating: t('Migrating'),
migrating_to: t('Migrating To'),
replication_change: t('Replication Change'),
reverting: t('Reverting'),
reverting_error: t('Reverting Error'),
};
export const accessRuleStatus = {
active: t('Active'),
error: t('Error'),
syncing: t('Syncing'),
};
export const replicaState = {
active: t('Active'),
error: t('Error'),
in_sync: t('Syncing'),
out_of_sync: t('Out of Sync'),
};

View File

@@ -0,0 +1,38 @@
// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import client from 'client';
import Base from 'stores/base';
export class ShareInstanceStore extends Base {
get client() {
return client.manila.shareInstances;
}
get paramsFunc() {
return (params) => params;
}
async detailDidFetch(item) {
const { id } = item || {};
const { export_locations = [] } = await this.client.exportLocations.list(
id
);
item.exportLocations = export_locations;
return item;
}
}
const globalShareInstanceStore = new ShareInstanceStore();
export default globalShareInstanceStore;