217 lines
5.3 KiB
JavaScript
217 lines
5.3 KiB
JavaScript
// 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 ImageType from 'components/ImageType';
|
|
import { get } from 'lodash';
|
|
|
|
export const imageStatus = {
|
|
active: t('Active'),
|
|
saving: t('Saving'),
|
|
queued: t('Queued'),
|
|
pending_delete: t('Pending Delete'),
|
|
killed: t('Killed'),
|
|
deactivated: t('Deactivated'),
|
|
deleted: t('Deleted'),
|
|
};
|
|
|
|
export const imageVisibility = {
|
|
public: t('Public'),
|
|
private: t('Private'),
|
|
shared: t('Shared'),
|
|
// unknown: t('Unknown'),
|
|
};
|
|
|
|
export const imageOS = {
|
|
centos: t('CentOS'),
|
|
ubuntu: t('Ubuntu'),
|
|
fedora: t('Fedora'),
|
|
windows: t('Windows'),
|
|
debian: t('Debian'),
|
|
coreos: t('CoreOS'),
|
|
arch: t('Arch'),
|
|
freebsd: t('FreeBSD'),
|
|
others: t('Others'),
|
|
};
|
|
|
|
export const imageUsage = {
|
|
common: t('Common Server'),
|
|
ironic: t('Bare Metal'),
|
|
ironic_enroll: t('Bare Metal Enroll'),
|
|
octavia: t('Load Balancer'),
|
|
trove: t('Database'),
|
|
magnum: t('Container'),
|
|
heat: t('Application Template'),
|
|
};
|
|
|
|
export const imageFormats = {
|
|
raw: t('Raw'),
|
|
qcow2: t('QCOW2 - QEMU Emulator'),
|
|
iso: t('ISO - Optical Disk Image'),
|
|
ova: t('OVA - Open Virtual Appliance'),
|
|
vdi: t('VDI - Virtual Disk Image'),
|
|
vhd: t('VHD - Virtual Hard Disk'),
|
|
vmdk: t('VMDK - Virtual Machine Disk'),
|
|
aki: t('AKI - Amazon Kernel Image'),
|
|
ami: t('AMI - Amazon Machine Image'),
|
|
ari: t('ARI - Amazon Ramdisk Image'),
|
|
docker: t('Docker'),
|
|
ploop: t('PLOOP - Virtuozzo/Parallels Loopback Disk'),
|
|
};
|
|
|
|
export const imageProperties = {
|
|
id: t('ID'),
|
|
checksum: t('Checksum'),
|
|
members: t('Members'),
|
|
min_disk: t('Min. Disk'),
|
|
min_ram: t('Min. RAM'),
|
|
name: t('Name'),
|
|
owner: t('Owner'),
|
|
tags: t('Tags'),
|
|
updated_at: t('Updated At'),
|
|
virtual_size: t('Virtual Size'),
|
|
visibility: t('Visibility'),
|
|
description: t('Description'),
|
|
architecture: t('Architecture'),
|
|
kernel_id: t('Kernel ID'),
|
|
ramdisk_id: t('Ramdisk ID'),
|
|
created_at: t('Created At'),
|
|
container_format: { label: t('Container Format'), filter: 'uppercase' },
|
|
disk_format: { label: t('Disk Format'), filter: 'uppercase' },
|
|
is_public: { label: t('Is Public'), filter: 'yesNo' },
|
|
type: t('Type'),
|
|
protected: { label: t('Protected'), filter: 'yesNo' },
|
|
size: { label: t('Size'), filter: 'bytes' },
|
|
status: t('Status'),
|
|
};
|
|
|
|
export const transitionStatusList = ['saving', 'queued', 'pending_delete'];
|
|
|
|
export const isOwnerOrAdmin = (item) => {
|
|
const {
|
|
project: { id },
|
|
hasAdminRole,
|
|
} = globals.user;
|
|
if (id === item.owner) {
|
|
return true;
|
|
}
|
|
return hasAdminRole;
|
|
};
|
|
|
|
export const isOwner = (item) => {
|
|
const {
|
|
project: { id },
|
|
} = globals.user;
|
|
if (id === item.owner) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
export const isSnapshot = (item) => {
|
|
const { block_device_mapping: bdm = '[]', image_type } = item;
|
|
return (
|
|
image_type === 'snapshot' ||
|
|
get(JSON.parse(bdm)[0] || {}, 'source_type') === 'snapshot'
|
|
);
|
|
};
|
|
|
|
export const canImageCreateInstance = (item) =>
|
|
item.status === 'active' && item.usage_type === 'common';
|
|
|
|
export const canImageCreateIronicInstance = (item) =>
|
|
item.status === 'active' && item.usage_type === 'ironic';
|
|
|
|
export const canSnapshotCreateInstance = (item) => item.status === 'active';
|
|
|
|
export const getImageSystemTabs = () => {
|
|
const valueList = [
|
|
'centos',
|
|
'ubuntu',
|
|
'fedora',
|
|
'windows',
|
|
'debian',
|
|
'coreos',
|
|
'arch',
|
|
'freebsd',
|
|
'others',
|
|
];
|
|
return valueList.map((value) => {
|
|
const label =
|
|
value !== 'others'
|
|
? value.slice(0, 1).toUpperCase() + value.slice(1)
|
|
: t('Others');
|
|
return {
|
|
label,
|
|
value,
|
|
component: <ImageType type={value} />,
|
|
};
|
|
});
|
|
};
|
|
|
|
export const getImageOS = (item) =>
|
|
imageOS[item.os_distro] ? item.os_distro : 'others';
|
|
|
|
export const getImageColumns = (self) => [
|
|
{
|
|
title: t('Name'),
|
|
dataIndex: 'name',
|
|
},
|
|
{
|
|
title: t('Project'),
|
|
dataIndex: 'project_name',
|
|
hidden: !self.hasAdminRole,
|
|
},
|
|
{
|
|
title: t('Current Project'),
|
|
dataIndex: 'owner',
|
|
hidden: !self.hasAdminRole,
|
|
render: (value) => (value === self.currentProjectId ? t('Yes') : t('No')),
|
|
},
|
|
{
|
|
title: t('System'),
|
|
dataIndex: 'os_distro',
|
|
render: (value) => imageOS[value] || value,
|
|
},
|
|
{
|
|
title: t('OS Version'),
|
|
dataIndex: 'os_version',
|
|
},
|
|
{
|
|
title: t('Min System Disk'),
|
|
dataIndex: 'min_disk',
|
|
render: (text) => `${text}GB`,
|
|
},
|
|
{
|
|
title: t('Min Memory'),
|
|
dataIndex: 'min_ram',
|
|
render: (text) => `${text / 1024}GB`,
|
|
},
|
|
{
|
|
title: t('Access Control'),
|
|
dataIndex: 'visibility',
|
|
render: (value) => imageVisibility[value] || '-',
|
|
},
|
|
{
|
|
title: t('Format'),
|
|
dataIndex: 'disk_format',
|
|
render: (value) => imageFormats[value] || '-',
|
|
},
|
|
{
|
|
title: t('Image Size'),
|
|
dataIndex: 'size',
|
|
valueRender: 'formatSize',
|
|
},
|
|
];
|