diff --git a/CHANGELOG.md b/CHANGELOG.md index ca885c7b1b5ab16853bc31d7456800fbd23292ec..39818b5969044e13b90ab5980253851307081ebc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.4.0-bb.2] - 2026-02-06 + +### Changed + +- No longer overriding the visualization implementation from patternfly to cytoscape + ## [2.4.0-bb.1] - 2025-01-29 ### Changed diff --git a/README.md b/README.md index bdd79ee43263814d25660b5ef8d3b72e93543ca8..9f4215e6e9885b97f321affcab93700fbba33010 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ <!-- Warning: Do not manually edit this file. See notes on gluon + helm-docs at the end of this file for more information. --> # kiali -   +   Kiali is an open source project for service mesh observability, refer to https://www.kiali.io for details. @@ -97,7 +97,6 @@ helm install kiali chart/ | cr.name | string | `"kiali"` | | | cr.namespace | string | `""` | | | cr.annotations | object | `{}` | | -| cr.spec.kiali_feature_flags.ui_defaults.graph.impl | string | `"cy"` | | | cr.spec.istio_labels.app_label_name | string | `"app.kubernetes.io/name"` | | | cr.spec.istio_labels.version_label_name | string | `"app.kubernetes.io/version"` | | | cr.spec.istio_component_namespaces.grafana | string | `"monitoring"` | | diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 3fda9d4d423bd26129fa39256c6ca3cbf9fbf09f..1b0f8131ebc388410f9a660ef856e9bfa670c909 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 name: kiali description: Kiali is an open source project for service mesh observability, refer to https://www.kiali.io for details. -version: 2.4.0-bb.1 +version: 2.4.0-bb.2 appVersion: 2.4.0 home: https://github.com/kiali/kiali-operator maintainers: diff --git a/chart/tests/cypress/e2e/kiali-health.cy.js b/chart/tests/cypress/e2e/kiali-health.cy.js index 41a9383c4606dccd9b8d748e3aa7ed6171371e35..222a8ca0be18e1049e0254c5f1c72bada3f865e9 100644 --- a/chart/tests/cypress/e2e/kiali-health.cy.js +++ b/chart/tests/cypress/e2e/kiali-health.cy.js @@ -4,8 +4,8 @@ Cypress.on('uncaught:exception', (err, runnable) => { before(() => { if (Cypress.env('keycloak_test_enable')) { - cy.visit(Cypress.env('url')) - cy.performKeycloakLogin(Cypress.env('tnr_username'), Cypress.env('tnr_password')) + cy.visit(Cypress.env('url')) + cy.performKeycloakLogin(Cypress.env('tnr_username'), Cypress.env('tnr_password')) } }) @@ -30,61 +30,103 @@ function collapseMenu() { }) } -// Basic test that validates pages are accessible, basic error check -it('Check Kiali is accessible', function() { - cy.visit(Cypress.env('url')) - cy.title().should('contain', 'Kiali') - expandMenu(); - cy.get('#traffic_graph_cy', { timeout: 60000 }).click(); - cy.get('#applications', { timeout: 60000 }).click(); - // Check for generic errors (this is the red circle that appears if any connectivity with Promtheus/Grafana/Istio is not working) - cy.get('svg[fill="var(--pf-global--danger-color--100)"]').should('not.exist'); -}) - -// Allow these tests to be skipped with an env variable -// These tests should only run in BB CI since nothing is istio injected in Package CI -if (Cypress.env("check_data")) { - it('Check Kiali Graph page loads data', function() { +describe('Kiali', function () { + // Basic test that validates pages are accessible, basic error check + it('loads when visited', function () { cy.visit(Cypress.env('url')) - cy.title().should("eq", "Kiali"); - expandMenu(); - cy.get('#traffic_graph_cy', { timeout: 60000 }).click(); - collapseMenu(); - cy.get('button[id="namespace-selector"').click() - cy.get('input[type="checkbox"][value="monitoring"]').check() - cy.get('button[id="refresh_button"').click({force: true}) - // Check for graph side panel because the main graph is tricky to grab - cy.get('div[id="graph-side-panel"]', { timeout: 60000 }).should("be.visible") }) - it('Check Kiali Applications page loads data', function() { - cy.visit(Cypress.env('url')) - cy.title().should("eq", "Kiali"); + it('has a title containing "Kiali"', function () { + cy.title().should('contain', 'Kiali') + }) + + it('pops out the side menu', function () { expandMenu(); + }) + + it('loads the traffic graph page', function () { + cy.get('#traffic_graph_pf', { timeout: 60000 }).click(); + }) + + it('loads the applications page', function () { cy.get('#applications', { timeout: 60000 }).click(); - collapseMenu(); - cy.get('button[id="namespace-selector"]').click() - //Only check the box for monitoring if it isn't already selected from previous test - cy.get('input[type="checkbox"][value="monitoring"]').then(($checkbox) => { - if (!$checkbox.prop('checked')) { - cy.wrap($checkbox).check() - } + }) + + it('displays no connectivity errors', function () { + // Check for generic errors (this is the red circle that appears if any connectivity with Promtheus/Grafana/Istio is not working) + cy.get('svg[fill="var(--pf-global--danger-color--100)"]').should('not.exist'); + }) + + // Skip remaining tests if check_data is not set + // These tests should only run in BB CI since nothing is istio injected in Package CI + if (!Cypress.env("check_data")) { + return + } + + context('check_data is set', function () { + + it('pops out the side menu', function () { + expandMenu(); + }) + + it('loads the traffic graph page', function () { + cy.get('#traffic_graph_pf', { timeout: 60000 }).click(); + }) + + it('closes the side menu', function () { + collapseMenu(); + }) + + it('filters to the monitoring namespace', function () { + cy.get('button[id="namespace-selector"').click() + cy.get('input[type="checkbox"][value="monitoring"]').check() + cy.get('button[id="refresh_button"').click({ force: true }) + }) + + it('opens the graph side panel', function () { + cy.get('div[id="graph-side-panel"]').should("be.visible") + }) + + it('pops out the side menu', function () { + expandMenu(); + }) + + it('loads the applications page', function () { + cy.get('#applications', { timeout: 60000 }).click(); + }) + + it('filters to the monitoring namespace if not already filtered', function () { + collapseMenu(); + cy.get('button[id="namespace-selector"]').click() + cy.get('input[type="checkbox"][value="monitoring"]').then(($checkbox) => { + if (!$checkbox.prop('checked')) { + cy.wrap($checkbox).check() + } + }) + cy.get('button[id="refresh_button"]').click({ force: true }) + }) + + it('loads the prometheus application page', function () { + cy.get('a').filter((index, element) => { + return element.textContent.trim() === 'prometheus'; + }).click(); + }) + + it('loads the prometheus graph', function () { + cy.contains('.Empty Graph', { timeout: 60000 }).should('not.exist'); + cy.contains('.Error loading Graph', { timeout: 60000 }).should('not.exist'); + }) + + it('loads the outbound metrics tab', function () { + cy.get('#pf-tab-2-basic-tabs').click() + }) + + it('loads the tracing tab', function () { + cy.get('#pf-tab-3-basic-tabs').click() + }) + + it('does not show any errors fetching traces', function () { + cy.contains('Error fetching traces').should("not.exist") }) - cy.get('button[id="refresh_button"]').click({force: true}) - // This gets us to the prometheus application - cy.get('a').filter((index, element) => { - return element.textContent.trim() === 'prometheus'; - }).click(); - // Validate the graph is visible - cy.contains('.Empty Graph', { timeout: 60000 }).should('not.exist'); - cy.contains('.Error loading Graph', { timeout: 60000 }).should('not.exist'); - // Load the outbound metrics tab - // there's nothing easy to check on here since elements are dynamic but we can at least load the page for the video - cy.get('#pf-tab-2-basic-tabs').click() - // Load the tracing tab - cy.get('#pf-tab-3-basic-tabs').click() - // Validate that error is not displayed - // NOTE: we don't check for actual traces because there can be delays in them displaying on the webpage - cy.contains('Error fetching traces').should("not.exist") }) -} +}) diff --git a/chart/values.yaml b/chart/values.yaml index c5a1c5bffa742b1fabd1b4b717c3d527b0698240..f88d35afacd6d3e4e9e0fecfd33961e909ef183b 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -151,10 +151,6 @@ cr: annotations: {} spec: - kiali_feature_flags: - ui_defaults: - graph: - impl: "cy" istio_labels: app_label_name: "app.kubernetes.io/name" version_label_name: "app.kubernetes.io/version" diff --git a/tests/wait.sh b/tests/wait.sh index cca97dcc82254a0a8f174e868ce8ce94de5290c5..370d331ee76ca2db642455e59bf94e42f4d58f4e 100644 --- a/tests/wait.sh +++ b/tests/wait.sh @@ -2,22 +2,20 @@ wait_project() { echo - k="kubectl -n kiali" - - if ! current_generation=$($k get deployment/kiali -o=jsonpath='{.status.observedGeneration}'); then + if ! current_generation=$(kubectl -n kiali get deployment/kiali -o=jsonpath='{.status.observedGeneration}'); then current_generation=0 fi next_generation=$((current_generation + 1)) # NOTE: Since this is a hard-coded string, it may need to be updated if the way Kiali reports its progress changes # If the upgrade CI job fails on future versions, this is likely the first place to check - $k wait --for=jsonpath='{.status.progress.message}'="6. Finished all resource creation" --all kiali --timeout=60s && echo "Kiali CR is ready" + kubectl -n kiali wait --for=jsonpath='{.status.progress.message}'="6. Finished all resource creation" --all kiali --timeout=60s && echo "Kiali CR is ready" - if ! $k wait --for=jsonpath='{.status.observedGeneration}'="$next_generation" deployment/kiali --timeout=180s 2>/dev/null; then + if ! kubectl -n kiali wait --for=jsonpath='{.status.observedGeneration}'="$next_generation" deployment/kiali --timeout=180s 2>/dev/null; then echo "No new Kiali deployment generation detected. Checking if existing pods are ready." else echo "New Kiali deployment generation detected. Waiting for new pods to be ready." fi - $k rollout status deployment/kiali --timeout=180s && echo "Kiali is ready" + kubectl -n kiali rollout status deployment/kiali --timeout=180s && echo "Kiali is ready" }