mirror of https://github.com/rancher/ui.git
Merge pull request #4467 from codyrancher/agent-env-vars
Adding the agent env vars to rke drivers.
This commit is contained in:
commit
17c508d6b0
|
|
@ -9,6 +9,7 @@ import { scheduleOnce } from '@ember/runloop';
|
||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
access: service(),
|
access: service(),
|
||||||
globalStore: service(),
|
globalStore: service(),
|
||||||
|
clusterStore: service(),
|
||||||
releaseVersions: service(),
|
releaseVersions: service(),
|
||||||
clusterTemplateService: service('clusterTemplates'),
|
clusterTemplateService: service('clusterTemplates'),
|
||||||
roleTemplateService: service('roleTemplate'),
|
roleTemplateService: service('roleTemplate'),
|
||||||
|
|
@ -21,11 +22,13 @@ export default Route.extend({
|
||||||
originalCluster: cluster,
|
originalCluster: cluster,
|
||||||
cluster: cluster.clone(),
|
cluster: cluster.clone(),
|
||||||
cloudCredentials: globalStore.findAll('cloudcredential'),
|
cloudCredentials: globalStore.findAll('cloudcredential'),
|
||||||
|
configMaps: this.configMaps(),
|
||||||
kontainerDrivers: globalStore.findAll('kontainerDriver'),
|
kontainerDrivers: globalStore.findAll('kontainerDriver'),
|
||||||
nodeTemplates: globalStore.findAll('nodeTemplate'),
|
nodeTemplates: globalStore.findAll('nodeTemplate'),
|
||||||
nodeDrivers: globalStore.findAll('nodeDriver'),
|
nodeDrivers: globalStore.findAll('nodeDriver'),
|
||||||
psps: globalStore.findAll('podSecurityPolicyTemplate'),
|
psps: globalStore.findAll('podSecurityPolicyTemplate'),
|
||||||
roleTemplates: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'),
|
roleTemplates: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'),
|
||||||
|
secrets: this.secrets(),
|
||||||
users: globalStore.findAll('user'),
|
users: globalStore.findAll('user'),
|
||||||
clusterRoleTemplateBinding: globalStore.findAll('clusterRoleTemplateBinding'),
|
clusterRoleTemplateBinding: globalStore.findAll('clusterRoleTemplateBinding'),
|
||||||
me: get(this, 'access.principal'),
|
me: get(this, 'access.principal'),
|
||||||
|
|
@ -157,6 +160,28 @@ export default Route.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async configMaps() {
|
||||||
|
const projects = await this.projects();
|
||||||
|
const configMapPromises = projects.map((project) => project.hasLink('configMaps') ? project.followLink('configMaps') : Promise.resolve([]));
|
||||||
|
const nestedConfigMaps = await Promise.all(configMapPromises) || [];
|
||||||
|
|
||||||
|
return nestedConfigMaps.flatMap((maps) => maps.content);
|
||||||
|
},
|
||||||
|
|
||||||
|
async secrets() {
|
||||||
|
const projects = await this.projects();
|
||||||
|
const secretPromises = projects.map((project) => project.hasLink('secrets') ? project.followLink('secrets') : Promise.resolve([]));
|
||||||
|
const nestedSecrets = await Promise.all(secretPromises) || [];
|
||||||
|
|
||||||
|
return nestedSecrets.flatMap((maps) => maps.content);
|
||||||
|
},
|
||||||
|
|
||||||
|
async projects() {
|
||||||
|
const cluster = this.modelFor('authenticated.cluster');
|
||||||
|
|
||||||
|
return (await cluster.followLink('projects')).content;
|
||||||
|
},
|
||||||
|
|
||||||
queryParams: {
|
queryParams: {
|
||||||
provider: { refreshModel: true },
|
provider: { refreshModel: true },
|
||||||
clusterTemplateRevision: { refreshModel: true }
|
clusterTemplateRevision: { refreshModel: true }
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,8 @@ export default InputTextFile.extend(ManageLabels, ClusterDriver, {
|
||||||
scheduledClusterScan: { enabled: false },
|
scheduledClusterScan: { enabled: false },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.initAgentEnvVars();
|
||||||
|
|
||||||
|
|
||||||
this.initNodeCounts();
|
this.initNodeCounts();
|
||||||
if (!this.useClusterTemplate && this.model.cluster.clusterTemplateRevisionId) {
|
if (!this.useClusterTemplate && this.model.cluster.clusterTemplateRevisionId) {
|
||||||
|
|
@ -875,6 +877,10 @@ export default InputTextFile.extend(ManageLabels, ClusterDriver, {
|
||||||
return options;
|
return options;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
showCustomConfigMapsAndSecrets: computed('model.provider', function() {
|
||||||
|
return get(this, 'model.provider') === 'custom';
|
||||||
|
}),
|
||||||
|
|
||||||
initScheduledClusterScan() {
|
initScheduledClusterScan() {
|
||||||
// We need to wait for benchmarks to be available before we can actually create the profiles
|
// We need to wait for benchmarks to be available before we can actually create the profiles
|
||||||
if (this.cisHelpers.cisScanBenchmarks.length === 0) {
|
if (this.cisHelpers.cisScanBenchmarks.length === 0) {
|
||||||
|
|
@ -1428,6 +1434,10 @@ export default InputTextFile.extend(ManageLabels, ClusterDriver, {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
initAgentEnvVars() {
|
||||||
|
setProperties(this.cluster, { agentEnvVars: get(this, 'cluster.agentEnvVars') || [] });
|
||||||
|
},
|
||||||
|
|
||||||
initPrivateRegistries() {
|
initPrivateRegistries() {
|
||||||
const config = get(this, 'config');
|
const config = get(this, 'config');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1253,6 +1253,21 @@
|
||||||
{{drain-node selection=upgradeStrategy.nodeDrainInput clusterTemplateCreate=clusterTemplateCreate editable=notView applyClusterTemplate=applyClusterTemplate clusterTemplateRevision=model.clusterTemplateRevision.clusterConfig questions=model.clusterTemplateRevision.questions addOverride=(action "addOverride")}}
|
{{drain-node selection=upgradeStrategy.nodeDrainInput clusterTemplateCreate=clusterTemplateCreate editable=notView applyClusterTemplate=applyClusterTemplate clusterTemplateRevision=model.clusterTemplateRevision.clusterConfig questions=model.clusterTemplateRevision.questions addOverride=(action "addOverride")}}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{#if (not clusterTemplateCreate)}}
|
||||||
|
<div class="row mt-10">
|
||||||
|
<label class="acc-label">
|
||||||
|
{{t "clusterNew.rke.agentEnvVars.label"}}
|
||||||
|
</label>
|
||||||
|
<FormAgentEnvVar
|
||||||
|
@editable={{notView}}
|
||||||
|
@value={{cluster.agentEnvVars}}
|
||||||
|
@showCustomConfigMaps={{showCustomConfigMapsAndSecrets}}
|
||||||
|
@showCustomSecrets={{showCustomConfigMapsAndSecrets}}
|
||||||
|
@configMaps={{model.configMaps}}
|
||||||
|
@secrets={{model.secrets}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
{{/accordion-list-item}}
|
{{/accordion-list-item}}
|
||||||
|
|
||||||
{{#accordion-list-item
|
{{#accordion-list-item
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,254 @@
|
||||||
|
import Component from '@ember/component';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
import layout from './template';
|
||||||
|
import { computed, get, set } from '@ember/object';
|
||||||
|
|
||||||
|
export default Component.extend({
|
||||||
|
globalStore: service(),
|
||||||
|
intl: service(),
|
||||||
|
layout,
|
||||||
|
|
||||||
|
model: null,
|
||||||
|
editable: true,
|
||||||
|
|
||||||
|
statusClass: null,
|
||||||
|
status: null,
|
||||||
|
editing: true,
|
||||||
|
showCustomConfigMaps: false,
|
||||||
|
showCustomSecrets: false,
|
||||||
|
typeChoices: [],
|
||||||
|
configMaps: [],
|
||||||
|
secrets: [],
|
||||||
|
value: [],
|
||||||
|
resourceKeyChoices: [],
|
||||||
|
init() {
|
||||||
|
this._super(...arguments);
|
||||||
|
|
||||||
|
const configMapsEnabled = this.showCustomConfigMaps || this.configMaps?.length > 0;
|
||||||
|
const secretsEnabled = this.showCustomSecrets || this.secrets?.length > 0;
|
||||||
|
|
||||||
|
const typeChoices = [
|
||||||
|
{
|
||||||
|
label: this.intl.t('formAgentEnvVar.typeChoices.keyValue'),
|
||||||
|
value: 'keyValue'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: this.intl.t('formAgentEnvVar.typeChoices.resource'),
|
||||||
|
value: 'resource'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: configMapsEnabled ? this.intl.t('formAgentEnvVar.typeChoices.configMap') : this.intl.t('formAgentEnvVar.typeChoices.configMapNone'),
|
||||||
|
disabled: !configMapsEnabled,
|
||||||
|
value: 'configMap'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: secretsEnabled ? this.intl.t('formAgentEnvVar.typeChoices.secret') : this.intl.t('formAgentEnvVar.typeChoices.secretNone'),
|
||||||
|
disabled: !secretsEnabled,
|
||||||
|
value: 'secret'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: this.intl.t('formAgentEnvVar.typeChoices.podField'),
|
||||||
|
value: 'podfield'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
this.set('typeChoices', typeChoices);
|
||||||
|
|
||||||
|
this.set('resourcekeyChoices', [
|
||||||
|
{
|
||||||
|
label: 'limits.cpu',
|
||||||
|
value: 'limits.cpu'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'limits.ephemeral-storage',
|
||||||
|
value: 'limits.ephemeral-storage'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'limits.memory',
|
||||||
|
value: 'limits.memory'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'requests.cpu',
|
||||||
|
value: 'requests.cpu'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'requests.ephemeral-storage',
|
||||||
|
value: 'requests.ephemeral-storage'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'requests.memory',
|
||||||
|
value: 'requests.memory'
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
this.set('value', this.value || []);
|
||||||
|
|
||||||
|
|
||||||
|
this.value.forEach((envVar) => this.inferTypeAndSetHelpers(envVar));
|
||||||
|
},
|
||||||
|
|
||||||
|
actions: {
|
||||||
|
add() {
|
||||||
|
this.value.pushObject(this.createEnvVar('keyValue'));
|
||||||
|
},
|
||||||
|
updateType(index, event) {
|
||||||
|
const type = event.target.value;
|
||||||
|
|
||||||
|
this.value.replace(index, 1, [this.createEnvVar(type)]);
|
||||||
|
},
|
||||||
|
updateSecret(index, event) {
|
||||||
|
const secretName = event.target.value;
|
||||||
|
|
||||||
|
set(this.value[index], 'secretKeyChoices', this.keyChoices('secrets', secretName));
|
||||||
|
set(this.value[index], 'valueFrom.secretKeyRef.name', secretName);
|
||||||
|
set(this.value[index], 'valueFrom.secretKeyRef.key', this.value[index].secretKeyChoices[0].value);
|
||||||
|
},
|
||||||
|
updateConfigMap(index, event) {
|
||||||
|
const configMapName = event.target.value;
|
||||||
|
|
||||||
|
set(this.value[index], 'configMapKeyChoices', this.keyChoices('configMaps', configMapName));
|
||||||
|
set(this.value[index], 'valueFrom.configMapKeyRef.name', configMapName);
|
||||||
|
set(this.value[index], 'valueFrom.configMapKeyRef.key', this.value[index].configMapKeyChoices[0].value);
|
||||||
|
},
|
||||||
|
remove(index) {
|
||||||
|
this.value.removeAt(index, 1);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
configMapChoices: computed('configMaps', function() {
|
||||||
|
const configMaps = get(this, 'configMaps') || [];
|
||||||
|
const choices = configMaps.map((configMap) => ({
|
||||||
|
label: configMap.displayName,
|
||||||
|
value: configMap.name
|
||||||
|
}));
|
||||||
|
|
||||||
|
return choices
|
||||||
|
.uniqBy('label')
|
||||||
|
.sortBy('label');
|
||||||
|
}),
|
||||||
|
|
||||||
|
secretChoices: computed('secrets', function() {
|
||||||
|
const secrets = get(this, 'secrets') || [];
|
||||||
|
const choices = secrets.map((secret) => ({
|
||||||
|
label: secret.displayName,
|
||||||
|
value: secret.name
|
||||||
|
}));
|
||||||
|
|
||||||
|
return choices
|
||||||
|
.uniqBy('label')
|
||||||
|
.sortBy('label');
|
||||||
|
}),
|
||||||
|
|
||||||
|
inferTypeAndSetHelpers(envVar) {
|
||||||
|
if (this.isValueFromSet(envVar, 'resourceFieldRef', ['resource', 'containerName', 'divisor'])) {
|
||||||
|
return this.setEnvVarHelpers(envVar, 'resource');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isValueFromSet(envVar, 'configMapKeyRef', ['name', 'key'])) {
|
||||||
|
return this.setEnvVarHelpers(envVar, 'configMap');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isValueFromSet(envVar, 'secretKeyRef', ['name', 'key'])) {
|
||||||
|
return this.setEnvVarHelpers(envVar, 'secret');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isValueFromSet(envVar, 'fieldRef', ['fieldPath'])) {
|
||||||
|
return this.setEnvVarHelpers(envVar, 'podfield');
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.setEnvVarHelpers(envVar, 'keyValue');
|
||||||
|
},
|
||||||
|
|
||||||
|
isValueFromSet(envVar, refKey, fields) {
|
||||||
|
return fields.some((field) => get(envVar, `valueFrom.${ refKey }.${ field }`));
|
||||||
|
},
|
||||||
|
|
||||||
|
keyChoices(resource, selectedName) {
|
||||||
|
const resources = get(this, resource) || [];
|
||||||
|
const data = resources.find((r) => r.name === selectedName)?.data || {};
|
||||||
|
|
||||||
|
return Object.keys(data).map((key) => ({
|
||||||
|
label: key,
|
||||||
|
value: key
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
|
||||||
|
showContainer(type) {
|
||||||
|
return ['resource'].includes(type);
|
||||||
|
},
|
||||||
|
|
||||||
|
showKey(type) {
|
||||||
|
return ['resource', 'configMap', 'secret', 'podfield'].includes(type);
|
||||||
|
},
|
||||||
|
|
||||||
|
showValue(type) {
|
||||||
|
return ['keyValue'].includes(type);
|
||||||
|
},
|
||||||
|
|
||||||
|
showConfigMap(type) {
|
||||||
|
return ['configMap'].includes(type);
|
||||||
|
},
|
||||||
|
|
||||||
|
showSecret(type) {
|
||||||
|
return ['secret'].includes(type);
|
||||||
|
},
|
||||||
|
|
||||||
|
showPodField(type) {
|
||||||
|
return ['podfield'].includes(type);
|
||||||
|
},
|
||||||
|
createEnvVar(type) {
|
||||||
|
const envVar = {};
|
||||||
|
|
||||||
|
this.setEnvVarHelpers(envVar, type);
|
||||||
|
this.setDefaults(envVar, type);
|
||||||
|
|
||||||
|
return envVar;
|
||||||
|
},
|
||||||
|
|
||||||
|
setEnvVarHelpers(envVar, type) {
|
||||||
|
Object.assign(envVar, {
|
||||||
|
type,
|
||||||
|
showContainer: this.showContainer(type),
|
||||||
|
showKey: this.showKey(type),
|
||||||
|
showValue: this.showValue(type),
|
||||||
|
showConfigMap: this.showConfigMap(type),
|
||||||
|
showSecret: this.showSecret(type),
|
||||||
|
showPodField: this.showPodField(type),
|
||||||
|
secretKeyChoices: envVar.valueFrom?.secretKeyRef ? this.keyChoices('secrets', envVar.valueFrom.secretKeyRef.name) : null,
|
||||||
|
configMapKeyChoices: envVar.valueFrom?.configMapKeyRef ? this.keyChoices('configMaps', envVar.valueFrom.configMapKeyRef.name) : null,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
setDefaults(envVar, type) {
|
||||||
|
if (type !== 'keyValue') {
|
||||||
|
set(envVar, 'valueFrom', envVar.valueFrom || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'configMap') {
|
||||||
|
set(envVar, 'valueFrom.configMapKeyRef', envVar.valueFrom.configMapKeyRef || {});
|
||||||
|
const configMapName = this.configMapChoices[0]?.value;
|
||||||
|
|
||||||
|
set(envVar, 'configMapKeyChoices', this.keyChoices('configMaps', configMapName));
|
||||||
|
set(envVar, 'valueFrom.configMapKeyRef', envVar.valueFrom.configMapKeyRef || {
|
||||||
|
name: configMapName,
|
||||||
|
key: envVar.configMapKeyChoices[0]?.value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (type === 'resource') {
|
||||||
|
set(envVar, 'valueFrom.resourceFieldRef', envVar.valueFrom.resourceFieldRef || {});
|
||||||
|
}
|
||||||
|
if (type === 'podfield') {
|
||||||
|
set(envVar, 'valueFrom.fieldRef', envVar.valueFrom.fieldRef || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'secret') {
|
||||||
|
const secretName = this.secretChoices[0]?.value;
|
||||||
|
|
||||||
|
set(envVar, 'secretKeyChoices', this.keyChoices('secrets', secretName));
|
||||||
|
set(envVar, 'valueFrom.secretKeyRef', envVar.valueFrom.secretKeyRef || {
|
||||||
|
name: secretName,
|
||||||
|
key: envVar.secretKeyChoices[0]?.value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,212 @@
|
||||||
|
<div>
|
||||||
|
<table style="width: 100%;">
|
||||||
|
<tbody>
|
||||||
|
{{#each value as |envVar index|}}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.type'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.type
|
||||||
|
}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=typeChoices
|
||||||
|
value=envVar.type
|
||||||
|
onChange=(action 'updateType' index)
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.variableName'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.name
|
||||||
|
}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.name
|
||||||
|
placeholder=(t 'formAgentEnvVar.placeholders.foo')
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{#if envVar.showValue}}
|
||||||
|
<td colspan="2" class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.value'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.value
|
||||||
|
}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.value
|
||||||
|
placeholder=(t 'formAgentEnvVar.placeholders.bar')
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
{{#if envVar.showContainer}}
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.containerName'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.resourceFieldRef.containerName
|
||||||
|
}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.resourceFieldRef.containerName
|
||||||
|
placeholder=(t 'formAgentEnvVar.placeholders.container')
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.key'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.resourceFieldRef.resource
|
||||||
|
}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=resourcekeyChoices
|
||||||
|
value=envVar.valueFrom.resourceFieldRef.resource
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
{{#if envVar.showConfigMap}}
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.configMap'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.name
|
||||||
|
}}
|
||||||
|
{{#if showCustomConfigMaps}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.name
|
||||||
|
}}
|
||||||
|
{{else}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=configMapChoices
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.name
|
||||||
|
onChange=(action 'updateConfigMap' index)
|
||||||
|
}}
|
||||||
|
{{/if}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.key'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.key
|
||||||
|
}}
|
||||||
|
{{#if showCustomConfigMaps}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.key
|
||||||
|
}}
|
||||||
|
{{else}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=envVar.configMapKeyChoices
|
||||||
|
value=envVar.valueFrom.configMapKeyRef.key
|
||||||
|
disabled=(not envVar.configMapKeyChoices.length)
|
||||||
|
}}
|
||||||
|
{{/if}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
{{#if envVar.showSecret}}
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.secret'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.secretKeyRef.name
|
||||||
|
}}
|
||||||
|
{{#if showCustomSecrets}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.secretKeyRef.name
|
||||||
|
}}
|
||||||
|
{{else}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=secretChoices
|
||||||
|
value=envVar.valueFrom.secretKeyRef.name
|
||||||
|
onChange=(action 'updateSecret' index)
|
||||||
|
}}
|
||||||
|
{{/if}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
<td class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.key'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.secretKeyRef.key
|
||||||
|
}}
|
||||||
|
{{#if showCustomSecrets}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.secretKeyRef.key
|
||||||
|
}}
|
||||||
|
{{else}}
|
||||||
|
{{new-select
|
||||||
|
class="form-control"
|
||||||
|
content=envVar.secretKeyChoices
|
||||||
|
value=envVar.valueFrom.secretKeyRef.key
|
||||||
|
disabled=(not envVar.secretKeyChoices.length)
|
||||||
|
}}
|
||||||
|
{{/if}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
{{#if envVar.showPodField}}
|
||||||
|
<td colspan="2" class="pl-10">
|
||||||
|
<label class="text-small">{{t 'formAgentEnvVar.headers.key'}}</label>
|
||||||
|
{{#input-or-display
|
||||||
|
editable=editable
|
||||||
|
value=envVar.valueFrom.fieldRef.fieldPath
|
||||||
|
}}
|
||||||
|
{{input
|
||||||
|
class="form-control"
|
||||||
|
type="text"
|
||||||
|
value=envVar.valueFrom.fieldRef.fieldPath
|
||||||
|
placeholder=(t 'formAgentEnvVar.placeholders.key')
|
||||||
|
}}
|
||||||
|
{{/input-or-display}}
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
<td class="valign-top text-right" style="width: 45px">
|
||||||
|
<label class="text-small"> </label>
|
||||||
|
{{#if editable}}
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
class="btn bg-primary btn-sm" disabled={{eq row.editable false}} type="button" {{action "remove" index}}
|
||||||
|
>
|
||||||
|
<i class="icon icon-minus"/>
|
||||||
|
<span class="sr-only">
|
||||||
|
{{t "generic.remove"}}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{{#if editable}}
|
||||||
|
<button class="btn bg-link icon-btn p-0 mt-10" type="button" {{action "add" }}>
|
||||||
|
<span class="darken"><i class="icon icon-plus text-small" /></span>
|
||||||
|
<span>{{t 'formAgentEnvVar.addActionLabel'}}</span>
|
||||||
|
</button>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
@ -14,6 +14,7 @@ export default Component.extend({
|
||||||
optionLabelPath: 'label',
|
optionLabelPath: 'label',
|
||||||
optionGroupPath: 'group',
|
optionGroupPath: 'group',
|
||||||
optionDisabledPath: 'disabled',
|
optionDisabledPath: 'disabled',
|
||||||
|
onChange: null,
|
||||||
|
|
||||||
value: null,
|
value: null,
|
||||||
useContentForDefaultValue: false,
|
useContentForDefaultValue: false,
|
||||||
|
|
@ -49,6 +50,13 @@ export default Component.extend({
|
||||||
this.off('change', this, this._change);
|
this.off('change', this, this._change);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
actions: {
|
||||||
|
onChange() {
|
||||||
|
if (this.onChange) {
|
||||||
|
this.onChange(...arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
setDefaultValueObserver: observer('asyncContent.value', function() {
|
setDefaultValueObserver: observer('asyncContent.value', function() {
|
||||||
const content = get(this, 'asyncContent.value');
|
const content = get(this, 'asyncContent.value');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<select disabled={{or asyncContent.loading disabled}}>
|
<select disabled={{or asyncContent.loading disabled}} onchange={{action "onChange"}}>
|
||||||
{{#if prompt}}
|
{{#if prompt}}
|
||||||
<option selected={{not selection}}>
|
<option selected={{not selection}}>
|
||||||
{{#if localizedPrompt}}
|
{{#if localizedPrompt}}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
export { default } from 'shared/components/form-agent-env-var/component';
|
||||||
|
|
@ -4263,6 +4263,8 @@ clusterNew:
|
||||||
rancherd:
|
rancherd:
|
||||||
shortLabel: RancherD
|
shortLabel: RancherD
|
||||||
rke:
|
rke:
|
||||||
|
agentEnvVars:
|
||||||
|
label: Agent Environment Variables
|
||||||
secretsEncryption:
|
secretsEncryption:
|
||||||
label: Secrets Encryption
|
label: Secrets Encryption
|
||||||
upgradeStrategy:
|
upgradeStrategy:
|
||||||
|
|
@ -6428,6 +6430,32 @@ formEnvVar:
|
||||||
key: Key
|
key: Key
|
||||||
value: Value
|
value: Value
|
||||||
|
|
||||||
|
formAgentEnvVar:
|
||||||
|
headers:
|
||||||
|
type: Type
|
||||||
|
variableName: Variable Name
|
||||||
|
value: Value
|
||||||
|
containerName: Container Name
|
||||||
|
configMap: Config Map
|
||||||
|
secret: Secret
|
||||||
|
key: Key
|
||||||
|
placeholders:
|
||||||
|
foo: e.g. FOO
|
||||||
|
bar: e.g. bar
|
||||||
|
container: e.g. my-container
|
||||||
|
key: e.g. metadata.labels['KEY']
|
||||||
|
|
||||||
|
typeChoices:
|
||||||
|
keyValue: Key/Value Pair
|
||||||
|
resource: Resource
|
||||||
|
configMap: ConfigMap Key
|
||||||
|
configMapNone: ConfigMap Key (None Available)
|
||||||
|
secret: Secret Key
|
||||||
|
secretNone: Secret Key (None Available)
|
||||||
|
podField: Pod Field
|
||||||
|
|
||||||
|
addActionLabel: Add Environment Variable
|
||||||
|
|
||||||
formGlobalRoles:
|
formGlobalRoles:
|
||||||
title: Global Permissions
|
title: Global Permissions
|
||||||
description: "Controls what access the {type} has to administer the overall {appName} installation."
|
description: "Controls what access the {type} has to administer the overall {appName} installation."
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue