Deprecate ember-based UI Plugins

This commit is contained in:
Neil MacDougall 2025-05-08 10:10:28 +01:00
parent d027330759
commit 1ba8f2973f
6 changed files with 193 additions and 160 deletions

View File

@ -7,7 +7,7 @@
<BannerMessage
@color="bg-warning"
@icon="icon-alert"
@message={{t "clustersPage.rke1DeprecationMessage" htmlSafe=true}}
@message={{t "clustersPage.emberDeprecationMessage" htmlSafe=true}}
/>
<CruCluster

View File

@ -11,6 +11,7 @@ import { get, set } from '@ember/object';
export default Route.extend({
globalStore: service(),
intl: service(),
model() {
const gs = this.globalStore;
@ -33,7 +34,7 @@ export default Route.extend({
afterModel(model) {
// load the css/js url here, if the url loads fail we should error the driver out
// show the driver in the ui, greyed out, and possibly add error text "can not load comonent from url [put url here]"
// show the driver in the ui, greyed out, and possibly add error text "can not load component from url [put url here]"
let { kontainerDrivers } = model;
let externalDrivers = kontainerDrivers.filter( (d) => d.uiUrl !== '' && d.state === 'active');
let promises = {};
@ -59,6 +60,12 @@ export default Route.extend({
let match = kontainerDrivers.findBy('id', tmp);
console.log('Error Loading External Component for: ', match);
// Try and find by name if we could not find by id
if (!match) {
match = kontainerDrivers.findBy('name', tmp);
}
if (match && get(match, 'scriptError') !== true) {
set(match, 'scriptError', get(this, 'intl').t('clusterNew.externalError'));
}

View File

@ -23,7 +23,7 @@
<BannerMessage
@color="bg-warning"
@icon="icon-alert"
@message={{t "clustersPage.rke1DeprecationMessage" htmlSafe=true}}
@message={{t "clustersPage.emberDeprecationMessage" htmlSafe=true}}
/>
{{outlet}}
</section>

View File

@ -468,6 +468,24 @@ export default Component.extend(ViewNewEdit, ChildHook, {
return true;
}),
hasDriverComponentError: computed('showDriverComponent', function() {
const {
provider,
kontainerDrivers,
} = this;
if (kontainerDrivers?.custom) {
const driver = kontainerDrivers.custom.find((d) => d.id === provider || d.name === provider);
if (driver) {
// Return whether the driver has a script error
return !!driver.scriptError;
}
}
return false;
}),
doSave(opt) {
opt = opt || {};
opt.qp = { '_replace': 'true' };

View File

@ -1,177 +1,184 @@
{{#if (eq step 1)}}
<form onsubmit={{action "clickNext"}}>
{{form-name-description
model=model.cluster
editing=(not isEksClusterPending)
nameRequired=true
rowClass="row mb-20"
colClass="col span-12 mb-0"
nameLabel="clusterNew.name.label"
namePlaceholder="clusterNew.name.placeholder"
descriptionPlaceholder="clusterNew.description.placeholder"
}}
</form>
{{/if}}
{{#if (eq driverInfo.name "amazoneks")}}
{{#if (and showDriverComponent hasDriverComponentError) }}
{{banner-message
color="bg-warning"
message=(t "clusterNew.amazoneks.ingressWarning")
color="bg-error"
message=(t "clusterNew.driverError")
}}
{{else if (eq driverInfo.name "azureaks")}}
{{banner-message
color="bg-warning"
message=(t "clusterNew.azureaks.ingressWarning")
}}
{{/if}}
{{else}}
{{#if (eq step 1)}}
<form onsubmit={{action "clickNext"}}>
{{form-name-description
model=model.cluster
editing=(not isEksClusterPending)
nameRequired=true
rowClass="row mb-20"
colClass="col span-12 mb-0"
nameLabel="clusterNew.name.label"
namePlaceholder="clusterNew.name.placeholder"
descriptionPlaceholder="clusterNew.description.placeholder"
}}
</form>
{{/if}}
{{#if (and driverInfo.nodePool (not isCustom))}}
<section class="mb-40 mt-40">
<CruNodePools
@mode={{mode}}
@cluster={{cluster}}
@driver={{driverInfo.nodeWhich}}
@nodeTemplates={{model.nodeTemplates}}
@registerHook={{action "registerHook"}}
@setNodePoolErrors={{action "setNodePoolErrors"}}
@model={{model}}
/>
</section>
{{/if}}
{{#if (eq step 1)}}
{{#accordion-list showExpandAll=false as |al expandFn|}}
{{#accordion-list-item
title=(t "clusterNew.members.label")
detail=(t "clusterNew.members.detail")
expandAll=al.expandAll
everExpanded=true
expanded=expanded
expand=(action expandFn)
componentId="cru-cluster__members"
{{#if (eq driverInfo.name "amazoneks")}}
{{banner-message
color="bg-warning"
message=(t "clusterNew.amazoneks.ingressWarning")
}}
{{#if model.cluster.internal}}
<BannerMessage
@icon="icon-alert"
@color="bg-error mt-0 mb-10"
@message={{t "clusterPage.internal" appName=settings.appName htmlSafe=true}}
/>
{{/if}}
{{else if (eq driverInfo.name "azureaks")}}
{{banner-message
color="bg-warning"
message=(t "clusterNew.azureaks.ingressWarning")
}}
{{/if}}
{{#if isEdit}}
<BannerMessage
@icon="icon-info"
@color="bg-info mt-0 mb-10"
@message={{t "clusterPage.removeMemberNote"}}
/>
{{/if}}
<FormMembers
@creator={{model.me}}
@editing={{and (and notView) (not isEksClusterPending)}}
@expanded={{expanded}}
@isNew={{newCluster}}
@memberConfig={{memberConfig}}
@errors={{memberErrors}}
@primaryResource={{cluster}}
{{#if (and driverInfo.nodePool (not isCustom))}}
<section class="mb-40 mt-40">
<CruNodePools
@mode={{mode}}
@cluster={{cluster}}
@driver={{driverInfo.nodeWhich}}
@nodeTemplates={{model.nodeTemplates}}
@registerHook={{action "registerHook"}}
@roles={{model.roleTemplates}}
@type="cluster"
@users={{model.users}}
data-testid="cru-cluster__members__form"
@setNodePoolErrors={{action "setNodePoolErrors"}}
@model={{model}}
/>
{{/accordion-list-item}}
</section>
{{/if}}
{{form-labels-annotations
classNames="accordion-wrapper"
detailKey="clusterPage.annotationsDetail"
expandAll=al.expandAll
expandFn=expandFn
initialLabels=model.cluster.labels
model=model.cluster
readonlyLabels=readonlyLabels
editing=(and (and notView (not isRke2Cluster)) (not isEksClusterPending))
}}
{{/accordion-list}}
{{#if isImportedOther}}
{{#if (eq step 1)}}
{{#accordion-list showExpandAll=false as |al expandFn|}}
{{#accordion-list-item
title=(t "clusterNew.rke.advanced.label")
detail=(t "clusterNew.rke.advanced.detail")
title=(t "clusterNew.members.label")
detail=(t "clusterNew.members.detail")
expandAll=al.expandAll
everExpanded=true
expanded=expanded
expand=(action expandFn)
componentId="cru-cluster__members"
}}
<div class="row">
<div class="col span-6">
<label class="acc-label">
{{t "generic.networking"}}
</label>
<div class="checkbox">
<label>
{{input type="checkbox" checked=cluster.enableNetworkPolicy}}
{{t "clusterNew.rke.networkPolicy.label"}}
{{#if model.cluster.internal}}
<BannerMessage
@icon="icon-alert"
@color="bg-error mt-0 mb-10"
@message={{t "clusterPage.internal" appName=settings.appName htmlSafe=true}}
/>
{{/if}}
{{#if isEdit}}
<BannerMessage
@icon="icon-info"
@color="bg-info mt-0 mb-10"
@message={{t "clusterPage.removeMemberNote"}}
/>
{{/if}}
<FormMembers
@creator={{model.me}}
@editing={{and (and notView) (not isEksClusterPending)}}
@expanded={{expanded}}
@isNew={{newCluster}}
@memberConfig={{memberConfig}}
@errors={{memberErrors}}
@primaryResource={{cluster}}
@registerHook={{action "registerHook"}}
@roles={{model.roleTemplates}}
@type="cluster"
@users={{model.users}}
data-testid="cru-cluster__members__form"
/>
{{/accordion-list-item}}
{{form-labels-annotations
classNames="accordion-wrapper"
detailKey="clusterPage.annotationsDetail"
expandAll=al.expandAll
expandFn=expandFn
initialLabels=model.cluster.labels
model=model.cluster
readonlyLabels=readonlyLabels
editing=(and (and notView (not isRke2Cluster)) (not isEksClusterPending))
}}
{{/accordion-list}}
{{#if isImportedOther}}
{{#accordion-list showExpandAll=false as |al expandFn|}}
{{#accordion-list-item
title=(t "clusterNew.rke.advanced.label")
detail=(t "clusterNew.rke.advanced.detail")
expandAll=al.expandAll
everExpanded=true
expand=(action expandFn)
}}
<div class="row">
<div class="col span-6">
<label class="acc-label">
{{t "generic.networking"}}
</label>
<div class="checkbox">
<label>
{{input type="checkbox" checked=cluster.enableNetworkPolicy}}
{{t "clusterNew.rke.networkPolicy.label"}}
</label>
</div>
</div>
<div class="col span-6">
{{#if cluster.enableNetworkPolicy}}
<BannerMessage
@icon="icon-alert"
@color="bg-warning mt-0"
@message={{t "clusterNew.import.clusterOptions.warning"}}
/>
{{/if}}
</div>
</div>
<div class="col span-6">
{{#if cluster.enableNetworkPolicy}}
<BannerMessage
@icon="icon-alert"
@color="bg-warning mt-0"
@message={{t "clusterNew.import.clusterOptions.warning"}}
<div class="row">
<div class="col span-6">
<label class="acc-label">
{{t "clusterNew.rke.agentEnvVars.label"}}
</label>
<FormAgentEnvVar
@editable={{notView}}
@value={{mut agentEnvVars}}
/>
{{/if}}
</div>
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">
{{t "clusterNew.rke.agentEnvVars.label"}}
</label>
<FormAgentEnvVar
@editable={{notView}}
@value={{mut agentEnvVars}}
/>
</div>
</div>
{{/accordion-list-item}}
{{/accordion-list}}
{{/accordion-list-item}}
{{/accordion-list}}
{{/if}}
{{/if}}
{{#if showDriverComponent}}
{{component driverInfo.driverComponent
applyClusterTemplate=applyClusterTemplate
clusterTemplateQuestions=model.clusterTemplateRevision.questions
clusterTemplateRevisionId=clusterTemplateRevisionId
clusterErrors=errors
mode=mode
model=model
nodePoolErrors=nodePoolErrors
nodeWhich=driverInfo.nodeWhich
originalCluster=originalCluster
otherErrors=memberErrors
isEditCluster=isEdit
isPostSave=isPostSave
save=(action "save")
close=(action "close")
registerHook=(action "registerHook")
updateFromYaml=(action "updateFromYaml")
}}
{{/if}}
{{!-- otherwise save is handled by the cluster driver component --}}
{{#if (and isEdit (not provider))}}
{{top-errors errors=errors}}
{{save-cancel
editing=isEdit
save=(action "save" )
cancel=(action "close")
}}
{{else if (not showDriverComponent)}}
{{!-- something is super wrong because your not import or custom or any driver in general so we're not letting you save --}}
{{save-cancel
saveDisabled=true
cancel=(action "close")
}}
{{/if}}
{{/if}}
{{#if showDriverComponent}}
{{component driverInfo.driverComponent
applyClusterTemplate=applyClusterTemplate
clusterTemplateQuestions=model.clusterTemplateRevision.questions
clusterTemplateRevisionId=clusterTemplateRevisionId
clusterErrors=errors
mode=mode
model=model
nodePoolErrors=nodePoolErrors
nodeWhich=driverInfo.nodeWhich
originalCluster=originalCluster
otherErrors=memberErrors
isEditCluster=isEdit
isPostSave=isPostSave
save=(action "save")
close=(action "close")
registerHook=(action "registerHook")
updateFromYaml=(action "updateFromYaml")
}}
{{/if}}
{{!-- otherwise save is handled by the cluster driver component --}}
{{#if (and isEdit (not provider))}}
{{top-errors errors=errors}}
{{save-cancel
editing=isEdit
save=(action "save" )
cancel=(action "close")
}}
{{else if (not showDriverComponent)}}
{{!-- something is super wrong because your not import or custom or any driver in general so we're not letting you save --}}
{{save-cancel
saveDisabled=true
cancel=(action "close")
}}
{{/if}}

View File

@ -1426,7 +1426,7 @@ clustersPage:
label: "Add Cluster - Select Cluster Type"
template:
label: "Add Cluster - Select RKE Template"
rke1DeprecationMessage: 'Rancher Kubernetes Engine (RKE / RKE1) will reach end of life on July 31, 2025. Rancher 2.12.0 and later will no longer support provisioning or managing downstream RKE1 clusters. We recommend replatforming RKE1 clusters to RKE2 to ensure continued support and security updates. Learn more about the transition <a href="https://www.suse.com/support/kb/doc/?id=000021518" target="_blank" rel="noopener noreferrer nofollow">here</a>.'
emberDeprecationMessage: 'Support for UI Plugins (based on Ember) for cluster and node drivers was deprecated in Rancher 2.11.0 and will be removed in a future release. These need to be migrated to the new <a href="https://extensions.rancher.io" target="_blank" rel="noopener noreferrer nofollow">UI Extensions framework</a>.'
clusterRibbonNav:
title: Recent Clusters
@ -3831,6 +3831,7 @@ clusterNew:
noCloud: There are no cluster drivers enabled.
noInfra: There are no node drivers enabled.
externalError: Component could not be loaded. Check URL.
driverError: An error occurred loading the UI for this custom driver - please check driver configuration
googlegke:
access: