]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: extend daemon actions to host details 44014/head
authorNizamudeen A <nia@redhat.com>
Mon, 28 Feb 2022 20:23:19 +0000 (01:53 +0530)
committerNizamudeen A <nia@redhat.com>
Wed, 23 Mar 2022 06:34:14 +0000 (12:04 +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>
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 d4acf0d72d5df2e06b93f4eed0a817794c8221ab..360bb3a92e9ee5ea70980ad76f26d8fabac6607c 100644 (file)
@@ -4,6 +4,7 @@ import { ServicesPageHelper } from '../../cluster/services.po';
 
 describe('Services page', () => {
   const services = new ServicesPageHelper();
+  const mdsDaemonName = 'mds.test';
   beforeEach(() => {
     cy.login();
     Cypress.Cookies.preserveOnce('token');
@@ -17,51 +18,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 5b631453f8b3d78debf9d2f149192b9ff6c0e3ba..9091651842649cc5dc204fd5b2d2de6a71e9d6b8 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">
     </div>
   </ng-template>
 </ng-template>
+
+<ng-template #serviceDaemonDetailsTpl>
+  <cd-table *ngIf="hasOrchestrator"
+            #daemonsTable
+            [data]="daemons"
+            selectionType="single"
+            [columns]="columns"
+            columnMode="flex"
+            identifier="daemon_name"
+            (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-template>
index ba8068b23be17c920d6fdf046ebe80dcfc7a3072..3decf45e773d8d528a4ef0cb87f55be135c0b78e 100644 (file)
@@ -130,14 +130,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
       },