feat: update neutron rbac policy
1. update rbac policy list 2. update create rbac policy 3. update edit rbac policy 4. update delete rbac policy 5. update rbac policy detail 6. update i18n Change-Id: Ie0a03cb819d2905a987eb756044881bcab66dc8e
This commit is contained in:
parent
26ed30cd81
commit
3465a2fb2f
@ -542,6 +542,7 @@
|
|||||||
"Create Project": "Create Project",
|
"Create Project": "Create Project",
|
||||||
"Create QoS Policy": "Create QoS Policy",
|
"Create QoS Policy": "Create QoS Policy",
|
||||||
"Create QoS Spec": "Create QoS Spec",
|
"Create QoS Spec": "Create QoS Spec",
|
||||||
|
"Create RBAC Policy": "Create RBAC Policy",
|
||||||
"Create Record Set": "Create Record Set",
|
"Create Record Set": "Create Record Set",
|
||||||
"Create Role": "Create Role",
|
"Create Role": "Create Role",
|
||||||
"Create Router": "Create Router",
|
"Create Router": "Create Router",
|
||||||
@ -734,6 +735,7 @@
|
|||||||
"Delete Project": "Delete Project",
|
"Delete Project": "Delete Project",
|
||||||
"Delete QoS Policy": "Delete QoS Policy",
|
"Delete QoS Policy": "Delete QoS Policy",
|
||||||
"Delete QoS Spec": "Delete QoS Spec",
|
"Delete QoS Spec": "Delete QoS Spec",
|
||||||
|
"Delete RBAC Policy": "Delete RBAC Policy",
|
||||||
"Delete Record Set": "Delete Record Set",
|
"Delete Record Set": "Delete Record Set",
|
||||||
"Delete Role": "Delete Role",
|
"Delete Role": "Delete Role",
|
||||||
"Delete Router": "Delete Router",
|
"Delete Router": "Delete Router",
|
||||||
@ -1234,6 +1236,7 @@
|
|||||||
"IPv6-Route": "IPv6-Route",
|
"IPv6-Route": "IPv6-Route",
|
||||||
"ISO - Optical disc image format": "ISO - Optical disc image format",
|
"ISO - Optical disc image format": "ISO - Optical disc image format",
|
||||||
"Iceland": "Iceland",
|
"Iceland": "Iceland",
|
||||||
|
"Id": "Id",
|
||||||
"Identifier of the physical port on the switch to which node’s port is connected to": "Identifier of the physical port on the switch to which node’s port is connected to",
|
"Identifier of the physical port on the switch to which node’s port is connected to": "Identifier of the physical port on the switch to which node’s port is connected to",
|
||||||
"Identity": "Identity",
|
"Identity": "Identity",
|
||||||
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.",
|
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.",
|
||||||
@ -1745,9 +1748,14 @@
|
|||||||
"OS Version": "OS Version",
|
"OS Version": "OS Version",
|
||||||
"OSDs": "OSDs",
|
"OSDs": "OSDs",
|
||||||
"OSPF": "OSPF",
|
"OSPF": "OSPF",
|
||||||
|
"Object": "Object",
|
||||||
"Object Count": "Object Count",
|
"Object Count": "Object Count",
|
||||||
"Object Count ": "Object Count ",
|
"Object Count ": "Object Count ",
|
||||||
|
"Object ID": "Object ID",
|
||||||
|
"Object ID/Name": "Object ID/Name",
|
||||||
|
"Object Name": "Object Name",
|
||||||
"Object Storage": "Object Storage",
|
"Object Storage": "Object Storage",
|
||||||
|
"Object Type": "Object Type",
|
||||||
"Off": "Off",
|
"Off": "Off",
|
||||||
"Offline": "Offline",
|
"Offline": "Offline",
|
||||||
"Oman": "Oman",
|
"Oman": "Oman",
|
||||||
@ -2060,6 +2068,8 @@
|
|||||||
"RAM": "RAM",
|
"RAM": "RAM",
|
||||||
"RAM (MiB)": "RAM (MiB)",
|
"RAM (MiB)": "RAM (MiB)",
|
||||||
"RAW - Raw disk image format": "RAW - Raw disk image format",
|
"RAW - Raw disk image format": "RAW - Raw disk image format",
|
||||||
|
"RBAC Policies": "RBAC Policies",
|
||||||
|
"RBAC Policy Detail": "RBAC Policy Detail",
|
||||||
"REJECT": "REJECT",
|
"REJECT": "REJECT",
|
||||||
"RESTORE COMPLETE": "RESTORE COMPLETE",
|
"RESTORE COMPLETE": "RESTORE COMPLETE",
|
||||||
"RESUME COMPLETE": "RESUME COMPLETE",
|
"RESUME COMPLETE": "RESUME COMPLETE",
|
||||||
@ -2074,6 +2084,7 @@
|
|||||||
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ",
|
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ",
|
||||||
"Ramdisk ID": "Ramdisk ID",
|
"Ramdisk ID": "Ramdisk ID",
|
||||||
"Ramdisk Image": "Ramdisk Image",
|
"Ramdisk Image": "Ramdisk Image",
|
||||||
|
"Rbac Policy": "Rbac Policy",
|
||||||
"Read and write": "Read and write",
|
"Read and write": "Read and write",
|
||||||
"Read only": "Read only",
|
"Read only": "Read only",
|
||||||
"Real Name": "Real Name",
|
"Real Name": "Real Name",
|
||||||
@ -2251,9 +2262,13 @@
|
|||||||
"Select Project Role": "Select Project Role",
|
"Select Project Role": "Select Project Role",
|
||||||
"Select User Group": "Select User Group",
|
"Select User Group": "Select User Group",
|
||||||
"Select Volume Snapshot": "Select Volume Snapshot",
|
"Select Volume Snapshot": "Select Volume Snapshot",
|
||||||
|
"Select a QoS Policy": "Select a QoS Policy",
|
||||||
"Select a domain": "Select a domain",
|
"Select a domain": "Select a domain",
|
||||||
"Select a login type": "Select a login type",
|
"Select a login type": "Select a login type",
|
||||||
|
"Select a network": "Select a network",
|
||||||
|
"Select a project": "Select a project",
|
||||||
"Select a region": "Select a region",
|
"Select a region": "Select a region",
|
||||||
|
"Select an object type": "Select an object type",
|
||||||
"Selected": "Selected",
|
"Selected": "Selected",
|
||||||
"Selected Members": "Selected Members",
|
"Selected Members": "Selected Members",
|
||||||
"Selected list": "Selected list",
|
"Selected list": "Selected list",
|
||||||
@ -2321,6 +2336,7 @@
|
|||||||
"Shared Network": "Shared Network",
|
"Shared Network": "Shared Network",
|
||||||
"Shared Networks": "Shared Networks",
|
"Shared Networks": "Shared Networks",
|
||||||
"Shared QoS Policies": "Shared QoS Policies",
|
"Shared QoS Policies": "Shared QoS Policies",
|
||||||
|
"Shared QoS Policy": "Shared QoS Policy",
|
||||||
"Shared policy only can insert shared rules.": "Shared policy only can insert shared rules.",
|
"Shared policy only can insert shared rules.": "Shared policy only can insert shared rules.",
|
||||||
"Shares": "Shares",
|
"Shares": "Shares",
|
||||||
"Shelve": "Shelve",
|
"Shelve": "Shelve",
|
||||||
@ -2497,7 +2513,12 @@
|
|||||||
"Target Compute Host": "Target Compute Host",
|
"Target Compute Host": "Target Compute Host",
|
||||||
"Target IP Address": "Target IP Address",
|
"Target IP Address": "Target IP Address",
|
||||||
"Target Port": "Target Port",
|
"Target Port": "Target Port",
|
||||||
|
"Target Project": "Target Project",
|
||||||
|
"Target Project ID": "Target Project ID",
|
||||||
|
"Target Project ID/Name": "Target Project ID/Name",
|
||||||
|
"Target Project Name": "Target Project Name",
|
||||||
"Target Storage Backend": "Target Storage Backend",
|
"Target Storage Backend": "Target Storage Backend",
|
||||||
|
"Target Tenant": "Target Tenant",
|
||||||
"Task State": "Task State",
|
"Task State": "Task State",
|
||||||
"Template Content": "Template Content",
|
"Template Content": "Template Content",
|
||||||
"Template Name": "Template Name",
|
"Template Name": "Template Name",
|
||||||
@ -2883,6 +2904,7 @@
|
|||||||
"You are not allowed to {action}.": "You are not allowed to {action}.",
|
"You are not allowed to {action}.": "You are not allowed to {action}.",
|
||||||
"You can manually specify a physical node to create an instance.": "You can manually specify a physical node to create an instance.",
|
"You can manually specify a physical node to create an instance.": "You can manually specify a physical node to create an instance.",
|
||||||
"You don't have access to get {name}.": "You don't have access to get {name}.",
|
"You don't have access to get {name}.": "You don't have access to get {name}.",
|
||||||
|
"You may update the editable properties of the RBAC policy here.": "You may update the editable properties of the RBAC policy here.",
|
||||||
"Yugoslavia": "Yugoslavia",
|
"Yugoslavia": "Yugoslavia",
|
||||||
"Zambia": "Zambia",
|
"Zambia": "Zambia",
|
||||||
"Zimbabwe": "Zimbabwe",
|
"Zimbabwe": "Zimbabwe",
|
||||||
|
@ -542,6 +542,7 @@
|
|||||||
"Create Project": "프로젝트 생성",
|
"Create Project": "프로젝트 생성",
|
||||||
"Create QoS Policy": "QoS 정책 생성",
|
"Create QoS Policy": "QoS 정책 생성",
|
||||||
"Create QoS Spec": "QOS 스펙 생성",
|
"Create QoS Spec": "QOS 스펙 생성",
|
||||||
|
"Create RBAC Policy": "",
|
||||||
"Create Record Set": "레코드셋 생성",
|
"Create Record Set": "레코드셋 생성",
|
||||||
"Create Role": "역할 생성",
|
"Create Role": "역할 생성",
|
||||||
"Create Router": "라우터 생성",
|
"Create Router": "라우터 생성",
|
||||||
@ -734,6 +735,7 @@
|
|||||||
"Delete Project": "Project 삭제",
|
"Delete Project": "Project 삭제",
|
||||||
"Delete QoS Policy": "QoS Policy 삭제",
|
"Delete QoS Policy": "QoS Policy 삭제",
|
||||||
"Delete QoS Spec": "QOS Spec 삭제",
|
"Delete QoS Spec": "QOS Spec 삭제",
|
||||||
|
"Delete RBAC Policy": "",
|
||||||
"Delete Record Set": "Record Set 삭제",
|
"Delete Record Set": "Record Set 삭제",
|
||||||
"Delete Role": "Role 삭제",
|
"Delete Role": "Role 삭제",
|
||||||
"Delete Router": "Router 삭제",
|
"Delete Router": "Router 삭제",
|
||||||
@ -1234,6 +1236,7 @@
|
|||||||
"IPv6-Route": "",
|
"IPv6-Route": "",
|
||||||
"ISO - Optical disc image format": "ISO - 광디스크 이미지 포멧",
|
"ISO - Optical disc image format": "ISO - 광디스크 이미지 포멧",
|
||||||
"Iceland": "",
|
"Iceland": "",
|
||||||
|
"Id": "",
|
||||||
"Identifier of the physical port on the switch to which node’s port is connected to": "노드의 포트가 연결된 스위치의 물리 포트 식별자",
|
"Identifier of the physical port on the switch to which node’s port is connected to": "노드의 포트가 연결된 스위치의 물리 포트 식별자",
|
||||||
"Identity": "",
|
"Identity": "",
|
||||||
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "만약 \"사용\"이 롤백에 실패하면 리소스는 생성 실패 후 삭제되고 \"사용 안 함\"이 롤백에 실패하면 리소스는 생성 실패 후에도 보존됩니다.",
|
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "만약 \"사용\"이 롤백에 실패하면 리소스는 생성 실패 후 삭제되고 \"사용 안 함\"이 롤백에 실패하면 리소스는 생성 실패 후에도 보존됩니다.",
|
||||||
@ -1745,9 +1748,14 @@
|
|||||||
"OS Version": "OS 버전",
|
"OS Version": "OS 버전",
|
||||||
"OSDs": "",
|
"OSDs": "",
|
||||||
"OSPF": "",
|
"OSPF": "",
|
||||||
|
"Object": "",
|
||||||
"Object Count": "",
|
"Object Count": "",
|
||||||
"Object Count ": "",
|
"Object Count ": "",
|
||||||
|
"Object ID": "",
|
||||||
|
"Object ID/Name": "",
|
||||||
|
"Object Name": "",
|
||||||
"Object Storage": "",
|
"Object Storage": "",
|
||||||
|
"Object Type": "",
|
||||||
"Off": "",
|
"Off": "",
|
||||||
"Offline": "",
|
"Offline": "",
|
||||||
"Oman": "",
|
"Oman": "",
|
||||||
@ -2060,6 +2068,8 @@
|
|||||||
"RAM": "",
|
"RAM": "",
|
||||||
"RAM (MiB)": "",
|
"RAM (MiB)": "",
|
||||||
"RAW - Raw disk image format": "RAW - 원본 디스크 이미지 형식",
|
"RAW - Raw disk image format": "RAW - 원본 디스크 이미지 형식",
|
||||||
|
"RBAC Policies": "",
|
||||||
|
"RBAC Policy Detail": "",
|
||||||
"REJECT": "",
|
"REJECT": "",
|
||||||
"RESTORE COMPLETE": "복원 완료",
|
"RESTORE COMPLETE": "복원 완료",
|
||||||
"RESUME COMPLETE": "재개 완료",
|
"RESUME COMPLETE": "재개 완료",
|
||||||
@ -2074,6 +2084,7 @@
|
|||||||
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram 값은 { ram }이며, NUMA RAM 값은 { totalRam }이어야 합니다. ",
|
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram 값은 { ram }이며, NUMA RAM 값은 { totalRam }이어야 합니다. ",
|
||||||
"Ramdisk ID": "램디스크 ID",
|
"Ramdisk ID": "램디스크 ID",
|
||||||
"Ramdisk Image": "램디스크 이미지",
|
"Ramdisk Image": "램디스크 이미지",
|
||||||
|
"Rbac Policy": "",
|
||||||
"Read and write": "읽기 및 쓰기",
|
"Read and write": "읽기 및 쓰기",
|
||||||
"Read only": "읽기 전용",
|
"Read only": "읽기 전용",
|
||||||
"Real Name": "실제 이름",
|
"Real Name": "실제 이름",
|
||||||
@ -2251,9 +2262,13 @@
|
|||||||
"Select Project Role": "",
|
"Select Project Role": "",
|
||||||
"Select User Group": "",
|
"Select User Group": "",
|
||||||
"Select Volume Snapshot": "",
|
"Select Volume Snapshot": "",
|
||||||
|
"Select a QoS Policy": "",
|
||||||
"Select a domain": "도메인 선택",
|
"Select a domain": "도메인 선택",
|
||||||
"Select a login type": "로그인 유형 선택",
|
"Select a login type": "로그인 유형 선택",
|
||||||
|
"Select a network": "",
|
||||||
|
"Select a project": "",
|
||||||
"Select a region": "지역 선택",
|
"Select a region": "지역 선택",
|
||||||
|
"Select an object type": "",
|
||||||
"Selected": "",
|
"Selected": "",
|
||||||
"Selected Members": "",
|
"Selected Members": "",
|
||||||
"Selected list": "",
|
"Selected list": "",
|
||||||
@ -2321,6 +2336,7 @@
|
|||||||
"Shared Network": "공유 네트워크",
|
"Shared Network": "공유 네트워크",
|
||||||
"Shared Networks": "공유 네트워크",
|
"Shared Networks": "공유 네트워크",
|
||||||
"Shared QoS Policies": "공유 QoS 정책",
|
"Shared QoS Policies": "공유 QoS 정책",
|
||||||
|
"Shared QoS Policy": "",
|
||||||
"Shared policy only can insert shared rules.": "",
|
"Shared policy only can insert shared rules.": "",
|
||||||
"Shares": "",
|
"Shares": "",
|
||||||
"Shelve": "",
|
"Shelve": "",
|
||||||
@ -2497,7 +2513,12 @@
|
|||||||
"Target Compute Host": "",
|
"Target Compute Host": "",
|
||||||
"Target IP Address": "",
|
"Target IP Address": "",
|
||||||
"Target Port": "",
|
"Target Port": "",
|
||||||
|
"Target Project": "",
|
||||||
|
"Target Project ID": "",
|
||||||
|
"Target Project ID/Name": "",
|
||||||
|
"Target Project Name": "",
|
||||||
"Target Storage Backend": "",
|
"Target Storage Backend": "",
|
||||||
|
"Target Tenant": "",
|
||||||
"Task State": "",
|
"Task State": "",
|
||||||
"Template Content": "템플릿 내용",
|
"Template Content": "템플릿 내용",
|
||||||
"Template Name": "템플릿 이름",
|
"Template Name": "템플릿 이름",
|
||||||
@ -2883,6 +2904,7 @@
|
|||||||
"You are not allowed to {action}.": "",
|
"You are not allowed to {action}.": "",
|
||||||
"You can manually specify a physical node to create an instance.": "",
|
"You can manually specify a physical node to create an instance.": "",
|
||||||
"You don't have access to get {name}.": "",
|
"You don't have access to get {name}.": "",
|
||||||
|
"You may update the editable properties of the RBAC policy here.": "",
|
||||||
"Yugoslavia": "",
|
"Yugoslavia": "",
|
||||||
"Zambia": "",
|
"Zambia": "",
|
||||||
"Zimbabwe": "",
|
"Zimbabwe": "",
|
||||||
|
@ -542,6 +542,7 @@
|
|||||||
"Create Project": "Создать проект",
|
"Create Project": "Создать проект",
|
||||||
"Create QoS Policy": "Создать политику QoS",
|
"Create QoS Policy": "Создать политику QoS",
|
||||||
"Create QoS Spec": "Создать спецификацию QoS",
|
"Create QoS Spec": "Создать спецификацию QoS",
|
||||||
|
"Create RBAC Policy": "",
|
||||||
"Create Record Set": "Создать набор записей",
|
"Create Record Set": "Создать набор записей",
|
||||||
"Create Role": "Создать роль",
|
"Create Role": "Создать роль",
|
||||||
"Create Router": "Создать маршрутизатор",
|
"Create Router": "Создать маршрутизатор",
|
||||||
@ -734,6 +735,7 @@
|
|||||||
"Delete Project": "Удалить проект",
|
"Delete Project": "Удалить проект",
|
||||||
"Delete QoS Policy": "Удалить политику QoS",
|
"Delete QoS Policy": "Удалить политику QoS",
|
||||||
"Delete QoS Spec": "Удалить спецификацию QoS",
|
"Delete QoS Spec": "Удалить спецификацию QoS",
|
||||||
|
"Delete RBAC Policy": "",
|
||||||
"Delete Record Set": "Удалить набор записей",
|
"Delete Record Set": "Удалить набор записей",
|
||||||
"Delete Role": "Удалить роль",
|
"Delete Role": "Удалить роль",
|
||||||
"Delete Router": "Удалить маршрутизатор",
|
"Delete Router": "Удалить маршрутизатор",
|
||||||
@ -1234,6 +1236,7 @@
|
|||||||
"IPv6-Route": "IPv6-Route",
|
"IPv6-Route": "IPv6-Route",
|
||||||
"ISO - Optical disc image format": "ISO - Формат оптического диска",
|
"ISO - Optical disc image format": "ISO - Формат оптического диска",
|
||||||
"Iceland": "Исландия",
|
"Iceland": "Исландия",
|
||||||
|
"Id": "",
|
||||||
"Identifier of the physical port on the switch to which node’s port is connected to": "Идентификатор физического порта на коммутаторе, к которому подключен порт узла",
|
"Identifier of the physical port on the switch to which node’s port is connected to": "Идентификатор физического порта на коммутаторе, к которому подключен порт узла",
|
||||||
"Identity": "Идентификация",
|
"Identity": "Идентификация",
|
||||||
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "Если \"Включение\" не удается откатить, ресурс будет удален после неудачного создания; если \"Отключение\" не удается откатить, ресурс останется после неудачного создания.",
|
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "Если \"Включение\" не удается откатить, ресурс будет удален после неудачного создания; если \"Отключение\" не удается откатить, ресурс останется после неудачного создания.",
|
||||||
@ -1745,9 +1748,14 @@
|
|||||||
"OS Version": "Версия ОС",
|
"OS Version": "Версия ОС",
|
||||||
"OSDs": "ОСД",
|
"OSDs": "ОСД",
|
||||||
"OSPF": "OSPF",
|
"OSPF": "OSPF",
|
||||||
|
"Object": "",
|
||||||
"Object Count": "Количество объектов",
|
"Object Count": "Количество объектов",
|
||||||
"Object Count ": "Количество объектов ",
|
"Object Count ": "Количество объектов ",
|
||||||
|
"Object ID": "",
|
||||||
|
"Object ID/Name": "",
|
||||||
|
"Object Name": "",
|
||||||
"Object Storage": "Хранилище объектов",
|
"Object Storage": "Хранилище объектов",
|
||||||
|
"Object Type": "",
|
||||||
"Off": "Выключено",
|
"Off": "Выключено",
|
||||||
"Offline": "Не в сети",
|
"Offline": "Не в сети",
|
||||||
"Oman": "Оман",
|
"Oman": "Оман",
|
||||||
@ -2060,6 +2068,8 @@
|
|||||||
"RAM": "ОЗУ",
|
"RAM": "ОЗУ",
|
||||||
"RAM (MiB)": "ОЗУ (МиБ)",
|
"RAM (MiB)": "ОЗУ (МиБ)",
|
||||||
"RAW - Raw disk image format": "RAW",
|
"RAW - Raw disk image format": "RAW",
|
||||||
|
"RBAC Policies": "",
|
||||||
|
"RBAC Policy Detail": "",
|
||||||
"REJECT": "",
|
"REJECT": "",
|
||||||
"RESTORE COMPLETE": "ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО",
|
"RESTORE COMPLETE": "ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО",
|
||||||
"RESUME COMPLETE": "ВОЗОБНОВЛЕНИЕ ЗАВЕРШЕНО",
|
"RESUME COMPLETE": "ВОЗОБНОВЛЕНИЕ ЗАВЕРШЕНО",
|
||||||
@ -2074,6 +2084,7 @@
|
|||||||
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Значение ОЗУ равно { ram }, значение ОЗУ NUMA равно { totalRam }, должны быть равны.",
|
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Значение ОЗУ равно { ram }, значение ОЗУ NUMA равно { totalRam }, должны быть равны.",
|
||||||
"Ramdisk ID": "Идентификатор дискеты ОЗУ",
|
"Ramdisk ID": "Идентификатор дискеты ОЗУ",
|
||||||
"Ramdisk Image": "Образ дискеты ОЗУ",
|
"Ramdisk Image": "Образ дискеты ОЗУ",
|
||||||
|
"Rbac Policy": "",
|
||||||
"Read and write": "Чтение и запись",
|
"Read and write": "Чтение и запись",
|
||||||
"Read only": "Только чтение",
|
"Read only": "Только чтение",
|
||||||
"Real Name": "Фактическое имя",
|
"Real Name": "Фактическое имя",
|
||||||
@ -2251,9 +2262,13 @@
|
|||||||
"Select Project Role": "Выберите роль проекта",
|
"Select Project Role": "Выберите роль проекта",
|
||||||
"Select User Group": "Выберите группу пользователей",
|
"Select User Group": "Выберите группу пользователей",
|
||||||
"Select Volume Snapshot": "Выберите снимок диска",
|
"Select Volume Snapshot": "Выберите снимок диска",
|
||||||
|
"Select a QoS Policy": "",
|
||||||
"Select a domain": "Выберите домен",
|
"Select a domain": "Выберите домен",
|
||||||
"Select a login type": "Выберите тип входа",
|
"Select a login type": "Выберите тип входа",
|
||||||
|
"Select a network": "",
|
||||||
|
"Select a project": "",
|
||||||
"Select a region": "Выберите регион",
|
"Select a region": "Выберите регион",
|
||||||
|
"Select an object type": "",
|
||||||
"Selected": "Выбран",
|
"Selected": "Выбран",
|
||||||
"Selected Members": "Выбранные участники",
|
"Selected Members": "Выбранные участники",
|
||||||
"Selected list": "Выбранный список",
|
"Selected list": "Выбранный список",
|
||||||
@ -2321,6 +2336,7 @@
|
|||||||
"Shared Network": "Общая сеть",
|
"Shared Network": "Общая сеть",
|
||||||
"Shared Networks": "Общие сети",
|
"Shared Networks": "Общие сети",
|
||||||
"Shared QoS Policies": "Общие политики QoS",
|
"Shared QoS Policies": "Общие политики QoS",
|
||||||
|
"Shared QoS Policy": "",
|
||||||
"Shared policy only can insert shared rules.": "",
|
"Shared policy only can insert shared rules.": "",
|
||||||
"Shares": "Общий доступ",
|
"Shares": "Общий доступ",
|
||||||
"Shelve": "Архивировать",
|
"Shelve": "Архивировать",
|
||||||
@ -2497,7 +2513,12 @@
|
|||||||
"Target Compute Host": "Целевой хост вычислений",
|
"Target Compute Host": "Целевой хост вычислений",
|
||||||
"Target IP Address": "Целевой IP-адрес",
|
"Target IP Address": "Целевой IP-адрес",
|
||||||
"Target Port": "Целевой порт",
|
"Target Port": "Целевой порт",
|
||||||
|
"Target Project": "",
|
||||||
|
"Target Project ID": "",
|
||||||
|
"Target Project ID/Name": "",
|
||||||
|
"Target Project Name": "",
|
||||||
"Target Storage Backend": "Целевой бэкенд хранилища",
|
"Target Storage Backend": "Целевой бэкенд хранилища",
|
||||||
|
"Target Tenant": "",
|
||||||
"Task State": "Состояние задачи",
|
"Task State": "Состояние задачи",
|
||||||
"Template Content": "Содержание шаблона",
|
"Template Content": "Содержание шаблона",
|
||||||
"Template Name": "Имя шаблона",
|
"Template Name": "Имя шаблона",
|
||||||
@ -2883,6 +2904,7 @@
|
|||||||
"You are not allowed to {action}.": "Вам запрещено {action}.",
|
"You are not allowed to {action}.": "Вам запрещено {action}.",
|
||||||
"You can manually specify a physical node to create an instance.": "Вы можете вручную указать физический узел для создания инстанса.",
|
"You can manually specify a physical node to create an instance.": "Вы можете вручную указать физический узел для создания инстанса.",
|
||||||
"You don't have access to get {name}.": "У вас нет доступа к получению {name}.",
|
"You don't have access to get {name}.": "У вас нет доступа к получению {name}.",
|
||||||
|
"You may update the editable properties of the RBAC policy here.": "",
|
||||||
"Yugoslavia": "Югославия",
|
"Yugoslavia": "Югославия",
|
||||||
"Zambia": "Замбия",
|
"Zambia": "Замбия",
|
||||||
"Zimbabwe": "Зимбабве",
|
"Zimbabwe": "Зимбабве",
|
||||||
|
@ -542,6 +542,7 @@
|
|||||||
"Create Project": "Proje Oluştur",
|
"Create Project": "Proje Oluştur",
|
||||||
"Create QoS Policy": "QoS İlkesi Oluştur",
|
"Create QoS Policy": "QoS İlkesi Oluştur",
|
||||||
"Create QoS Spec": "QoS Belirlemesi Oluştur",
|
"Create QoS Spec": "QoS Belirlemesi Oluştur",
|
||||||
|
"Create RBAC Policy": "",
|
||||||
"Create Record Set": "Kayıt Kümesi Oluştur",
|
"Create Record Set": "Kayıt Kümesi Oluştur",
|
||||||
"Create Role": "Rol Oluştur",
|
"Create Role": "Rol Oluştur",
|
||||||
"Create Router": "Yönlendirici Oluştur",
|
"Create Router": "Yönlendirici Oluştur",
|
||||||
@ -734,6 +735,7 @@
|
|||||||
"Delete Project": "Projeyi Sil",
|
"Delete Project": "Projeyi Sil",
|
||||||
"Delete QoS Policy": "QoS İlkesini Sil",
|
"Delete QoS Policy": "QoS İlkesini Sil",
|
||||||
"Delete QoS Spec": "QoS Belirlemesini Sil",
|
"Delete QoS Spec": "QoS Belirlemesini Sil",
|
||||||
|
"Delete RBAC Policy": "",
|
||||||
"Delete Record Set": "Kayıt Setini Sil",
|
"Delete Record Set": "Kayıt Setini Sil",
|
||||||
"Delete Role": "Rolü Sil",
|
"Delete Role": "Rolü Sil",
|
||||||
"Delete Router": "Yönlendiriciyi Sil",
|
"Delete Router": "Yönlendiriciyi Sil",
|
||||||
@ -1234,6 +1236,7 @@
|
|||||||
"IPv6-Route": "IPv6-Route",
|
"IPv6-Route": "IPv6-Route",
|
||||||
"ISO - Optical disc image format": "ISO - Optik disk görüntü biçimi",
|
"ISO - Optical disc image format": "ISO - Optik disk görüntü biçimi",
|
||||||
"Iceland": "İzlanda",
|
"Iceland": "İzlanda",
|
||||||
|
"Id": "",
|
||||||
"Identifier of the physical port on the switch to which node’s port is connected to": "Düğümün bağlı olduğu anahtarın fiziksel ağ adaptörünün tanımlayıcısı",
|
"Identifier of the physical port on the switch to which node’s port is connected to": "Düğümün bağlı olduğu anahtarın fiziksel ağ adaptörünün tanımlayıcısı",
|
||||||
"Identity": "Kimlik",
|
"Identity": "Kimlik",
|
||||||
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "\"Etkin\" işlemi geri alınamazsa, kaynak oluşturma başarısız olduktan sonra kaynak silinecektir; \"Etkin Değil\" işlemi geri alınamazsa, kaynak oluşturma başarısız olduktan sonra kaynak korunacaktır.",
|
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "\"Etkin\" işlemi geri alınamazsa, kaynak oluşturma başarısız olduktan sonra kaynak silinecektir; \"Etkin Değil\" işlemi geri alınamazsa, kaynak oluşturma başarısız olduktan sonra kaynak korunacaktır.",
|
||||||
@ -1745,9 +1748,14 @@
|
|||||||
"OS Version": "İşletim Sistemi Sürümü",
|
"OS Version": "İşletim Sistemi Sürümü",
|
||||||
"OSDs": "OSD'ler",
|
"OSDs": "OSD'ler",
|
||||||
"OSPF": "OSPF",
|
"OSPF": "OSPF",
|
||||||
|
"Object": "",
|
||||||
"Object Count": "Nesne Sayısı",
|
"Object Count": "Nesne Sayısı",
|
||||||
"Object Count ": "Nesne Sayısı ",
|
"Object Count ": "Nesne Sayısı ",
|
||||||
|
"Object ID": "",
|
||||||
|
"Object ID/Name": "",
|
||||||
|
"Object Name": "",
|
||||||
"Object Storage": "Nesne Depolama",
|
"Object Storage": "Nesne Depolama",
|
||||||
|
"Object Type": "",
|
||||||
"Off": "Kapalı",
|
"Off": "Kapalı",
|
||||||
"Offline": "Çevrimdışı",
|
"Offline": "Çevrimdışı",
|
||||||
"Oman": "Umman",
|
"Oman": "Umman",
|
||||||
@ -2060,6 +2068,8 @@
|
|||||||
"RAM": "RAM",
|
"RAM": "RAM",
|
||||||
"RAM (MiB)": "RAM (MiB)",
|
"RAM (MiB)": "RAM (MiB)",
|
||||||
"RAW - Raw disk image format": "RAW - Ham disk imaj formatı",
|
"RAW - Raw disk image format": "RAW - Ham disk imaj formatı",
|
||||||
|
"RBAC Policies": "",
|
||||||
|
"RBAC Policy Detail": "",
|
||||||
"REJECT": "",
|
"REJECT": "",
|
||||||
"RESTORE COMPLETE": "GERİ YÜKLEME TAMAMLANDI",
|
"RESTORE COMPLETE": "GERİ YÜKLEME TAMAMLANDI",
|
||||||
"RESUME COMPLETE": "DEVAM ET TAMAMLANDI",
|
"RESUME COMPLETE": "DEVAM ET TAMAMLANDI",
|
||||||
@ -2074,6 +2084,7 @@
|
|||||||
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram değeri { ram } ,NUMA RAM değeri { totalRam }'ne eşit olmalıdır.",
|
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "Ram değeri { ram } ,NUMA RAM değeri { totalRam }'ne eşit olmalıdır.",
|
||||||
"Ramdisk ID": "Ramdisk ID'si",
|
"Ramdisk ID": "Ramdisk ID'si",
|
||||||
"Ramdisk Image": "Ramdisk İmajı",
|
"Ramdisk Image": "Ramdisk İmajı",
|
||||||
|
"Rbac Policy": "",
|
||||||
"Read and write": "Okuma ve yazma",
|
"Read and write": "Okuma ve yazma",
|
||||||
"Read only": "Sadece okunur",
|
"Read only": "Sadece okunur",
|
||||||
"Real Name": "Gerçek İsim",
|
"Real Name": "Gerçek İsim",
|
||||||
@ -2251,9 +2262,13 @@
|
|||||||
"Select Project Role": "Proje Rolü Seçin",
|
"Select Project Role": "Proje Rolü Seçin",
|
||||||
"Select User Group": "Kullanıcı Grubu Seçin",
|
"Select User Group": "Kullanıcı Grubu Seçin",
|
||||||
"Select Volume Snapshot": "Disk Anlık Görüntüsü Seçin",
|
"Select Volume Snapshot": "Disk Anlık Görüntüsü Seçin",
|
||||||
|
"Select a QoS Policy": "",
|
||||||
"Select a domain": "Bir etki alanı seçin",
|
"Select a domain": "Bir etki alanı seçin",
|
||||||
"Select a login type": "Bir giriş türü seçin",
|
"Select a login type": "Bir giriş türü seçin",
|
||||||
|
"Select a network": "",
|
||||||
|
"Select a project": "",
|
||||||
"Select a region": "Bir bölge seçin",
|
"Select a region": "Bir bölge seçin",
|
||||||
|
"Select an object type": "",
|
||||||
"Selected": "Seçilen",
|
"Selected": "Seçilen",
|
||||||
"Selected Members": "Seçilen Üyeler",
|
"Selected Members": "Seçilen Üyeler",
|
||||||
"Selected list": "Seçilen liste",
|
"Selected list": "Seçilen liste",
|
||||||
@ -2321,6 +2336,7 @@
|
|||||||
"Shared Network": "Paylaşılan Ağ",
|
"Shared Network": "Paylaşılan Ağ",
|
||||||
"Shared Networks": "Paylaşılan Ağlar",
|
"Shared Networks": "Paylaşılan Ağlar",
|
||||||
"Shared QoS Policies": "Paylaşılan QoS İlkeleri",
|
"Shared QoS Policies": "Paylaşılan QoS İlkeleri",
|
||||||
|
"Shared QoS Policy": "",
|
||||||
"Shared policy only can insert shared rules.": "",
|
"Shared policy only can insert shared rules.": "",
|
||||||
"Shares": "Paylaşımlar",
|
"Shares": "Paylaşımlar",
|
||||||
"Shelve": "Rafa Kaldır",
|
"Shelve": "Rafa Kaldır",
|
||||||
@ -2497,7 +2513,12 @@
|
|||||||
"Target Compute Host": "Hedef Hesaplama Ana Bilgisayarı",
|
"Target Compute Host": "Hedef Hesaplama Ana Bilgisayarı",
|
||||||
"Target IP Address": "Hedef IP Adresi",
|
"Target IP Address": "Hedef IP Adresi",
|
||||||
"Target Port": "Hedef Ağ Adaptörü",
|
"Target Port": "Hedef Ağ Adaptörü",
|
||||||
|
"Target Project": "",
|
||||||
|
"Target Project ID": "",
|
||||||
|
"Target Project ID/Name": "",
|
||||||
|
"Target Project Name": "",
|
||||||
"Target Storage Backend": "Hedef Depolama Arkayüzü",
|
"Target Storage Backend": "Hedef Depolama Arkayüzü",
|
||||||
|
"Target Tenant": "",
|
||||||
"Task State": "Görev Durumu",
|
"Task State": "Görev Durumu",
|
||||||
"Template Content": "Taslak İçeriği",
|
"Template Content": "Taslak İçeriği",
|
||||||
"Template Name": "Taslak Adı",
|
"Template Name": "Taslak Adı",
|
||||||
@ -2883,6 +2904,7 @@
|
|||||||
"You are not allowed to {action}.": "{action} işlemi yapma izniniz yok.",
|
"You are not allowed to {action}.": "{action} işlemi yapma izniniz yok.",
|
||||||
"You can manually specify a physical node to create an instance.": "Bir sanal makine oluşturmak için fiziksel bir düğümü manuel olarak belirleyebilirsiniz.",
|
"You can manually specify a physical node to create an instance.": "Bir sanal makine oluşturmak için fiziksel bir düğümü manuel olarak belirleyebilirsiniz.",
|
||||||
"You don't have access to get {name}.": "{name} öğesini almak için erişim izniniz yok.",
|
"You don't have access to get {name}.": "{name} öğesini almak için erişim izniniz yok.",
|
||||||
|
"You may update the editable properties of the RBAC policy here.": "",
|
||||||
"Yugoslavia": "Yugoslavya",
|
"Yugoslavia": "Yugoslavya",
|
||||||
"Zambia": "Zambiya",
|
"Zambia": "Zambiya",
|
||||||
"Zimbabwe": "Zimbabve",
|
"Zimbabwe": "Zimbabve",
|
||||||
|
@ -542,6 +542,7 @@
|
|||||||
"Create Project": "创建项目",
|
"Create Project": "创建项目",
|
||||||
"Create QoS Policy": "创建QoS策略",
|
"Create QoS Policy": "创建QoS策略",
|
||||||
"Create QoS Spec": "创建QoS规格",
|
"Create QoS Spec": "创建QoS规格",
|
||||||
|
"Create RBAC Policy": "创建RBAC策略",
|
||||||
"Create Record Set": "创建记录集",
|
"Create Record Set": "创建记录集",
|
||||||
"Create Role": "创建角色",
|
"Create Role": "创建角色",
|
||||||
"Create Router": "创建路由器",
|
"Create Router": "创建路由器",
|
||||||
@ -734,6 +735,7 @@
|
|||||||
"Delete Project": "删除项目",
|
"Delete Project": "删除项目",
|
||||||
"Delete QoS Policy": "删除QoS策略",
|
"Delete QoS Policy": "删除QoS策略",
|
||||||
"Delete QoS Spec": "删除QoS规格",
|
"Delete QoS Spec": "删除QoS规格",
|
||||||
|
"Delete RBAC Policy": "删除RBAC策略",
|
||||||
"Delete Record Set": "删除记录集",
|
"Delete Record Set": "删除记录集",
|
||||||
"Delete Role": "删除角色",
|
"Delete Role": "删除角色",
|
||||||
"Delete Router": "删除路由器",
|
"Delete Router": "删除路由器",
|
||||||
@ -1234,6 +1236,7 @@
|
|||||||
"IPv6-Route": "",
|
"IPv6-Route": "",
|
||||||
"ISO - Optical disc image format": "ISO - 光盘映像格式",
|
"ISO - Optical disc image format": "ISO - 光盘映像格式",
|
||||||
"Iceland": "冰岛",
|
"Iceland": "冰岛",
|
||||||
|
"Id": "",
|
||||||
"Identifier of the physical port on the switch to which node’s port is connected to": "节点端口所连接的交换机物理端口ID",
|
"Identifier of the physical port on the switch to which node’s port is connected to": "节点端口所连接的交换机物理端口ID",
|
||||||
"Identity": "身份管理",
|
"Identity": "身份管理",
|
||||||
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "若“启用”失败回滚,创建失败后会删除资源;若“禁用”失败回滚,创建失败后会保留资源。",
|
"If \"Enable\" fails to roll back, the resource will be deleted after the creation fails; if \"Disable\" fails to roll back, the resource will be retained after the creation fails.": "若“启用”失败回滚,创建失败后会删除资源;若“禁用”失败回滚,创建失败后会保留资源。",
|
||||||
@ -1745,9 +1748,14 @@
|
|||||||
"OS Version": "系统版本",
|
"OS Version": "系统版本",
|
||||||
"OSDs": "",
|
"OSDs": "",
|
||||||
"OSPF": "",
|
"OSPF": "",
|
||||||
|
"Object": "对象",
|
||||||
"Object Count": "对象数量",
|
"Object Count": "对象数量",
|
||||||
"Object Count ": "Object数量",
|
"Object Count ": "Object数量",
|
||||||
|
"Object ID": "对象ID",
|
||||||
|
"Object ID/Name": "对象ID/名称",
|
||||||
|
"Object Name": "对象名称",
|
||||||
"Object Storage": "对象存储",
|
"Object Storage": "对象存储",
|
||||||
|
"Object Type": "对象类型",
|
||||||
"Off": "关",
|
"Off": "关",
|
||||||
"Offline": "离线",
|
"Offline": "离线",
|
||||||
"Oman": "阿曼",
|
"Oman": "阿曼",
|
||||||
@ -2060,6 +2068,8 @@
|
|||||||
"RAM": "内存",
|
"RAM": "内存",
|
||||||
"RAM (MiB)": "内存 (MiB)",
|
"RAM (MiB)": "内存 (MiB)",
|
||||||
"RAW - Raw disk image format": "RAW - 原始磁盘映像格式",
|
"RAW - Raw disk image format": "RAW - 原始磁盘映像格式",
|
||||||
|
"RBAC Policies": "RBAC策略",
|
||||||
|
"RBAC Policy Detail": "RBAC策略详情",
|
||||||
"REJECT": "拒绝",
|
"REJECT": "拒绝",
|
||||||
"RESTORE COMPLETE": "恢复完成",
|
"RESTORE COMPLETE": "恢复完成",
|
||||||
"RESUME COMPLETE": "恢复完成",
|
"RESUME COMPLETE": "恢复完成",
|
||||||
@ -2074,6 +2084,7 @@
|
|||||||
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "内存是 { ram }MiB,NUMA节点的内存是{ totalRam }MiB,需要一致。",
|
"Ram value is { ram }, NUMA RAM value is { totalRam }, need to be equal. ": "内存是 { ram }MiB,NUMA节点的内存是{ totalRam }MiB,需要一致。",
|
||||||
"Ramdisk ID": "内存盘ID",
|
"Ramdisk ID": "内存盘ID",
|
||||||
"Ramdisk Image": "Ramdisk镜像",
|
"Ramdisk Image": "Ramdisk镜像",
|
||||||
|
"Rbac Policy": "RBAC策略",
|
||||||
"Read and write": "可读可写",
|
"Read and write": "可读可写",
|
||||||
"Read only": "只读",
|
"Read only": "只读",
|
||||||
"Real Name": "真实姓名",
|
"Real Name": "真实姓名",
|
||||||
@ -2251,9 +2262,13 @@
|
|||||||
"Select Project Role": "选择项目角色",
|
"Select Project Role": "选择项目角色",
|
||||||
"Select User Group": "选择用户组",
|
"Select User Group": "选择用户组",
|
||||||
"Select Volume Snapshot": "选择云硬盘快照",
|
"Select Volume Snapshot": "选择云硬盘快照",
|
||||||
|
"Select a QoS Policy": "请选择Qos策略",
|
||||||
"Select a domain": "请选择Domain",
|
"Select a domain": "请选择Domain",
|
||||||
"Select a login type": "请选择登录方式",
|
"Select a login type": "请选择登录方式",
|
||||||
|
"Select a network": "请选择网络",
|
||||||
|
"Select a project": "请选择项目",
|
||||||
"Select a region": "请选择Region",
|
"Select a region": "请选择Region",
|
||||||
|
"Select an object type": "请选择对象类型",
|
||||||
"Selected": "已选",
|
"Selected": "已选",
|
||||||
"Selected Members": "已选择成员",
|
"Selected Members": "已选择成员",
|
||||||
"Selected list": "已选列表",
|
"Selected list": "已选列表",
|
||||||
@ -2321,6 +2336,7 @@
|
|||||||
"Shared Network": "共享网络",
|
"Shared Network": "共享网络",
|
||||||
"Shared Networks": "共享网络",
|
"Shared Networks": "共享网络",
|
||||||
"Shared QoS Policies": "共享QoS策略",
|
"Shared QoS Policies": "共享QoS策略",
|
||||||
|
"Shared QoS Policy": "共享QoS策略",
|
||||||
"Shared policy only can insert shared rules.": "共享的策略只可以插入共享的规则。",
|
"Shared policy only can insert shared rules.": "共享的策略只可以插入共享的规则。",
|
||||||
"Shares": "共享",
|
"Shares": "共享",
|
||||||
"Shelve": "归档",
|
"Shelve": "归档",
|
||||||
@ -2497,7 +2513,12 @@
|
|||||||
"Target Compute Host": "目标计算节点",
|
"Target Compute Host": "目标计算节点",
|
||||||
"Target IP Address": "目标IP地址",
|
"Target IP Address": "目标IP地址",
|
||||||
"Target Port": "目标网卡",
|
"Target Port": "目标网卡",
|
||||||
|
"Target Project": "目标项目",
|
||||||
|
"Target Project ID": "目标项目ID",
|
||||||
|
"Target Project ID/Name": "目标项目ID/名称",
|
||||||
|
"Target Project Name": "目标项目名称",
|
||||||
"Target Storage Backend": "目标存储后端",
|
"Target Storage Backend": "目标存储后端",
|
||||||
|
"Target Tenant": "目标项目",
|
||||||
"Task State": "任务状态",
|
"Task State": "任务状态",
|
||||||
"Template Content": "模板内容",
|
"Template Content": "模板内容",
|
||||||
"Template Name": "模板名称",
|
"Template Name": "模板名称",
|
||||||
@ -2883,6 +2904,7 @@
|
|||||||
"You are not allowed to {action}.": "无法{ action }。",
|
"You are not allowed to {action}.": "无法{ action }。",
|
||||||
"You can manually specify a physical node to create an instance.": "您可以手动指定一台物理节点来创建云主机。",
|
"You can manually specify a physical node to create an instance.": "您可以手动指定一台物理节点来创建云主机。",
|
||||||
"You don't have access to get {name}.": "您没有权限访问{name}。",
|
"You don't have access to get {name}.": "您没有权限访问{name}。",
|
||||||
|
"You may update the editable properties of the RBAC policy here.": "您可以在此处更新 RBAC 策略的可编辑属性。",
|
||||||
"Yugoslavia": "南斯拉夫",
|
"Yugoslavia": "南斯拉夫",
|
||||||
"Zambia": "赞比亚",
|
"Zambia": "赞比亚",
|
||||||
"Zimbabwe": "津巴布韦",
|
"Zimbabwe": "津巴布韦",
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import { inject, observer } from 'mobx-react';
|
import { inject, observer } from 'mobx-react';
|
||||||
import Base from 'containers/BaseDetail';
|
import Base from 'containers/BaseDetail';
|
||||||
|
import { objectTypes } from 'resources/neutron/rbac-policy';
|
||||||
|
|
||||||
export class BaseDetail extends Base {
|
export class BaseDetail extends Base {
|
||||||
get leftCards() {
|
get leftCards() {
|
||||||
@ -21,21 +22,30 @@ export class BaseDetail extends Base {
|
|||||||
|
|
||||||
get baseInfoCard() {
|
get baseInfoCard() {
|
||||||
const options = [
|
const options = [
|
||||||
{
|
|
||||||
label: t('ID'),
|
|
||||||
dataIndex: 'id',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: t('Project ID'),
|
|
||||||
dataIndex: 'project_id',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: t('Object Type'),
|
label: t('Object Type'),
|
||||||
dataIndex: 'object_type',
|
dataIndex: 'object_type',
|
||||||
|
valueMap: objectTypes,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Object ID'),
|
label: t('Object ID'),
|
||||||
dataIndex: 'object_id',
|
dataIndex: 'object_id',
|
||||||
|
render: (value) => {
|
||||||
|
const { object_type } = this.detailData;
|
||||||
|
if (object_type === 'network') {
|
||||||
|
return this.getLinkRender('networkDetail', value, { id: value });
|
||||||
|
}
|
||||||
|
if (object_type === 'qos_policy') {
|
||||||
|
return this.getLinkRender('networkQosDetail', value, {
|
||||||
|
id: value,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('Object Name'),
|
||||||
|
dataIndex: 'object.name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Action'),
|
label: t('Action'),
|
||||||
@ -44,11 +54,24 @@ export class BaseDetail extends Base {
|
|||||||
{
|
{
|
||||||
label: t('Target Tenant'),
|
label: t('Target Tenant'),
|
||||||
dataIndex: 'target_tenant',
|
dataIndex: 'target_tenant',
|
||||||
|
render: (value) => {
|
||||||
|
if (value === '*') {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
const { targetProject } = this.detailData;
|
||||||
|
return this.getLinkRender(
|
||||||
|
'projectDetail',
|
||||||
|
targetProject?.name || value,
|
||||||
|
{
|
||||||
|
id: value,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: t('Rbac Policy Detail'),
|
title: t('Detail Info'),
|
||||||
options,
|
options,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -22,13 +22,22 @@ export class RbacPolicyDetail extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get listUrl() {
|
get listUrl() {
|
||||||
return this.getRoutePath('rbacPoliciesAdmin');
|
return this.getRoutePath('rbacPolicy');
|
||||||
}
|
}
|
||||||
|
|
||||||
get actionConfigs() {
|
get actionConfigs() {
|
||||||
return actionConfigs;
|
return actionConfigs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get detailInfos() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
title: t('Project ID'),
|
||||||
|
dataIndex: 'project_id',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
get tabs() {
|
get tabs() {
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{
|
{
|
||||||
|
@ -12,30 +12,34 @@
|
|||||||
|
|
||||||
import { inject, observer } from 'mobx-react';
|
import { inject, observer } from 'mobx-react';
|
||||||
import { ModalAction } from 'containers/Action';
|
import { ModalAction } from 'containers/Action';
|
||||||
import Notify from 'src/components/Notify';
|
|
||||||
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
||||||
import { ProjectStore } from 'stores/keystone/project';
|
import { ProjectStore } from 'stores/keystone/project';
|
||||||
import { NetworkStore } from 'stores/neutron/network';
|
import { NetworkStore } from 'stores/neutron/network';
|
||||||
import { QoSPolicyStore } from 'stores/neutron/qos-policy';
|
import { QoSPolicyStore } from 'stores/neutron/qos-policy';
|
||||||
import { observable } from 'mobx';
|
import { qosEndpoint } from 'client/client/constants';
|
||||||
|
import { anyProject } from 'resources/neutron/rbac-policy';
|
||||||
|
|
||||||
export class Create extends ModalAction {
|
export class Create extends ModalAction {
|
||||||
static id = 'create-policy';
|
static id = 'create-policy';
|
||||||
|
|
||||||
static title = t('Create');
|
static title = t('Create RBAC Policy');
|
||||||
|
|
||||||
@observable allNetworks;
|
static policy = 'create_rbac_policy';
|
||||||
|
|
||||||
@observable allProjects;
|
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
return t('Create');
|
return t('Create');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get messageHasItemName() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.state = {
|
this.state = {
|
||||||
...this.state,
|
...this.state,
|
||||||
isReady: false,
|
isReady: false,
|
||||||
|
allNetworks: [],
|
||||||
|
qosPolices: [],
|
||||||
};
|
};
|
||||||
this.store = new RbacPoliciesStore();
|
this.store = new RbacPoliciesStore();
|
||||||
this.projectStore = new ProjectStore();
|
this.projectStore = new ProjectStore();
|
||||||
@ -53,33 +57,31 @@ export class Create extends ModalAction {
|
|||||||
this.setState({ isReady: true });
|
this.setState({ isReady: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
get tips() {
|
get enableQosPolicy() {
|
||||||
return t('From here you can create a rbac policy.');
|
return qosEndpoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getProjects() {
|
async getProjects() {
|
||||||
this.allProjects = await this.projectStore.pureFetchList();
|
const allProjects = await this.projectStore.pureFetchList();
|
||||||
this.addNewElementToProjectList();
|
allProjects.unshift(anyProject);
|
||||||
}
|
this.setState({ allProjects });
|
||||||
|
|
||||||
addNewElementToProjectList() {
|
|
||||||
const newElement = {
|
|
||||||
id: '*',
|
|
||||||
name: '*',
|
|
||||||
};
|
|
||||||
this.allProjects.unshift(newElement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getQoSPolicy() {
|
async getQoSPolicy() {
|
||||||
|
if (!this.enableQosPolicy) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
await this.qosPolicyStore.fetchList();
|
await this.qosPolicyStore.fetchList();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getNetworks() {
|
async getNetworks() {
|
||||||
this.allNetworks = await this.networkStore.pureFetchList();
|
const allNetworks = await this.networkStore.pureFetchList();
|
||||||
|
this.setState({ allNetworks });
|
||||||
}
|
}
|
||||||
|
|
||||||
get projects() {
|
get projects() {
|
||||||
return (this.allProjects || []).map((it) => ({
|
const { allProjects } = this.state;
|
||||||
|
return (allProjects || []).map((it) => ({
|
||||||
value: it.id,
|
value: it.id,
|
||||||
label: it.name,
|
label: it.name,
|
||||||
}));
|
}));
|
||||||
@ -92,49 +94,65 @@ export class Create extends ModalAction {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
get networks() {
|
get sharedNetworks() {
|
||||||
return (this.allNetworks || []).map((it) => ({
|
const { allNetworks } = this.state;
|
||||||
value: it.id,
|
return (allNetworks || [])
|
||||||
label: it.name,
|
.filter((it) => it.shared === true)
|
||||||
}));
|
.map((it) => ({
|
||||||
|
value: it.id,
|
||||||
|
label: it.name,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
get externalNetworks() {
|
||||||
|
const { allNetworks } = this.state;
|
||||||
|
return (allNetworks || [])
|
||||||
|
.filter((it) => it['router:external'] === true)
|
||||||
|
.map((it) => ({
|
||||||
|
value: it.id,
|
||||||
|
label: it.name,
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
onSubmit = async (values) => {
|
onSubmit = async (values) => {
|
||||||
try {
|
const { object_type, ...rest } = values;
|
||||||
const { object_type, ...rest } = values;
|
const action =
|
||||||
const action =
|
object_type === 'network' || object_type === 'qos_policy'
|
||||||
object_type === 'network' || object_type === 'qos_policy'
|
? 'access_as_shared'
|
||||||
? 'access_as_shared'
|
: 'access_as_external';
|
||||||
: 'access_as_external';
|
const updatedType =
|
||||||
const updatedType =
|
object_type === 'external-network' ? 'network' : object_type;
|
||||||
object_type === 'external-network' ? 'network' : object_type;
|
const body = {
|
||||||
const body = {
|
...rest,
|
||||||
...rest,
|
object_type: updatedType,
|
||||||
object_type: updatedType,
|
action,
|
||||||
action,
|
};
|
||||||
};
|
|
||||||
|
|
||||||
await this.store.create(body);
|
return this.store.create(body);
|
||||||
} catch (error) {
|
|
||||||
Notify.errorWithDetail(null, error.toString());
|
|
||||||
return Promise.reject(error);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static allowed = () => Promise.resolve(true);
|
static allowed = () => Promise.resolve(true);
|
||||||
|
|
||||||
get createObjectList() {
|
get createObjectList() {
|
||||||
return [
|
const items = [
|
||||||
{ value: 'network', label: t('Shared Network') },
|
{ value: 'network', label: t('Shared Network') },
|
||||||
{ value: 'external-network', label: t('External Network') },
|
{ value: 'external-network', label: t('External Network') },
|
||||||
{ value: 'qos_policy', label: t('Shared QoS Policy') },
|
|
||||||
];
|
];
|
||||||
|
if (this.enableQosPolicy) {
|
||||||
|
items.push({ value: 'qos_policy', label: t('Shared QoS Policy') });
|
||||||
|
}
|
||||||
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
onChangeHandler = async (value) => {
|
onChangeHandler = async (value) => {
|
||||||
this.setState({
|
this.setState(
|
||||||
object_type: value,
|
{
|
||||||
});
|
object_type: value,
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
this.updateFormValue('object_id', undefined);
|
||||||
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
get formItems() {
|
get formItems() {
|
||||||
@ -156,8 +174,8 @@ export class Create extends ModalAction {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'object_type',
|
name: 'object_type',
|
||||||
label: t('Action and Object Type'),
|
label: t('Object Type'),
|
||||||
placeholder: t('Select action and object type'),
|
placeholder: t('Select an object type'),
|
||||||
type: 'select',
|
type: 'select',
|
||||||
onChange: this.onChangeHandler,
|
onChange: this.onChangeHandler,
|
||||||
options: this.createObjectList,
|
options: this.createObjectList,
|
||||||
@ -168,10 +186,9 @@ export class Create extends ModalAction {
|
|||||||
label: t('Shared Network'),
|
label: t('Shared Network'),
|
||||||
placeholder: t('Select a network'),
|
placeholder: t('Select a network'),
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: this.networks,
|
options: this.sharedNetworks,
|
||||||
hidden: !isNetwork,
|
hidden: !isNetwork,
|
||||||
isLoading: !this.state.isReady,
|
isLoading: !this.state.isReady,
|
||||||
onChange: this.onSourceEnvironmentChange,
|
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -179,7 +196,7 @@ export class Create extends ModalAction {
|
|||||||
label: t('External Network'),
|
label: t('External Network'),
|
||||||
placeholder: t('Select a network'),
|
placeholder: t('Select a network'),
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: this.networks,
|
options: this.externalNetworks,
|
||||||
hidden: !isExternalNetwork,
|
hidden: !isExternalNetwork,
|
||||||
isLoading: !this.state.isReady,
|
isLoading: !this.state.isReady,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -14,6 +14,8 @@ import { ConfirmAction } from 'containers/Action';
|
|||||||
import globalRbacPoliciesStore from 'stores/neutron/rbac-policies';
|
import globalRbacPoliciesStore from 'stores/neutron/rbac-policies';
|
||||||
|
|
||||||
export default class Delete extends ConfirmAction {
|
export default class Delete extends ConfirmAction {
|
||||||
|
policy = 'delete_rbac_policy';
|
||||||
|
|
||||||
get id() {
|
get id() {
|
||||||
return 'delete';
|
return 'delete';
|
||||||
}
|
}
|
||||||
@ -30,6 +32,10 @@ export default class Delete extends ConfirmAction {
|
|||||||
return t('Delete');
|
return t('Delete');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get messageHasItemName() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
get actionName() {
|
get actionName() {
|
||||||
return t('delete');
|
return t('delete');
|
||||||
}
|
}
|
||||||
|
@ -12,22 +12,30 @@
|
|||||||
|
|
||||||
import { inject, observer } from 'mobx-react';
|
import { inject, observer } from 'mobx-react';
|
||||||
import { ModalAction } from 'containers/Action';
|
import { ModalAction } from 'containers/Action';
|
||||||
import Notify from 'src/components/Notify';
|
|
||||||
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
||||||
import { ProjectStore } from 'stores/keystone/project';
|
import { ProjectStore } from 'stores/keystone/project';
|
||||||
|
import { anyProject } from 'src/resources/neutron/rbac-policy';
|
||||||
|
|
||||||
export class Edit extends ModalAction {
|
export class Edit extends ModalAction {
|
||||||
static id = 'edit-policy';
|
static id = 'edit-policy';
|
||||||
|
|
||||||
static title = t('Edit');
|
static title = t('Edit');
|
||||||
|
|
||||||
|
static policy = 'update_rbac_policy';
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
return t('Edit');
|
return t('Edit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get messageHasItemName() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.store = new RbacPoliciesStore();
|
this.store = new RbacPoliciesStore();
|
||||||
this.projectStore = new ProjectStore();
|
this.projectStore = new ProjectStore();
|
||||||
|
this.state.projects = [];
|
||||||
|
this.state.isReady = false;
|
||||||
this.getProjects();
|
this.getProjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,26 +44,29 @@ export class Edit extends ModalAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getProjects() {
|
async getProjects() {
|
||||||
await this.projectStore.fetchProjectsWithDomain();
|
const projects = await this.projectStore.pureFetchList();
|
||||||
this.setState({ ...this.state, isReady: true });
|
projects.unshift(anyProject);
|
||||||
|
this.setState({ projects, isReady: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
get projects() {
|
get projects() {
|
||||||
return (this.projectStore.list.data || []).map((it) => ({
|
const { projects } = this.state;
|
||||||
|
return (projects || []).map((it) => ({
|
||||||
value: it.id,
|
value: it.id,
|
||||||
label: it.name,
|
label: it.name,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get defaultValue() {
|
||||||
|
const { target_tenant } = this.item;
|
||||||
|
return {
|
||||||
|
target_tenant,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
onSubmit = async (values) => {
|
onSubmit = async (values) => {
|
||||||
const { id } = this.item;
|
const { id } = this.item;
|
||||||
try {
|
return this.store.update({ id }, values);
|
||||||
const { ...body } = values;
|
|
||||||
await this.store.update(id, body);
|
|
||||||
} catch (error) {
|
|
||||||
Notify.errorWithDetail(null, error.toString());
|
|
||||||
return Promise.reject(error);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static allowed = () => Promise.resolve(true);
|
static allowed = () => Promise.resolve(true);
|
||||||
@ -68,7 +79,7 @@ export class Edit extends ModalAction {
|
|||||||
placeholder: t('Select a project'),
|
placeholder: t('Select a project'),
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: this.projects,
|
options: this.projects,
|
||||||
isLoading: this.projectStore.list.isLoading,
|
loading: !this.state.isReady,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
import { observer, inject } from 'mobx-react';
|
import { observer, inject } from 'mobx-react';
|
||||||
import Base from 'containers/List';
|
import Base from 'containers/List';
|
||||||
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
import { RbacPoliciesStore } from 'src/stores/neutron/rbac-policies';
|
||||||
|
import { objectTypes } from 'resources/neutron/rbac-policy';
|
||||||
|
import { getOptions } from 'utils';
|
||||||
import actionConfigRbacPolicies from './actions';
|
import actionConfigRbacPolicies from './actions';
|
||||||
|
|
||||||
export class RbacPolicies extends Base {
|
export class RbacPolicies extends Base {
|
||||||
@ -21,8 +23,8 @@ export class RbacPolicies extends Base {
|
|||||||
this.downloadStore = new RbacPoliciesStore();
|
this.downloadStore = new RbacPoliciesStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasTab() {
|
get policy() {
|
||||||
return false;
|
return 'get_rbac_policy';
|
||||||
}
|
}
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
@ -33,53 +35,74 @@ export class RbacPolicies extends Base {
|
|||||||
return actionConfigRbacPolicies;
|
return actionConfigRbacPolicies;
|
||||||
}
|
}
|
||||||
|
|
||||||
getColumns = () => {
|
getColumns() {
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
|
||||||
title: t('Project'),
|
|
||||||
dataIndex: 'project_name',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: t('ID'),
|
title: t('ID'),
|
||||||
dataIndex: 'id',
|
dataIndex: 'id',
|
||||||
routeName: this.getRouteName('rbacPolicyDetail'),
|
routeName: this.getRouteName('rbacPolicyDetail'),
|
||||||
isLink: true,
|
isLink: true,
|
||||||
|
withoutName: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t('Project ID/Name'),
|
||||||
|
dataIndex: 'project_name',
|
||||||
|
isHideable: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t('Object Type'),
|
title: t('Object Type'),
|
||||||
dataIndex: 'object_type',
|
dataIndex: 'object_type',
|
||||||
|
isHideable: true,
|
||||||
|
valueMap: objectTypes,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t('Object'),
|
title: t('Object ID/Name'),
|
||||||
dataIndex: 'object_name',
|
dataIndex: 'object_name',
|
||||||
|
isHideable: true,
|
||||||
|
idKey: 'object_id',
|
||||||
|
isLink: true,
|
||||||
|
getRouteName: (value, record) => {
|
||||||
|
const { object_type } = record || {};
|
||||||
|
if (object_type === 'network') {
|
||||||
|
return this.getRouteName('networkDetail');
|
||||||
|
}
|
||||||
|
if (object_type === 'qos_policy') {
|
||||||
|
return this.getRouteName('networkQosDetail');
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t('Target Project'),
|
title: t('Target Project ID/Name'),
|
||||||
dataIndex: 'target_tenant_name',
|
dataIndex: 'target_tenant_name',
|
||||||
|
isHideable: true,
|
||||||
|
idKey: 'target_tenant_id',
|
||||||
|
routeName: this.getRouteName('projectDetail'),
|
||||||
|
isLink: true,
|
||||||
|
emptyRender: () => {
|
||||||
|
return '*';
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
return columns;
|
return columns;
|
||||||
};
|
}
|
||||||
|
|
||||||
get objectTypes() {
|
get objectTypes() {
|
||||||
return [
|
return getOptions(objectTypes);
|
||||||
{ key: 'network', label: t('Network') },
|
|
||||||
{ key: 'qos_policy', label: t('QoS Policy') },
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get searchFilters() {
|
get searchFilters() {
|
||||||
return [
|
return [
|
||||||
{
|
|
||||||
label: t('Project'),
|
|
||||||
name: 'project_name',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: t('Id'),
|
label: t('Id'),
|
||||||
name: 'id',
|
name: 'id',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('Target Project'),
|
label: t('Target Project ID'),
|
||||||
|
name: 'target_tenant',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('Target Project Name'),
|
||||||
name: 'target_tenant_name',
|
name: 'target_tenant_name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -91,6 +114,14 @@ export class RbacPolicies extends Base {
|
|||||||
label: t('Object'),
|
label: t('Object'),
|
||||||
name: 'object_name',
|
name: 'object_name',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: t('Project ID'),
|
||||||
|
name: 'project_id',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('Project Name'),
|
||||||
|
name: 'project_name',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
src/resources/neutron/rbac-policy.js
Normal file
9
src/resources/neutron/rbac-policy.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export const objectTypes = {
|
||||||
|
network: t('Network'),
|
||||||
|
qos_policy: t('QoS Policy'),
|
||||||
|
};
|
||||||
|
|
||||||
|
export const anyProject = {
|
||||||
|
id: '*',
|
||||||
|
name: '*',
|
||||||
|
};
|
@ -60,6 +60,7 @@ export const policyMap = {
|
|||||||
'floatingip',
|
'floatingip',
|
||||||
'vpnservice',
|
'vpnservice',
|
||||||
'ipsec_site_connection',
|
'ipsec_site_connection',
|
||||||
|
'rbac_policy',
|
||||||
],
|
],
|
||||||
octavia: ['os_load-balancer_api'],
|
octavia: ['os_load-balancer_api'],
|
||||||
// keystone: ['identity:'],
|
// keystone: ['identity:'],
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import Base from 'stores/base';
|
import Base from 'stores/base';
|
||||||
import client from 'client';
|
import client from 'client';
|
||||||
|
import { qosEndpoint } from 'client/client/constants';
|
||||||
|
|
||||||
export class RbacPoliciesStore extends Base {
|
export class RbacPoliciesStore extends Base {
|
||||||
get client() {
|
get client() {
|
||||||
@ -26,25 +27,31 @@ export class RbacPoliciesStore extends Base {
|
|||||||
return client.neutron.networks;
|
return client.neutron.networks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get enableQosPolicy() {
|
||||||
|
return qosEndpoint();
|
||||||
|
}
|
||||||
|
|
||||||
async listDidFetch(items) {
|
async listDidFetch(items) {
|
||||||
const [
|
const [
|
||||||
{ networks: allNetworks },
|
{ networks: allNetworks },
|
||||||
{ policies: allPolicies },
|
qosPoliciesResult,
|
||||||
{ projects: allProjects },
|
{ projects: allProjects },
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
this.networkClient.list(),
|
this.networkClient.list(),
|
||||||
this.qosClient.list(),
|
this.enableQosPolicy ? this.qosClient.list() : null,
|
||||||
this.projectClient.list(),
|
this.projectClient.list(),
|
||||||
]);
|
]);
|
||||||
|
const { policies: allPolicies = [] } = qosPoliciesResult || {};
|
||||||
const updatedItems = items.map((item) => {
|
const updatedItems = items.map((item) => {
|
||||||
|
const { object_id, target_tenant } = item;
|
||||||
const networkOfItem = allNetworks.find(
|
const networkOfItem = allNetworks.find(
|
||||||
(network) => network.id === item.object_id
|
(network) => network.id === object_id
|
||||||
);
|
);
|
||||||
const policyOfItem = allPolicies.find(
|
const policyOfItem = allPolicies.find(
|
||||||
(policy) => policy.id === item.object_id
|
(policy) => policy.id === object_id
|
||||||
);
|
);
|
||||||
const targetTenant = allProjects.find(
|
const targetTenant = allProjects.find(
|
||||||
(project) => project.id === item.target_tenant
|
(project) => project.id === target_tenant
|
||||||
);
|
);
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
@ -54,21 +61,34 @@ export class RbacPoliciesStore extends Base {
|
|||||||
? policyOfItem.name
|
? policyOfItem.name
|
||||||
: '-',
|
: '-',
|
||||||
target_tenant_name: targetTenant ? targetTenant.name : '*',
|
target_tenant_name: targetTenant ? targetTenant.name : '*',
|
||||||
|
target_tenant_id: target_tenant === '*' ? '' : target_tenant,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return updatedItems;
|
return updatedItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getProjects() {
|
async detailDidFetch(item) {
|
||||||
await this.projectClient.list();
|
const { object_type, object_id, target_tenant } = item;
|
||||||
}
|
let objectRequest = null;
|
||||||
|
let projectRequest = null;
|
||||||
async getQoSPolicy() {
|
if (object_type === 'network') {
|
||||||
await this.qosPolicyClient.list();
|
objectRequest = this.networkClient.show(object_id);
|
||||||
}
|
} else if (object_type === 'qos_policy') {
|
||||||
|
objectRequest = this.qosClient.show(object_id);
|
||||||
async getNetworks() {
|
}
|
||||||
await this.networkClient.list();
|
if (target_tenant !== '*') {
|
||||||
|
projectRequest = this.projectClient.show(target_tenant);
|
||||||
|
}
|
||||||
|
const [objectResult, projectResult] = await Promise.allSettled([
|
||||||
|
objectRequest,
|
||||||
|
projectRequest,
|
||||||
|
]);
|
||||||
|
const { network, qos_policy } = objectResult.value || {};
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
object: network || qos_policy,
|
||||||
|
targetProject: projectResult.value?.project,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,9 @@ export const getNameRenderByRouter = (render, column, rowKey) => {
|
|||||||
const {
|
const {
|
||||||
dataIndex,
|
dataIndex,
|
||||||
idKey,
|
idKey,
|
||||||
|
emptyRender,
|
||||||
routeName,
|
routeName,
|
||||||
|
getRouteName,
|
||||||
routeParamsKey = 'id',
|
routeParamsKey = 'id',
|
||||||
routeQuery = {},
|
routeQuery = {},
|
||||||
routeParamsFunc,
|
routeParamsFunc,
|
||||||
@ -282,12 +284,15 @@ export const getNameRenderByRouter = (render, column, rowKey) => {
|
|||||||
const nameValue = value || get(record, dataIndex) || '-';
|
const nameValue = value || get(record, dataIndex) || '-';
|
||||||
const isBold = isNameBold(dataIndex, title, boldName, withoutId);
|
const isBold = isNameBold(dataIndex, title, boldName, withoutId);
|
||||||
const nameRender = getNameRenderWithStyle(nameValue, isBold);
|
const nameRender = getNameRenderWithStyle(nameValue, isBold);
|
||||||
if (!routeName) {
|
const currentRouteName = getRouteName
|
||||||
|
? getRouteName(value, record)
|
||||||
|
: routeName;
|
||||||
|
if (!currentRouteName) {
|
||||||
return nameValue;
|
return nameValue;
|
||||||
}
|
}
|
||||||
const idValue = get(record, idKey || rowKey);
|
const idValue = get(record, idKey || rowKey);
|
||||||
if (!idValue) {
|
if (!idValue) {
|
||||||
return '-';
|
return emptyRender ? emptyRender() : '-';
|
||||||
}
|
}
|
||||||
const idRender = getIdRender(idValue, copyable, true);
|
const idRender = getIdRender(idValue, copyable, true);
|
||||||
const params = routeParamsFunc
|
const params = routeParamsFunc
|
||||||
@ -296,7 +301,7 @@ export const getNameRenderByRouter = (render, column, rowKey) => {
|
|||||||
const query = routeQuery;
|
const query = routeQuery;
|
||||||
if (!withoutId) {
|
if (!withoutId) {
|
||||||
const link = getLinkRender({
|
const link = getLinkRender({
|
||||||
key: routeName,
|
key: currentRouteName,
|
||||||
params,
|
params,
|
||||||
query,
|
query,
|
||||||
value: idRender,
|
value: idRender,
|
||||||
@ -309,7 +314,7 @@ export const getNameRenderByRouter = (render, column, rowKey) => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
const link = getLinkRender({
|
const link = getLinkRender({
|
||||||
key: routeName,
|
key: currentRouteName,
|
||||||
params,
|
params,
|
||||||
query,
|
query,
|
||||||
value: nameRender,
|
value: nameRender,
|
||||||
|
Loading…
Reference in New Issue
Block a user