Skip to content

Commit a9fffcc

Browse files
dlemiechsoniabha-intcriyaz-ghativigneshintel
authored
filtering templates based on os profile (#204)
Co-authored-by: Sonia Bhattacharya <sonia.bhattacharya@intel.com> Co-authored-by: riyaz C Ghati <riyaz.chandasaheb.ghati@intel.com> Co-authored-by: riyaz-ghati <108117001+riyaz-ghati@users.noreply.github.com> Co-authored-by: Vignesh Chandrasekharan <vignesh.chandrasekharan@intel.com>
1 parent f14af3c commit a9fffcc

6 files changed

Lines changed: 63 additions & 15 deletions

File tree

apps/cluster-orch/src/components/atom/ClusterTemplatesDropdown/ClusterTemplatesDropdown.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,39 @@ export interface ClusterTemplatesDropdownProps {
1414
onSelectionChange?: (value: string) => void;
1515
clusterTemplateName?: string;
1616
isDisabled?: boolean;
17+
kubernetesVersion?: string;
1718
}
1819
const ClusterTemplatesDropdown = ({
1920
onSelectionChange,
2021
clusterTemplateName,
2122
isDisabled,
23+
kubernetesVersion,
2224
}: ClusterTemplatesDropdownProps) => {
2325
const projectName = SharedStorage.project?.name ?? "";
26+
const templatesParam: cm.GetV2ProjectsByProjectNameTemplatesApiArg = {
27+
projectName,
28+
};
29+
if (kubernetesVersion) {
30+
// Apply the filter to the query
31+
templatesParam.filter = `kubernetesVersion=${kubernetesVersion}`;
32+
}
33+
2434
const {
2535
data: clusterTemplates,
2636
isSuccess: isTemplateSuccess,
2737
isLoading: isTemplateLoading,
2838
isError: isTemplateError,
2939
error,
30-
} = cm.useGetV2ProjectsByProjectNameTemplatesQuery({ projectName });
40+
refetch,
41+
} = cm.useGetV2ProjectsByProjectNameTemplatesQuery(templatesParam);
3142

3243
const [templateNames, setTemplateNames] = useState<string[]>();
3344

45+
// Add useEffect to trigger refetch when kubernetesVersion changes
46+
useEffect(() => {
47+
refetch();
48+
}, [kubernetesVersion, refetch]);
49+
3450
useEffect(() => {
3551
if (!clusterTemplates) return;
3652
const filteredList: string[] = [];

apps/infra/src/components/organism/ConfigureAllHosts/ConfigureAllHosts.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const ConfigureAllHosts = () => {
5858
const {
5959
commonHostData,
6060
createCluster,
61+
kubernetesVersion,
6162
formStatus: { showAdvancedOptions },
6263
} = useAppSelector(selectHostProvisionState);
6364

@@ -118,6 +119,7 @@ const ConfigureAllHosts = () => {
118119
<Flex cols={[4]} gap="2">
119120
{ClusterTemplatesDropdownRemote && (
120121
<ClusterTemplatesDropdownRemote
122+
kubernetesVersion={kubernetesVersion}
121123
clusterTemplateName={commonHostData.clusterTemplateName}
122124
onSelectionChange={(value: string) => {
123125
dispatch(setCommonClusterTemplateName(value));

apps/infra/src/store/provisionHost.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface HostProvisionState {
5050
autoProvision: boolean;
5151
createCluster: boolean;
5252
hasHostDefinitionError: boolean;
53+
kubernetesVersion: string;
5354
}
5455

5556
export const initialState: HostProvisionState = {
@@ -69,6 +70,7 @@ export const initialState: HostProvisionState = {
6970
autoProvision: true,
7071
createCluster: true,
7172
hasHostDefinitionError: false,
73+
kubernetesVersion: "",
7274
};
7375

7476
export type SiteReadWithPath = infra.SiteResourceRead & {
@@ -251,11 +253,24 @@ export const provisionHost = createSlice({
251253
state,
252254
action: PayloadAction<infra.OperatingSystemResourceRead>,
253255
) {
256+
const changed = state.commonHostData?.os?.name !== action.payload.name;
254257
state.commonHostData.os = action.payload;
258+
state.kubernetesVersion =
259+
(
260+
JSON.parse(action.payload.metadata ?? "{}") as {
261+
"kubernetes-version"?: string;
262+
}
263+
)["kubernetes-version"] ?? "";
264+
265+
if (changed) {
266+
delete state.commonHostData["clusterTemplateName"];
267+
delete state.commonHostData["clusterTemplateVersion"];
268+
}
255269
provisionHost.caseReducers.validateStep(state);
256270
},
257271
setCommonClusterTemplateName(state, action: PayloadAction<string>) {
258272
state.commonHostData.clusterTemplateName = action.payload;
273+
delete state.commonHostData["clusterTemplateVersion"];
259274
provisionHost.caseReducers.validateStep(state);
260275
},
261276
setCommonClusterTemplateVersion(state, action: PayloadAction<string>) {

library/utils/mocks/cluster-orch/clusterTemplates.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const clusterTemplateOneV1: cm.TemplateInfo = {
3939
description: "example description 1",
4040
controlplaneprovidertype: "rke2",
4141
infraprovidertype: "docker",
42-
kubernetesVersion: "v1.35.36",
42+
kubernetesVersion: "v1.30.0",
4343
clusterconfiguration: {
4444
rke2: {
4545
apiVersion: "provisioning.cattle.io/v1",
@@ -177,7 +177,7 @@ export const clusterTemplateOneV2: cm.TemplateInfo = {
177177
description: "Lorem ipsum dolor sit amet",
178178
controlplaneprovidertype: "rke2",
179179
infraprovidertype: "docker",
180-
kubernetesVersion: "v1.35.36",
180+
kubernetesVersion: "v1.30.0",
181181
clusterconfiguration: {
182182
rke2: {
183183
status: "disabled",
@@ -212,7 +212,7 @@ const clusterTemplateOneV3: cm.TemplateInfo = {
212212
version: clusterTemplateOneV3Info.version,
213213
controlplaneprovidertype: "rke2",
214214
infraprovidertype: "docker",
215-
kubernetesVersion: "v1.35.36",
215+
kubernetesVersion: "v1.30.0",
216216
clusterconfiguration: {
217217
rke2: {
218218
status: "active",
@@ -248,7 +248,7 @@ export const clusterTemplateTwoV1: cm.TemplateInfo = {
248248
description: "Vivamus aliquam dolor nec aliquet",
249249
controlplaneprovidertype: "rke2",
250250
infraprovidertype: "docker",
251-
kubernetesVersion: "v1.35.36",
251+
kubernetesVersion: "v1.30.0",
252252
clusterconfiguration: {
253253
rke2: {
254254
status: "active",
@@ -283,7 +283,7 @@ const clusterTemplateTwoV2: cm.TemplateInfo = {
283283
version: clusterTemplateTwoV2Info.version,
284284
controlplaneprovidertype: "rke2",
285285
infraprovidertype: "docker",
286-
kubernetesVersion: "v1.35.36",
286+
kubernetesVersion: "v1.30.0",
287287
clusterconfiguration: {
288288
rke2: {
289289
status: "active",
@@ -319,7 +319,7 @@ const clusterTemplateThreeV1: cm.TemplateInfo = {
319319
description: "Etiam tristique sollicitudin rutrum",
320320
controlplaneprovidertype: "rke2",
321321
infraprovidertype: "docker",
322-
kubernetesVersion: "v1.35.36",
322+
kubernetesVersion: "v1.30.0",
323323
clusterconfiguration: {
324324
rke2: {
325325
status: "active",
@@ -354,7 +354,7 @@ const clusterTemplateFourV1: cm.TemplateInfo = {
354354
version: clusterTemplateFourV1Info.version,
355355
controlplaneprovidertype: "rke2",
356356
infraprovidertype: "docker",
357-
kubernetesVersion: "v1.35.36",
357+
kubernetesVersion: "v1.32.0",
358358
clusterconfiguration: {
359359
rke2: undefined,
360360
},
@@ -364,7 +364,7 @@ const clusterTemplateFourV2: cm.TemplateInfo = {
364364
version: clusterTemplateFourV2Info.version,
365365
controlplaneprovidertype: "rke2",
366366
infraprovidertype: "docker",
367-
kubernetesVersion: "v1.35.36",
367+
kubernetesVersion: "v1.32.0",
368368
clusterconfiguration: {
369369
rke2: undefined,
370370
},
@@ -376,7 +376,7 @@ const clusterTemplateFiveV1: cm.TemplateInfo = {
376376
description: "Aenean rutrum condimentum purus",
377377
controlplaneprovidertype: "rke2",
378378
infraprovidertype: "docker",
379-
kubernetesVersion: "v1.35.36",
379+
kubernetesVersion: "v1.32.0",
380380
clusterconfiguration: {
381381
rke2: undefined,
382382
},
@@ -386,7 +386,7 @@ const clusterTemplateFiveV2: cm.TemplateInfo = {
386386
version: clusterTemplateFiveV2Info.version,
387387
controlplaneprovidertype: "rke2",
388388
infraprovidertype: "docker",
389-
kubernetesVersion: "v1.35.36",
389+
kubernetesVersion: "v1.32.0",
390390
clusterconfiguration: {
391391
rke2: undefined,
392392
},
@@ -397,7 +397,7 @@ const clusterTemplateFiveV3: cm.TemplateInfo = {
397397
description: "Praesent ligula felis",
398398
controlplaneprovidertype: "rke2",
399399
infraprovidertype: "docker",
400-
kubernetesVersion: "v1.35.36",
400+
kubernetesVersion: "v1.32.0",
401401
clusterconfiguration: {
402402
rke2: undefined,
403403
},
@@ -407,7 +407,7 @@ const clusterTemplateFiveV4: cm.TemplateInfo = {
407407
version: clusterTemplateFiveV4Info.version,
408408
controlplaneprovidertype: "rke2",
409409
infraprovidertype: "docker",
410-
kubernetesVersion: "v1.35.36",
410+
kubernetesVersion: "v1.32.0",
411411
clusterconfiguration: {
412412
rke2: undefined,
413413
},

library/utils/mocks/cluster-orch/mocks.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,17 @@ const projectName = SharedStorage.project?.name;
1414

1515
const cts = new ClusterTemplatesStore();
1616
export const clusterTemplateHandlers = [
17-
rest.get(`/v2/projects/${projectName}/templates`, (_, res, ctx) => {
18-
const templates = cts.list();
17+
rest.get(`/v2/projects/${projectName}/templates`, (req, res, ctx) => {
18+
const filter = req.url.searchParams.get("filter");
19+
let templates = cts.list();
20+
21+
if (filter) {
22+
const kubeVersion = filter.split("=").pop();
23+
templates = templates.filter((template) => {
24+
return template.kubernetesVersion === kubeVersion;
25+
});
26+
}
27+
1928
return res(
2029
ctx.status(200),
2130
ctx.json<cm.GetV2ProjectsByProjectNameTemplatesApiResponse>({

library/utils/mocks/infra/store/osresources.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const createOsResource = (
1717
profileName: string,
1818
securityFeature: infra.InstanceResourceRead["securityFeature"],
1919
osType: infra.OperatingSystemResourceRead["osType"],
20+
metadata: string,
2021
): infra.OperatingSystemResourceRead => {
2122
return {
2223
resourceId: id,
@@ -33,6 +34,7 @@ export const createOsResource = (
3334
'{"Repo":[{"Name":"libpcre2-32-0","Version":"10.42-3","Architecture":"x86_64","Distribution":"tmv3","URL":"https://www.pcre.org/","License":"BSD","Modified":"No"},{"Name":"libpcre2-16-0","Version":"10.42-3","Architecture":"x86_64","Distribution":"tmv3","URL":"https://www.pcre.org/","License":"BSD","Modified":"No"}]}',
3435
existingCves:
3536
'[{"cve_id":"CVE-2016-5180","priority":"critical","affected_packages":["fluent-bit-3.1.9-11.emt3.x86_64"]},{"cve_id":"CVE-2021-3672","priority":"medium","affected_packages":["fluent-bit-3.1.9-11.emt3.x86_64"]},{"cve_id":"CVE-2020-8277","priority":"high","affected_packages":["fluent-bit-3.1.9-11.emt3.x86_64"]},{"cve_id":"CVE-2022-4904","priority":"high","affected_packages":["fluent-bit-3.1.9-11.emt3.x86_64"]}]',
37+
metadata,
3638
};
3739
};
3840

@@ -46,6 +48,7 @@ export const osTb = createOsResource(
4648
"TbOS",
4749
"SECURITY_FEATURE_SECURE_BOOT_AND_FULL_DISK_ENCRYPTION",
4850
"OS_TYPE_IMMUTABLE",
51+
'{"kubernetes-version":"v1.28.0"}',
4952
);
5053

5154
export const osTbUpdate = createOsResource(
@@ -58,6 +61,7 @@ export const osTbUpdate = createOsResource(
5861
"TbOS",
5962
"SECURITY_FEATURE_SECURE_BOOT_AND_FULL_DISK_ENCRYPTION",
6063
"OS_TYPE_IMMUTABLE",
64+
'{"kubernetes-version":"v1.28.0"}',
6165
);
6266

6367
export const osUbuntu = createOsResource(
@@ -70,6 +74,7 @@ export const osUbuntu = createOsResource(
7074
"Ubuntu-x86_profile",
7175
"SECURITY_FEATURE_SECURE_BOOT_AND_FULL_DISK_ENCRYPTION",
7276
"OS_TYPE_IMMUTABLE",
77+
'{"kubernetes-version":"v1.30.0"}',
7378
);
7479

7580
export const osRedHat = createOsResource(
@@ -82,6 +87,7 @@ export const osRedHat = createOsResource(
8287
"Redhat-x86_profile",
8388
"SECURITY_FEATURE_NONE",
8489
"OS_TYPE_IMMUTABLE",
90+
'{"kubernetes-version":"v1.32.0"}',
8591
);
8692

8793
export class OsResourceStore extends BaseStore<

0 commit comments

Comments
 (0)