Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/four-experts-wish.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@cloudoperators/juno-app-greenhouse": patch
---

Visualizes PluginDefinition versions in the Greenhouse dashboard so operators can quickly see which version is deployed where. Adds PluginPreset.status.pluginDefinitionVersion to the PluginPreset list and PluginPreset detail, and Plugin.status.helmChart fields to the Plugin instance detail.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ describe("PluginInstances", () => {
expect(screen.getByText("Plugin Name")).toBeInTheDocument()
expect(screen.getByText("PluginPreset")).toBeInTheDocument()
expect(screen.getByText("Status")).toBeInTheDocument()
expect(screen.getByText("Helm Chart Version")).toBeInTheDocument()
expect(screen.getByText("plugin-1")).toBeInTheDocument()
expect(screen.getByText("plugin-2")).toBeInTheDocument()
expect(screen.getByText("1.2.3")).toBeInTheDocument()
}, 20000)
})
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const isPluginReady = (plugin: Plugin) => {
return plugin.status?.statusConditions?.conditions?.some((c) => c.type === "Ready" && c.status === "True") ?? false
}

const COLUMN_SPAN = 5
const COLUMN_SPAN = 6

const DataRows = ({ colSpan, plugins }: { colSpan: number; plugins: Plugin[] }) => {
const navigate = useNavigate({ from: "/admin/clusters/$clusterName" })
Expand Down Expand Up @@ -71,6 +71,7 @@ const DataRows = ({ colSpan, plugins }: { colSpan: number; plugins: Plugin[] })
<DataGridCell>{ready ? "Ready" : "Not Ready"}</DataGridCell>
<DataGridCell>{plugin.metadata?.name || NO_VALUE_DEFAULT}</DataGridCell>
<DataGridCell>{pluginPresetName || NO_VALUE_DEFAULT}</DataGridCell>
<DataGridCell>{plugin.status?.helmChart?.version ?? NO_VALUE_DEFAULT}</DataGridCell>
<DataGridCell nowrap>
{canNavigateToDetails && (
<PopupMenu onClick={(e) => e.stopPropagation()}>
Expand Down Expand Up @@ -121,6 +122,7 @@ export const PluginInstances = () => {
<DataGridHeadCell>Status</DataGridHeadCell>
<DataGridHeadCell>Plugin Name</DataGridHeadCell>
<DataGridHeadCell>PluginPreset</DataGridHeadCell>
<DataGridHeadCell nowrap>Helm Chart Version</DataGridHeadCell>
<DataGridHeadCell></DataGridHeadCell>
</DataGridRow>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ describe("Details", () => {
deletionPolicy: "Delete",
releaseName: "Release",
},
status: {
helmChart: {
name: "my-chart",
repository: "https://charts.example.com",
version: "3.1.4",
},
},
}

render(<Details plugin={mockPlugin} />)
Expand All @@ -36,5 +43,7 @@ describe("Details", () => {
expect(screen.getAllByText("test-team").length).toBeGreaterThan(0)
expect(screen.getByText("test-cluster")).toBeInTheDocument()
expect(screen.getByText("Release")).toBeInTheDocument()
expect(screen.getByText("my-chart")).toBeInTheDocument()
expect(screen.getByText("3.1.4")).toBeInTheDocument()
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@ export const Details: React.FC<DetailsProps> = ({ plugin }) => {
<DataGridHeadCell nowrap>PluginDefinition</DataGridHeadCell>
<DataGridCell>{plugin.spec?.pluginDefinitionRef?.name ?? NO_VALUE_DEFAULT}</DataGridCell>
</DataGridRow>
<DataGridRow>
<DataGridHeadCell nowrap>Helm Chart</DataGridHeadCell>
<DataGridCell>{plugin.status?.helmChart?.name ?? NO_VALUE_DEFAULT}</DataGridCell>
</DataGridRow>
<DataGridRow>
<DataGridHeadCell nowrap>Helm Chart Version</DataGridHeadCell>
<DataGridCell>{plugin.status?.helmChart?.version ?? NO_VALUE_DEFAULT}</DataGridCell>
</DataGridRow>
<DataGridRow>
<DataGridHeadCell nowrap>Release Name</DataGridHeadCell>
<DataGridCell>{plugin.spec?.releaseName ?? NO_VALUE_DEFAULT}</DataGridCell>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,16 @@ describe("Details", () => {
pluginDefinition: "test-plugin-def",
},
},
status: {
pluginDefinitionVersion: "2.0.0",
},
}

render(<Details pluginPreset={mockPluginPreset} />)

expect(screen.getByText("Details")).toBeInTheDocument()
expect(screen.getByText("test-preset")).toBeInTheDocument()
expect(screen.getByText("test-plugin-def")).toBeInTheDocument()
expect(screen.getByText("2.0.0")).toBeInTheDocument()
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ export const Details: React.FC<DetailsProps> = ({ pluginPreset }) => (
<DataGridHeadCell nowrap>PluginDefinition</DataGridHeadCell>
<DataGridCell>{pluginPreset.spec?.plugin?.pluginDefinitionRef?.name}</DataGridCell>
</DataGridRow>
<DataGridRow>
<DataGridHeadCell nowrap>Version</DataGridHeadCell>
<DataGridCell>{pluginPreset.status?.pluginDefinitionVersion ?? "--"}</DataGridCell>
</DataGridRow>
<DataGridRow>
<DataGridHeadCell nowrap>Release Name</DataGridHeadCell>
<DataGridCell>{pluginPreset.spec?.plugin?.releaseName ?? "--"}</DataGridCell>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ describe("PluginInstances", () => {
expect(screen.getByText("Plugin Name")).toBeInTheDocument()
expect(screen.getByText("Cluster")).toBeInTheDocument()
expect(screen.getByText("Status")).toBeInTheDocument()
expect(screen.getByText("Helm Chart Version")).toBeInTheDocument()
expect(screen.getByText("plugin-1")).toBeInTheDocument()
expect(screen.getByText("plugin-2")).toBeInTheDocument()
expect(screen.getByText("1.2.3")).toBeInTheDocument()
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ import { LoadingDataRow } from "../../common/LoadingDataRow"
import { ErrorBoundary } from "../../common/ErrorBoundary"
import { getErrorDataRowComponent } from "../../common/getErrorDataRow"
import { Plugin } from "../../types/k8sTypes"
import { NO_VALUE_DEFAULT } from "../../constants"
import { fetchPlugins, FETCH_PLUGINS_CACHE_KEY } from "../../api/plugins/fetchPlugins"

const isPluginReady = (plugin: Plugin) => {
return plugin.status?.statusConditions?.conditions?.some((c) => c.type === "Ready" && c.status === "True") ?? false
}

const COLUMN_SPAN = 5
const COLUMN_SPAN = 6

const DataRows = ({ colSpan }: { colSpan: number }) => {
const { pluginPresetName } = useParams({ from: "/admin/plugin-presets/$pluginPresetName" })
Expand Down Expand Up @@ -70,6 +71,7 @@ const DataRows = ({ colSpan }: { colSpan: number }) => {
<DataGridCell>{plugin.metadata?.name}</DataGridCell>
<DataGridCell>{plugin.spec?.clusterName}</DataGridCell>
<DataGridCell>{ready ? "Ready" : "Not Ready"}</DataGridCell>
<DataGridCell>{plugin.status?.helmChart?.version ?? NO_VALUE_DEFAULT}</DataGridCell>
<DataGridCell nowrap>
<PopupMenu onClick={(e) => e.stopPropagation()}>
<PopupMenuOptions>
Expand Down Expand Up @@ -117,6 +119,7 @@ export const PluginInstances = () => {
<DataGridHeadCell>Plugin Name</DataGridHeadCell>
<DataGridHeadCell>Cluster</DataGridHeadCell>
<DataGridHeadCell>Status</DataGridHeadCell>
<DataGridHeadCell nowrap>Helm Chart Version</DataGridHeadCell>
<DataGridHeadCell></DataGridHeadCell>
</DataGridRow>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export const DataRows = ({ colSpan }: DataRowsProps) => {
<DataGridCell>
{preset.spec?.plugin?.pluginDefinitionRef.name || preset.spec?.plugin?.pluginDefinition}
</DataGridCell>
<DataGridCell>{preset.status?.pluginDefinitionVersion ?? "--"}</DataGridCell>
<DataGridCell>{!isReady(preset) ? getReadyCondition(preset)?.message : ""}</DataGridCell>
<DataGridCell>{preset.metadata?.labels?.[SUPPORT_GROUP_LABEL]}</DataGridCell>
<DataGridCell nowrap>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ describe("PluginPresetsDataGrid", () => {
expect(screen.getByText("Instances")).toBeInTheDocument()
expect(screen.getByText("Name")).toBeInTheDocument()
expect(screen.getByText("PluginDefinition")).toBeInTheDocument()
expect(screen.getByText("Version")).toBeInTheDocument()
expect(screen.getByText("Message")).toBeInTheDocument()

// Check for data - verify all 5 presets are rendered
Expand All @@ -85,6 +86,9 @@ describe("PluginPresetsDataGrid", () => {
expect(screen.getByText("preset-4")).toBeInTheDocument()
expect(screen.getByText("preset-5")).toBeInTheDocument()

// Check version is displayed
expect(screen.getByText("1.2.3")).toBeInTheDocument()

// Check some instance counts
expect(screen.getByText("2/3")).toBeInTheDocument()
expect(screen.getByText("0/2")).toBeInTheDocument()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,20 @@ import { LoadingDataRow } from "../../common/LoadingDataRow"
import { ErrorBoundary } from "../../common/ErrorBoundary"
import { getErrorDataRowComponent } from "../../common/getErrorDataRow"

const COLUMN_SPAN = 7
const COLUMN_SPAN = 8

export const PluginPresetsDataGrid = () => {
const { filterSettings } = useLoaderData({ from: "/admin/plugin-presets/" })
return (
<DataGrid minContentColumns={[0, 1, 6]} columns={COLUMN_SPAN}>
<DataGrid minContentColumns={[0, 1, 7]} columns={COLUMN_SPAN}>
<DataGridRow>
<DataGridHeadCell>
<Icon icon="monitorHeart" />
</DataGridHeadCell>
<DataGridHeadCell>Instances</DataGridHeadCell>
<DataGridHeadCell>Name</DataGridHeadCell>
<DataGridHeadCell>PluginDefinition</DataGridHeadCell>
<DataGridHeadCell>Version</DataGridHeadCell>
<DataGridHeadCell>Message</DataGridHeadCell>
<DataGridHeadCell>Support Group</DataGridHeadCell>
<DataGridHeadCell></DataGridHeadCell>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const mockPluginPresets: MockPluginPresetsResponse = {
status: {
readyPlugins: 2,
totalPlugins: 3,
pluginDefinitionVersion: "1.2.3",
statusConditions: {
conditions: [
{
Expand Down
5 changes: 5 additions & 0 deletions apps/greenhouse/src/components/admin/__mocks__/plugins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ export const mockPlugins: MockPluginsResponse = {
},
],
},
helmChart: {
name: "plugin-def-1",
repository: "https://charts.example.com",
version: "1.2.3",
},
},
},
{
Expand Down
2 changes: 2 additions & 0 deletions apps/greenhouse/src/components/admin/types/schema.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -967,6 +967,8 @@ export interface components {
status?: {
/** @description FailedPlugins is the number of failed Plugins managed by the PluginPreset. */
failedPlugins?: number
/** @description PluginDefinitionVersion is the version of the PluginDefinition referenced by this PluginPreset. */
pluginDefinitionVersion?: string
/** @description PluginStatuses contains statuses of Plugins managed by the PluginPreset. */
pluginStatuses?: {
pluginName?: string
Expand Down
Loading