]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: extend daemon actions to host details
authorNizamudeen A <nia@redhat.com>
Mon, 28 Feb 2022 20:23:19 +0000 (01:53 +0530)
committerNizamudeen A <nia@redhat.com>
Thu, 19 May 2022 15:41:59 +0000 (21:11 +0530)
The daemon actions are only available in the service details section but
not on the host details. This takes care of that.

Fixes: https://tracker.ceph.com/issues/54559
Signed-off-by: Nizamudeen A <nia@redhat.com>
(cherry picked from commit c11096e407cc28fa536e60ede813142e10dc6a37)

src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/cypress/integration/page-helper.po.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.html
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.ts

index 821be43bbab5f5b40d088d2e5cad6d4c33447559..c32a9f21d439c6d50fbc83633cf3677bdc37c23b 100644 (file)
@@ -17,7 +17,7 @@ export class ServicesPageHelper extends PageHelper {
   };
 
   serviceDetailColumnIndex = {
-    daemonName: 1,
+    daemonName: 2,
     status: 7
   };
 
@@ -120,7 +120,7 @@ export class ServicesPageHelper extends PageHelper {
     // we'll need to manually override the indexes when this check is being
     // done for the daemons in host details page. So we'll get the url and
     // verify if the current page is not the services index page
-    cy.url().then(url => {
+    cy.url().then((url) => {
       if (!url.includes(pages.index.url)) {
         daemonNameIndex = 1;
         statusIndex = 6;
index c266c81b712c719100b89a696b31aeb10071542b..4349b1ecffb23cae20fcc7e43ae4ced83d0cbd17 100644 (file)
@@ -2,6 +2,7 @@ import { ServicesPageHelper } from 'cypress/integration/cluster/services.po';
 
 describe('Services page', () => {
   const services = new ServicesPageHelper();
+  const mdsDaemonName = 'mds.test';
   beforeEach(() => {
     cy.login();
     Cypress.Cookies.preserveOnce('token');
@@ -15,51 +16,51 @@ describe('Services page', () => {
   it('should create an mds service', () => {
     services.navigateTo('create');
     services.addService('mds', false);
-    services.checkExist('mds.test', true);
+    services.checkExist(mdsDaemonName, true);
 
-    services.clickServiceTab('mds.test', 'Details');
+    services.clickServiceTab(mdsDaemonName, 'Details');
     cy.get('cd-service-details').within(() => {
-      services.checkServiceStatus('mds');
+      services.checkServiceStatus(mdsDaemonName);
     });
   });
 
   it('should stop a daemon', () => {
-    services.clickServiceTab('mds.test', 'Details');
-    services.checkServiceStatus('mds');
+    services.clickServiceTab(mdsDaemonName, 'Details');
+    services.checkServiceStatus(mdsDaemonName);
 
     services.daemonAction('mds', 'stop');
-    services.checkServiceStatus('mds', 'stopped');
+    services.checkServiceStatus(mdsDaemonName, 'stopped');
   });
 
   it('should restart a daemon', () => {
-    services.checkExist('mds.test', true);
-    services.clickServiceTab('mds.test', 'Details');
+    services.checkExist(mdsDaemonName, true);
+    services.clickServiceTab(mdsDaemonName, 'Details');
     services.daemonAction('mds', 'restart');
-    services.checkServiceStatus('mds', 'running');
+    services.checkServiceStatus(mdsDaemonName, 'running');
   });
 
   it('should redeploy a daemon', () => {
-    services.checkExist('mds.test', true);
-    services.clickServiceTab('mds.test', 'Details');
+    services.checkExist(mdsDaemonName, true);
+    services.clickServiceTab(mdsDaemonName, 'Details');
 
     services.daemonAction('mds', 'stop');
-    services.checkServiceStatus('mds', 'stopped');
+    services.checkServiceStatus(mdsDaemonName, 'stopped');
     services.daemonAction('mds', 'redeploy');
-    services.checkServiceStatus('mds', 'running');
+    services.checkServiceStatus(mdsDaemonName, 'running');
   });
 
   it('should start a daemon', () => {
-    services.checkExist('mds.test', true);
-    services.clickServiceTab('mds.test', 'Details');
+    services.checkExist(mdsDaemonName, true);
+    services.clickServiceTab(mdsDaemonName, 'Details');
 
     services.daemonAction('mds', 'stop');
-    services.checkServiceStatus('mds', 'stopped');
+    services.checkServiceStatus(mdsDaemonName, 'stopped');
     services.daemonAction('mds', 'start');
-    services.checkServiceStatus('mds', 'running');
+    services.checkServiceStatus(mdsDaemonName, 'running');
   });
 
   it('should delete an mds service', () => {
-    services.deleteService('mds.test');
+    services.deleteService(mdsDaemonName);
   });
 
   it('should create and delete snmp-gateway service with version V2c', () => {
index 72d811065a8cea4a88665348762887b6a9f21f87..4531a70bb7fedfdbc8ea20efcfa313993c0c79b1 100644 (file)
@@ -196,10 +196,16 @@ export abstract class PageHelper {
     }
   }
 
-  getTableCell(columnIndex: number, exactContent: string) {
+  getTableCell(columnIndex: number, exactContent: string, partialMatch = false) {
     this.waitDataTableToLoad();
     this.clearTableSearchInput();
     this.searchTable(exactContent);
+    if (partialMatch) {
+      return cy.contains(
+        `datatable-body-row datatable-body-cell:nth-child(${columnIndex})`,
+        exactContent
+      );
+    }
     return cy.contains(
       `datatable-body-row datatable-body-cell:nth-child(${columnIndex})`,
       new RegExp(`^${exactContent}$`)
index a8a2b742959314ef5d1697acfbd024f02d3a5ff9..fc782c5658d1f168abf17c726d4746a27cf809b5 100644 (file)
@@ -1,13 +1,7 @@
 <cd-orchestrator-doc-panel *ngIf="showDocPanel"></cd-orchestrator-doc-panel>
 
 <div *ngIf="flag === 'hostDetails'; else serviceDetailsTpl">
-  <cd-table *ngIf="hasOrchestrator"
-            #daemonsTable
-            [data]="daemons"
-            [columns]="columns"
-            columnMode="flex"
-            (fetchData)="getDaemons($event)">
-  </cd-table>
+  <ng-container *ngTemplateOutlet="serviceDaemonDetailsTpl"></ng-container>
 </div>
 
 <ng-template #serviceDetailsTpl>
         <a ngbNavLink
            i18n>Details</a>
         <ng-template ngbNavContent>
-          <cd-table *ngIf="hasOrchestrator"
-                    #daemonsTable
-                    [data]="daemons"
-                    selectionType="single"
-                    [columns]="columns"
-                    columnMode="flex"
-                    identifier="daemon_id"
-                    (fetchData)="getDaemons($event)"
-                    (updateSelection)="updateSelection($event)">
-            <cd-table-actions id="service-daemon-list-actions"
-                              class="table-actions"
-                              [selection]="selection"
-                              [permission]="permissions.hosts"
-                              [tableActions]="tableActions">
-            </cd-table-actions>
-          </cd-table>
+          <ng-container *ngTemplateOutlet="serviceDaemonDetailsTpl"></ng-container>
         </ng-template>
       </li>
       <li ngbNavItem="service_events">
                 [errorThreshold]="errorThreshold">
   </cd-usage-bar>
 </ng-template>
-
index bb634472f6542bb6662619b9c883a79a7734aeea..d1c2f9cc3f11d153fcccce0883d9d2c66990fa68 100644 (file)
@@ -140,14 +140,8 @@ export class ServiceDaemonListComponent implements OnInit, OnChanges, AfterViewI
         filterable: true
       },
       {
-        name: $localize`Daemon type`,
-        prop: 'daemon_type',
-        flexGrow: 1,
-        filterable: true
-      },
-      {
-        name: $localize`Daemon ID`,
-        prop: 'daemon_id',
+        name: $localize`Daemon name`,
+        prop: 'daemon_name',
         flexGrow: 1,
         filterable: true
       },