From 8201641d892ea14903894cc67fa685340a7584c4 Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Tue, 1 Nov 2022 09:55:52 +0100
Subject: [PATCH] fix(manager/kubernetes): don't extract unknown kubernetes
 objects (#18230)

---
 lib/modules/datasource/kubernetes-api/index.ts | 12 +++++++-----
 lib/modules/manager/kubernetes/extract.spec.ts | 11 ++---------
 lib/modules/manager/kubernetes/extract.ts      |  8 ++++++--
 3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/lib/modules/datasource/kubernetes-api/index.ts b/lib/modules/datasource/kubernetes-api/index.ts
index 044a5b88bf..30c130973d 100644
--- a/lib/modules/datasource/kubernetes-api/index.ts
+++ b/lib/modules/datasource/kubernetes-api/index.ts
@@ -4,15 +4,17 @@ import * as kubernetesApiVersioning from '../../versioning/kubernetes-api';
 import { Datasource } from '../datasource';
 import type { GetReleasesConfig, ReleaseResult } from '../types';
 
+const apiData: Record<string, string[]> = JSON5.parse(
+  dataFiles.get('data/kubernetes-api.json5')!
+);
+
+export const supportedApis = new Set(Object.keys(apiData));
+
 export class KubernetesApiDatasource extends Datasource {
   static readonly id = 'kubernetes-api';
-  private readonly kubernetesApiVersions: Record<string, string[]>;
 
   constructor() {
     super(KubernetesApiDatasource.id);
-    this.kubernetesApiVersions = JSON5.parse(
-      dataFiles.get('data/kubernetes-api.json5')!
-    );
   }
 
   override defaultVersioning = kubernetesApiVersioning.id;
@@ -20,7 +22,7 @@ export class KubernetesApiDatasource extends Datasource {
   getReleases({
     packageName,
   }: GetReleasesConfig): Promise<ReleaseResult | null> {
-    const versions = this.kubernetesApiVersions[packageName];
+    const versions = apiData[packageName];
     if (versions) {
       const releases = versions.map((version) => ({ version }));
       return Promise.resolve({ releases });
diff --git a/lib/modules/manager/kubernetes/extract.spec.ts b/lib/modules/manager/kubernetes/extract.spec.ts
index 21b63f4bd3..e7c6733a41 100644
--- a/lib/modules/manager/kubernetes/extract.spec.ts
+++ b/lib/modules/manager/kubernetes/extract.spec.ts
@@ -13,16 +13,9 @@ describe('modules/manager/kubernetes/extract', () => {
       expect(extractPackageFile('', 'file.yaml', {})).toBeNull();
     });
 
-    it('returns only API version', () => {
+    it('does not return unknown kind', () => {
       const res = extractPackageFile(kubernetesConfigMapFile, 'file.yaml', {});
-      expect(res?.deps).toStrictEqual([
-        {
-          currentValue: 'v1',
-          datasource: 'kubernetes-api',
-          depName: 'ConfigMap',
-          versioning: 'kubernetes-api',
-        },
-      ]);
+      expect(res).toBeNull();
     });
 
     it('extracts multiple Kubernetes configurations', () => {
diff --git a/lib/modules/manager/kubernetes/extract.ts b/lib/modules/manager/kubernetes/extract.ts
index e5813ea73c..1e385871f9 100644
--- a/lib/modules/manager/kubernetes/extract.ts
+++ b/lib/modules/manager/kubernetes/extract.ts
@@ -2,7 +2,10 @@ import is from '@sindresorhus/is';
 import { loadAll } from 'js-yaml';
 import { logger } from '../../../logger';
 import { newlineRegex, regEx } from '../../../util/regex';
-import { KubernetesApiDatasource } from '../../datasource/kubernetes-api';
+import {
+  KubernetesApiDatasource,
+  supportedApis,
+} from '../../datasource/kubernetes-api';
 import * as kubernetesApiVersioning from '../../versioning/kubernetes-api';
 import { getDep } from '../dockerfile/extract';
 import type { ExtractConfig, PackageDependency, PackageFile } from '../types';
@@ -57,7 +60,7 @@ function extractImages(
 }
 
 function extractApis(content: string, fileName: string): PackageDependency[] {
-  let doc: KubernetesConfiguration[] | undefined;
+  let doc: KubernetesConfiguration[];
 
   try {
     doc = loadAll(content) as KubernetesConfiguration[];
@@ -73,6 +76,7 @@ function extractApis(content: string, fileName: string): PackageDependency[] {
         is.nonEmptyStringAndNotWhitespace(m.kind) &&
         is.nonEmptyStringAndNotWhitespace(m.apiVersion)
     )
+    .filter((m) => supportedApis.has(m.kind))
     .map((configuration) => ({
       depName: configuration.kind,
       currentValue: configuration.apiVersion,
-- 
GitLab