views:, which columns matter for a kind, how to tell whether an object is healthy, which facts to show, what it links to and what belongs to it, and which changes people make to it; and, with a place in the sidebar, an entry that leads to all the tool’s kinds on one page. Lumovi comes with plugins for popular tools; see Included plugins.
In your cluster, the plugins everyone sees go in the chart’s plugins value, one entry per file name:
values.yaml
.yaml or .yml at the end, holding one plugin, exactly as you’d write it for the desktop app. See Write a plugin, Plugins and the plugin format.
How it works
- The chart puts the files in a ConfigMap, and mounts it at
/etc/lumovi/plugins, where Lumovi reads them (LUMOVI_PLUGINS_DIR). Kubernetes mounts each file as a link, which Lumovi follows. - A kind is one plugin’s. These plugins show kinds no other plugin has; one with the name of one of Lumovi’s, like
fluxorcert-manager, is used in its place, all of it, and All plugins says so to everyone on its row. - They’re held as Lumovi’s own are: a tool’s kinds in the groups the plugin names, none of Kubernetes’ own but the few it may show, and nothing created but the plugin’s own kinds.
- A change to
pluginsrolls out a new pod, which reads them. People stay signed in, as across any restart, and open pages reconnect. - Without the chart, put the files in the folder
LUMOVI_PLUGINS_DIRnames. Lumovi reads it again whenever a page loads, so people see a change when they reload. - These plugins are the server’s, for everyone. What goes here is described, never code: only the plugins Lumovi comes with have code. People can’t add their own from a browser.
- In a fleet, they’re for every cluster: a view of a kind is used in each cluster that has that kind, and a plugin’s place in the sidebar shows in each cluster that serves one of its kinds.
Check them
All plugins, under Plugins in the sidebar (or ⌘K, CtrlK on Windows and Linux), lists every plugin: Lumovi’s and this server’s, each with what it asks for, and This server’s on the ones from the folder. One with a problem isn’t used at all: its file is a row that says Not in use, with each problem under it and where in the file it is. A file that can’t be read, or is larger than 256 KB, is a row too, likeIt couldn't be read: …, and the other files load. Lumovi reads up to 200 files, in order of name. At the foot, the page says where this server’s are, like This server’s are in /etc/lumovi/plugins. API resources says what shows each kind, under Shown by, and how many plugins there are: 32 plugins from Lumovi, 2 from this server.
Plugins in files are data only. Their views read fields with JSONPath, and change objects only with the patches and new objects they spell out. Their actions go through the same checks as Lumovi’s own: the cluster is asked first whether the person may make the change, the equivalent kubectl command is shown, and a read-only Lumovi stays read-only.
Plugins’ code
Four of the plugins Lumovi comes with, Karpenter, Argo CD, CloudNativePG and Prometheus Operator, draw pages of their own with their code, in a sealed box. On a server, their code is handed to a person’s browser only where all of these hold:-
LUMOVI_URLis set, so the box has an address of its own, atplugin-box/box.htmlbelow it, beside the check’s own frame atplugin-box/check.html. See The page. -
The browser’s requests are held to Lumovi’s own page, as
auth.secFetchSitedoes by default. Behind a sign-in proxy, only whereauth.proxy.secFetchSitesays the proxy passes the header through. -
Lumovi has checked that browser. The first time someone opens such a page, Lumovi checks that their browser keeps a plugin’s code in its box: that it can’t reach the network, Lumovi’s page, cookies or storage, or another plugin’s box. A browser that fails isn’t handed any plugin’s code, and the page says so, like “Lumovi checked this browser and it didn’t pass, so it doesn’t run plugins’ code in this browser. Another browser may pass the check.” Each check is in the audit log as
plugin.box-check. The check asks Lumovi atbox-check/belowLUMOVI_URL, from sealed frames in the browser. So whatever stands in front of Lumovi (an ingress that lists its paths, a firewall for web requests, a sign-in proxy) must pass everything there on, as it passes the rest, including these, which come from no site of their own: requests that sayOrigin: null; requests that say no origin and don’t come from Lumovi’s own page; and WebSocket upgrades that sayOrigin: null. None of them carries the sign-in proxy’s cookie. Where they don’t arrive, no plugin’s code runs in that browser. The page says “Lumovi couldn’t check this browser: its own test request didn’t reach this server, so it can’t tell what a plugin’s box lets out here.”, and Lumovi’s log says which didn’t arrive. -
This server runs that plugin’s code, as
pluginCodesays.
pluginCode decides whose code runs here:
values.yaml
LUMOVI_PLUGIN_CODE to on, off, or plugins’ names separated by commas.
Each person can also turn a plugin’s code off for themselves, with Run its code on its entry under All plugins. Their switch is theirs alone, kept with their other settings.
Write a plugin
A step-by-step guide, from columns to actions.
Plugin format
Every field a plugin can have.