Skip to content

Commit 4100d64

Browse files
committed
fix: NO-JIRA: Always use full GVK in URLs.
Previously was using path, which works for built-in kinds, but not custom resources. GVK works for both.
1 parent 9f9a1b9 commit 4100d64

3 files changed

Lines changed: 24 additions & 23 deletions

File tree

web/src/__tests__/all-domains.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ it.each([
2929
},
3030
},
3131
{
32-
url: 'k8s/ns/default/pods/bad-deployment-000000000-00000',
32+
url: 'k8s/ns/default/core~v1~Pod/bad-deployment-000000000-00000',
3333
query: 'k8s:Pod.v1:{"namespace":"default","name":"bad-deployment-000000000-00000"}',
3434
constraint: {
3535
start: null,

web/src/__tests__/k8s.spec.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,19 @@ describe('K8sNode.fromURL', () => {
7777
query: 'k8s:Deployment.v1.apps:{"namespace":"korrel8r","name":"korrel8r"}',
7878
},
7979
{
80-
url: 'k8s/ns/default/pods/bad-deployment-000000000-00000',
80+
url: 'k8s/ns/default/core~v1~Pod/bad-deployment-000000000-00000',
8181
query: 'k8s:Pod.v1:{"namespace":"default","name":"bad-deployment-000000000-00000"}',
8282
},
8383
{
84-
url: 'k8s/ns/default/pods/bad-deployment-000000000-00000/events',
84+
url: 'k8s/ns/default/core~v1~Pod/bad-deployment-000000000-00000/events',
8585
query:
8686
'k8s:Event.v1:{"fields":{"involvedObject.namespace":"default","involvedObject.name":"bad-deployment-000000000-00000","involvedObject.apiVersion":"v1","involvedObject.kind":"Pod"}}',
8787
},
88-
{ url: `/k8s/ns/default/pods/foo`, query: `k8s:Pod.v1:{"namespace":"default","name":"foo"}` },
89-
{ url: `/k8s/ns/default/pods`, query: `k8s:Pod.v1:{"namespace":"default"}` },
88+
{
89+
url: `/k8s/ns/default/core~v1~Pod/foo`,
90+
query: `k8s:Pod.v1:{"namespace":"default","name":"foo"}`,
91+
},
92+
{ url: `/k8s/ns/default/core~v1~Pod`, query: `k8s:Pod.v1:{"namespace":"default"}` },
9093
{ url: `/k8s/cluster/projects/foo`, query: `k8s:Namespace.v1:{"name":"foo"}` },
9194
{
9295
url: `/k8s/ns/x/operators.coreos.com~v1alpha1~ClusterServiceVersion/y`,
@@ -107,44 +110,44 @@ describe('K8sNode.fromQuery', () => {
107110
// Note "fields" are ignored.
108111
{
109112
query: 'k8s:Pod.v1:{"namespace":"default","name":"bad-deployment-000000000-00000"}',
110-
url: 'k8s/ns/default/pods/bad-deployment-000000000-00000',
113+
url: 'k8s/ns/default/core~v1~Pod/bad-deployment-000000000-00000',
111114
},
112115
{
113116
query: `k8s:Pod:{"namespace":"x","name":"y","labels":{"a":"b","c":"d"},"fields": {"x":"y"}}`,
114-
url: `k8s/ns/x/pods/y?labels=${encodeURIComponent('a=b,c=d')}&fields=${encodeURIComponent(
115-
'x=y',
116-
)}`,
117+
url: `k8s/ns/x/core~v1~Pod/y?labels=${encodeURIComponent(
118+
'a=b,c=d',
119+
)}&fields=${encodeURIComponent('x=y')}`,
117120
},
118121
{
119122
query:
120123
'k8s:Event.v1:{"fields":{"involvedObject.namespace":"default","involvedObject.name":"bad-deployment-000000000-00000","involvedObject.apiVersion":"v1","involvedObject.kind":"Pod"}}',
121-
url: 'k8s/ns/default/pods/bad-deployment-000000000-00000/events',
124+
url: 'k8s/ns/default/core~v1~Pod/bad-deployment-000000000-00000/events',
122125
},
123126
{
124127
query: `k8s:Pod:{ "namespace":"x", "name":"y", "labels":{ "a":"b" } }`,
125-
url: `k8s/ns/x/pods/y?labels=${encodeURIComponent('a=b')}`,
128+
url: `k8s/ns/x/core~v1~Pod/y?labels=${encodeURIComponent('a=b')}`,
126129
},
127130
{
128131
query: `k8s:Pod:{ "namespace":"x", "labels":{ "a":"b" } }`,
129-
url: `k8s/ns/x/pods?labels=${encodeURIComponent('a=b')}`,
132+
url: `k8s/ns/x/core~v1~Pod?labels=${encodeURIComponent('a=b')}`,
130133
},
131-
{ query: `k8s:Pod.v1:{ "namespace":"x", "name":"y" }`, url: `k8s/ns/x/pods/y` },
132-
{ query: `k8s:Pod.v1:{ "namespace":"x" }`, url: `k8s/ns/x/pods` },
134+
{ query: `k8s:Pod.v1:{ "namespace":"x", "name":"y" }`, url: `k8s/ns/x/core~v1~Pod/y` },
135+
{ query: `k8s:Pod.v1:{ "namespace":"x" }`, url: `k8s/ns/x/core~v1~Pod` },
133136
{
134137
query: `k8s:Pod.v1:{ "labels":{ "a":"b" } }`,
135138
url: `search/all-namespaces?labels=${encodeURIComponent('a=b')}&kind=core~v1~Pod`,
136139
},
137140
{
138141
query: `k8s:Pod.v1:{"namespace":"x","labels":{"a":"b"}}`,
139-
url: `k8s/ns/x/pods?labels=${encodeURIComponent('a=b')}`,
142+
url: `k8s/ns/x/core~v1~Pod?labels=${encodeURIComponent('a=b')}`,
140143
},
141144

142145
// Variations on korrel8r class spec.
143146
{
144147
query: `k8s:Role.v1.rbac.authorization.k8s.io:{ "namespace":"x", "name":"y" }`,
145-
url: `k8s/ns/x/roles/y`,
148+
url: `k8s/ns/x/rbac.authorization.k8s.io~v1~Role/y`,
146149
},
147-
{ query: `k8s:Pod:{}`, url: 'k8s/all-namespaces/pods' },
150+
{ query: `k8s:Pod:{}`, url: 'k8s/all-namespaces/core~v1~Pod' },
148151
])('converts $query to $url', ({ url, query }) => {
149152
expect(k8s.queryToLink(Query.parse(query))).toEqual(new URIRef(url));
150153
});

web/src/korrel8r/k8s.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,17 @@ export class K8sDomain extends Domain {
104104
}
105105
// Prepare parts of the URL
106106
const nsPath = namespace ? `ns/${namespace}` : 'all-namespaces';
107+
const kind = `${model.apiGroup || 'core'}~${model.apiVersion}~${model.kind}`;
107108
const params = {
108109
labels: keyValueList(data.labels) || undefined,
109110
fields: (!events && keyValueList(data.fields)) || undefined,
110111
};
111112
if (!name && !namespace && (params.labels || params.fields)) {
112-
// This is a search URL
113-
return new URIRef(`search/${nsPath}`, {
114-
...params,
115-
kind: `${model.apiGroup || 'core'}~${model.apiVersion}~${model.kind}`,
116-
});
113+
// Search URL
114+
return new URIRef(`search/${nsPath}`, { ...params, kind });
117115
} else {
118116
// Specific resource URL
119-
return new URIRef(`k8s/${nsPath}/${model.path}${name ? `/${name}` : ''}${events}`, params);
117+
return new URIRef(`k8s/${nsPath}/${kind}${name ? `/${name}` : ''}${events}`, params);
120118
}
121119
}
122120

0 commit comments

Comments
 (0)