<!-- ************************ -->
<ng-template #header>
<cds-header name="Ceph Dashboard">
- <cds-hamburger [active]="showMenuSidebar" (selected)="showMenuSidebar = !showMenuSidebar"></cds-hamburger>
-
+ <cds-hamburger [active]="showMenuSidebar"
+ (selected)="showMenuSidebar = !showMenuSidebar"></cds-hamburger>
<cds-header-global>
<cds-header-navigation>
<cd-language-selector class="d-flex"></cd-language-selector>
<cd-telemetry-notification></cd-telemetry-notification>
<cd-motd></cd-motd>
<cd-notifications-sidebar></cd-notifications-sidebar>
-<!-- ************************ -->
-<!-- OLD TOP NAVBAR -->
-<!-- ************************ -->
-<!-- <div class="cd-navbar-top">
- <nav class="navbar navbar-expand-md navbar-dark cd-navbar-brand">
- <button class="btn btn-link py-0"
- (click)="showMenuSidebar = !showMenuSidebar"
- aria-label="toggle sidebar visibility">
- <i [ngClass]="[icons.bars, icons.large2x]"
- aria-hidden="true"></i>
- </button>
-
- <a class="navbar-brand ms-2"
- routerLink="/dashboard">
- <img src="assets/Ceph_Ceph_Logo_with_text_white.svg"
- alt="Ceph" />
- </a>
-
- <button type="button"
- class="navbar-toggler"
- (click)="toggleRightSidebar()">
- <span i18n
- class="sr-only">Toggle navigation</span>
- <span>
- <i [ngClass]="[icons.navicon, icons.large]"></i>
- </span>
- </button>
-
- <div class="collapse navbar-collapse"
- [ngClass]="{'show': rightSidebarOpen}">
- <ng-container *ngIf="clustersMap?.size > 1">
- <div ngbDropdown
- placement="bottom-left"
- class="d-inline-block ms-5">
- <button ngbDropdownToggle
- class="btn btn-outline-light cd-context-bar"
- i18n-title
- title="Selected Cluster:">
- <span class="dropdown-text"> {{ selectedCluster?.name }} </span>
- <span>- {{ selectedCluster?.cluster_alias }} - {{ selectedCluster?.user }}</span>
- </button>
- <div ngbDropdownMenu>
- <ng-container *ngFor="let cluster of clustersMap | keyvalue">
- <button ngbDropdownItem
- (click)="onClusterSelection(cluster.value)"
- [disabled]="cluster.value.cluster_connection_status === 1">
- <div class="dropdown-text">{{ cluster.value.name }}</div>
- <div *ngIf="cluster.value.cluster_alias"
- class="text-secondary">{{ cluster.value.cluster_alias }} - {{ cluster.value.user }}</div>
- </button>
- </ng-container>
- </div>
- </div>
- </ng-container>
- <ul class="nav navbar-nav cd-navbar-utility my-2 my-md-0">
- <ng-container *ngTemplateOutlet="cd_utilities"> </ng-container>
- </ul>
- </div>
- </nav>
-</div> -->
<!-- ************************ -->
<!-- WRAPPER AROUND SIDENAV AND MAIN CONTAINT -->
<div class="wrapper">
<!-- Content -->
<nav id="sidebar"
- [ngClass]="{'active': !showMenuSidebar}">
+ [ngClass]="{'active': !showMenuSidebar}">
<ng-container *ngTemplateOutlet="cd_menu"></ng-container>
</nav>
-
<!-- Page Content -->
<div id="content"
- [ngClass]="{'active': !showMenuSidebar}">
+ [ngClass]="{'active': !showMenuSidebar}">
<ng-content></ng-content>
</div>
</div>
<ng-template #cd_menu>
<ng-container *ngIf="enabledFeature$ | async as enabledFeature">
<div cdsTheme="theme">
- <cds-sidenav [expanded]="showMenuSidebar" class="mt-5">
+ <cds-sidenav [expanded]="showMenuSidebar"
+ class="mt-5">
<!-- Dashboard -->
- <cds-sidenav-item route="/dashboard" [useRouter]="true" class="nav-item tc_menuitem_dashboard">
- <svg cdsIcon="template" icon size="20"></svg>
+ <cds-sidenav-item route="/dashboard"
+ [useRouter]="true"
+ class="nav-item tc_menuitem_dashboard">
+ <svg cdsIcon="template"
+ icon
+ size="20"></svg>
<span i18n>
Dashboard</span>
</cds-sidenav-item>
<!-- Multi-cluster Dashboard -->
<cds-sidenav-menu title="Multi-Cluster">
- <svg cdsIcon="edge-cluster" icon size="20"></svg>
- <cds-sidenav-item route="/multi-cluster/overview" [useRouter]="true" class="tc_submenuitem tc_submenuitem_multiCluster_overview"><span i18n >Overview</span></cds-sidenav-item>
- <cds-sidenav-item route="/multi-cluster/manage-clusters" [useRouter]="true" class="tc_submenuitem tc_submenuitem_multiCluster_manage_clusters"><span i18n >Manager Cluster</span></cds-sidenav-item>
+ <svg cdsIcon="edge-cluster"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/multi-cluster/overview"
+ [useRouter]="true"
+ class="tc_submenuitem tc_submenuitem_multiCluster_overview"><span i18n >Overview</span></cds-sidenav-item>
+ <cds-sidenav-item route="/multi-cluster/manage-clusters"
+ [useRouter]="true"
+ class="tc_submenuitem tc_submenuitem_multiCluster_manage_clusters"><span i18n >Manager Cluster</span></cds-sidenav-item>
</cds-sidenav-menu>
<!-- Cluster -->
- <cds-sidenav-menu title="Cluster" *ngIf="permissions.hosts.read || permissions.monitor.read ||
- permissions.osd.read || permissions.pool.read" class="tc_menuitem_cluster">
- <svg cdsIcon="web-services--cluster" icon size="20"></svg>
- <cds-sidenav-item route="/pool" [useRouter]="true" *ngIf="permissions.pool.read" class="tc_submenuitem tc_submenuitem_cluster_pool"><span i18n >Pools</span></cds-sidenav-item>
- <cds-sidenav-item route="/hosts" [useRouter]="true" *ngIf="permissions.hosts.read" class="tc_submenuitem tc_submenuitem_cluster_hosts"><span i18n >Hosts</span></cds-sidenav-item>
- <cds-sidenav-item route="/osd" [useRouter]="true" *ngIf="permissions.osd.read" class="tc_submenuitem tc_submenuitem_cluster_osds"><span i18n >OSDs</span></cds-sidenav-item>
- <cds-sidenav-item route="/inventory" [useRouter]="true" *ngIf="permissions.hosts.read" class="tc_submenuitem tc_submenuitem_cluster_inventory"><span i18n >Physical Disks</span></cds-sidenav-item>
- <cds-sidenav-item route="/crush-map" [useRouter]="true" *ngIf="permissions.osd.read" class="tc_submenuitem tc_submenuitem_cluster_crush"><span i18n>CRUSH Map</span></cds-sidenav-item>
- <cds-sidenav-item route="/monitor" [useRouter]="true" *ngIf="permissions.monitor.read" class="tc_submenuitem tc_submenuitem_cluster_monitor"><span i18n >Monitors</span></cds-sidenav-item>
+ <cds-sidenav-menu title="Cluster"
+ *ngIf="permissions.hosts.read || permissions.monitor.read || permissions.osd.read || permissions.pool.read"
+ class="tc_menuitem_cluster">
+ <svg cdsIcon="web-services--cluster"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/pool"
+ [useRouter]="true"
+ *ngIf="permissions.pool.read"
+ class="tc_submenuitem tc_submenuitem_cluster_pool"><span i18n >Pools</span></cds-sidenav-item>
+ <cds-sidenav-item route="/hosts"
+ [useRouter]="true"
+ *ngIf="permissions.hosts.read"
+ class="tc_submenuitem tc_submenuitem_cluster_hosts"><span i18n >Hosts</span></cds-sidenav-item>
+ <cds-sidenav-item route="/osd"
+ [useRouter]="true"
+ *ngIf="permissions.osd.read"
+ class="tc_submenuitem tc_submenuitem_cluster_osds"><span i18n >OSDs</span></cds-sidenav-item>
+ <cds-sidenav-item route="/inventory"
+ [useRouter]="true"
+ *ngIf="permissions.hosts.read"
+ class="tc_submenuitem tc_submenuitem_cluster_inventory"><span i18n >Physical Disks</span></cds-sidenav-item>
+ <cds-sidenav-item route="/crush-map"
+ [useRouter]="true"
+ *ngIf="permissions.osd.read"
+ class="tc_submenuitem tc_submenuitem_cluster_crush"><span i18n>CRUSH Map</span></cds-sidenav-item>
+ <cds-sidenav-item route="/monitor"
+ [useRouter]="true"
+ *ngIf="permissions.monitor.read"
+ class="tc_submenuitem tc_submenuitem_cluster_monitor"><span i18n >Monitors</span></cds-sidenav-item>
</cds-sidenav-menu>
<!-- Block Storage -->
- <cds-sidenav-menu title="Block" *ngIf="(permissions.rbdImage.read || permissions.rbdMirroring.read|| permissions.iscsi.read) && (enabledFeature.rbd || enabledFeature.mirroring || enabledFeature.iscsi)" class="tc_menuitem_block">
- <svg cdsIcon="datastore" icon size="20"></svg>
- <cds-sidenav-item route="/block/rbd" [useRouter]="true" *ngIf="permissions.rbdImage.read && enabledFeature.rbd" class="tc_submenuitem tc_submenuitem_block_images"><span i18n>Images</span></cds-sidenav-item>
- <cds-sidenav-item route="/block/mirroring" [useRouter]="true" *ngIf="permissions.rbdMirroring.read && enabledFeature.mirroring" class="tc_submenuitem tc_submenuitem_block_mirroring"><span i18n>Mirroring
- <small *ngIf="summaryData?.rbd_mirroring?.warnings !== 0"
- class="badge badge-warning">{{ summaryData?.rbd_mirroring?.warnings }}</small>
+ <cds-sidenav-menu title="Block"
+ *ngIf="(permissions.rbdImage.read || permissions.rbdMirroring.read|| permissions.iscsi.read) && (enabledFeature.rbd || enabledFeature.mirroring || enabledFeature.iscsi)"
+ class="tc_menuitem_block">
+ <svg cdsIcon="datastore"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/block/rbd"
+ [useRouter]="true"
+ *ngIf="permissions.rbdImage.read && enabledFeature.rbd"
+ class="tc_submenuitem tc_submenuitem_block_images"><span i18n>Images</span></cds-sidenav-item>
+ <cds-sidenav-item route="/block/mirroring"
+ [useRouter]="true"
+ *ngIf="permissions.rbdMirroring.read && enabledFeature.mirroring"
+ class="tc_submenuitem tc_submenuitem_block_mirroring">
+ <span i18n>Mirroring
+ <small *ngIf="summaryData?.rbd_mirroring?.warnings !== 0"
+ class="badge badge-warning">{{ summaryData?.rbd_mirroring?.warnings }}</small>
<small *ngIf="summaryData?.rbd_mirroring?.errors !== 0"
- class="badge badge-danger">{{ summaryData?.rbd_mirroring?.errors }}</small>
- </span></cds-sidenav-item>
- <cds-sidenav-item route="/block/iscsi" [useRouter]="true" *ngIf="permissions.iscsi.read && enabledFeature.iscsi" class="tc_submenuitem tc_submenuitem_block_iscsi"><span i18n>iSCSI</span></cds-sidenav-item>
+ class="badge badge-danger">{{ summaryData?.rbd_mirroring?.errors }}</small>
+ </span>
+ </cds-sidenav-item>
+ <cds-sidenav-item route="/block/iscsi"
+ [useRouter]="true"
+ *ngIf="permissions.iscsi.read && enabledFeature.iscsi"
+ class="tc_submenuitem tc_submenuitem_block_iscsi"><span i18n>iSCSI</span></cds-sidenav-item>
</cds-sidenav-menu>
<!-- Object Storage -->
- <cds-sidenav-menu title="Object" *ngIf="permissions.rgw.read && enabledFeature.rgw" class="tc_menuitem_rgw">
- <svg cdsIcon="object-storage" icon size="20"></svg>
- <cds-sidenav-item route="/rgw/overview" [userouter]="true" class="tc_submenuitem tc_submenuitem_rgw_overview"><span i18n>Overview</span></cds-sidenav-item>
- <cds-sidenav-item route="/rgw/bucket" [userouter]="true" class="tc_submenuitem tc_submenuitem_rgw_buckets"><span i18n>Buckets</span></cds-sidenav-item>
- <cds-sidenav-item route="/rgw/user" [userouter]="true" class="tc_submenuitem tc_submenuitem_rgw_users"><span i18n>Users</span></cds-sidenav-item>
- <cds-sidenav-item route="/rgw/multisite" [userouter]="true" class="tc_submenuitem tc_submenuitem_rgw_buckets"><span i18n>Multi-site</span></cds-sidenav-item>
- <cds-sidenav-item route="/rgw/daemon" [userouter]="true" class="tc_submenuitem tc_submenuitem_rgw_daemons"><span i18n>Gateways</span></cds-sidenav-item>
- <cds-sidenav-item route="/nfs" [useRouter]="true" *ngIf="permissions.nfs.read && enabledFeature.nfs" class="tc_submenuitem tc_submenuitem_rgw_nfs"><span i18n>NFS</span></cds-sidenav-item>
+ <cds-sidenav-menu title="Object"
+ *ngIf="permissions.rgw.read && enabledFeature.rgw"
+ class="tc_menuitem_rgw">
+ <svg cdsIcon="object-storage"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/rgw/overview"
+ [userouter]="true"
+ class="tc_submenuitem tc_submenuitem_rgw_overview"><span i18n>Overview</span></cds-sidenav-item>
+ <cds-sidenav-item route="/rgw/bucket"
+ [userouter]="true"
+ class="tc_submenuitem tc_submenuitem_rgw_buckets"><span i18n>Buckets</span></cds-sidenav-item>
+ <cds-sidenav-item route="/rgw/user"
+ [userouter]="true"
+ class="tc_submenuitem tc_submenuitem_rgw_users"><span i18n>Users</span></cds-sidenav-item>
+ <cds-sidenav-item route="/rgw/multisite"
+ [userouter]="true"
+ class="tc_submenuitem tc_submenuitem_rgw_buckets"><span i18n>Multi-site</span></cds-sidenav-item>
+ <cds-sidenav-item route="/rgw/daemon"
+ [userouter]="true"
+ class="tc_submenuitem tc_submenuitem_rgw_daemons"><span i18n>Gateways</span></cds-sidenav-item>
+ <cds-sidenav-item route="/nfs"
+ [useRouter]="true"
+ *ngIf="permissions.nfs.read && enabledFeature.nfs"
+ class="tc_submenuitem tc_submenuitem_rgw_nfs"><span i18n>NFS</span></cds-sidenav-item>
</cds-sidenav-menu>
<!-- Filesystem -->
- <cds-sidenav-menu title="File" *ngIf="permissions.nfs.read && enabledFeature.nfs || permissions.cephfs.read && enabledFeature.cephfs" class="tc_menuitem_file">
- <svg cdsIcon="file-storage" icon size="20"></svg>
- <cds-sidenav-item route="/cephfs" [useRouter]="true" *ngIf="permissions.cephfs.read && enabledFeature.cephfs" class="tc_submenuitem tc_submenuitem_file_cephfs"><span i18n>File Systems</span></cds-sidenav-item>
- <cds-sidenav-item route="/nfs" [useRouter]="true" *ngIf="permissions.nfs.read && enabledFeature.nfs" class="tc_submenuitem tc_submenuitem_file_nfs"><span i18n>NFS</span></cds-sidenav-item>
+ <cds-sidenav-menu title="File"
+ *ngIf="permissions.nfs.read && enabledFeature.nfs || permissions.cephfs.read && enabledFeature.cephfs"
+ class="tc_menuitem_file">
+ <svg cdsIcon="file-storage"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/cephfs"
+ [useRouter]="true"
+ *ngIf="permissions.cephfs.read && enabledFeature.cephfs"
+ class="tc_submenuitem tc_submenuitem_file_cephfs"><span i18n>File Systems</span></cds-sidenav-item>
+ <cds-sidenav-item route="/nfs"
+ [useRouter]="true"
+ *ngIf="permissions.nfs.read && enabledFeature.nfs"
+ class="tc_submenuitem tc_submenuitem_file_nfs"><span i18n>NFS</span></cds-sidenav-item>
</cds-sidenav-menu>
<!-- Observability -->
- <cds-sidenav-menu title="Observability" *ngIf="permissions.log.read || permissions.prometheus.read" class="tc_menuitem_observe">
- <svg cdsIcon="observed--hail" icon size="20"></svg>
- <cds-sidenav-item route="/logs" [useRouter]="true" *ngIf="permissions.log.read" class="tc_submenuitem tc_submenuitem_observe_log"><span i18n>Logs</span></cds-sidenav-item>
- <cds-sidenav-item route="/monitoring" [useRouter]="true" *ngIf="permissions.prometheus.read" class="tc_submenuitem tc_submenuitem_observe_monitoring"><span i18n>
- <ng-container>Alerts</ng-container>
- <small *ngIf="prometheusAlertService.activeCriticalAlerts > 0"
- class="badge badge-danger ms-1">{{ prometheusAlertService.activeCriticalAlerts }}</small>
- <small *ngIf="prometheusAlertService.activeWarningAlerts > 0"
- class="badge badge-warning ms-1">{{ prometheusAlertService.activeWarningAlerts }}</small>
- </span></cds-sidenav-item>
+ <cds-sidenav-menu title="Observability"
+ *ngIf="permissions.log.read || permissions.prometheus.read"
+ class="tc_menuitem_observe">
+ <svg cdsIcon="observed--hail"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/logs"
+ [useRouter]="true"
+ *ngIf="permissions.log.read"
+ class="tc_submenuitem tc_submenuitem_observe_log"><span i18n>Logs</span></cds-sidenav-item>
+ <cds-sidenav-item route="/monitoring"
+ [useRouter]="true"
+ *ngIf="permissions.prometheus.read"
+ class="tc_submenuitem tc_submenuitem_observe_monitoring">
+ <span i18n>
+ <ng-container>Alerts</ng-container>
+ <small *ngIf="prometheusAlertService.activeCriticalAlerts > 0"
+ class="badge badge-danger ms-1">{{ prometheusAlertService.activeCriticalAlerts }}</small>
+ <small *ngIf="prometheusAlertService.activeWarningAlerts > 0"
+ class="badge badge-warning ms-1">{{ prometheusAlertService.activeWarningAlerts }}</small>
+ </span>
+ </cds-sidenav-item>
</cds-sidenav-menu>
<!-- Administration -->
- <cds-sidenav-menu title="Administration" *ngIf="permissions.configOpt.read || permissions.hosts.read" class="tc_menuitem_admin">
- <svg cdsIcon="network--admin-control" icon size="20"></svg>
- <cds-sidenav-item route="/services/" [useRouter]="true" *ngIf="permissions.hosts.read" class="tc_submenuitem tc_submenuitem_admin_services"><span i18n>Services</span></cds-sidenav-item>
- <cds-sidenav-item route="/upgrade" [useRouter]="true" *ngIf="permissions.configOpt.read" class="tc_submenuitem tc_submenuitem_admin_upgrade"><span i18n>Upgrade</span></cds-sidenav-item>
- <cds-sidenav-item route="/ceph-users" [useRouter]="true" *ngIf="permissions.configOpt.read" class="tc_submenuitem tc_submenuitem_admin_users"><span i18n>Ceph Users</span></cds-sidenav-item>
- <cds-sidenav-item route="/mgr-modules" [useRouter]="true" *ngIf="permissions.configOpt.read" class="tc_submenuitem tc_submenuitem_admin_modules"><span i18n>Manager Modules</span></cds-sidenav-item>
- <cds-sidenav-item route="/configuration" [useRouter]="true" *ngIf="permissions.configOpt.read" class="tc_submenuitem tc_submenuitem_admin_configuration"><span i18n>Configuration</span></cds-sidenav-item>
+ <cds-sidenav-menu title="Administration"
+ *ngIf="permissions.configOpt.read || permissions.hosts.read"
+ class="tc_menuitem_admin">
+ <svg cdsIcon="network--admin-control"
+ icon
+ size="20"></svg>
+ <cds-sidenav-item route="/services/"
+ [useRouter]="true"
+ *ngIf="permissions.hosts.read"
+ class="tc_submenuitem tc_submenuitem_admin_services"><span i18n>Services</span></cds-sidenav-item>
+ <cds-sidenav-item route="/upgrade"
+ [useRouter]="true"
+ *ngIf="permissions.configOpt.read"
+ class="tc_submenuitem tc_submenuitem_admin_upgrade"><span i18n>Upgrade</span></cds-sidenav-item>
+ <cds-sidenav-item route="/ceph-users"
+ [useRouter]="true"
+ *ngIf="permissions.configOpt.read"
+ class="tc_submenuitem tc_submenuitem_admin_users"><span i18n>Ceph Users</span></cds-sidenav-item>
+ <cds-sidenav-item route="/mgr-modules"
+ [useRouter]="true"
+ *ngIf="permissions.configOpt.read"
+ class="tc_submenuitem tc_submenuitem_admin_modules"><span i18n>Manager Modules</span></cds-sidenav-item>
+ <cds-sidenav-item route="/configuration"
+ [useRouter]="true"
+ *ngIf="permissions.configOpt.read"
+ class="tc_submenuitem tc_submenuitem_admin_configuration"><span i18n>Configuration</span></cds-sidenav-item>
</cds-sidenav-menu>
- </cds-sidenav>
+ </cds-sidenav>
</div>
</ng-container>
</ng-template>