|
316 | 316 | </a-select-option> |
317 | 317 | </a-select> |
318 | 318 | </a-form-item> |
319 | | - <a-form-item v-if="form.advancedmode && form?.etcdnodes > 0" name="etcdtemplateid" ref="etcdtemplateid"> |
| 319 | + <a-form-item v-if="form.advancedmode && form.etcdnodes && form.etcdnodes > 0" name="etcdtemplateid" ref="etcdtemplateid"> |
320 | 320 | <template #label> |
321 | 321 | <tooltip-label :title="$t('label.cks.cluster.etcd.nodes.templateid')" :tooltip="$t('label.cks.cluster.etcd.nodes.templateid')"/> |
322 | 322 | </template> |
|
335 | 335 | </a-select-option> |
336 | 336 | </a-select> |
337 | 337 | </a-form-item> |
| 338 | + <a-form-item v-if="form.advancedmode" name="controlaffinitygroupids" ref="controlaffinitygroupids"> |
| 339 | + <template #label> |
| 340 | + <tooltip-label :title="$t('label.cks.cluster.control.nodes.affinitygroupid')" :tooltip="$t('label.cks.cluster.control.nodes.affinitygroupid')"/> |
| 341 | + </template> |
| 342 | + <a-select |
| 343 | + v-model:value="controlAffinityGroups" |
| 344 | + mode="multiple" |
| 345 | + showSearch |
| 346 | + optionFilterProp="label" |
| 347 | + :filterOption="(input, option) => option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0" |
| 348 | + :loading="affinityGroupLoading" |
| 349 | + :placeholder="$t('label.cks.cluster.control.nodes.affinitygroupid')"> |
| 350 | + <a-select-option v-for="opt in affinityGroups" :key="opt.id" :label="opt.name"> |
| 351 | + {{ opt.name }} |
| 352 | + </a-select-option> |
| 353 | + </a-select> |
| 354 | + </a-form-item> |
| 355 | + <a-form-item v-if="form.advancedmode" name="workeraffinitygroupids" ref="workeraffinitygroupids"> |
| 356 | + <template #label> |
| 357 | + <tooltip-label :title="$t('label.cks.cluster.worker.nodes.affinitygroupid')" :tooltip="$t('label.cks.cluster.worker.nodes.affinitygroupid')"/> |
| 358 | + </template> |
| 359 | + <a-select |
| 360 | + v-model:value="workerAffinityGroups" |
| 361 | + mode="multiple" |
| 362 | + showSearch |
| 363 | + optionFilterProp="label" |
| 364 | + :filterOption="(input, option) => option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0" |
| 365 | + :loading="affinityGroupLoading" |
| 366 | + :placeholder="$t('label.cks.cluster.worker.nodes.affinitygroupid')"> |
| 367 | + <a-select-option v-for="opt in affinityGroups" :key="opt.id" :label="opt.name"> |
| 368 | + {{ opt.name }} |
| 369 | + </a-select-option> |
| 370 | + </a-select> |
| 371 | + </a-form-item> |
| 372 | + <a-form-item v-if="form.advancedmode && form.etcdnodes && form.etcdnodes > 0" name="etcdaffinitygroupids" ref="etcdaffinitygroupids"> |
| 373 | + <template #label> |
| 374 | + <tooltip-label :title="$t('label.cks.cluster.etcd.nodes.affinitygroupid')" :tooltip="$t('label.cks.cluster.etcd.nodes.affinitygroupid')"/> |
| 375 | + </template> |
| 376 | + <a-select |
| 377 | + v-model:value="etcdAffinityGroups" |
| 378 | + mode="multiple" |
| 379 | + showSearch |
| 380 | + optionFilterProp="label" |
| 381 | + :filterOption="(input, option) => option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0" |
| 382 | + :loading="affinityGroupLoading" |
| 383 | + :placeholder="$t('label.cks.cluster.etcd.nodes.affinitygroupid')"> |
| 384 | + <a-select-option v-for="opt in affinityGroups" :key="opt.id" :label="opt.name"> |
| 385 | + {{ opt.name }} |
| 386 | + </a-select-option> |
| 387 | + </a-select> |
| 388 | + </a-form-item> |
338 | 389 | <a-form-item v-if="form.advancedmode && isASNumberRequired() && !form.networkid" name="asnumber" ref="asnumber"> |
339 | 390 | <template #label> |
340 | 391 | <tooltip-label :title="$t('label.asnumber')" :tooltip="apiParams.asnumber.description"/> |
@@ -490,7 +541,12 @@ export default { |
490 | 541 | cksNetworkOffering: null, |
491 | 542 | asNumbersZone: [], |
492 | 543 | asNumberLoading: false, |
493 | | - selectedAsNumber: 0 |
| 544 | + selectedAsNumber: 0, |
| 545 | + affinityGroups: [], |
| 546 | + affinityGroupLoading: false, |
| 547 | + controlAffinityGroups: [], |
| 548 | + workerAffinityGroups: [], |
| 549 | + etcdAffinityGroups: [] |
494 | 550 | } |
495 | 551 | }, |
496 | 552 | beforeCreate () { |
@@ -560,6 +616,22 @@ export default { |
560 | 616 | this.fetchCKSNetworkOfferingName() |
561 | 617 | this.fetchCniConfigurations() |
562 | 618 | }, |
| 619 | + fetchAffinityGroups () { |
| 620 | + this.affinityGroups = [] |
| 621 | + const params = {} |
| 622 | + if (!this.isObjectEmpty(this.selectedZone)) { |
| 623 | + params.zoneid = this.selectedZone.id |
| 624 | + } |
| 625 | + this.affinityGroupLoading = true |
| 626 | + getAPI('listAffinityGroups', params).then(json => { |
| 627 | + const groups = json.listaffinitygroupsresponse.affinitygroup |
| 628 | + if (this.arrayHasItems(groups)) { |
| 629 | + this.affinityGroups = groups |
| 630 | + } |
| 631 | + }).finally(() => { |
| 632 | + this.affinityGroupLoading = false |
| 633 | + }) |
| 634 | + }, |
563 | 635 | isValidValueForKey (obj, key) { |
564 | 636 | return key in obj && obj[key] != null |
565 | 637 | }, |
@@ -600,6 +672,7 @@ export default { |
600 | 672 | this.fetchNetworkData() |
601 | 673 | this.fetchZoneHypervisors() |
602 | 674 | this.fetchZoneASNumbers() |
| 675 | + this.fetchAffinityGroups() |
603 | 676 | }, |
604 | 677 | handleASNumberChange (selectedIndex) { |
605 | 678 | this.selectedAsNumber = this.asNumbersZone[selectedIndex].asnumber |
@@ -881,6 +954,21 @@ export default { |
881 | 954 | advancedTemplates++ |
882 | 955 | } |
883 | 956 | } |
| 957 | + if (values.advancedmode) { |
| 958 | + let affinityIndex = 0 |
| 959 | + const addAffinityGroups = (nodeType, groups) => { |
| 960 | + if (groups && groups.length > 0) { |
| 961 | + params[`nodeaffinitygroups[${affinityIndex}].node`] = nodeType |
| 962 | + params[`nodeaffinitygroups[${affinityIndex}].affinitygroup`] = groups.join(',') |
| 963 | + affinityIndex++ |
| 964 | + } |
| 965 | + } |
| 966 | + addAffinityGroups('control', this.controlAffinityGroups) |
| 967 | + addAffinityGroups('worker', this.workerAffinityGroups) |
| 968 | + if (values.etcdnodes > 0) { |
| 969 | + addAffinityGroups('etcd', this.etcdAffinityGroups) |
| 970 | + } |
| 971 | + } |
884 | 972 | if (this.isValidValueForKey(values, 'noderootdisksize') && values.noderootdisksize > 0) { |
885 | 973 | params.noderootdisksize = values.noderootdisksize |
886 | 974 | } |
|
0 commit comments