diff --git a/src/languageservice/services/crdUtil.ts b/src/languageservice/services/crdUtil.ts index 0c247e5c..205cc0d2 100644 --- a/src/languageservice/services/crdUtil.ts +++ b/src/languageservice/services/crdUtil.ts @@ -37,7 +37,7 @@ export function autoDetectKubernetesSchemaFromDocument( }) .filter((ref) => ref) .map((ref) => ref.replace('_definitions.json#/definitions/', '').toLowerCase()); - const groupWithoutK8sIO = group.replace('.k8s.io', ''); + const groupWithoutK8sIO = group.replace('.k8s.io', '').replace('rbac.authorization', 'rbac'); const k8sTypeName = `io.k8s.api.${groupWithoutK8sIO.toLowerCase()}.${version.toLowerCase()}.${kind.toLowerCase()}`; if (kubernetesBuildIns.includes(k8sTypeName)) { diff --git a/test/yamlSchemaService.test.ts b/test/yamlSchemaService.test.ts index 22932184..f7277fda 100644 --- a/test/yamlSchemaService.test.ts +++ b/test/yamlSchemaService.test.ts @@ -456,5 +456,36 @@ spec: expect(requestServiceMock).calledWithExactly('file:///_definitions.json'); expect(requestServiceMock).calledTwice; }); + + it('should not get schema from crd catalog for RBAC-related resources', async () => { + const documentContent = 'apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding'; + const content = `${documentContent}`; + const yamlDock = parse(content); + + const settings = new SettingsState(); + settings.schemaAssociations = { + kubernetes: ['*.yaml'], + }; + settings.kubernetesCRDStoreEnabled = true; + requestServiceMock = sandbox.fake.resolves( + ` + { + "oneOf": [ + { + "$ref": "_definitions.json#/definitions/io.k8s.api.rbac.v1.RoleBinding" + } + ] + } + ` + ); + const service = new SchemaService.YAMLSchemaService(requestServiceMock, undefined, undefined, settings); + service.registerExternalSchema(KUBERNETES_SCHEMA_URL, ['*.yaml']); + const resolvedSchema = await service.getSchemaForResource('test.yaml', yamlDock.documents[0]); + expect(resolvedSchema.schema.url).eqls(KUBERNETES_SCHEMA_URL); + + expect(requestServiceMock).calledWithExactly(KUBERNETES_SCHEMA_URL); + expect(requestServiceMock).calledWithExactly('file:///_definitions.json'); + expect(requestServiceMock).calledTwice; + }); }); });