Description of problem: When a dynamic plugin adds a route via extension point but there already is one from static plugin, it is never matched because static plugin routes are evaluated first. We need it to work the other way around Version-Release number of selected component (if applicable): 4.8 How reproducible: always Steps to Reproduce: 1. create dynamic plugin, add route which is already taken by some static plugin 2. access the route in console Actual results: a component from static plugin is rendered instead of the dynamic one Expected results: a component from dynamic plugin is rendered
1. Build a dynamic plugin who has defined create resource extension via two steps - Add following code into frontend/dynamic-demo-plugin/console-extensions.json { "type": "console.resource/create", "properties": { "model": { "group": "operator.tekton.dev", "version": "v1alpha1", "kind": "TektonConfig" }, "component": { "$codeRef": "fooComp" } } } - Add reference code into exposedModules of frontend/dynamic-demo-plugin/package.json /** * This file declares all extensions contributed by the plugin. * * Depending on extension 'type', the 'properties' object may contain code references, encoded * as object literals { $codeRef: string }. The '$codeRef' value should be formatted as either * 'moduleName.exportName' (referring to a named export) or 'moduleName' (referring to the * 'default' export). Only the plugin's exposed modules may be used in code references. */ [ { "type": "console.flag", "properties": { "handler": { "$codeRef": "barUtils.testHandler" } } }, { "type": "console.flag/model", "properties": { "flag": "EXAMPLE", "model": { "group": "kubevirt.io", "version": "v1alpha3", "kind": "ExampleModel" } } }, { "type": "console.telemetry/listener", "properties": { "listener": { "$codeRef": "telemetry.eventListener" } } }, { "type": "console.page/route", "properties": { "path": "/test-consumer", "component": { "$codeRef": "extensionConsumer.default" } } }, { "type": "console.resource/create", "properties": { "model": { "group": "monitoring.coreos.com", "version": "v1", "kind": "PrometheusRule" }, "component": { "$codeRef": "fooComp" } } } ] $ jq .consolePlugin.exposedModules package.json { "barUtils": "./utils/bar", "telemetry": "./utils/telemetry", "extensionConsumer": "./components/ExtensionConsumer.tsx", "fooComp": "./components/Foo.tsx" } 2. Build dynamic plugin image with command `docker build -f Dockerfile.plugins.demo -t quay.io/yapei/console-demo-plugin:createresoure .` 3. update the referenced image to quay.io/yapei/console-demo-plugin:createresoure in oc-manifest.yaml and deploy plugin manifests to the cluster $ oc apply -f oc-manifest.yaml namespace/console-demo-plugin created deployment.apps/console-demo-plugin created service/console-demo-plugin created 4. Make sure plugin is running successfully and enable it in console config $ oc get console.operator cluster -o json | jq .spec.plugins [ "console-demo-plugin" ] 5. Install Prometheus Operator into one project, try to create a new PrometheusRule resource via Operators -> Installed Operators -> Prometheus Operator -> Prometheus Rule -> click on 'Create PrometheusRule' button, we can see the customized component loaded, it shows "Hello Component!" 6. Goes to /api-resource/ns/default/monitoring.coreos.com~v1~PrometheusRule page, click on 'Instance' tab, click on 'Create PrometheusRule' button, it shows 'Hello Component!' which is the message defined in customized component Verified on 4.9.0-0.nightly-2021-07-29-103526
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Moderate: OpenShift Container Platform 4.9.0 bug fix and security update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2021:3759