diff --git a/src/app/directives/navigate-and-interact/navigate-and-interact.directive.spec.ts b/src/app/directives/navigate-and-interact/navigate-and-interact.directive.spec.ts index 6d4d1b447d9..271921e4ac7 100644 --- a/src/app/directives/navigate-and-interact/navigate-and-interact.directive.spec.ts +++ b/src/app/directives/navigate-and-interact/navigate-and-interact.directive.spec.ts @@ -1,54 +1,22 @@ -import { Router } from '@angular/router'; -import { createDirectiveFactory, SpectatorDirective } from '@ngneat/spectator/jest'; -import { MockProvider } from 'ng-mocks'; +import { createDirectiveFactory, mockProvider, SpectatorDirective } from '@ngneat/spectator/jest'; +import { NavigateAndInteractService } from 'app/directives/navigate-and-interact/navigate-and-interact.service'; import { NavigateAndInteractDirective } from './navigate-and-interact.directive'; describe('NavigateAndInteractDirective', () => { let spectator: SpectatorDirective; - let mockRouter: Router; const createDirective = createDirectiveFactory({ directive: NavigateAndInteractDirective, providers: [ - MockProvider(Router, { - navigate: jest.fn(() => Promise.resolve(true)), - }), + mockProvider(NavigateAndInteractService), ], }); beforeEach(() => { spectator = createDirective('
'); - mockRouter = spectator.inject(Router); }); - it('should create an instance', () => { - expect(spectator.directive).toBeTruthy(); - }); - - it('should call router.navigate with correct parameters on click', () => { - spectator.dispatchMouseEvent(spectator.element, 'click'); - expect(mockRouter.navigate).toHaveBeenCalledWith(['/some-path'], { fragment: 'testHash' }); - }); - - it('should scroll to and highlight the element with the given ID', () => { - const scrollIntoViewMock = jest.fn(); - HTMLElement.prototype.scrollIntoView = scrollIntoViewMock; - - const mockElement = document.createElement('div'); - mockElement.id = 'testHash'; - document.body.appendChild(mockElement); - - const clickSpy = jest.spyOn(HTMLElement.prototype, 'click'); - + it('calls NavigateAndInteractService.navigateAndInteract when element is clicked', () => { spectator.dispatchMouseEvent(spectator.element, 'click'); - - setTimeout(() => { - expect(scrollIntoViewMock).toHaveBeenCalled(); - expect(clickSpy).toHaveBeenCalled(); - - // Clean up - document.body.removeChild(mockElement); - // Restore original scrollIntoView - delete HTMLElement.prototype.scrollIntoView; - }, 0); + expect(spectator.inject(NavigateAndInteractService).navigateAndInteract).toHaveBeenCalledWith(['/some-path'], 'testHash'); }); }); diff --git a/src/app/directives/navigate-and-interact/navigate-and-interact.directive.ts b/src/app/directives/navigate-and-interact/navigate-and-interact.directive.ts index de6ba80fb18..5768d9b8941 100644 --- a/src/app/directives/navigate-and-interact/navigate-and-interact.directive.ts +++ b/src/app/directives/navigate-and-interact/navigate-and-interact.directive.ts @@ -1,8 +1,8 @@ import { Directive, HostListener, input, } from '@angular/core'; -import { Router } from '@angular/router'; import { UntilDestroy } from '@ngneat/until-destroy'; +import { NavigateAndInteractService } from 'app/directives/navigate-and-interact/navigate-and-interact.service'; @UntilDestroy() @Directive({ @@ -13,25 +13,10 @@ export class NavigateAndInteractDirective { readonly navigateRoute = input.required(); readonly navigateHash = input.required(); - constructor(private router: Router) {} + constructor(private navigateAndInteract: NavigateAndInteractService) {} @HostListener('click') onClick(): void { - this.router.navigate(this.navigateRoute(), { fragment: this.navigateHash() }).then(() => { - const htmlElement = document.getElementById(this.navigateHash()); - if (htmlElement) { - this.handleHashScrollIntoView(htmlElement); - } - }); - } - - private handleHashScrollIntoView(htmlElement: HTMLElement): void { - const highlightedClass = 'highlighted-element'; - setTimeout(() => { - htmlElement.scrollIntoView({ block: 'center' }); - htmlElement.classList.add(highlightedClass); - htmlElement.click(); - }, 150); - setTimeout(() => htmlElement.classList.remove(highlightedClass), 2150); + this.navigateAndInteract.navigateAndInteract(this.navigateRoute(), this.navigateHash()); } } diff --git a/src/app/directives/navigate-and-interact/navigate-and-interact.service.spec.ts b/src/app/directives/navigate-and-interact/navigate-and-interact.service.spec.ts new file mode 100644 index 00000000000..d61a82889d5 --- /dev/null +++ b/src/app/directives/navigate-and-interact/navigate-and-interact.service.spec.ts @@ -0,0 +1,51 @@ +import { Router } from '@angular/router'; +import { + createServiceFactory, + SpectatorService, +} from '@ngneat/spectator/jest'; +import { MockProvider } from 'ng-mocks'; +import { NavigateAndInteractService } from 'app/directives/navigate-and-interact/navigate-and-interact.service'; + +describe('NavigateAndInteractService', () => { + let spectator: SpectatorService; + const createComponent = createServiceFactory({ + service: NavigateAndInteractService, + providers: [ + MockProvider(Router, { + navigate: jest.fn(() => Promise.resolve(true)), + }), + ], + }); + + beforeEach(() => { + spectator = createComponent(); + }); + + it('should call router.navigate with correct parameters on click', () => { + spectator.service.navigateAndInteract(['/some-path'], 'testHash'); + expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/some-path'], { fragment: 'testHash' }); + }); + + it('should scroll to and highlight the element with the given ID', () => { + const scrollIntoViewMock = jest.fn(); + HTMLElement.prototype.scrollIntoView = scrollIntoViewMock; + + const mockElement = document.createElement('div'); + mockElement.id = 'testHash'; + document.body.appendChild(mockElement); + + const clickSpy = jest.spyOn(HTMLElement.prototype, 'click'); + + spectator.service.navigateAndInteract(['/some-path'], 'testHash'); + + setTimeout(() => { + expect(scrollIntoViewMock).toHaveBeenCalled(); + expect(clickSpy).toHaveBeenCalled(); + + // Clean up + document.body.removeChild(mockElement); + // Restore original scrollIntoView + delete HTMLElement.prototype.scrollIntoView; + }, 0); + }); +}); diff --git a/src/app/directives/navigate-and-interact/navigate-and-interact.service.ts b/src/app/directives/navigate-and-interact/navigate-and-interact.service.ts new file mode 100644 index 00000000000..f2958e4d19c --- /dev/null +++ b/src/app/directives/navigate-and-interact/navigate-and-interact.service.ts @@ -0,0 +1,32 @@ +import { Inject, Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { WINDOW } from 'app/helpers/window.helper'; + +@Injectable({ + providedIn: 'root', +}) +export class NavigateAndInteractService { + constructor( + private router: Router, + @Inject(WINDOW) private window: Window, + ) {} + + navigateAndInteract(route: string[], hash: string): void { + this.router.navigate(route, { fragment: hash }).then(() => { + setTimeout(() => { + const htmlElement = this.window.document.getElementById(hash); + if (htmlElement) { + this.handleHashScrollIntoView(htmlElement); + } + }, 150); + }); + } + + private handleHashScrollIntoView(htmlElement: HTMLElement): void { + const highlightedClass = 'highlighted-element'; + htmlElement.scrollIntoView({ block: 'center' }); + htmlElement.classList.add(highlightedClass); + htmlElement.click(); + setTimeout(() => htmlElement.classList.remove(highlightedClass), 2150); + } +} diff --git a/src/app/interfaces/api/api-call-directory.interface.ts b/src/app/interfaces/api/api-call-directory.interface.ts index b9405a478d3..1f716c6d21c 100644 --- a/src/app/interfaces/api/api-call-directory.interface.ts +++ b/src/app/interfaces/api/api-call-directory.interface.ts @@ -110,6 +110,11 @@ import { FailoverConfig, FailoverUpdate, } from 'app/interfaces/failover.interface'; +import { + FibreChannelPort, + FibreChannelPortChoices, + FibreChannelPortUpdate, +} from 'app/interfaces/fibre-channel.interface'; import { FileRecord, ListdirQueryParams } from 'app/interfaces/file-record.interface'; import { FileSystemStat, Statfs } from 'app/interfaces/filesystem-stat.interface'; import { FtpConfig, FtpConfigUpdate } from 'app/interfaces/ftp-config.interface'; @@ -449,6 +454,16 @@ export interface ApiCallDirectory { 'failover.sync_to_peer': { params: [{ reboot?: boolean }]; response: void }; 'failover.update': { params: [FailoverUpdate]; response: FailoverConfig }; + // Fibre Channel + 'fc.capable': { params: []; response: boolean }; + + // Fibre Channel Port + 'fcport.create': { params: [FibreChannelPortUpdate]; response: FibreChannelPort }; + 'fcport.update': { params: [id: number, update: FibreChannelPortUpdate]; response: FibreChannelPort }; + 'fcport.delete': { params: [id: number]; response: true }; + 'fcport.port_choices': { params: [include_used?: boolean]; response: FibreChannelPortChoices }; + 'fcport.query': { params: QueryParams; response: FibreChannelPort[] }; + // Filesystem 'filesystem.acltemplate.by_path': { params: [AclTemplateByPathParams]; response: AclTemplateByPath[] }; 'filesystem.acltemplate.create': { params: [AclTemplateCreateParams]; response: AclTemplateCreateResponse }; diff --git a/src/app/interfaces/fibre-channel.interface.ts b/src/app/interfaces/fibre-channel.interface.ts new file mode 100644 index 00000000000..f6daad63336 --- /dev/null +++ b/src/app/interfaces/fibre-channel.interface.ts @@ -0,0 +1,17 @@ +export interface FibreChannelPort { + id: number; + port: string; + wwpn: string | null; + wwpn_b: string | null; + target: unknown; // TODO: Probably IscsiTarget +} + +export interface FibreChannelPortUpdate { + port: string; + target_id: number; +} + +export type FibreChannelPortChoices = Record; diff --git a/src/app/pages/services/services.component.spec.ts b/src/app/pages/services/services.component.spec.ts index 663acd93f5e..7a3e5853073 100644 --- a/src/app/pages/services/services.component.spec.ts +++ b/src/app/pages/services/services.component.spec.ts @@ -10,6 +10,7 @@ import { provideMockStore } from '@ngrx/store/testing'; import { MockComponent } from 'ng-mocks'; import { mockCall, mockApi } from 'app/core/testing/utils/mock-api.utils'; import { mockAuth } from 'app/core/testing/utils/mock-auth.utils'; +import { NavigateAndInteractService } from 'app/directives/navigate-and-interact/navigate-and-interact.service'; import { ServiceName, serviceNames } from 'app/enums/service-name.enum'; import { ServiceStatus } from 'app/enums/service-status.enum'; import { Service } from 'app/interfaces/service.interface'; @@ -73,6 +74,7 @@ describe('ServicesComponent', () => { mockProvider(DialogService), mockProvider(SlideInService), mockProvider(IscsiService), + mockProvider(NavigateAndInteractService), provideMockStore({ initialState, selectors: [{ @@ -105,15 +107,13 @@ describe('ServicesComponent', () => { }); describe('edit', () => { - it('should redirect to configure iSCSI service page when edit button is pressed', async () => { - const router = spectator.inject(Router); - jest.spyOn(router, 'navigate').mockResolvedValue(true); - + it('should redirect and open form to configure iSCSI service page when edit button is pressed', async () => { const serviceIndex = fakeDataSource.findIndex((item) => item.service === ServiceName.Iscsi) + 1; const editButton = await table.getHarnessInCell(IxIconHarness.with({ name: 'edit' }), serviceIndex, 3); await editButton.click(); - expect(router.navigate).toHaveBeenCalledWith(['/sharing', 'iscsi']); + expect(spectator.inject(NavigateAndInteractService).navigateAndInteract) + .toHaveBeenCalledWith(['/sharing', 'iscsi'], 'global-configuration'); }); it('should open FTP configuration when edit button is pressed', async () => { diff --git a/src/app/pages/services/services.component.ts b/src/app/pages/services/services.component.ts index 27630aab840..634c882e55f 100644 --- a/src/app/pages/services/services.component.ts +++ b/src/app/pages/services/services.component.ts @@ -11,6 +11,7 @@ import { EMPTY, of } from 'rxjs'; import { catchError, map, take, } from 'rxjs/operators'; +import { NavigateAndInteractService } from 'app/directives/navigate-and-interact/navigate-and-interact.service'; import { UiSearchDirective } from 'app/directives/ui-search.directive'; import { AuditService } from 'app/enums/audit.enum'; import { EmptyType } from 'app/enums/empty-type.enum'; @@ -42,7 +43,6 @@ import { import { ServiceUpsComponent } from 'app/pages/services/components/service-ups/service-ups.component'; import { servicesElements } from 'app/pages/services/services.elements'; import { ErrorHandlerService } from 'app/services/error-handler.service'; -import { IscsiService } from 'app/services/iscsi.service'; import { ServicesService } from 'app/services/services.service'; import { SlideInService } from 'app/services/slide-in.service'; import { UrlOptionsService } from 'app/services/url-options.service'; @@ -55,7 +55,6 @@ import { waitForServices } from 'app/store/services/services.selectors'; @Component({ selector: 'ix-services', templateUrl: './services.component.html', - providers: [IscsiService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ @@ -147,6 +146,7 @@ export class ServicesComponent implements OnInit { private urlOptions: UrlOptionsService, private errorHandler: ErrorHandlerService, private loader: AppLoaderService, + private navigateAndInteract: NavigateAndInteractService, ) {} ngOnInit(): void { @@ -212,7 +212,7 @@ export class ServicesComponent implements OnInit { private configureService(row: Service): void { switch (row.service) { case ServiceName.Iscsi: - this.router.navigate(['/sharing', 'iscsi']); + this.navigateAndInteract.navigateAndInteract(['/sharing', 'iscsi'], 'global-configuration'); break; case ServiceName.Ftp: this.slideInService.open(ServiceFtpComponent, { wide: true }); diff --git a/src/app/pages/sharing/components/shares-dashboard/iscsi-card/iscsi-card.component.html b/src/app/pages/sharing/components/shares-dashboard/iscsi-card/iscsi-card.component.html index 2108b0e6d6b..8c9da5877c0 100644 --- a/src/app/pages/sharing/components/shares-dashboard/iscsi-card/iscsi-card.component.html +++ b/src/app/pages/sharing/components/shares-dashboard/iscsi-card/iscsi-card.component.html @@ -1,7 +1,7 @@
- - - @if (areSettingsSaved) { -
- {{ 'Settings saved.' | translate }} -
- } diff --git a/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.scss b/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.spec.ts b/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.spec.ts similarity index 92% rename from src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.spec.ts rename to src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.spec.ts index 686ee05a692..ef26816391b 100644 --- a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.spec.ts +++ b/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.spec.ts @@ -14,23 +14,24 @@ import { IscsiGlobalConfig } from 'app/interfaces/iscsi-global-config.interface' import { Service } from 'app/interfaces/service.interface'; import { DialogService } from 'app/modules/dialog/dialog.service'; import { IxFormHarness } from 'app/modules/forms/ix-forms/testing/ix-form.harness'; +import { SlideInRef } from 'app/modules/slide-ins/slide-in-ref'; import { SnackbarService } from 'app/modules/snackbar/services/snackbar.service'; +import { GlobalTargetConfigurationComponent } from 'app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component'; import { ApiService } from 'app/services/websocket/api.service'; import { AppState } from 'app/store'; import { selectIsHaLicensed } from 'app/store/ha-info/ha-info.selectors'; import { checkIfServiceIsEnabled } from 'app/store/services/services.actions'; import { selectServices } from 'app/store/services/services.selectors'; -import { TargetGlobalConfigurationComponent } from './target-global-configuration.component'; describe('TargetGlobalConfigurationComponent', () => { - let spectator: Spectator; + let spectator: Spectator; let loader: HarnessLoader; let api: ApiService; let mockStore$: MockStore; let store$: Store; const createComponent = createComponentFactory({ - component: TargetGlobalConfigurationComponent, + component: GlobalTargetConfigurationComponent, imports: [ ReactiveFormsModule, ], @@ -50,6 +51,7 @@ describe('TargetGlobalConfigurationComponent', () => { confirm: jest.fn(() => of(true)), }), mockProvider(SnackbarService), + mockProvider(SlideInRef), provideMockStore({ selectors: [ { @@ -115,6 +117,7 @@ describe('TargetGlobalConfigurationComponent', () => { listen_port: 3270, alua: false, }]); + expect(spectator.inject(SlideInRef).close).toHaveBeenCalled(); }); it('checks if iSCSI service is enabled and does nothing if it is', async () => { diff --git a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.ts b/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.ts similarity index 79% rename from src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.ts rename to src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.ts index 823d7d2510e..0a58f597425 100644 --- a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.ts +++ b/src/app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component.ts @@ -1,5 +1,5 @@ import { - ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, + ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, signal, } from '@angular/core'; import { FormBuilder, FormControl, Validators, ReactiveFormsModule, @@ -9,7 +9,7 @@ import { MatCard, MatCardContent } from '@angular/material/card'; import { MatProgressBar } from '@angular/material/progress-bar'; import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { Store } from '@ngrx/store'; -import { TranslateModule } from '@ngx-translate/core'; +import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive'; import { Role } from 'app/enums/role.enum'; import { ServiceName } from 'app/enums/service-name.enum'; @@ -22,6 +22,9 @@ import { IxChipsComponent } from 'app/modules/forms/ix-forms/components/ix-chips import { IxFieldsetComponent } from 'app/modules/forms/ix-forms/components/ix-fieldset/ix-fieldset.component'; import { IxInputComponent } from 'app/modules/forms/ix-forms/components/ix-input/ix-input.component'; import { FormErrorHandlerService } from 'app/modules/forms/ix-forms/services/form-error-handler.service'; +import { ModalHeaderComponent } from 'app/modules/slide-ins/components/modal-header/modal-header.component'; +import { SlideInRef } from 'app/modules/slide-ins/slide-in-ref'; +import { SnackbarService } from 'app/modules/snackbar/services/snackbar.service'; import { TestDirective } from 'app/modules/test-id/test.directive'; import { ErrorHandlerService } from 'app/services/error-handler.service'; import { ApiService } from 'app/services/websocket/api.service'; @@ -31,9 +34,9 @@ import { checkIfServiceIsEnabled } from 'app/store/services/services.actions'; @UntilDestroy() @Component({ - selector: 'ix-target-global-configuration', - templateUrl: './target-global-configuration.component.html', - styleUrls: ['./target-global-configuration.component.scss'], + selector: 'ix-global-target-configuration', + templateUrl: './global-target-configuration.component.html', + styleUrls: ['./global-target-configuration.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ @@ -50,11 +53,11 @@ import { checkIfServiceIsEnabled } from 'app/store/services/services.actions'; MatButton, TestDirective, TranslateModule, + ModalHeaderComponent, ], }) -export class TargetGlobalConfigurationComponent implements OnInit { - isFormLoading = false; - areSettingsSaved = false; +export class GlobalTargetConfigurationComponent implements OnInit { + protected isLoading = signal(false); isHaSystem = false; form = this.fb.group({ @@ -72,11 +75,7 @@ export class TargetGlobalConfigurationComponent implements OnInit { alua: helptextSharingIscsi.globalconf_tooltip_alua, }; - readonly requiredRoles = [ - Role.SharingIscsiGlobalWrite, - Role.SharingIscsiWrite, - Role.SharingWrite, - ]; + readonly requiredRoles = [Role.SharingIscsiGlobalWrite]; constructor( private api: ApiService, @@ -86,6 +85,9 @@ export class TargetGlobalConfigurationComponent implements OnInit { private errorHandler: ErrorHandlerService, private formErrorHandler: FormErrorHandlerService, private dialogService: DialogService, + private slideInRef: SlideInRef, + private snackbar: SnackbarService, + private translate: TranslateService, ) {} ngOnInit(): void { @@ -94,21 +96,21 @@ export class TargetGlobalConfigurationComponent implements OnInit { } onSubmit(): void { - this.areSettingsSaved = false; - this.setLoading(true); + this.isLoading.set(true); const values = this.form.value as IscsiGlobalConfigUpdate; this.api.call('iscsi.global.update', [values]) .pipe(untilDestroyed(this)) .subscribe({ complete: () => { - this.setLoading(false); - this.areSettingsSaved = true; + this.isLoading.set(false); this.store$.dispatch(checkIfServiceIsEnabled({ serviceName: ServiceName.Iscsi })); this.cdr.markForCheck(); + this.slideInRef.close(true); + this.snackbar.success(this.translate.instant('Settings saved.')); }, error: (error: unknown) => { - this.setLoading(false); + this.isLoading.set(false); this.formErrorHandler.handleValidationErrors(error, this.form); this.cdr.markForCheck(); }, @@ -116,25 +118,20 @@ export class TargetGlobalConfigurationComponent implements OnInit { } private loadFormValues(): void { - this.setLoading(true); + this.isLoading.set(true); this.api.call('iscsi.global.config').pipe(untilDestroyed(this)).subscribe({ next: (config) => { this.form.patchValue(config); - this.setLoading(false); + this.isLoading.set(false); }, error: (error: unknown) => { this.dialogService.error(this.errorHandler.parseError(error)); - this.setLoading(false); + this.isLoading.set(false); }, }); } - private setLoading(value: boolean): void { - this.isFormLoading = value; - this.cdr.markForCheck(); - } - private listenForHaStatus(): void { this.store$.select(selectIsHaLicensed).pipe(untilDestroyed(this)).subscribe((isHa) => { this.isHaSystem = isHa; diff --git a/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.spec.ts b/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.spec.ts index f07ae31020d..c52ba6d94d1 100644 --- a/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.spec.ts +++ b/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.spec.ts @@ -99,7 +99,7 @@ describe('InitiatorFormComponent', () => { comment: 'new_comment', initiators: ['inr11', 'inr12', 'inr1'], }]); - expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiator']); + expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiators']); }); it('sends empty initiators when allow all is secected', async () => { @@ -117,7 +117,7 @@ describe('InitiatorFormComponent', () => { comment: 'new_comment', initiators: [], }]); - expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiator']); + expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiators']); }); it('adds a new initiator and closes modal when Save button is pressed', async () => { @@ -145,14 +145,14 @@ describe('InitiatorFormComponent', () => { comment: '', initiators: ['new_initiator_1', 'new_initiator_2'], }]); - expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiator']); + expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiators']); }); it('redirects to Initiator List page when Cancel button is pressed', async () => { const button = await loader.getHarness(MatButtonHarness.with({ text: 'Cancel' })); await button.click(); - expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiator']); + expect(spectator.inject(Router).navigate).toHaveBeenCalledWith(['/', 'sharing', 'iscsi', 'initiators']); }); it('loads connected initiators when Refresh button is pressed', async () => { diff --git a/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.ts b/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.ts index 992d2a3c46f..97aa1da4103 100644 --- a/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.ts +++ b/src/app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component.ts @@ -114,7 +114,7 @@ export class InitiatorFormComponent implements OnInit { } onCancel(): void { - this.router.navigate(['/', 'sharing', 'iscsi', 'initiator']); + this.router.navigate(['/', 'sharing', 'iscsi', 'initiators']); } onSubmit(): void { diff --git a/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.html b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.html index d371a5cdc76..adf54387d12 100644 --- a/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.html +++ b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.html @@ -1,4 +1,4 @@ - +

{{ 'Initiators Groups' | translate }}

diff --git a/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.ts b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.ts index c311ca41aa9..fa491dc6c1d 100644 --- a/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.ts +++ b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component.ts @@ -10,6 +10,7 @@ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { TranslateService, TranslateModule } from '@ngx-translate/core'; import { filter, switchMap, tap } from 'rxjs'; import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive'; +import { UiSearchDirective } from 'app/directives/ui-search.directive'; import { Role } from 'app/enums/role.enum'; import { IscsiInitiatorGroup } from 'app/interfaces/iscsi.interface'; import { DialogService } from 'app/modules/dialog/dialog.service'; @@ -29,6 +30,7 @@ import { createTable } from 'app/modules/ix-table/utils'; import { AppLoaderService } from 'app/modules/loader/app-loader.service'; import { FakeProgressBarComponent } from 'app/modules/loader/components/fake-progress-bar/fake-progress-bar.component'; import { TestDirective } from 'app/modules/test-id/test.directive'; +import { initiatorListElements } from 'app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.elements'; import { ErrorHandlerService } from 'app/services/error-handler.service'; import { IscsiService } from 'app/services/iscsi.service'; import { ApiService } from 'app/services/websocket/api.service'; @@ -56,9 +58,12 @@ import { ApiService } from 'app/services/websocket/api.service'; IxTablePagerComponent, TranslateModule, AsyncPipe, + UiSearchDirective, ], }) export class InitiatorListComponent implements OnInit { + protected readonly searchableElements = initiatorListElements; + readonly requiredRoles = [ Role.SharingIscsiInitiatorWrite, Role.SharingIscsiWrite, diff --git a/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.elements.ts b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.elements.ts new file mode 100644 index 00000000000..00b4f5ccc27 --- /dev/null +++ b/src/app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.elements.ts @@ -0,0 +1,11 @@ +import { marker as T } from '@biesbjerg/ngx-translate-extract-marker'; +import { UiSearchableElement } from 'app/modules/global-search/interfaces/ui-searchable-element.interface'; + +export const initiatorListElements = { + hierarchy: [T('Shares'), T('iSCSI'), T('Initiators')], + synonyms: [T('Initiator Group')], + anchorRouterLink: ['/sharing', 'iscsi', 'initiators'], + elements: { + list: {}, + }, +} satisfies UiSearchableElement; diff --git a/src/app/pages/sharing/iscsi/iscsi.component.html b/src/app/pages/sharing/iscsi/iscsi.component.html index d52ca8605af..2ddbcb7c302 100644 --- a/src/app/pages/sharing/iscsi/iscsi.component.html +++ b/src/app/pages/sharing/iscsi/iscsi.component.html @@ -1,18 +1,27 @@ + +
- - - @switch (activeTab()) { - @case ('configuration') { - - } - - @case ('portals') { - - } - - @case ('initiator') { - - } - - @case ('auth') { - - } - - @case ('target') { - - } - - @case ('extent') { - - } - - @case ('associatedtarget') { - - } - } - - + + + diff --git a/src/app/pages/sharing/iscsi/iscsi.component.spec.ts b/src/app/pages/sharing/iscsi/iscsi.component.spec.ts index d11c98b3a2e..1813ec599ee 100644 --- a/src/app/pages/sharing/iscsi/iscsi.component.spec.ts +++ b/src/app/pages/sharing/iscsi/iscsi.component.spec.ts @@ -1,70 +1,76 @@ +import { HarnessLoader } from '@angular/cdk/testing'; +import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; +import { MatButtonHarness } from '@angular/material/button/testing'; import { MatTabsModule } from '@angular/material/tabs'; +import { MatTabNavBarHarness } from '@angular/material/tabs/testing'; import { Spectator } from '@ngneat/spectator'; -import { createRoutingFactory } from '@ngneat/spectator/jest'; +import { createRoutingFactory, mockProvider } from '@ngneat/spectator/jest'; import { MockComponent, MockComponents } from 'ng-mocks'; +import { BehaviorSubject } from 'rxjs'; +import { mockApi } from 'app/core/testing/utils/mock-api.utils'; import { mockAuth } from 'app/core/testing/utils/mock-auth.utils'; import { PageHeaderComponent } from 'app/modules/page-header/page-title-header/page-header.component'; -import { TargetGlobalConfigurationComponent } from 'app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component'; +import { GlobalTargetConfigurationComponent } from 'app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component'; import { IscsiService } from 'app/services/iscsi.service'; +import { SlideInService } from 'app/services/slide-in.service'; import { IscsiComponent } from './iscsi.component'; describe('IscsiComponent', () => { let spectator: Spectator; + const hasFibreChannel$ = new BehaviorSubject(false); + let loader: HarnessLoader; const createComponent = createRoutingFactory({ component: IscsiComponent, declarations: [ - MockComponents(TargetGlobalConfigurationComponent), + MockComponents(GlobalTargetConfigurationComponent), ], imports: [ MatTabsModule, MockComponent(PageHeaderComponent), ], - providers: [IscsiService, mockAuth()], - params: { - activeTab: 'configuration', - }, + providers: [ + mockProvider(IscsiService, { + hasFibreChannel: () => hasFibreChannel$, + }), + mockAuth(), + mockApi(), + mockProvider(SlideInService), + ], }); beforeEach(() => { spectator = createComponent(); + loader = TestbedHarnessEnvironment.loader(spectator.fixture); }); - it('should have correct initial activeTab', () => { - expect(spectator.component.activeTab()).toBe('configuration'); + it('has a Global Target Configuration button that opens the settings form', async () => { + const configurationButton = await loader.getHarness(MatButtonHarness.with({ text: 'Global Target Configuration' })); + await configurationButton.click(); + + expect(spectator.inject(SlideInService).open).toHaveBeenCalledWith(GlobalTargetConfigurationComponent); }); - it('should have correct navLinks', () => { - const expectedNavLinks = [ - { - label: 'Target Global Configuration', - path: '/sharing/iscsi/configuration', - }, - { - label: 'Portals', - path: '/sharing/iscsi/portals', - }, - { - label: 'Initiators Groups', - path: '/sharing/iscsi/initiator', - }, - { - label: 'Authorized Access', - path: '/sharing/iscsi/auth', - }, - { - label: 'Targets', - path: '/sharing/iscsi/target', - }, - { - label: 'Extents', - path: '/sharing/iscsi/extent', - }, - { - label: 'Associated Targets', - path: '/sharing/iscsi/associatedtarget', - }, - ]; - expect(spectator.component.navLinks).toEqual(expectedNavLinks); + it('shows a navtab with supported links', async () => { + const navbar = await loader.getHarness(MatTabNavBarHarness); + const links = await navbar.getLinks(); + + expect(links).toHaveLength(5); + expect(await links[0].getLabel()).toBe('Targets'); + expect(await links[1].getLabel()).toBe('Extents'); + expect(await links[2].getLabel()).toBe('Initiators'); + expect(await links[3].getLabel()).toBe('Portals'); + expect(await links[4].getLabel()).toBe('Authorized Access'); + }); + + it('shows fibre channel link navtab on a fibre channel capable system', async () => { + hasFibreChannel$.next(true); + spectator.detectChanges(); + + const navbar = await loader.getHarness(MatTabNavBarHarness); + const links = await navbar.getLinks(); + + expect(links).toHaveLength(6); + expect(await links[5].getLabel()).toBe('Fibre Channel Ports'); }); }); diff --git a/src/app/pages/sharing/iscsi/iscsi.component.ts b/src/app/pages/sharing/iscsi/iscsi.component.ts index 906d9e74e6b..781454994a4 100644 --- a/src/app/pages/sharing/iscsi/iscsi.component.ts +++ b/src/app/pages/sharing/iscsi/iscsi.component.ts @@ -1,31 +1,29 @@ -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; +import { AsyncPipe } from '@angular/common'; +import { + ChangeDetectionStrategy, Component, +} from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MatTabNav, MatTabLink, MatTabNavPanel } from '@angular/material/tabs'; import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router'; import { TranslateService, TranslateModule } from '@ngx-translate/core'; +import { async } from 'rxjs'; +import { map } from 'rxjs/operators'; import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive'; import { UiSearchDirective } from 'app/directives/ui-search.directive'; import { Role } from 'app/enums/role.enum'; import { PageHeaderComponent } from 'app/modules/page-header/page-title-header/page-header.component'; import { TestDirective } from 'app/modules/test-id/test.directive'; +import { GlobalTargetConfigurationComponent } from 'app/pages/sharing/iscsi/global-target-configuration/global-target-configuration.component'; import { IscsiWizardComponent } from 'app/pages/sharing/iscsi/iscsi-wizard/iscsi-wizard.component'; import { iscsiElements } from 'app/pages/sharing/iscsi/iscsi.elements'; import { IscsiService } from 'app/services/iscsi.service'; import { SlideInService } from 'app/services/slide-in.service'; -import { AssociatedTargetListComponent } from './associated-target/associated-target-list/associated-target-list.component'; -import { AuthorizedAccessListComponent } from './authorized-access/authorized-access-list/authorized-access-list.component'; -import { ExtentListComponent } from './extent/extent-list/extent-list.component'; -import { InitiatorListComponent } from './initiator/initiator-list/initiator-list.component'; -import { PortalListComponent } from './portal/portal-list/portal-list.component'; -import { TargetListComponent } from './target/target-list/target-list.component'; -import { TargetGlobalConfigurationComponent } from './target-global-configuration/target-global-configuration.component'; @Component({ selector: 'ix-iscsi', templateUrl: './iscsi.component.html', styleUrls: ['./iscsi.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, - providers: [IscsiService], standalone: true, imports: [ PageHeaderComponent, @@ -33,63 +31,69 @@ import { TargetGlobalConfigurationComponent } from './target-global-configuratio MatButton, TestDirective, MatTabNav, - MatTabLink, MatTabNavPanel, - TargetGlobalConfigurationComponent, - UiSearchDirective, - PortalListComponent, - InitiatorListComponent, - AuthorizedAccessListComponent, - TargetListComponent, - ExtentListComponent, - AssociatedTargetListComponent, TranslateModule, - RouterLinkActive, RouterOutlet, + UiSearchDirective, + AsyncPipe, + MatTabLink, + RouterLinkActive, RouterLink, ], }) export class IscsiComponent { - readonly requiredRoles = [Role.SharingIscsiWrite]; - readonly activeTab = input('configuration'); + protected readonly searchableElements = iscsiElements; + protected readonly requiredRoles = [Role.SharingIscsiWrite]; - navLinks = [{ - label: this.translate.instant('Target Global Configuration'), - path: '/sharing/iscsi/configuration', - }, - { - label: this.translate.instant('Portals'), - path: '/sharing/iscsi/portals', - }, - { - label: this.translate.instant('Initiators Groups'), - path: '/sharing/iscsi/initiator', - }, - { - label: this.translate.instant('Authorized Access'), - path: '/sharing/iscsi/auth', - }, - { - label: this.translate.instant('Targets'), - path: '/sharing/iscsi/target', - }, - { - label: this.translate.instant('Extents'), - path: '/sharing/iscsi/extent', - }, - { - label: this.translate.instant('Associated Targets'), - path: '/sharing/iscsi/associatedtarget', - }]; + protected readonly navLinks$ = this.iscsiService.hasFibreChannel().pipe( + map((hasFibreChannel) => { + const links = [ + { + label: this.translate.instant('Targets'), + path: '/sharing/iscsi/targets', + }, + { + label: this.translate.instant('Extents'), + path: '/sharing/iscsi/extents', + }, + { + label: this.translate.instant('Initiators'), + path: '/sharing/iscsi/initiators', + }, + { + label: this.translate.instant('Portals'), + path: '/sharing/iscsi/portals', + }, + { + label: this.translate.instant('Authorized Access'), + path: '/sharing/iscsi/authorized-access', + }, + ]; - protected readonly searchableElements = iscsiElements; + if (hasFibreChannel) { + links.push({ + label: this.translate.instant('Fibre Channel Ports'), + path: '/sharing/iscsi/fibre-channel-ports', + }); + } + + return links; + }), + ); constructor( - protected translate: TranslateService, + private translate: TranslateService, private slideInService: SlideInService, + private iscsiService: IscsiService, ) {} - gotoWizard(): void { + openWizard(): void { this.slideInService.open(IscsiWizardComponent); } + + openGlobalTargetConfiguration(): void { + this.slideInService.open(GlobalTargetConfigurationComponent); + } + + protected readonly async = async; } diff --git a/src/app/pages/sharing/iscsi/iscsi.elements.ts b/src/app/pages/sharing/iscsi/iscsi.elements.ts index 647fa38f0ec..b1e6210e5a2 100644 --- a/src/app/pages/sharing/iscsi/iscsi.elements.ts +++ b/src/app/pages/sharing/iscsi/iscsi.elements.ts @@ -3,34 +3,11 @@ import { UiSearchableElement } from 'app/modules/global-search/interfaces/ui-sea export const iscsiElements = { hierarchy: [T('Shares'), T('iSCSI')], + anchorRouterLink: ['/sharing', 'iscsi'], elements: { - configuration: { - hierarchy: [T('Target Global Configuration')], - anchorRouterLink: ['/sharing', 'iscsi', 'configuration'], - }, - portals: { - hierarchy: [T('Portals')], - anchorRouterLink: ['/sharing', 'iscsi', 'portals'], - }, - initiator: { - hierarchy: [T('Initiators Groups')], - anchorRouterLink: ['/sharing', 'iscsi', 'initiator'], - }, - auth: { - hierarchy: [T('Authorized Access')], - anchorRouterLink: ['/sharing', 'iscsi', 'auth'], - }, - target: { - hierarchy: [T('Targets')], - anchorRouterLink: ['/sharing', 'iscsi', 'target'], - }, - extent: { - hierarchy: [T('Extents')], - anchorRouterLink: ['/sharing', 'iscsi', 'extent'], - }, - associatedTarget: { - hierarchy: [T('Associated Targets')], - anchorRouterLink: ['/sharing', 'iscsi', 'associatedtarget'], + config: { + hierarchy: [T('Global Target Configuration')], + anchor: 'global-configuration', }, }, } satisfies UiSearchableElement; diff --git a/src/app/pages/sharing/iscsi/iscsi.routes.ts b/src/app/pages/sharing/iscsi/iscsi.routes.ts new file mode 100644 index 00000000000..2811e5182c1 --- /dev/null +++ b/src/app/pages/sharing/iscsi/iscsi.routes.ts @@ -0,0 +1,72 @@ +import { Routes } from '@angular/router'; +import { marker as T } from '@biesbjerg/ngx-translate-extract-marker'; +import { + AuthorizedAccessListComponent, +} from 'app/pages/sharing/iscsi/authorized-access/authorized-access-list/authorized-access-list.component'; +import { ExtentListComponent } from 'app/pages/sharing/iscsi/extent/extent-list/extent-list.component'; +import { FibreChannelPortsComponent } from 'app/pages/sharing/iscsi/fibre-channel-ports/fibre-channel-ports.component'; +import { InitiatorFormComponent } from 'app/pages/sharing/iscsi/initiator/initiator-form/initiator-form.component'; +import { InitiatorListComponent } from 'app/pages/sharing/iscsi/initiator/initiator-list/initiator-list.component'; +import { IscsiComponent } from 'app/pages/sharing/iscsi/iscsi.component'; +import { PortalListComponent } from 'app/pages/sharing/iscsi/portal/portal-list/portal-list.component'; + +export const iscsiRoutes: Routes = [ + { + path: '', + component: IscsiComponent, + data: { title: 'iSCSI', breadcrumb: null }, + children: [ + { + path: '', + redirectTo: 'targets', + pathMatch: 'full', + }, + { + path: 'targets', + data: { title: T('Targets'), breadcrumb: T('Targets') }, + component: PortalListComponent, + }, + { + path: 'extents', + data: { title: T('Extents'), breadcrumb: T('Extents') }, + component: ExtentListComponent, + }, + { + path: 'initiators', + data: { title: T('Initiators'), breadcrumb: T('Initiators') }, + children: [ + { + path: '', + pathMatch: 'full', + component: InitiatorListComponent, + }, + ], + }, + { + path: 'portals', + data: { title: T('Portals'), breadcrumb: T('Portals') }, + component: PortalListComponent, + }, + { + path: 'authorized-access', + data: { title: T('Authorized Access'), breadcrumb: T('Authorized Access') }, + component: AuthorizedAccessListComponent, + }, + { + path: 'fibre-channel-ports', + data: { title: T('Fibre Channel Ports'), breadcrumb: T('Fibre Channel Ports') }, + component: FibreChannelPortsComponent, + }, + ], + }, + { + path: 'initiators/add', + component: InitiatorFormComponent, + data: { title: T('Add Initiator'), breadcrumb: T('Add') }, + }, + { + path: 'initiators/edit/:pk', + component: InitiatorFormComponent, + data: { title: T('Add Initiator'), breadcrumb: T('Edit') }, + }, +]; diff --git a/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.html b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.html index 07d7f05651a..0baf67ca55f 100644 --- a/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.html +++ b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.html @@ -1,4 +1,4 @@ - +

{{ 'Portals' | translate }}

diff --git a/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.ts b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.ts index a2d31ed5b3d..04301260f13 100644 --- a/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.ts +++ b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.component.ts @@ -9,6 +9,7 @@ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { TranslateService, TranslateModule } from '@ngx-translate/core'; import { filter, switchMap, tap } from 'rxjs'; import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive'; +import { UiSearchDirective } from 'app/directives/ui-search.directive'; import { Role } from 'app/enums/role.enum'; import { IscsiPortal } from 'app/interfaces/iscsi.interface'; import { DialogService } from 'app/modules/dialog/dialog.service'; @@ -29,6 +30,7 @@ import { AppLoaderService } from 'app/modules/loader/app-loader.service'; import { FakeProgressBarComponent } from 'app/modules/loader/components/fake-progress-bar/fake-progress-bar.component'; import { TestDirective } from 'app/modules/test-id/test.directive'; import { PortalFormComponent } from 'app/pages/sharing/iscsi/portal/portal-form/portal-form.component'; +import { portalListElements } from 'app/pages/sharing/iscsi/portal/portal-list/portal-list.elements'; import { ErrorHandlerService } from 'app/services/error-handler.service'; import { IscsiService } from 'app/services/iscsi.service'; import { SlideInService } from 'app/services/slide-in.service'; @@ -57,9 +59,12 @@ import { ApiService } from 'app/services/websocket/api.service'; IxTablePagerComponent, TranslateModule, AsyncPipe, + UiSearchDirective, ], }) export class PortalListComponent implements OnInit { + protected readonly searchableElements = portalListElements; + readonly requiredRoles = [ Role.SharingIscsiPortalWrite, Role.SharingIscsiWrite, diff --git a/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.elements.ts b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.elements.ts new file mode 100644 index 00000000000..180ff6e61b5 --- /dev/null +++ b/src/app/pages/sharing/iscsi/portal/portal-list/portal-list.elements.ts @@ -0,0 +1,10 @@ +import { marker as T } from '@biesbjerg/ngx-translate-extract-marker'; +import { UiSearchableElement } from 'app/modules/global-search/interfaces/ui-searchable-element.interface'; + +export const portalListElements = { + hierarchy: [T('Shares'), T('iSCSI'), T('Portals')], + anchorRouterLink: ['/sharing', 'iscsi', 'portals'], + elements: { + list: {}, + }, +} satisfies UiSearchableElement; diff --git a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.scss b/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.scss deleted file mode 100644 index f3e58ba1da4..00000000000 --- a/src/app/pages/sharing/iscsi/target-global-configuration/target-global-configuration.component.scss +++ /dev/null @@ -1,22 +0,0 @@ -:host { - display: block; - padding-bottom: 15px; -} - -form { - margin: 0 auto; - max-width: 960px; - padding-left: 7px; - padding-right: 7px; -} - -.saved-message { - font-size: 12px; - margin-left: 12px; - margin-top: 6px; -} - -.form-actions { - justify-content: flex-start; - padding-bottom: 16px; -} diff --git a/src/app/pages/sharing/iscsi/target/target-list/target-list.component.html b/src/app/pages/sharing/iscsi/target/target-list/target-list.component.html index 92cf42b727a..07774dbae0e 100644 --- a/src/app/pages/sharing/iscsi/target/target-list/target-list.component.html +++ b/src/app/pages/sharing/iscsi/target/target-list/target-list.component.html @@ -1,4 +1,4 @@ - +

{{ 'Targets' | translate }}

diff --git a/src/app/pages/sharing/iscsi/target/target-list/target-list.component.ts b/src/app/pages/sharing/iscsi/target/target-list/target-list.component.ts index e2204c67e8a..9b259e15f4d 100644 --- a/src/app/pages/sharing/iscsi/target/target-list/target-list.component.ts +++ b/src/app/pages/sharing/iscsi/target/target-list/target-list.component.ts @@ -9,6 +9,7 @@ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { TranslateService, TranslateModule } from '@ngx-translate/core'; import { filter, switchMap, tap } from 'rxjs/operators'; import { RequiresRolesDirective } from 'app/directives/requires-roles/requires-roles.directive'; +import { UiSearchDirective } from 'app/directives/ui-search.directive'; import { Role } from 'app/enums/role.enum'; import { IscsiTarget } from 'app/interfaces/iscsi.interface'; import { DialogService } from 'app/modules/dialog/dialog.service'; @@ -30,6 +31,7 @@ import { AppLoaderService } from 'app/modules/loader/app-loader.service'; import { FakeProgressBarComponent } from 'app/modules/loader/components/fake-progress-bar/fake-progress-bar.component'; import { TestDirective } from 'app/modules/test-id/test.directive'; import { TargetFormComponent } from 'app/pages/sharing/iscsi/target/target-form/target-form.component'; +import { targetListElements } from 'app/pages/sharing/iscsi/target/target-list/target-list.elements'; import { ErrorHandlerService } from 'app/services/error-handler.service'; import { IscsiService } from 'app/services/iscsi.service'; import { SlideInService } from 'app/services/slide-in.service'; @@ -58,9 +60,12 @@ import { ApiService } from 'app/services/websocket/api.service'; IxTablePagerComponent, TranslateModule, AsyncPipe, + UiSearchDirective, ], }) export class TargetListComponent implements OnInit { + protected readonly searchableElements = targetListElements; + readonly requiredRoles = [ Role.SharingIscsiTargetWrite, Role.SharingIscsiWrite, diff --git a/src/app/pages/sharing/iscsi/target/target-list/target-list.elements.ts b/src/app/pages/sharing/iscsi/target/target-list/target-list.elements.ts new file mode 100644 index 00000000000..339039f55bc --- /dev/null +++ b/src/app/pages/sharing/iscsi/target/target-list/target-list.elements.ts @@ -0,0 +1,10 @@ +import { marker as T } from '@biesbjerg/ngx-translate-extract-marker'; +import { UiSearchableElement } from 'app/modules/global-search/interfaces/ui-searchable-element.interface'; + +export const targetListElements = { + hierarchy: [T('Shares'), T('iSCSI'), T('Targets')], + anchorRouterLink: ['/sharing', 'iscsi', 'targets'], + elements: { + list: {}, + }, +} satisfies UiSearchableElement; diff --git a/src/app/pages/sharing/sharing.routes.ts b/src/app/pages/sharing/sharing.routes.ts index de7086921ce..92158406764 100644 --- a/src/app/pages/sharing/sharing.routes.ts +++ b/src/app/pages/sharing/sharing.routes.ts @@ -4,8 +4,6 @@ import { SharesDashboardComponent } from 'app/pages/sharing/components/shares-da import { NfsListComponent } from 'app/pages/sharing/nfs/nfs-list/nfs-list.component'; import { NfsSessionListComponent } from 'app/pages/sharing/nfs/nfs-session-list/nfs-session-list.component'; import { SmbStatusComponent } from 'app/pages/sharing/smb/smb-status/smb-status.component'; -import { InitiatorFormComponent } from './iscsi/initiator/initiator-form/initiator-form.component'; -import { IscsiComponent } from './iscsi/iscsi.component'; import { SmbListComponent } from './smb/smb-list/smb-list.component'; export const sharingRoutes: Routes = [ @@ -59,39 +57,11 @@ export const sharingRoutes: Routes = [ }, ], }], - }, { + }, + { path: 'iscsi', data: { title: T('iSCSI'), breadcrumb: null }, - - children: [ - { - path: '', - data: { title: T('iSCSI'), breadcrumb: null }, - children: [ - { - path: '', - redirectTo: 'configuration', - pathMatch: 'full', - }, - { - path: ':activeTab', - component: IscsiComponent, - data: { breadcrumb: null }, - }, - { - path: 'initiators', - data: { title: T('Initiators'), breadcrumb: T('Initiators') }, - children: [{ - path: 'add', - component: InitiatorFormComponent, - data: { title: T('Add Initiator'), breadcrumb: T('Add') }, - }, { - path: 'edit/:pk', - component: InitiatorFormComponent, - data: { title: T('Add Initiator'), breadcrumb: T('Edit') }, - }], - }], - }], + loadChildren: () => import('./iscsi/iscsi.routes').then((module) => module.iscsiRoutes), }, ], }, diff --git a/src/app/services/iscsi.service.ts b/src/app/services/iscsi.service.ts index 0b6b98fd6b3..8102cb5f4a5 100644 --- a/src/app/services/iscsi.service.ts +++ b/src/app/services/iscsi.service.ts @@ -52,4 +52,8 @@ export class IscsiService { getGlobalSessions(): Observable { return this.api.call('iscsi.global.sessions'); } + + hasFibreChannel(): Observable { + return this.api.call('fc.capable'); + } } diff --git a/src/assets/i18n/af.json b/src/assets/i18n/af.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/af.json +++ b/src/assets/i18n/af.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ar.json +++ b/src/assets/i18n/ar.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ast.json b/src/assets/i18n/ast.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ast.json +++ b/src/assets/i18n/ast.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/az.json b/src/assets/i18n/az.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/az.json +++ b/src/assets/i18n/az.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/be.json b/src/assets/i18n/be.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/be.json +++ b/src/assets/i18n/be.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/bg.json b/src/assets/i18n/bg.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/bg.json +++ b/src/assets/i18n/bg.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/bn.json b/src/assets/i18n/bn.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/bn.json +++ b/src/assets/i18n/bn.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/br.json b/src/assets/i18n/br.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/br.json +++ b/src/assets/i18n/br.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/bs.json b/src/assets/i18n/bs.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/bs.json +++ b/src/assets/i18n/bs.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ca.json +++ b/src/assets/i18n/ca.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/cs.json b/src/assets/i18n/cs.json index 79f3b17d601..dc75ef9061d 100644 --- a/src/assets/i18n/cs.json +++ b/src/assets/i18n/cs.json @@ -1442,6 +1442,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1540,6 +1541,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Gmail": "", @@ -1785,6 +1787,7 @@ "Initialized": "", "Initializing Apps Service": "", "Initializing...": "", + "Initiator Group": "", "Initiators Groups": "", "Initiators currently connected to the system. Shown in IQN format with an IP address. Set initiators and click an -> (arrow) to add the initiators to either the Allowed Initiators or Authorized Networks lists. Clicking Refresh updates the Connected Initiators list.": "", "Inquiry": "", @@ -3690,7 +3693,6 @@ "Take screenshot of the current page": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Stats": "", "Target Utilization": "", "Target dataset encryption will be inherited from its parent dataset.": "", diff --git a/src/assets/i18n/cy.json b/src/assets/i18n/cy.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/cy.json +++ b/src/assets/i18n/cy.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index edead8565c3..39608992640 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1317,6 +1317,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File ID": "", "File Inherit": "", @@ -1404,6 +1405,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -1614,6 +1616,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -3160,7 +3163,6 @@ "Take screenshot of the current page": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Stats": "", "Target Utilization": "", "Target dataset encryption will be inherited from its parent dataset.": "", diff --git a/src/assets/i18n/dsb.json b/src/assets/i18n/dsb.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/dsb.json +++ b/src/assets/i18n/dsb.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/el.json b/src/assets/i18n/el.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/el.json +++ b/src/assets/i18n/el.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/en-au.json b/src/assets/i18n/en-au.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/en-au.json +++ b/src/assets/i18n/en-au.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/en-gb.json b/src/assets/i18n/en-gb.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/en-gb.json +++ b/src/assets/i18n/en-gb.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/eo.json b/src/assets/i18n/eo.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/eo.json +++ b/src/assets/i18n/eo.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/es-ar.json b/src/assets/i18n/es-ar.json index c89e5642b6e..bda1990e67e 100644 --- a/src/assets/i18n/es-ar.json +++ b/src/assets/i18n/es-ar.json @@ -465,6 +465,7 @@ "Fenced is not running.": "", "Fetch DataStores": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "File size is limited to {n} MiB.": "", "Filesystem Attrs Read": "", "Filesystem Attrs Write": "", @@ -495,6 +496,7 @@ "Global 2FA Enable": "", "Global Configuration Settings": "", "Global SED Password": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Go To Encryption Root": "", @@ -577,6 +579,7 @@ "Initialized": "", "Initializing Apps Service": "", "Initializing...": "", + "Initiator Group": "", "Inquiry": "", "Insensitive": "", "Installer image file": "", @@ -4743,7 +4746,6 @@ "Take Snapshot": "Tomar instantánea", "Target": "Objetivo", "Target Alias": "Alias de objetivo", - "Target Global Configuration": "Configuración global de destino", "Target Name": "Nombre del objetivo", "Target dataset encryption will be inherited from its parent dataset.": "El cifrado del conjunto de datos de destino se heredará de su conjunto de datos principal.", "Target with this name already exists": "El objetivo con este nombre ya existe", diff --git a/src/assets/i18n/es-co.json b/src/assets/i18n/es-co.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/es-co.json +++ b/src/assets/i18n/es-co.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/es-mx.json b/src/assets/i18n/es-mx.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/es-mx.json +++ b/src/assets/i18n/es-mx.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/es-ni.json b/src/assets/i18n/es-ni.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/es-ni.json +++ b/src/assets/i18n/es-ni.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/es-ve.json b/src/assets/i18n/es-ve.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/es-ve.json +++ b/src/assets/i18n/es-ve.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 197ffe524c6..23ac3a9937a 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -1724,6 +1724,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1826,6 +1827,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2085,6 +2087,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4013,7 +4016,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/et.json b/src/assets/i18n/et.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/et.json +++ b/src/assets/i18n/et.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/eu.json b/src/assets/i18n/eu.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/eu.json +++ b/src/assets/i18n/eu.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/fa.json b/src/assets/i18n/fa.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/fa.json +++ b/src/assets/i18n/fa.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/fi.json b/src/assets/i18n/fi.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/fi.json +++ b/src/assets/i18n/fi.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 41663afcea9..ab670679c20 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -272,6 +272,7 @@ "Failover Write": "", "Fast Storage": "", "Feedback Type": "", + "Fibre Channel Ports": "", "File ID": "", "File Mask": "", "File Permissions": "", @@ -296,6 +297,7 @@ "Global 2FA": "", "Global 2FA Enable": "", "Global Settings": "", + "Global Target Configuration": "", "Gmail": "", "Go To Dataset": "", "Go to Jobs Page": "", @@ -363,6 +365,7 @@ "Init/Shutdown Script": "", "Initialized": "", "Initializing...": "", + "Initiator Group": "", "Insensitive": "", "Inspect VDEVs": "", "Install via YAML": "", @@ -4545,7 +4548,6 @@ "Target": "Cible", "Target Alias": "Alias de la cible", "Target Dataset": "Dataset cible", - "Target Global Configuration": "Configuration globale de la cible", "Target Name": "Nom de la cible", "Target dataset encryption will be inherited from its parent dataset.": "Le chiffrement du dataset cible sera hérité de son dataset parent.", "Target with this name already exists": "La cible portant ce nom existe déjà", diff --git a/src/assets/i18n/fy.json b/src/assets/i18n/fy.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/fy.json +++ b/src/assets/i18n/fy.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ga.json b/src/assets/i18n/ga.json index e4fb8b3a17d..be928777f24 100644 --- a/src/assets/i18n/ga.json +++ b/src/assets/i18n/ga.json @@ -106,10 +106,12 @@ "Expires Date": "", "Expires at": "", "Fast Storage": "", + "Fibre Channel Ports": "", "For performance reasons SHA512 is recommended over SHA256 for datasets with deduplication enabled.": "", "GPU Devices": "", "General Settings": "", "Global Settings": "", + "Global Target Configuration": "", "Go To Dataset": "", "Go to Jobs Page": "", "Group Members": "", @@ -127,6 +129,7 @@ "Increase logging verbosity related to the active directory service in /var/log/middlewared.log": "", "Initialized": "", "Initializing...": "", + "Initiator Group": "", "Install NVIDIA Drivers": "", "Install via YAML": "", "Instance": "", @@ -4427,7 +4430,6 @@ "Target": "Sprioc", "Target Alias": "Sprioc Ailias", "Target Dataset": "Tacar Sonraí Sprioc", - "Target Global Configuration": "Cumraíocht Dhomhanda Sprioc", "Target Name": "Ainm sprice", "Target Stats": "Staitisticí sprice", "Target Utilization": "Úsáid Sprioc", diff --git a/src/assets/i18n/gd.json b/src/assets/i18n/gd.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/gd.json +++ b/src/assets/i18n/gd.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/gl.json b/src/assets/i18n/gl.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/gl.json +++ b/src/assets/i18n/gl.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/he.json b/src/assets/i18n/he.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/he.json +++ b/src/assets/i18n/he.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/hi.json b/src/assets/i18n/hi.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/hi.json +++ b/src/assets/i18n/hi.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/hr.json b/src/assets/i18n/hr.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/hr.json +++ b/src/assets/i18n/hr.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/hsb.json b/src/assets/i18n/hsb.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/hsb.json +++ b/src/assets/i18n/hsb.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/hu.json b/src/assets/i18n/hu.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/hu.json +++ b/src/assets/i18n/hu.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ia.json b/src/assets/i18n/ia.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ia.json +++ b/src/assets/i18n/ia.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/id.json b/src/assets/i18n/id.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/id.json +++ b/src/assets/i18n/id.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/io.json b/src/assets/i18n/io.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/io.json +++ b/src/assets/i18n/io.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/is.json b/src/assets/i18n/is.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/is.json +++ b/src/assets/i18n/is.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json index 8679f1dc7da..d9ef29dffb9 100644 --- a/src/assets/i18n/it.json +++ b/src/assets/i18n/it.json @@ -1697,6 +1697,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1812,6 +1813,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2092,6 +2094,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4530,7 +4533,6 @@ "Take screenshot of the current page": "Fai uno screenshot della pagina corrente", "Target Alias": "Alias Target", "Target Dataset": "Dataset Target", - "Target Global Configuration": "Configurazione globale del Target", "Target Name": "Nome Target", "Target Stats": "Statistiche del Target", "Target Utilization": "Utilizzo del Target", diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json index b51f05bdf49..170329b2d6f 100644 --- a/src/assets/i18n/ja.json +++ b/src/assets/i18n/ja.json @@ -1618,6 +1618,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1725,6 +1726,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Gmail": "", @@ -1992,6 +1994,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -3897,7 +3900,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ka.json b/src/assets/i18n/ka.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ka.json +++ b/src/assets/i18n/ka.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/kk.json b/src/assets/i18n/kk.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/kk.json +++ b/src/assets/i18n/kk.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/km.json b/src/assets/i18n/km.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/km.json +++ b/src/assets/i18n/km.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/kn.json b/src/assets/i18n/kn.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/kn.json +++ b/src/assets/i18n/kn.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ko.json b/src/assets/i18n/ko.json index 6182ba63bd4..f090be9e5fe 100644 --- a/src/assets/i18n/ko.json +++ b/src/assets/i18n/ko.json @@ -1467,6 +1467,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1582,6 +1583,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -1862,6 +1864,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -3927,7 +3930,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/lb.json b/src/assets/i18n/lb.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/lb.json +++ b/src/assets/i18n/lb.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/lt.json b/src/assets/i18n/lt.json index bc5af92d307..81c6c6241f5 100644 --- a/src/assets/i18n/lt.json +++ b/src/assets/i18n/lt.json @@ -1878,6 +1878,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1993,6 +1994,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2273,6 +2275,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4338,7 +4341,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/lv.json b/src/assets/i18n/lv.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/lv.json +++ b/src/assets/i18n/lv.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/mk.json b/src/assets/i18n/mk.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/mk.json +++ b/src/assets/i18n/mk.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ml.json b/src/assets/i18n/ml.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ml.json +++ b/src/assets/i18n/ml.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/mn.json b/src/assets/i18n/mn.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/mn.json +++ b/src/assets/i18n/mn.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/mr.json b/src/assets/i18n/mr.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/mr.json +++ b/src/assets/i18n/mr.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/my.json b/src/assets/i18n/my.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/my.json +++ b/src/assets/i18n/my.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/nb.json b/src/assets/i18n/nb.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/nb.json +++ b/src/assets/i18n/nb.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ne.json b/src/assets/i18n/ne.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ne.json +++ b/src/assets/i18n/ne.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json index 92efb69f8f5..4de4e43554d 100644 --- a/src/assets/i18n/nl.json +++ b/src/assets/i18n/nl.json @@ -34,11 +34,14 @@ "Expires Date": "", "Expires at": "", "Fast Storage": "", + "Fibre Channel Ports": "", "GPU Devices": "", + "Global Target Configuration": "", "Host Port": "", "Host Protocol": "", "Host ports are listed on the left and associated container ports are on the right. 0.0.0.0 on the host side represents binding to any IP address on the host.": "", "Increase logging verbosity related to the active directory service in /var/log/middlewared.log": "", + "Initiator Group": "", "Instance": "", "Instance Port": "", "Instance Protocol": "", @@ -4382,7 +4385,6 @@ "Target": "Doel", "Target Alias": "Alias voor doel", "Target Dataset": "Doel dataset", - "Target Global Configuration": "Doel globale configuratie", "Target Name": "Doelnaam", "Target Stats": "Doelstatistieken", "Target Utilization": "Doelgebruik", diff --git a/src/assets/i18n/nn.json b/src/assets/i18n/nn.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/nn.json +++ b/src/assets/i18n/nn.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/os.json b/src/assets/i18n/os.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/os.json +++ b/src/assets/i18n/os.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/pa.json b/src/assets/i18n/pa.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/pa.json +++ b/src/assets/i18n/pa.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/pl.json b/src/assets/i18n/pl.json index 9865d7d9045..6ec99a19cd8 100644 --- a/src/assets/i18n/pl.json +++ b/src/assets/i18n/pl.json @@ -1832,6 +1832,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1947,6 +1948,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2226,6 +2228,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4268,7 +4271,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/pt-br.json b/src/assets/i18n/pt-br.json index 3b9d13cb008..ac81c8cc8ba 100644 --- a/src/assets/i18n/pt-br.json +++ b/src/assets/i18n/pt-br.json @@ -1826,6 +1826,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1941,6 +1942,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2220,6 +2222,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4285,7 +4288,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json index 94360c631e6..7a8f5a270cd 100644 --- a/src/assets/i18n/pt.json +++ b/src/assets/i18n/pt.json @@ -977,6 +977,7 @@ "Feature Request": "", "Features": "", "Feedback Type": "", + "Fibre Channel Ports": "", "File Mask": "", "File Permissions": "", "First Page": "", @@ -1036,6 +1037,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -1242,6 +1244,7 @@ "Initialized": "", "Initializing...": "", "Initiate Failover": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators Groups": "", "Initiators currently connected to the system. Shown in IQN format with an IP address. Set initiators and click an -> (arrow) to add the initiators to either the Allowed Initiators or Authorized Networks lists. Clicking Refresh updates the Connected Initiators list.": "", @@ -2689,7 +2692,6 @@ "Take screenshot of the current page": "", "Target": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Stats": "", "Target Utilization": "", "Target dataset encryption will be inherited from its parent dataset.": "", diff --git a/src/assets/i18n/ro.json b/src/assets/i18n/ro.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ro.json +++ b/src/assets/i18n/ro.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 154a9d64fc5..503d4e2ce69 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -1140,6 +1140,7 @@ "Fenced is not running.": "", "Fetch DataStores": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1214,6 +1215,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Gmail": "", @@ -1370,6 +1372,7 @@ "Initialized": "", "Initializing Apps Service": "", "Initializing...": "", + "Initiator Group": "", "Initiators Groups": "", "Inquiry": "", "Insensitive": "", @@ -2820,7 +2823,6 @@ "Tail Lines": "", "Take screenshot of the current page": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Stats": "", "Target Utilization": "", "Target dataset encryption will be inherited from its parent dataset.": "", diff --git a/src/assets/i18n/sk.json b/src/assets/i18n/sk.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sk.json +++ b/src/assets/i18n/sk.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sl.json b/src/assets/i18n/sl.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sl.json +++ b/src/assets/i18n/sl.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sq.json b/src/assets/i18n/sq.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sq.json +++ b/src/assets/i18n/sq.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sr-latn.json b/src/assets/i18n/sr-latn.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sr-latn.json +++ b/src/assets/i18n/sr-latn.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sr.json b/src/assets/i18n/sr.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sr.json +++ b/src/assets/i18n/sr.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/strings.json b/src/assets/i18n/strings.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/strings.json +++ b/src/assets/i18n/strings.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sv.json b/src/assets/i18n/sv.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sv.json +++ b/src/assets/i18n/sv.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/sw.json b/src/assets/i18n/sw.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/sw.json +++ b/src/assets/i18n/sw.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/ta.json b/src/assets/i18n/ta.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/ta.json +++ b/src/assets/i18n/ta.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/te.json b/src/assets/i18n/te.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/te.json +++ b/src/assets/i18n/te.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/th.json b/src/assets/i18n/th.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/th.json +++ b/src/assets/i18n/th.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/tr.json b/src/assets/i18n/tr.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/tr.json +++ b/src/assets/i18n/tr.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/tt.json b/src/assets/i18n/tt.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/tt.json +++ b/src/assets/i18n/tt.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/udm.json b/src/assets/i18n/udm.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/udm.json +++ b/src/assets/i18n/udm.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/uk.json b/src/assets/i18n/uk.json index 18d0148507a..22826252de6 100644 --- a/src/assets/i18n/uk.json +++ b/src/assets/i18n/uk.json @@ -725,6 +725,7 @@ "Features": "", "Feedback Type": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "File ID": "", "File Mask": "", "File Permissions": "", @@ -760,6 +761,7 @@ "Global 2FA Enable": "", "Global Configuration Settings": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Gmail": "", @@ -875,6 +877,7 @@ "Initialized": "", "Initializing Apps Service": "", "Initializing...": "", + "Initiator Group": "", "Insensitive": "", "Inspect VDEVs": "", "Install Another Instance": "", @@ -4733,7 +4736,6 @@ "Target": "Ціль", "Target Alias": "Псевдонім цілей", "Target Dataset": "Цільовий набір даних", - "Target Global Configuration": "Цільова глобальна конфігурація", "Target Name": "Назва цілі", "Targets": "Цілі", "Task Name": "Назва завдання", diff --git a/src/assets/i18n/vi.json b/src/assets/i18n/vi.json index 5d4896389d9..0f5e82e08ae 100644 --- a/src/assets/i18n/vi.json +++ b/src/assets/i18n/vi.json @@ -1884,6 +1884,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1999,6 +2000,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -2279,6 +2281,7 @@ "Initializing...": "", "Initiate Failover": "", "Initiator": "", + "Initiator Group": "", "Initiator Group ID": "", "Initiators": "", "Initiators Groups": "", @@ -4344,7 +4347,6 @@ "Target": "", "Target Alias": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Name": "", "Target Stats": "", "Target Utilization": "", diff --git a/src/assets/i18n/zh-hans.json b/src/assets/i18n/zh-hans.json index e4ba34df06b..5aca3989417 100644 --- a/src/assets/i18n/zh-hans.json +++ b/src/assets/i18n/zh-hans.json @@ -63,8 +63,10 @@ "Expires Date": "", "Expires at": "", "Fast Storage": "", + "Fibre Channel Ports": "", "GPU Devices": "", "Global Settings": "", + "Global Target Configuration": "", "Go To Dataset": "", "Group Members": "", "Hardware Change": "", @@ -78,6 +80,7 @@ "Image": "", "Initialized": "", "Initializing...": "", + "Initiator Group": "", "Instance": "", "Instance Configuration": "", "Instance Port": "", @@ -4412,7 +4415,6 @@ "Target": "目标", "Target Alias": "目标别名", "Target Dataset": "目标数据集", - "Target Global Configuration": "目标全局配置", "Target Name": "目标名称", "Target Stats": "目标统计信息", "Target Utilization": "目标利用率", diff --git a/src/assets/i18n/zh-hant.json b/src/assets/i18n/zh-hant.json index 9fbe121cbd2..ec56b61a427 100644 --- a/src/assets/i18n/zh-hant.json +++ b/src/assets/i18n/zh-hant.json @@ -1569,6 +1569,7 @@ "Fetch DataStores": "", "Fetching Encryption Summary": "", "Fetching Encryption Summary for {dataset}": "", + "Fibre Channel Ports": "", "Field is required": "", "File": "", "File ID": "", @@ -1659,6 +1660,7 @@ "Global Configuration Settings": "", "Global SED Password": "", "Global Settings": "", + "Global Target Configuration": "", "Global Two Factor Authentication": "", "Global Two Factor Authentication Settings": "", "Global password to unlock SEDs.": "", @@ -1889,6 +1891,7 @@ "Initializing Apps Service": "", "Initializing...": "", "Initiate Failover": "", + "Initiator Group": "", "Initiators Groups": "", "Initiators currently connected to the system. Shown in IQN format with an IP address. Set initiators and click an -> (arrow) to add the initiators to either the Allowed Initiators or Authorized Networks lists. Clicking Refresh updates the Connected Initiators list.": "", "Input the pre-defined container to use.": "", @@ -3661,7 +3664,6 @@ "Tail Lines": "", "Take screenshot of the current page": "", "Target Dataset": "", - "Target Global Configuration": "", "Target Stats": "", "Target Utilization": "", "Target dataset encryption will be inherited from its parent dataset.": "", diff --git a/src/assets/ui-searchable-elements.json b/src/assets/ui-searchable-elements.json index 94fbd74d04c..1f68656a8ee 100644 --- a/src/assets/ui-searchable-elements.json +++ b/src/assets/ui-searchable-elements.json @@ -2535,26 +2535,6 @@ "triggerAnchor": null, "section": "ui" }, - { - "hierarchy": [ - "Shares", - "Configure iSCSI" - ], - "synonyms": [], - "requiredRoles": [], - "visibleTokens": [], - "anchorRouterLink": [ - "/sharing" - ], - "routerLink": [ - "/sharing", - "iscsi", - "configuration" - ], - "anchor": "configure-iscsi", - "triggerAnchor": null, - "section": "ui" - }, { "hierarchy": [ "Shares", @@ -2602,8 +2582,8 @@ { "hierarchy": [ "Shares", - "Initiators", - "Add Initiator" + "iSCSI", + "Authorized Access" ], "synonyms": [], "requiredRoles": [], @@ -2611,11 +2591,10 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "initiators", - "add" + "authorized-access" ], "routerLink": null, - "anchor": "shares-initiators-add-initiator", + "anchor": "shares-iscsi-authorized-access", "triggerAnchor": null, "section": "ui" }, @@ -2623,7 +2602,7 @@ "hierarchy": [ "Shares", "iSCSI", - "Target Global Configuration" + "Extents" ], "synonyms": [], "requiredRoles": [], @@ -2631,10 +2610,10 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "configuration" + "extents" ], "routerLink": null, - "anchor": "target-global-configuration", + "anchor": "shares-iscsi-extents", "triggerAnchor": null, "section": "ui" }, @@ -2642,7 +2621,7 @@ "hierarchy": [ "Shares", "iSCSI", - "Portals" + "Fibre Channel Ports" ], "synonyms": [], "requiredRoles": [], @@ -2650,18 +2629,18 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "portals" + "fibre-channel-ports" ], "routerLink": null, - "anchor": "portals", + "anchor": "shares-iscsi-fibre-channel-ports", "triggerAnchor": null, "section": "ui" }, { "hierarchy": [ "Shares", - "iSCSI", - "Initiators Groups" + "Initiators", + "Add Initiator" ], "synonyms": [], "requiredRoles": [], @@ -2669,10 +2648,11 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "initiator" + "initiators", + "add" ], "routerLink": null, - "anchor": "initiators-groups", + "anchor": "shares-initiators-add-initiator", "triggerAnchor": null, "section": "ui" }, @@ -2680,18 +2660,20 @@ "hierarchy": [ "Shares", "iSCSI", - "Authorized Access" + "Initiators" + ], + "synonyms": [ + "Initiator Group" ], - "synonyms": [], "requiredRoles": [], "visibleTokens": [], "anchorRouterLink": [ "/sharing", "iscsi", - "auth" + "initiators" ], "routerLink": null, - "anchor": "authorized-access", + "anchor": "shares-iscsi-initiators", "triggerAnchor": null, "section": "ui" }, @@ -2699,18 +2681,19 @@ "hierarchy": [ "Shares", "iSCSI", - "Targets" + "Global Target Configuration" ], "synonyms": [], - "requiredRoles": [], + "requiredRoles": [ + "SHARING_ISCSI_WRITE" + ], "visibleTokens": [], "anchorRouterLink": [ "/sharing", - "iscsi", - "target" + "iscsi" ], "routerLink": null, - "anchor": "targets", + "anchor": "global-configuration", "triggerAnchor": null, "section": "ui" }, @@ -2718,7 +2701,7 @@ "hierarchy": [ "Shares", "iSCSI", - "Extents" + "Portals" ], "synonyms": [], "requiredRoles": [], @@ -2726,10 +2709,10 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "extent" + "portals" ], "routerLink": null, - "anchor": "extents", + "anchor": "shares-iscsi-portals", "triggerAnchor": null, "section": "ui" }, @@ -2737,7 +2720,7 @@ "hierarchy": [ "Shares", "iSCSI", - "Associated Targets" + "Targets" ], "synonyms": [], "requiredRoles": [], @@ -2745,10 +2728,10 @@ "anchorRouterLink": [ "/sharing", "iscsi", - "associatedtarget" + "targets" ], "routerLink": null, - "anchor": "associated-targets", + "anchor": "shares-iscsi-targets", "triggerAnchor": null, "section": "ui" },