Skip to content

Commit

Permalink
Dynamic plugin (#64)
Browse files Browse the repository at this point in the history
* Dynamic plugin preliminary work

Signed-off-by: Ali Ok <[email protected]>

* Alpha magic

Signed-off-by: Ali Ok <[email protected]>

* Updates to yarn.lock

Signed-off-by: Ali Ok <[email protected]>

* README file for the dynamic plugin

Signed-off-by: Ali Ok <[email protected]>

* Move README file for the dynamic plugin in a separate file as `yarn export-dynamic` command overrides it

Signed-off-by: Ali Ok <[email protected]>

* Copy over dynamic README file into dist-dynamic

Signed-off-by: Ali Ok <[email protected]>

* Update plugin readme file with a reference to the dynamic plugin readme

Signed-off-by: Ali Ok <[email protected]>

* Fix linter complaints

Signed-off-by: Ali Ok <[email protected]>

* Fix dynamic readme copying script

Signed-off-by: Ali Ok <[email protected]>

* Do not check in ignored file

Signed-off-by: Ali Ok <[email protected]>

* Update backstage/plugins/knative-event-mesh-backend/src/dynamic/index.ts

---------

Signed-off-by: Ali Ok <[email protected]>
  • Loading branch information
aliok authored Jun 6, 2024
1 parent c5a6c40 commit 5273de6
Show file tree
Hide file tree
Showing 14 changed files with 3,693 additions and 456 deletions.
5 changes: 4 additions & 1 deletion backstage/packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@
"@types/luxon": "^2.0.4"
},
"files": [
"dist"
"dist",
"dist-dynamic/*.*",
"dist-dynamic/dist/**",
"dist-dynamic/alpha/*"
]
}
92 changes: 92 additions & 0 deletions backstage/plugins/knative-event-mesh-backend/README-dynamic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Knative Event Mesh plugin (dynamic)

The Event Mesh plugin is a Backstage plugin that allows you to view and manage Knative Eventing resources.

The Backstage plugin talks to a special backend that runs in the Kubernetes cluster and communicates with the Kubernetes
API server.

A demo setup for this plugin is available at https://github.com/aliok/knative-backstage-demo.

For more information about the plugin, please see
the [GitHub repository](https://github.com/knative-extensions/backstage-plugins/blob/main/backstage/plugins/knative-event-mesh-backend/README.md).

This distribution of the plugin is a dynamic plugin that can be installed in a Backstage instance that supports dynamic
plugins.

Backstage has a [WIP proposal](https://github.com/backstage/backstage/tree/master/beps/0002-dynamic-frontend-plugins) to
allow plugins to be loaded dynamically. While this is not done in upstream Backstage
yet, [Janus IDP](https://janus-idp.io/) has implemented this feature.
The benefit of the dynamic plugin is it can be used without changing the source code of Backstage.

## Installation

### Prerequisites

- A Kubernetes cluster with Knative Eventing installed
- Knative Event Mesh plugin backend installed
- A Backstage instance with dynamic plugin support (e.g. [Janus IDP](https://janus-idp.io/))
- A service account for the Backstage backend to access the Kubernetes API

Install Knative Eventing by following the [official documentation](https://knative.dev/docs/install/).

Install the backend and the relevant configuration in the Kubernetes cluster

```bash
kubectl apply -f https://github.com/knative-extensions/backstage-plugins/releases/download/v0.1.0/eventmesh.yaml
```

## Janus Configuration

You need to follow the Janus IDP dynamic plugin installation instructions
here: https://github.com/janus-idp/backstage-showcase/blob/main/showcase-docs/dynamic-plugins.md#installing-a-dynamic-plugin-package-in-the-showcase

For a quick test, download the plugin package and extract it to the `dynamic-plugins-root` directory in Janus IDP:

```bash
cd <path-to-Janus-IDP>/dynamic-plugins-root
pkg=@knative-extensions/plugin-knative-event-mesh-backend-dynamic
pkg=@knative-extensions/plugin-knative-event-mesh-backend-dynamic
pkg=@aliok/plugin-knative-event-mesh-backend-dynamic
archive=$(npm pack $pkg)
tar -xzf "$archive" && rm "$archive"
mv package $(echo $archive | sed -e 's:\.tgz$::')
```

> **NOTE**: The backend needs to be accessible from the Backstage instance. If you are running the backend without
> exposing it, you can use `kubectl port-forward` to forward the port of the backend service to your local machine.
> ```bash
> kubectl port-forward -n knative-eventing svc/eventmesh-backend 8080:8080
> ```
The plugin needs to be configured to talk to the backend. It can be configured in the `app-config.yaml` file of the
Backstage instance and allows configuration of one or multiple providers.
Use a `knativeEventMesh` marker to start configuring the `app-config.yaml` file of Backstage:
```yaml
catalog:
...
providers:
knativeEventMesh:
dev:
baseUrl: 'http://localhost:8080' # URL of the backend installed in the cluster
schedule: # optional; same options as in TaskScheduleDefinition
# supports cron, ISO duration, "human duration" as used in code
frequency: { minutes: 1 }
# supports ISO duration, "human duration" as used in code
timeout: { minutes: 1 }
```
Start your Janus IDP instance!
> **NOTE**: If you have made any changes to the schedule in the `app-config.yaml` file, then restart to apply the
> changes.
## Troubleshooting
When you start your Backstage application, you can see some log lines as follows:
```text
[1] 2024-01-04T09:38:08.707Z knative-event-mesh-backend info Found 1 knative event mesh provider configs with ids: dev type=plugin
```
13 changes: 13 additions & 0 deletions backstage/plugins/knative-event-mesh-backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ API server.

A demo setup for this plugin is available at https://github.com/aliok/knative-backstage-demo.

## Dynamic vs static plugin

This plugin has 2 distributions: static and dynamic.

The static distribution is a regular Backstage plugin that requires
the source code of Backstage to be changed.

The dynamic distribution is a plugin that can be installed without changing
the source code of Backstage. If you would like to use the dynamic plugin, please see the instructions in the
[Dynamic Plugin README file](./dist-dynamic/README.md).

Rest of this documentation is for the static plugin.

## Installation

Install the backend and the relevant configuration in the Kubernetes cluster
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

*
!package.json
!yarn.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"name": "@knative-extensions/plugin-knative-event-mesh-backend-dynamic",
"version": "0.0.0-nightly",
"main": "dist/index.cjs.js",
"types": "dist/index.d.ts",
"license": "Apache-2.0",
"private": false,
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
"types": "dist/index.d.ts"
},
"backstage": {
"role": "backend-plugin"
},
"exports": {
".": {
"require": "./dist/index.cjs.js",
"types": "./dist/index.d.ts",
"default": "./dist/index.cjs.js"
},
"./alpha": {
"require": "./dist/alpha.cjs.js",
"types": "./dist/alpha.d.ts",
"default": "./dist/alpha.cjs.js"
},
"./package.json": "./package.json"
},
"scripts": {},
"dependencies": {
"@types/express": "*",
"express": "^4.17.1",
"express-promise-router": "^4.1.0",
"node-fetch": "^2.6.7",
"winston": "^3.2.1",
"yn": "^4.0.0"
},
"devDependencies": {},
"files": [
"dist",
"alpha"
],
"bundleDependencies": true,
"peerDependencies": {
"@backstage/backend-common": "^0.19.9",
"@backstage/backend-dynamic-feature-service": "^0.2.9",
"@backstage/backend-plugin-api": "^0.6.18",
"@backstage/backend-tasks": "^0.5.21",
"@backstage/catalog-client": "^1.4.6",
"@backstage/catalog-model": "^1.4.5",
"@backstage/config": "^1.1.1",
"@backstage/plugin-catalog-common": "^1.0.22",
"@backstage/plugin-catalog-node": "^1.11.0"
},
"overrides": {
"@aws-sdk/util-utf8-browser": {
"@smithy/util-utf8": "^2.0.0"
}
},
"resolutions": {
"@aws-sdk/util-utf8-browser": "npm:@smithy/util-utf8@~2"
}
}
Loading

0 comments on commit 5273de6

Please sign in to comment.