@xen-orchestra/web-core 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/lib/assets/css/base.pcss +5 -0
  2. package/lib/components/input-wrapper/VtsInputWrapper.vue +2 -2
  3. package/lib/components/layout/VtsLayoutSidebar.vue +116 -43
  4. package/lib/components/menu/MenuItem.vue +9 -1
  5. package/lib/components/menu/MenuList.vue +4 -2
  6. package/lib/components/menu/VtsActionsMenu.vue +24 -24
  7. package/lib/components/modal/VtsActionModal.vue +44 -9
  8. package/lib/components/modal/VtsBlockedModal.vue +1 -1
  9. package/lib/components/modal/VtsDeleteModal.vue +1 -1
  10. package/lib/components/overlay/VtsOverlayButton.vue +35 -0
  11. package/lib/components/overlay/VtsOverlayCancelButton.vue +16 -0
  12. package/lib/components/overlay/VtsOverlayConfirmButton.vue +25 -0
  13. package/lib/components/overlay/VtsOverlayList.vue +82 -0
  14. package/lib/components/progress-bar/VtsProgressBar.vue +5 -3
  15. package/lib/components/select/VtsSelect.vue +0 -3
  16. package/lib/components/space-card/VtsSpaceCard.vue +1 -1
  17. package/lib/components/table/cells/VtsProgressBarCell.vue +1 -1
  18. package/lib/components/table/cells/VtsUserNameCell.vue +29 -0
  19. package/lib/components/task/VtsQuickTaskButton.vue +1 -1
  20. package/lib/components/task/VtsQuickTaskList.vue +1 -1
  21. package/lib/components/tree/VtsTreeItem.vue +4 -4
  22. package/lib/components/ui/head-bar/UiHeadBar.vue +1 -1
  23. package/lib/components/ui/input/UiInput.vue +53 -9
  24. package/lib/components/ui/query-search-bar/UiQuerySearchBar.vue +1 -15
  25. package/lib/components/ui/quick-task-item/UiQuickTaskItem.vue +1 -1
  26. package/lib/components/ui/quick-task-panel/UiQuickTaskPanel.vue +1 -1
  27. package/lib/components/ui/task-item/UiTaskItem.vue +14 -6
  28. package/lib/components/ui/task-list/UiTaskList.vue +1 -1
  29. package/lib/components/ui/text-area/UiTextarea.vue +12 -14
  30. package/lib/components/vif-connection-toggle-modal/VtsVifConnectionToggleModal.vue +43 -0
  31. package/lib/composables/table/multi-select.composable.md +33 -0
  32. package/lib/layouts/CoreLayout.vue +74 -62
  33. package/lib/locales/en.json +63 -2
  34. package/lib/locales/fr.json +63 -2
  35. package/lib/packages/form-validation/custom-rules/ip-addresses.rule.ts +15 -0
  36. package/lib/packages/form-validation/custom-rules/ip.regex.ts +26 -0
  37. package/lib/packages/form-validation/custom-rules/ipv4-or-cidr.rule.ts +2 -3
  38. package/lib/packages/form-validation/index.ts +2 -0
  39. package/lib/packages/hide-permanently/README.md +60 -0
  40. package/lib/packages/hide-permanently/types.ts +3 -0
  41. package/lib/packages/hide-permanently/use-hide-permanently.ts +15 -0
  42. package/lib/packages/overlay/OverlayComponent.vue +18 -0
  43. package/lib/packages/overlay/README.md +285 -0
  44. package/lib/packages/overlay/create-event-handler.ts +80 -0
  45. package/lib/packages/overlay/injection-keys.ts +3 -0
  46. package/lib/packages/overlay/is-thenable.ts +3 -0
  47. package/lib/packages/overlay/symbols.ts +5 -0
  48. package/lib/packages/overlay/types.ts +94 -0
  49. package/lib/packages/overlay/use-overlay-escape.ts +34 -0
  50. package/lib/packages/overlay/use-overlay-store.ts +33 -0
  51. package/lib/packages/overlay/use-overlay-trigger.ts +33 -0
  52. package/lib/packages/overlay/use-overlay.ts +99 -0
  53. package/lib/packages/progress/use-progress.ts +12 -2
  54. package/lib/packages/sidebar/index.ts +2 -0
  55. package/lib/packages/sidebar/sidebar.store.ts +55 -0
  56. package/lib/packages/sidebar/types.ts +21 -0
  57. package/lib/packages/sidebar/use-sidebar-resize.ts +47 -0
  58. package/lib/packages/sidebar/use-sidebar-responsive-expand.ts +19 -0
  59. package/lib/tables/column-definitions/user-name-column.ts +10 -0
  60. package/lib/tables/column-sets/server-columns.ts +2 -2
  61. package/lib/tables/column-sets/user-columns.ts +16 -0
  62. package/lib/types/object.type.ts +9 -1
  63. package/lib/types/task.type.ts +5 -12
  64. package/lib/utils/injection-keys.util.ts +3 -1
  65. package/lib/utils/ip-address.utils.ts +7 -0
  66. package/lib/utils/sr.utils.ts +4 -0
  67. package/package.json +2 -1
  68. package/lib/stores/sidebar.store.ts +0 -79
@@ -1,20 +1,12 @@
1
1
  <template>
2
2
  <div class="core-layout">
3
3
  <header v-if="uiStore.hasUi" class="header">
4
- <slot name="app-logo" />
5
- <UiButtonIcon
6
- v-tooltip="{
7
- content: sidebarStore.isExpanded ? t('action:sidebar-close') : t('action:sidebar-open'),
8
- placement: 'right',
9
- }"
10
- accent="brand"
11
- size="medium"
12
- icon="fa:bars"
13
- class="sidebar-toggle"
14
- :target-scale="1.8"
15
- @click="sidebarStore.toggleExpand()"
16
- />
17
- <slot name="app-header" />
4
+ <div v-if="slots['header-start']" class="header-start">
5
+ <slot name="header-start" />
6
+ </div>
7
+ <div v-if="slots['header-end']" class="header-end">
8
+ <slot name="header-end" />
9
+ </div>
18
10
  </header>
19
11
  <VtsBanner v-if="showBanner" accent="danger">
20
12
  <UiInfo accent="danger">
@@ -27,26 +19,12 @@
27
19
  </template>
28
20
  </VtsBanner>
29
21
  <div class="container">
30
- <template v-if="uiStore.hasUi">
31
- <VtsBackdrop
32
- v-if="sidebarStore.isExpanded && !sidebarStore.isLocked"
33
- @click="sidebarStore.toggleExpand(false)"
34
- />
35
- <VtsLayoutSidebar class="sidebar">
36
- <template #header>
37
- <slot name="sidebar-header" />
38
- </template>
39
- <template #default>
40
- <slot name="sidebar-content" />
41
- </template>
42
- <template #footer>
43
- <slot name="sidebar-footer" />
44
- </template>
45
- </VtsLayoutSidebar>
46
- </template>
22
+ <VtsBackdrop v-if="uiStore.hasUi && showBackdrop" @click="handleBackdropClick()" />
23
+ <slot v-if="uiStore.hasUi && hasLeftSidebar" name="left-sidebar" />
47
24
  <main class="main-container">
48
25
  <slot name="content" />
49
26
  </main>
27
+ <slot v-if="uiStore.hasUi && hasRightSidebar" name="right-sidebar" />
50
28
  </div>
51
29
  </div>
52
30
  </template>
@@ -54,22 +32,36 @@
54
32
  <script lang="ts" setup>
55
33
  import VtsBackdrop from '@core/components/backdrop/VtsBackdrop.vue'
56
34
  import VtsBanner from '@core/components/banner/VtsBanner.vue'
57
- import VtsLayoutSidebar from '@core/components/layout/VtsLayoutSidebar.vue'
58
35
  import UiButton from '@core/components/ui/button/UiButton.vue'
59
- import UiButtonIcon from '@core/components/ui/button-icon/UiButtonIcon.vue'
60
36
  import UiInfo from '@core/components/ui/info/UiInfo.vue'
61
- import { vTooltip } from '@core/directives/tooltip.directive'
62
37
  import { useSseStore } from '@core/packages/remote-resource/sse.store.ts'
63
- import { useSidebarStore } from '@core/stores/sidebar.store'
64
- import { useUiStore } from '@core/stores/ui.store'
38
+ import { useLeftSidebarStore, useRightSidebarStore } from '@core/packages/sidebar'
39
+ import { useUiStore } from '@core/stores/ui.store.ts'
65
40
  import { storeToRefs } from 'pinia'
66
41
  import { computed } from 'vue'
67
42
  import { useI18n } from 'vue-i18n'
68
43
 
44
+ const slots = defineSlots<{
45
+ 'header-start'?(): any
46
+ 'header-end'?(): any
47
+ 'left-sidebar'?(): any
48
+ 'right-sidebar'?(): any
49
+ content(): any
50
+ }>()
51
+
69
52
  const { t } = useI18n()
70
53
 
71
54
  const uiStore = useUiStore()
72
- const sidebarStore = useSidebarStore()
55
+ const leftSidebar = useLeftSidebarStore()
56
+ const rightSidebar = useRightSidebarStore()
57
+
58
+ const hasLeftSidebar = computed(() => !!slots['left-sidebar'])
59
+ const hasRightSidebar = computed(() => !!slots['right-sidebar'])
60
+
61
+ const isLeftOverlaying = computed(() => hasLeftSidebar.value && leftSidebar.isExpanded && !leftSidebar.isLocked)
62
+ const isRightOverlaying = computed(() => hasRightSidebar.value && rightSidebar.isExpanded && !rightSidebar.isLocked)
63
+
64
+ const showBackdrop = computed(() => isLeftOverlaying.value || isRightOverlaying.value)
73
65
 
74
66
  const sseStore = useSseStore()
75
67
 
@@ -80,6 +72,16 @@ const showBanner = computed(() => hasErrorSse.value)
80
72
  function handleRetry() {
81
73
  sseStore.retry()
82
74
  }
75
+
76
+ function handleBackdropClick() {
77
+ if (isLeftOverlaying.value) {
78
+ leftSidebar.toggleExpand(false)
79
+ }
80
+
81
+ if (isRightOverlaying.value) {
82
+ rightSidebar.toggleExpand(false)
83
+ }
84
+ }
83
85
  </script>
84
86
 
85
87
  <style lang="postcss" scoped>
@@ -87,34 +89,44 @@ function handleRetry() {
87
89
  display: flex;
88
90
  height: 100dvh;
89
91
  flex-direction: column;
90
- }
91
92
 
92
- .container {
93
- display: flex;
94
- flex: 1;
95
- min-height: 0;
96
- }
93
+ .container {
94
+ position: relative;
95
+ display: flex;
96
+ flex: 1;
97
+ min-height: 0;
98
+ overflow-x: hidden;
99
+ }
97
100
 
98
- .header {
99
- display: flex;
100
- align-items: center;
101
- height: 5.6rem;
102
- background-color: var(--color-neutral-background-secondary);
103
- border-bottom: 0.1rem solid var(--color-neutral-border);
104
- flex-shrink: 0;
105
- gap: 1.6rem;
106
- padding: 0 1.6rem;
107
- }
101
+ .header {
102
+ display: flex;
103
+ align-items: center;
104
+ height: 5.6rem;
105
+ background-color: var(--color-neutral-background-secondary);
106
+ border-block-end: 0.1rem solid var(--color-neutral-border);
107
+ flex-shrink: 0;
108
+ gap: 1.6rem;
109
+ padding-block: 0;
110
+ padding-inline: 1.6rem;
111
+ }
108
112
 
109
- .sidebar-toggle {
110
- margin-right: auto;
111
- }
113
+ .header-start,
114
+ .header-end {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 1.6rem;
118
+ }
112
119
 
113
- .main-container {
114
- flex: 1;
115
- overflow: auto;
116
- display: flex;
117
- flex-direction: column;
118
- background-color: var(--color-neutral-background-secondary);
120
+ .header-end {
121
+ margin-inline-start: auto;
122
+ }
123
+
124
+ .main-container {
125
+ flex: 1;
126
+ overflow: auto;
127
+ display: flex;
128
+ flex-direction: column;
129
+ background-color: var(--color-neutral-background-secondary);
130
+ }
119
131
  }
120
132
  </style>
@@ -32,13 +32,14 @@
32
32
  "action:copy-all": "Copy all",
33
33
  "action:copy-host": "Copy host",
34
34
  "action:copy-id": "Copy ID",
35
- "action:copy-info-json": "Copy information into JSON",
35
+ "action:copy-info-json": "Copy object info in JSON",
36
36
  "action:create": "Create",
37
37
  "action:create-bonded-network": "Create bonded network",
38
38
  "action:create-internal-network": "Create internal network",
39
39
  "action:create-network": "Create network",
40
40
  "action:create-traffic-rule": "Create traffic rule",
41
41
  "action:create-vdi": "Create VDI",
42
+ "action:create-vif": "Create VIF",
42
43
  "action:delete": "Delete",
43
44
  "action:delete-filter": "Delete filter",
44
45
  "action:delete-group": "Delete group",
@@ -53,16 +54,20 @@
53
54
  "action:deploy-xoa": "Deploy XOA",
54
55
  "action:detach-n-vdis": "Detach 1 VDI | Detach {n} VDIs",
55
56
  "action:detach-vdi": "Detach VDI",
57
+ "action:disable-host": "Disable host",
56
58
  "action:disconnect": "Disconnect",
57
59
  "action:disconnect-n": "Disconnect {n}",
58
60
  "action:disconnect-n-srs": "Disconnect 1 SR | Disconnect {n} SRs",
59
61
  "action:disconnect-n-vbds": "Disconnect 1 VBD | Disconnect {n} VBDs",
60
62
  "action:disconnect-n-vdis": "Disconnect 1 VDI | Disconnect {n} VDIs",
61
63
  "action:disconnect-n-vifs": "Disconnect 1 VIF | Disconnect {n} VIFs",
64
+ "action:disconnect-pool": "Disconnect pool",
62
65
  "action:download-bugtools-archive": "Download bugtools archive",
63
66
  "action:duplicate": "Duplicate",
67
+ "action:duplicate-n-vms": "Duplicate 1 VM | Duplicate {n} VMs",
64
68
  "action:edit": "Edit",
65
69
  "action:edit-config": "Edit config",
70
+ "action:enable-host": "Enable host",
66
71
  "action:enable-light-mode": "Enable light mode",
67
72
  "action:export": "Export",
68
73
  "action:export-content": "Export content",
@@ -151,6 +156,7 @@
151
156
  "alarm-type:sr_io_throughput_total_per_host": "SR IO throughput total per host exceeds @:n-percent",
152
157
  "alarm-type:unknown": "Unknown alarm type",
153
158
  "alarms": "Alarms",
159
+ "alert-user-roles": "A user can be assigned roles directly or through groups. Roles inherited from a group cannot be removed at the user level. To revoke them, update the group's roles or remove the user from the group. You can always add individual roles on top of inherited ones.",
154
160
  "all": "All",
155
161
  "all-done!": "All done!",
156
162
  "all-good!": "All good!",
@@ -158,6 +164,8 @@
158
164
  "allocated-space": "Allocated space",
159
165
  "allow": "Allow",
160
166
  "allow-self-signed-ssl": "You may need to allow self-signed SSL certificates in your browser",
167
+ "allowed-ips": "Allowed IPs",
168
+ "allowed-ips-example": "For example: 192.168.0.1; 2001:db8::1",
161
169
  "and": "And",
162
170
  "any-property": "Any property",
163
171
  "api-error-details": "API Error details",
@@ -226,6 +234,7 @@
226
234
  "build-number": "Build number",
227
235
  "by": "By",
228
236
  "bytes:gi": "GiB",
237
+ "bytes:kbs": "kB/s",
229
238
  "bytes:ki": "KiB",
230
239
  "bytes:mi": "MiB",
231
240
  "cancel": "Cancel",
@@ -246,12 +255,14 @@
246
255
  "community": "Community",
247
256
  "community-name": "{name} community",
248
257
  "compression": "Compression",
258
+ "compression-not-available": "Compression is not available for SRs from the same pool.",
249
259
  "concurrency": "Concurrency",
250
260
  "configuration": "Configuration",
251
261
  "configure-for-protected": "To ensure your VMs protection, consider configuring a {backup-job}",
252
262
  "configure-in-xo-5": "Configure in XO 5",
253
263
  "confirm-cancel?": "Are you sure you want to cancel?",
254
264
  "confirm-delete": "You're about to delete {0}",
265
+ "confirm-disconnect": "You're about to disconnect {0}",
255
266
  "confirm-vm-revert": "Confirm VM revert",
256
267
  "connect": "Connect",
257
268
  "connected": "Connected",
@@ -288,6 +299,7 @@
288
299
  "creating-new-network": "Creating new network",
289
300
  "creating-new-traffic-rule": "Creating new traffic rule",
290
301
  "creating-new-vdi": "Creating new VDI",
302
+ "creating-new-vif": "Creating new VIF",
291
303
  "creation-date": "Creation date",
292
304
  "cron-pattern": "Cron pattern",
293
305
  "current": "Current",
@@ -340,7 +352,11 @@
340
352
  "documentation-name": "{name} documentation",
341
353
  "done": "Done",
342
354
  "drop": "Drop",
355
+ "duplicate-vm:error-message": "An error occurred while duplicating the VM. Please review your configuration settings (name, storage repository, compression) and try again.",
356
+ "duplicating-vm": "Duplicating VM",
357
+ "duplication-method": "Duplication method",
343
358
  "duration": "Duration",
359
+ "email": "Email",
344
360
  "empty": "Empty",
345
361
  "enabled": "Enabled",
346
362
  "end-date": "End date",
@@ -360,6 +376,7 @@
360
376
  "failed": "Failed",
361
377
  "failure": "Failure",
362
378
  "fast-clone": "Fast clone",
379
+ "fast-clone-available": "Fast clone is available only for halted VMs.",
363
380
  "fetching-fresh-data": "Fetching fresh data",
364
381
  "field:exceeds-max-characters": "Field value must be {max} characters or less.",
365
382
  "file": "File",
@@ -377,6 +394,7 @@
377
394
  "free-space": "Free space",
378
395
  "free-space-on-sr": "Free space on SR",
379
396
  "from-vm": "From VM",
397
+ "full-copy": "Full copy",
380
398
  "fullscreen": "Fullscreen",
381
399
  "gateway": "Gateway",
382
400
  "general": "General",
@@ -386,6 +404,7 @@
386
404
  "graphics-display": "Graphics & Display",
387
405
  "groups": "Groups",
388
406
  "guest-tools": "Guest tools",
407
+ "gzip": "GZIP",
389
408
  "hardware": "Hardware",
390
409
  "hardware-specifications": "Hardware specifications",
391
410
  "heartbeat-storage-repository": "Heartbeat storage repository",
@@ -420,6 +439,9 @@
420
439
  "interfaces": "Interfaces",
421
440
  "interrupted": "Interrupted",
422
441
  "invalid-field": "Invalid field",
442
+ "invalid-ip-addresses": "One or more invalid IP addresses",
443
+ "invalid-mac-address": "Invalid MAC address",
444
+ "invalid-rate-limit": "Rate limit cannot be negative",
423
445
  "ip-address": "IP address",
424
446
  "ip-address-info": "You can apply a rule to a single IP address or a subnet in CIDR format. Examples: 192.168.1.10, or 10.20.0.0/16",
425
447
  "ip-address-invalid": "IP address format is invalid.",
@@ -462,8 +484,13 @@
462
484
  "job:connect:in-progress": "Connect in progress…",
463
485
  "job:create:in-progress": "Create in progress…",
464
486
  "job:delete:in-progress": "Delete in progress…",
487
+ "job:disable:in-progress": "Disable in progress…",
465
488
  "job:disconnect:in-progress": "Disconnect in progress…",
489
+ "job:enable:in-progress": "Enable in progress…",
466
490
  "job:export:in-progress": "Export in progress…",
491
+ "job:host-disable:bad-power-state": "Host is not running",
492
+ "job:host-disable:missing-host": "Host is missing",
493
+ "job:host-enable:missing-host": "Host is missing",
467
494
  "job:migrate:in-progress": "Migrate in progess…",
468
495
  "job:network-delete:has-n-physical-pif-connected": "The network has one physical PIF connected | The network has {n} physical PIFs connected",
469
496
  "job:network-delete:has-n-vif-attached": "The network has one VIF attached | The network has {n} VIFs attached",
@@ -471,6 +498,9 @@
471
498
  "job:pbd-plug:pbd-connected": "One or several PBDs are already connected",
472
499
  "job:pbd-unplug:missing-pbd": "No PBDs to disconnect",
473
500
  "job:pbd-unplug:pbd-disconnected": "One or several PBDs are already disconnected",
501
+ "job:server-connect:missing-server": "No servers to connect",
502
+ "job:server-disconnect:missing-server": "No servers to disconnect",
503
+ "job:server-disconnect:server-disconnected": "One or several servers are already disconnected",
474
504
  "job:snapshot-delete:missing-snapshot": "No snapshots to delete",
475
505
  "job:sr-connect:missing-sr": "No SRs to connect",
476
506
  "job:sr-delete:missing-sr": "No SRs to delete",
@@ -556,6 +586,7 @@
556
586
  "language": "Language",
557
587
  "language-preferences": "Language preferences",
558
588
  "last": "Last",
589
+ "last-login": "Last login",
559
590
  "last-n-backup-archives": "Last backup archive | Last {n} backup archives",
560
591
  "last-n-backup-runs": "Last backup run | Last {n} backup runs",
561
592
  "last-n-runs": "Last run | Last {n} runs",
@@ -607,10 +638,15 @@
607
638
  "modal:action:vm-force-shutdown": "@:action:force-shutdown VM",
608
639
  "modal:action:vm-reboot": "@:action:reboot VM",
609
640
  "modal:action:vm-shutdown": "@:action:shutdown VM",
641
+ "modal:confirm-host-disable": "Are you sure you want to disable {host}?",
642
+ "modal:confirm-host-enable": "Are you sure you want to enable {host}?",
610
643
  "modal:confirm-vm-force-reboot": "Confirm VM force reboot",
611
644
  "modal:confirm-vm-force-shutdown": "Confirm VM force shutdown",
612
645
  "modal:confirm-vm-reboot": "Confirm VM reboot",
613
646
  "modal:confirm-vm-shutdown": "Confirm VM shutdown",
647
+ "modal:host-disable-message": "The host will be marked unavailable for starting or receiving new VMs. Already-running VMs are not affected.",
648
+ "modal:host-enable-message": "The host becomes available again for starting or receiving VMs.",
649
+ "modal:pool-disconnect-message": "The pool will no longer be manageable from XO. You can reconnect it later.",
614
650
  "modal:vm-force-reboot-message": "This will immediately reboot the virtual machine without a clean shutdown. Data loss may occur and ongoing processes will be interrupted.",
615
651
  "modal:vm-force-shutdown-message": "This will immediately power off the virtual machine without a clean shutdown. Data loss may occur and ongoing processes will be interrupted.",
616
652
  "modal:vm-reboot-message": "Restarts the virtual machine gracefully by shutting it down and starting it again. Running processes will be closed properly.",
@@ -673,9 +709,18 @@
673
709
  "new-vdi:add": "Add new VDI",
674
710
  "new-vdi:error-message": "An error occurred while creating the VDI. Please review your configuration settings (name, storage repository, allocated space) and try again.",
675
711
  "new-vif": "New VIF",
712
+ "new-vif:add": "Add new VIF",
713
+ "new-vif:error-message": "An error occurred while creating the VIF. Please review your configuration settings and try again.",
676
714
  "new-vm": "New VM",
677
715
  "new-vm:add": "Add a new VM",
678
716
  "new-vm:description": "VM description",
717
+ "new-vm:ha-best-effort": "Best-effort",
718
+ "new-vm:ha-best-effort-description": "If the host fails, HA tries to restart the VM on another host, but only after all \"Restart\" VMs. Not guaranteed.",
719
+ "new-vm:ha-disabled": "Disabled",
720
+ "new-vm:ha-disabled-description": "HA never restarts this VM automatically.",
721
+ "new-vm:ha-pool-disabled": "HA is disabled on this pool. The value is saved but only takes effect once HA is enabled.",
722
+ "new-vm:ha-restart": "Restart",
723
+ "new-vm:ha-restart-description": "If the VM or its host fails, HA restarts it on another host. Guaranteed as long as the pool is not overcommitted.",
679
724
  "new-vm:install-source": "Installation source",
680
725
  "new-vm:name": "VM name",
681
726
  "new-vm:network-config": "Network configuration is only compatible with {noCloudLink}.",
@@ -700,6 +745,7 @@
700
745
  "no-custom-field-detected": "No custom fields detected",
701
746
  "no-data": "No data",
702
747
  "no-data-to-calculate": "No data to calculate",
748
+ "no-group-attached": "No group attached",
703
749
  "no-host-attached": "No hosts attached",
704
750
  "no-host-detected": "No hosts detected",
705
751
  "no-job-vm": "This VM isn’t part of any running job.",
@@ -709,6 +755,7 @@
709
755
  "no-pools-detected": "No pools detected",
710
756
  "no-replicated-vm": "This VM isn’t being replicated. Configure a replication job to enable it.",
711
757
  "no-result": "No results",
758
+ "no-role-applied": "No role applied",
712
759
  "no-schedule-available": "No schedules available",
713
760
  "no-selected-vm-can-be-exported": "No selected VM can be exported",
714
761
  "no-selected-vm-can-be-migrated": "No selected VM can be migrated",
@@ -717,6 +764,7 @@
717
764
  "no-storage-repository-detected": "No storage repositories detected",
718
765
  "no-task": "No tasks",
719
766
  "no-task-detected": "No tasks detected",
767
+ "no-user-detected": "No users detected",
720
768
  "no-vdi-attached": "No VDIs attached",
721
769
  "no-vdi-detected": "No VDIs detected",
722
770
  "no-vif-detected": "No VIFs detected",
@@ -741,6 +789,7 @@
741
789
  "operation:clean-reboot": "Rebooting",
742
790
  "operation:clean-shutdown": "Shutting down",
743
791
  "operation:destroy": "Deleting",
792
+ "operation:duplicate": "Duplicating",
744
793
  "operation:force-reboot": "Force rebooting",
745
794
  "operation:force-shutdown": "Force shutting down",
746
795
  "operation:pause": "Pausing",
@@ -757,6 +806,7 @@
757
806
  "other": "Other",
758
807
  "other-properties": "Other properties",
759
808
  "other-settings": "Other settings",
809
+ "ova": "OVA",
760
810
  "page-not-found": "This page is not to be found…",
761
811
  "page-please-wait": "Hold tight, astronaut! The page is getting ready to take off.{newline}We're just aligning the thrusters and calibrating the systems. It won't be long now, stay tuned!",
762
812
  "pagination:all": "@:all",
@@ -819,6 +869,7 @@
819
869
  "protocol": "Protocol",
820
870
  "protocol:port": "@:{'protocol'}:@:{'port'}",
821
871
  "provider-solutions": "{provider} solutions",
872
+ "providers": "Providers",
822
873
  "provisioning": "Provisioning",
823
874
  "proxy": "Proxy",
824
875
  "proxy-url": "Proxy URL",
@@ -886,6 +937,7 @@
886
937
  "rest-api": "REST API",
887
938
  "retry": "Retry",
888
939
  "roles": "Roles",
940
+ "roles-applied": "Roles applied",
889
941
  "root-by-default": "\"root\" by default.",
890
942
  "rule-type": "Rule type",
891
943
  "run": "Run",
@@ -944,6 +996,7 @@
944
996
  "sr-disconnect-info-pool-mixed": "Local SRs will be disconnected from their respective hosts. Shared SRs will be disconnected from all hosts in this pool.",
945
997
  "sr-disconnect-info-pool-shared": "The SR will be disconnected from {hostsCount} hosts in this pool. | Each shared SR will be disconnected from all hosts in this pool.",
946
998
  "sr-disconnect-title": "You are about to disconnect 1 SR | You are about to disconnect {n} SRs",
999
+ "sr-required": "Storage repository is required.",
947
1000
  "ssh-account": "SSH account",
948
1001
  "ssh-key": "SSH key",
949
1002
  "ssh-login": "SSH login",
@@ -1057,7 +1110,9 @@
1057
1110
  "unable-to-create-new-network": "Unable to create new network",
1058
1111
  "unable-to-create-new-traffic-rule": "Unable to create new traffic rule",
1059
1112
  "unable-to-create-new-vdi": "Unable to create new VDI",
1113
+ "unable-to-create-new-vif": "Unable to create new VIF",
1060
1114
  "unable-to-delete-network": "Unable to delete network",
1115
+ "unable-to-duplicate-vm": "Unable to duplicate VM",
1061
1116
  "unable-to-migrate-vdi": "Unable to migrate VDI on SR",
1062
1117
  "unknown": "Unknown",
1063
1118
  "unlocked": "Unlocked",
@@ -1072,6 +1127,7 @@
1072
1127
  "used-for-backup": "Used for backup",
1073
1128
  "used-space": "Used space",
1074
1129
  "used-space-on-sr": "Used space on SR",
1130
+ "user": "User",
1075
1131
  "user-config": "User config",
1076
1132
  "user-management": "User management",
1077
1133
  "username": "Username",
@@ -1123,6 +1179,8 @@
1123
1179
  "vm-is-running": "The VM is running",
1124
1180
  "vm-limit-topology": "VM limit topology",
1125
1181
  "vm-management": "VM management",
1182
+ "vm-name": "VM name",
1183
+ "vm-name-required": "VM name is required.",
1126
1184
  "vm-not-running": "VM not running",
1127
1185
  "vm-off": "This virtual machine is powered off.",
1128
1186
  "vm-protected-deletion": "This VM is currently protected against deletion.",
@@ -1174,8 +1232,11 @@
1174
1232
  "xoa-deploy-retry": "Try again to deploy XOA",
1175
1233
  "xoa-deploy-successful!": "XOA deployment successful!",
1176
1234
  "xoa-ip": "XOA IP address",
1235
+ "xoa-manager": "XOA manager",
1177
1236
  "xoa-password-confirm-different": "XOA password confirmation is different",
1178
1237
  "xoa-ssh-account": "XOA SSH account",
1179
1238
  "xoa-ssh-password-confirm-different": "SSH password confirmation is different",
1180
- "you-are-currently-on": "You are currently on: {0}"
1239
+ "xva": "XVA",
1240
+ "you-are-currently-on": "You are currently on: {0}",
1241
+ "zstd": "ZSTD"
1181
1242
  }