This commit is contained in:
loganhz 2018-03-19 17:03:06 +08:00
parent aff9ac7f15
commit c93c1a091b
65 changed files with 1658 additions and 57 deletions

View File

@ -4,26 +4,26 @@ import Resource from 'ember-api-store/models/resource';
const SOURCES = [];
registerSource('aws-ebs', 'awsElasticBlockStore', true);
registerSource('azure-disk', 'azureDisk', '');
registerSource('azure-file', 'azureFile', '');
registerSource('cephfs', 'cephfs', '');
registerSource('cinder', 'cinder', '');
registerSource('fc', 'fc', '');
registerSource('flex-volume', 'flexVolume', '');
registerSource('flocker', 'flocker', '');
registerSource('gce-pd', 'gcePersistentDisk', '');
registerSource('glusterfs', 'glusterfs', '');
registerSource('host-path', 'hostPath', '');
registerSource('iscsi', 'iscsi', '');
registerSource('local', 'local', '');
registerSource('nfs', 'nfs', '');
registerSource('photon', 'photonPersistentDisk', '');
registerSource('portworx', 'portworxVolume', '');
registerSource('quobyte', 'quobyte', '');
registerSource('rbd', 'rbd', '');
registerSource('scaleio', 'scaleIO', '');
registerSource('storageos', 'storageos', '');
registerSource('vsphere-volume', 'vsphereVolume', '');
registerSource('azure-disk', 'azureDisk', true);
registerSource('azure-file', 'azureFile', true);
registerSource('cephfs', 'cephfs', true);
registerSource('cinder', 'cinder', true);
registerSource('fc', 'fc', true);
registerSource('flex-volume', 'flexVolume', true);
registerSource('flocker', 'flocker', true);
registerSource('gce-pd', 'gcePersistentDisk', true);
registerSource('glusterfs', 'glusterfs', true);
registerSource('host-path', 'hostPath', true);
registerSource('iscsi', 'iscsi', true);
registerSource('local', 'local', true);
registerSource('nfs', 'nfs', true);
registerSource('photon', 'photonPersistentDisk', true);
registerSource('portworx', 'portworxVolume', true);
registerSource('quobyte', 'quobyte', true);
registerSource('rbd', 'rbd', true);
registerSource('scaleio', 'scaleIO', true);
registerSource('storageos', 'storageos', true);
registerSource('vsphere-volume', 'vsphereVolume', true);
export function registerSource(name, field, component) {
if ( component === true ) {

View File

@ -26,6 +26,16 @@ export default Component.extend(ViewNewEdit, {
updateOptions(ary) {
set(this, 'primaryResource.mountOptions', ary);
},
updateParams(key, map) {
getSources().forEach(source => {
if(source.value === key){
set(this, `primaryResource.${key}`, map);
} else {
set(this, `primaryResource.${source.value}`, null);
}
});
},
},
init() {
@ -123,8 +133,13 @@ export default Component.extend(ViewNewEdit, {
sourceComponent: computed('sourceName', function() {
const name = get(this, 'sourceName');
if ( name ) {
return `volume-source/source-${name}`;
const sources = getSources();
const entry = sources.findBy('name', name);
if (entry) {
return {
component: `volume-source/source-${name}`,
field: entry.value,
}
}
}),
});

View File

@ -80,9 +80,11 @@
expandOnInit=true
}}
{{#if sourceComponent}}
{{component sourceComponent
{{component sourceComponent.component
plugin=sourceComponent.field
editing=notView
volume=model
changed=(action "updateParams")
}}
{{else}}
<p class="text-muted">Choose a Volume Source above...</p>

View File

@ -1,24 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
import { get, set } from '@ember/object';
const FIELD = 'awsElasticBlockStore';
const TYPE = 'awsElasticBlockStoreVolumeSource';
export default Component.extend(VolumeSource, {
layout,
volume: null,
didReceiveAttrs() {
if ( !get(this, `volume.${FIELD}`) ) {
set(this, `volume.${FIELD}`, get(this, 'store').createRecord({
type: TYPE,
}));
}
// @TODO-2.0 hack, the field is called type...
set(this, `volume.${FIELD}.type`, '');
},
inputDidUpdate: observer('config.{fsType,readOnly,partition,volumeID}', function () {
this.sendUpdate();
}),
});

View File

@ -1,6 +1,41 @@
<div class="row">
<div class="col span-6">
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.awsElasticBlockStore.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.awsElasticBlockStore.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.awsElasticBlockStore.partition.label'}}</label>
{{#input-or-display editable=editing value=config.partition}}
{{input-integer type="text" value=config.partition classNames="form-control" placeholder=(t 'cruPersistentVolume.awsElasticBlockStore.partition.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="col span-6">
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.awsElasticBlockStore.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.awsElasticBlockStore.volumeID.label'}}</label>
{{#input-or-display editable=editing value=config.volumeID}}
{{input type="text" value=config.volumeID classNames="form-control" placeholder=(t 'cruPersistentVolume.awsElasticBlockStore.volumeID.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{cachingMode,diskName,diskURI,fsType,kind,readOnly}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,56 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.cachingMode.label'}}</label>
{{#input-or-display editable=editing value=config.cachingMode}}
{{input type="text" value=config.cachingMode classNames="form-control" placeholder=(t 'cruPersistentVolume.azureDisk.cachingMode.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.diskName.label'}}</label>
{{#input-or-display editable=editing value=config.diskName}}
{{input type="text" value=config.diskName classNames="form-control" placeholder=(t 'cruPersistentVolume.azureDisk.diskName.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.diskURI.label'}}</label>
{{#input-or-display editable=editing value=config.diskURI}}
{{input type="text" value=config.diskURI classNames="form-control" placeholder=(t 'cruPersistentVolume.azureDisk.diskURI.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.azureDisk.fsType.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.kind.label'}}</label>
{{#input-or-display editable=editing value=config.kind}}
{{input type="text" value=config.kind classNames="form-control" placeholder=(t 'cruPersistentVolume.azureDisk.kind.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureDisk.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{readOnly,secretName,secretNamespace,shareName}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,41 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureFile.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureFile.secretName.label'}}</label>
{{#input-or-display editable=editing value=config.secretName}}
{{input type="text" value=config.secretName classNames="form-control" placeholder=(t 'cruPersistentVolume.azureFile.secretName.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureFile.secretNamespace.label'}}</label>
{{#input-or-display editable=editing value=config.secretNamespace}}
{{input type="text" value=config.secretNamespace classNames="form-control" placeholder=(t 'cruPersistentVolume.azureFile.secretNamespace.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.azureFile.shareName.label'}}</label>
{{#input-or-display editable=editing value=config.shareName}}
{{input type="text" value=config.shareName classNames="form-control" placeholder=(t 'cruPersistentVolume.azureFile.shareName.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{monitors.[],path,readOnly,secretFile,secretRef.name,secretRef.namespace,user}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,70 @@
<div class="row mb-20">
<div class="col span-6">
{{form-value-array
initialValues=config.monitors
editing=editing
valueLabel="cruPersistentVolume.cephfs.monitors.label"
addActionLabel="cruPersistentVolume.cephfs.monitors.addActionLabel"
changed=(action "updateOptions" "monitors")
}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cephfs.path.label'}}</label>
{{#input-or-display editable=editing value=config.path}}
{{input type="text" value=config.path classNames="form-control" placeholder=(t 'cruPersistentVolume.cephfs.path.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cephfs.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cephfs.secretFile.label'}}</label>
{{#input-or-display editable=editing value=config.secretFile}}
{{input type="text" value=config.secretFile classNames="form-control" placeholder=(t 'cruPersistentVolume.cephfs.secretFile.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cephfs.secretRef.label'}}</label>
<div>
<div class="inline-block mr-5">
<label>{{t 'cruPersistentVolume.cephfs.secretRef.name.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.cephfs.secretRef.name.placeholder')}}
{{/input-or-display}}
</div>
<div class="inline-block">
<label>{{t 'cruPersistentVolume.cephfs.secretRef.namespace.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.namespace}}
{{input type="text" value=config.secretRef.namespace classNames="form-control" placeholder=(t 'cruPersistentVolume.cephfs.secretRef.namespace.placeholder')}}
{{/input-or-display}}
</div>
</div>
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cephfs.user.label'}}</label>
{{#input-or-display editable=editing value=config.user}}
{{input type="text" value=config.user classNames="form-control" placeholder=(t 'cruPersistentVolume.cephfs.user.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{readOnly,fsType,volumeID}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,35 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cinder.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.cinder.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cinder.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.cinder.volumeID.label'}}</label>
{{#input-or-display editable=editing value=config.volumeID}}
{{input type="text" value=config.volumeID classNames="form-control" placeholder=(t 'cruPersistentVolume.cinder.volumeID.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{readOnly,fsType,lun,targetWWNs.[],wwids.[]}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,57 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.fc.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.fc.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.fc.lun.label'}}</label>
{{#input-or-display editable=editing value=config.lun}}
{{input-integer type="text" value=config.lun classNames="form-control" placeholder=(t 'cruPersistentVolume.fc.lun.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.fc.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
<div class="col span-6">
{{form-value-array
initialValues=config.targetWWNs
editing=editing
valueLabel="cruPersistentVolume.fc.targetWWNs.label"
addActionLabel="cruPersistentVolume.fc.targetWWNs.addActionLabel"
changed=(action "updateOptions" "targetWWNs")
}}
</div>
</div>
<div class="row">
<div class="col span-6">
{{form-value-array
initialValues=config.wwids
editing=editing
valueLabel="cruPersistentVolume.fc.wwids.label"
addActionLabel="cruPersistentVolume.fc.wwids.addActionLabel"
changed=(action "updateOptions" "wwids")
}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{driver,fsType,readOnly,options,secretRef.name,}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,55 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flexVolume.driver.label'}}</label>
{{#input-or-display editable=editing value=config.driver}}
{{input type="text" value=config.driver classNames="form-control" placeholder=(t 'cruPersistentVolume.flexVolume.driver.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flexVolume.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.flexVolume.fsType.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
{{form-key-value
initialMap=config.options
editing=editing
header=(t 'cruPersistentVolume.flexVolume.options.label')
addActionLabel="cruPersistentVolume.flexVolume.options.addActionLabel"
changed=(action "updateOptions" "options")
}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flexVolume.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flexVolume.secretRef.label'}}</label>
{{#input-or-display editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.flexVolume.secretRef.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{datasetName,datasetUUID}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,15 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flocker.datasetName.label'}}</label>
{{#input-or-display editable=editing value=config.datasetName}}
{{input type="text" value=config.datasetName classNames="form-control" placeholder=(t 'cruPersistentVolume.flocker.datasetName.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.flocker.datasetUUID.label'}}</label>
{{#input-or-display editable=editing value=config.datasetUUID}}
{{input type="text" value=config.datasetUUID classNames="form-control" placeholder=(t 'cruPersistentVolume.flocker.datasetUUID.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{pdName,partition,fsType,readOnly}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,40 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.gcePersistentDisk.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.gcePersistentDisk.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.gcePersistentDisk.partition.label'}}</label>
{{#input-or-display editable=editing value=config.partition}}
{{input-integer type="text" value=config.partition classNames="form-control" placeholder=(t 'cruPersistentVolume.gcePersistentDisk.partition.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.gcePersistentDisk.pdName.label'}}</label>
{{#input-or-display editable=editing value=config.pdName}}
{{input type="text" value=config.pdName classNames="form-control" placeholder=(t 'cruPersistentVolume.gcePersistentDisk.pdName.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.gcePersistentDisk.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{path,readOnly,endpoints}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,35 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.glusterfs.endpoints.label'}}</label>
{{#input-or-display editable=editing value=config.endpoints}}
{{input type="text" value=config.endpoints classNames="form-control" placeholder=(t 'cruPersistentVolume.glusterfs.endpoints.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.glusterfs.path.label'}}</label>
{{#input-or-display editable=editing value=config.path}}
{{input type="text" value=config.path classNames="form-control" placeholder=(t 'cruPersistentVolume.glusterfs.path.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.glusterfs.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>

View File

@ -1,12 +1,11 @@
import Component from '@ember/component';
import layout from './template';
import VolumeSource from 'shared/mixins/volume-source';
import { get } from '@ember/object';
const FIELD = 'hostPath';
const TYPE = 'hostPathVolumeSource';
export default Component.extend(VolumeSource, {
export default Component.extend({
layout,
field: FIELD,

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{chapAuthDiscovery,chapAuthSession,fsType,initiatorName,iqn,iscsiInterface,lun,portals.[],readOnly,secretRef.name,targetPortal}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,123 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.chapAuthDiscovery.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.chapAuthDiscovery value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.chapAuthDiscovery value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.chapAuthDiscovery}}
</div>
{{/if}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.chapAuthSession.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.chapAuthSession value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.chapAuthSession value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.chapAuthSession}}
</div>
{{/if}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.initiatorName.label'}}</label>
{{#input-or-display editable=editing value=config.initiatorName}}
{{input type="text" value=config.initiatorName classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.initiatorName.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.iqn.label'}}</label>
{{#input-or-display editable=editing value=config.iqn}}
{{input type="text" value=config.iqn classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.iqn.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.iscsiInterface.label'}}</label>
{{#input-or-display editable=editing value=config.iscsiInterface}}
{{input type="text" value=config.iscsiInterface classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.iscsiInterface.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.lun.label'}}</label>
{{#input-or-display editable=editing value=config.lun}}
{{input-integer type="text" value=config.lun classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.lun.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
{{form-value-array
initialValues=config.portals
editing=editing
valueLabel="cruPersistentVolume.iscsi.portals.label"
addActionLabel="cruPersistentVolume.iscsi.portals.addActionLabel"
changed=(action "updateOptions" "portals")
}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.secretRef.label'}}</label>
{{#input-or-display editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.secretRef.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.iscsi.targetPortal.label'}}</label>
{{#input-or-display editable=editing value=config.targetPortal}}
{{input type="text" value=config.targetPortal classNames="form-control" placeholder=(t 'cruPersistentVolume.iscsi.targetPortal.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{path}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,8 @@
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.local.path.label'}}</label>
{{#input-or-display editable=editing value=config.path}}
{{input type="text" value=config.path classNames="form-control" placeholder=(t 'cruPersistentVolume.local.path.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{path,readOnly,server}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,35 @@
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.nfs.path.label'}}</label>
{{#input-or-display editable=editing value=config.path}}
{{input type="text" value=config.path classNames="form-control" placeholder=(t 'cruPersistentVolume.nfs.path.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.nfs.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.nfs.server.label'}}</label>
{{#input-or-display editable=editing value=config.server}}
{{input type="text" value=config.server classNames="form-control" placeholder=(t 'cruPersistentVolume.nfs.server.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,pdID}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,15 @@
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.photonPersistentDisk.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.photonPersistentDisk.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.photonPersistentDisk.pdID.label'}}</label>
{{#input-or-display editable=editing value=config.pdID}}
{{input type="text" value=config.pdID classNames="form-control" placeholder=(t 'cruPersistentVolume.photonPersistentDisk.pdID.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,readOnly,volumeID}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,35 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.portworxVolume.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.portworxVolume.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.portworxVolume.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.portworxVolume.volumeID.label'}}</label>
{{#input-or-display editable=editing value=config.volumeID}}
{{input type="text" value=config.volumeID classNames="form-control" placeholder=(t 'cruPersistentVolume.portworxVolume.volumeID.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{group,readOnly,registry,user,volume}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,51 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.quobyte.group.label'}}</label>
{{#input-or-display editable=editing value=config.group}}
{{input type="text" value=config.group classNames="form-control" placeholder=(t 'cruPersistentVolume.quobyte.group.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.quobyte.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.quobyte.registry.label'}}</label>
{{#input-or-display editable=editing value=config.registry}}
{{input type="text" value=config.registry classNames="form-control" placeholder=(t 'cruPersistentVolume.quobyte.registry.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.quobyte.user.label'}}</label>
{{#input-or-display editable=editing value=config.user}}
{{input type="text" value=config.user classNames="form-control" placeholder=(t 'cruPersistentVolume.quobyte.user.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.quobyte.volume.label'}}</label>
{{#input-or-display editable=editing value=config.volume}}
{{input type="text" value=config.volume classNames="form-control" placeholder=(t 'cruPersistentVolume.quobyte.volume.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,image,keyring,monitors.[],pool,readOnly,secretRef.name,user}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,76 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.image.label'}}</label>
{{#input-or-display editable=editing value=config.image}}
{{input type="text" value=config.image classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.image.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.keyring.label'}}</label>
{{#input-or-display editable=editing value=config.keyring}}
{{input type="text" value=config.keyring classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.keyring.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
{{form-value-array
initialValues=config.monitors
editing=editing
valueLabel="cruPersistentVolume.rbd.monitors.label"
addActionLabel="cruPersistentVolume.rbd.monitors.addActionLabel"
changed=(action "updateOptions" "monitors")
}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.pool.label'}}</label>
{{#input-or-display editable=editing value=config.pool}}
{{input type="text" value=config.pool classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.pool.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.secretRef.label'}}</label>
{{#input-or-display editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.secretRef.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.rbd.user.label'}}</label>
{{#input-or-display editable=editing value=config.user}}
{{input type="text" value=config.user classNames="form-control" placeholder=(t 'cruPersistentVolume.rbd.user.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,gateway,protectionDomain,readOnly,secretRef.name,secretRef.namespace,sslEnabled,storageMode,storagePool,system,volumeName}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,112 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.gateway.label'}}</label>
{{#input-or-display editable=editing value=config.gateway}}
{{input type="text" value=config.gateway classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.gateway.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.protectionDomain.label'}}</label>
{{#input-or-display editable=editing value=config.protectionDomain}}
{{input type="text" value=config.protectionDomain classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.protectionDomain.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.secretRef.label'}}</label>
<div>
<div class="inline-block mr-5">
<label>{{t 'cruPersistentVolume.scaleIO.secretRef.name.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.secretRef.name.placeholder')}}
{{/input-or-display}}
</div>
<div class="inline-block">
<label>{{t 'cruPersistentVolume.scaleIO.secretRef.namespace.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.namespace}}
{{input type="text" value=config.secretRef.namespace classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.secretRef.namespace.placeholder')}}
{{/input-or-display}}
</div>
</div>
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.sslEnabled.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.sslEnabled value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.sslEnabled value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.sslEnabled}}
</div>
{{/if}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.storageMode.label'}}</label>
{{#input-or-display editable=editing value=config.storageMode}}
{{input type="text" value=config.storageMode classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.storageMode.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.storagePool.label'}}</label>
{{#input-or-display editable=editing value=config.storagePool}}
{{input type="text" value=config.storagePool classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.storagePool.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.system.label'}}</label>
{{#input-or-display editable=editing value=config.system}}
{{input type="text" value=config.system classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.system.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.scaleIO.volumeName.label'}}</label>
{{#input-or-display editable=editing value=config.volumeName}}
{{input type="text" value=config.volumeName classNames="form-control" placeholder=(t 'cruPersistentVolume.scaleIO.volumeName.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,readOnly,secretRef.name,secretRef.namespace,volumeName,volumeNamespace}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,61 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.storageos.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.storageos.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.storageos.readOnly.label'}}</label>
{{#if editing}}
<div class="text-muted">
<label>
{{radio-button selection=config.readOnly value=true}} {{t 'generic.yes'}}
</label>
<label>
{{radio-button selection=config.readOnly value=false}} {{t 'generic.no'}}
</label>
</div>
{{else}}
<div class="text-muted">
{{config.readOnly}}
</div>
{{/if}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.storageos.secretRef.label'}}</label>
<div>
<div class="inline-block mr-5">
<label>{{t 'cruPersistentVolume.storageos.secretRef.name.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.name}}
{{input type="text" value=config.secretRef.name classNames="form-control" placeholder=(t 'cruPersistentVolume.storageos.secretRef.name.placeholder')}}
{{/input-or-display}}
</div>
<div class="inline-block">
<label>{{t 'cruPersistentVolume.storageos.secretRef.namespace.label'}}</label>
{{#input-or-display class="inline-block" editable=editing value=config.secretRef.namespace}}
{{input type="text" value=config.secretRef.namespace classNames="form-control" placeholder=(t 'cruPersistentVolume.storageos.secretRef.namespace.placeholder')}}
{{/input-or-display}}
</div>
</div>
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.storageos.volumeName.label'}}</label>
{{#input-or-display editable=editing value=config.volumeName}}
{{input type="text" value=config.volumeName classNames="form-control" placeholder=(t 'cruPersistentVolume.storageos.volumeName.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.storageos.volumeNamespace.label'}}</label>
{{#input-or-display editable=editing value=config.volumeNamespace}}
{{input type="text" value=config.volumeNamespace classNames="form-control" placeholder=(t 'cruPersistentVolume.storageos.volumeNamespace.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -0,0 +1,12 @@
import Component from '@ember/component';
import layout from './template';
import { get, setProperties, computed, observer } from '@ember/object';
import VolumeSource from 'shared/mixins/volume-source';
export default Component.extend(VolumeSource, {
layout,
inputDidUpdate: observer('config.{fsType,storagePolicyID,storagePolicyName,volumePath}', function () {
this.sendUpdate();
}),
});

View File

@ -0,0 +1,31 @@
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.vsphereVolume.fsType.label'}}</label>
{{#input-or-display editable=editing value=config.fsType}}
{{input type="text" value=config.fsType classNames="form-control" placeholder=(t 'cruPersistentVolume.vsphereVolume.fsType.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.vsphereVolume.storagePolicyID.label'}}</label>
{{#input-or-display editable=editing value=config.storagePolicyID}}
{{input type="text" value=config.storagePolicyID classNames="form-control" placeholder=(t 'cruPersistentVolume.vsphereVolume.storagePolicyID.placeholder')}}
{{/input-or-display}}
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.vsphereVolume.storagePolicyName.label'}}</label>
{{#input-or-display editable=editing value=config.storagePolicyName}}
{{input type="text" value=config.storagePolicyName classNames="form-control" placeholder=(t 'cruPersistentVolume.vsphereVolume.storagePolicyName.placeholder')}}
{{/input-or-display}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'cruPersistentVolume.vsphereVolume.volumePath.label'}}</label>
{{#input-or-display editable=editing value=config.volumePath}}
{{input type="text" value=config.volumePath classNames="form-control" placeholder=(t 'cruPersistentVolume.vsphereVolume.volumePath.placeholder')}}
{{/input-or-display}}
</div>
</div>

View File

@ -1,27 +1,94 @@
import Mixin from '@ember/object/mixin';
import { get, set } from '@ember/object';
import { get, set, computed, setProperties } from '@ember/object';
import { inject as service } from '@ember/service';
export default Mixin.create({
clusterStore: service(),
// Inputs from comonent caller
volume: null,
editing: null,
// Override from component definition
field: null,
plugin: null,
fields: null,
// Locals
config: null,
didReceiveAttrs() {
this._super(...arguments);
const plugin = get(this, 'plugin');
const typeName = this.getTypeName();
const schema = get(this, 'clusterStore').getById('schema', typeName);
const resourceFields = get(schema, 'resourceFields');
const field = get(this,'field');
let config = get(this, `volume.${field}`);
if ( !config ) {
config = this.configForNew();
set(this, `volume.${field}`, config);
}
set(this, 'config', config);
const changes = {};
const fields = [];
Object.keys(resourceFields).forEach(key => {
const field = resourceFields[key];
set(field, 'fieldKey', key);
fields.push(field);
const value = get(this, `volume.${plugin}.${key}`);
if (value !== undefined) {
changes[key] = value;
} else if (get(field, 'default') !== undefined) {
changes[key] = get(field, 'default')
} else if (get(field, 'type') === 'localObjectReference') {
changes[key] = {
name: '',
};
} else if (get(field, 'type') === 'objectReference') {
changes[key] = {
name: '',
};
} else if (get(field, 'type') === 'localObjectReference') {
changes[key] = {
name: '',
namespace: '',
};
} else if (get(field, 'type') === 'secretReference') {
changes[key] = {
name: '',
namespace: '',
};
} else if (get(field, 'type') === 'array[string]') {
changes[key] = [];
} else if (get(field, 'type') === 'map[string]') {
changes[key] = {};
} else {
changes[key] = '';
}
});
setProperties(this, {
config: changes,
fields,
});
this.sendUpdate();
},
sendUpdate: function () {
const plugin = get(this, 'plugin');
const fields = get(this, 'fields') || [];
const out = {};
fields.forEach(field => {
const key = field.fieldKey;
const value = get(this, `config.${key}`);
if (value !== undefined && value !== '') {
out[key] = value;
}
});
console.log(plugin, out)
this.sendAction('changed', plugin, out);
},
getTypeName: function () {
const plugin = get(this, 'plugin');
return get(this, 'clusterStore').getById('schema', 'persistentvolume').resourceFields[plugin].type.toLocaleLowerCase();
},
actions: {
updateOptions(key, ary) {
set(this, `config.${key}`, ary);
},
}
});

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-azure-disk/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-azure-file/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-cephfs/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-cinder/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-fc/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-flex-volume/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-flocker/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-gce-pd/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-glusterfs/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-iscsi/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-local/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-nfs/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-photon/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-portworx/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-quobyte/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-rbd/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-scaleio/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-storageos/component';

View File

@ -0,0 +1 @@
export { default } from 'shared/components/volume-source/source-vsphere-volume/component';

View File

@ -1761,7 +1761,304 @@ cruPersistentVolume:
label: Mount Options
addActionLabel: Add Option
noData: No Mount Options
awsElasticBlockStore:
fsType:
label: FS Type
placeholder: "e.g. ext4"
readOnly:
label: Read Only
partition:
label: Partition
placeholder: "e.g. 1"
volumeID:
label: Volume ID
placeholder: "e.g. volume1"
azureDisk:
cachingMode:
label: Caching Mode
placeholder: "e.g. None"
diskName:
label: Disk Name
placeholder: "e.g. kubernetes-pvc"
diskURI:
label: Disk URI
placeholder: "e.g. https://example.com/disk"
fsType:
label: FS Type
placeholder: "e.g. ext4"
kind:
label: Kind
placeholder: "e.g. PersistentVolumeClaim"
readOnly:
label: Read Only
azureFile:
secretName:
label: Secret Name
placeholder: "e.g. secret"
secretNamespace:
label: Secret Namespace
placeholder: "e.g. default"
shareName:
label: Share Name
placeholder: "e.g. abc"
readOnly:
label: Read Only
cephfs:
monitors:
label: Monitors
addActionLabel: Add
path:
label: Path
placeholder: "e.g. /var"
readOnly:
label: Read Only
secretFile:
label: Secret File
placeholder: "e.g. secret"
secretRef:
name:
label: Name
placeholder: "e.g. abc"
namespace:
label: Namespace
placeholder: "e.g. default"
label: Secret
user:
label: User
placeholder: "e.g. root"
rbd:
fsType:
label: FS Type
placeholder: "e.g. ext4"
image:
label: Image
placeholder: "e.g. image"
keyring:
label: Key Ring
placeholder: "e.g. /etc/ceph/keyring"
monitors:
label: Monitors
addActionLabel: Add
pool:
label: Pool
placeholder: "e.g. rbd"
readOnly:
label: Read Only
secretRef:
label: Secret
placeholder: "e.g. secret"
user:
label: User
placeholder: "e.g. root"
fc:
fsType:
label: FS Type
placeholder: "e.g. ext4"
lun:
label: Lun
placeholder: "e.g. 2"
readOnly:
label: Read Only
targetWWNs:
label: Target WWNs
addActionLabel: Add
wwids:
label: Wwids
addActionLabel: Add
flexVolume:
driver:
label: Driver
placeholder: "e.g. driver"
fsType:
label: FS Type
placeholder: "e.g. ext4"
options:
label: Options
addActionLabel: Add
readOnly:
label: Read Only
secretRef:
label: Secret
placeholder: "e.g. secret"
flocker:
datasetName:
label: Dataset Name
placeholder: "e.g. dataset"
datasetUUID:
label: Dataset UUID
placeholder: "e.g. uuid"
glusterfs:
endpoints:
label: Endpoints
placeholder: "e.g. 10.240.106.152:1"
path:
label: Path
placeholder: "e.g. kube_vol"
readOnly:
label: Read Only
gcePersistentDisk:
fsType:
label: FS Type
placeholder: "e.g. ext4"
partition:
label: Partition
placeholder: "e.g. 1"
pdName:
label: PD Name
placeholder: "e.g. abc"
readOnly:
label: Read Only
iscsi:
chapAuthDiscovery:
label: Chap Auth Discovery
chapAuthSession:
label: Chap Auth Session
fsType:
label: FS Type
placeholder: "e.g. ext4"
initiatorName:
label: Initiator Name
placeholder: "e.g. abc"
iqn:
label: IQN
placeholder: "e.g. 2"
iscsiInterface:
label: iSCSI Interface
placeholder: "e.g. interface"
lun:
label: Lun
placeholder: "e.g. 2"
portals:
label: Portals
addActionLabel: Add
readOnly:
label: Read Only
secretRef:
label: Secret
placeholder: "e.g. secret"
targetPortal:
label: Target Portal
placeholder: "e.g. portal"
local:
path:
label: Path
placeholder: "e.g. /var"
nfs:
path:
label: Path
placeholder: "e.g. /var"
readOnly:
label: Read Only
server:
label: Server
placeholder: "e.g. 10.244.1.4"
cinder:
fsType:
label: FS Type
placeholder: "e.g. ext4"
readOnly:
label: Read Only
volumeID:
label: Volume ID
placeholder: "e.g. vol"
photonPersistentDisk:
fsType:
label: FS Type
placeholder: "e.g. ext4"
pdID:
label: PD ID
placeholder: "e.g. abc"
portworxVolume:
fsType:
label: FS Type
placeholder: "e.g. ext4"
readOnly:
label: Read Only
volumeID:
label: Volume ID
placeholder: "e.g. abc"
quobyte:
group:
label: Group
placeholder: "e.g. abc"
readOnly:
label: Read Only
registry:
label: Registry
placeholder: "e.g. abc"
user:
label: User
placeholder: "e.g. root"
volume:
label: Volume
placeholder: "e.g. vol"
scaleIO:
fsType:
label: FS Type
placeholder: "e.g. ext4"
gateway:
label: Gateway
placeholder: "e.g. https://localhost:443/api"
protectionDomain:
label: Protection Domain
placeholder: "e.g. pd01"
readOnly:
label: Read Only
secretRef:
name:
label: Name
placeholder: "e.g. secret"
namespace:
label: Namespace
placeholder: "e.g. default"
label: Secret
sslEnabled:
label: SSL Enabled
storageMode:
label: Storage Mode
placeholder: "e.g. ThinProvisioned"
storagePool:
label: Storage Pool
placeholder: "e.g. sp01"
system:
label: System
placeholder: "e.g. scaleio"
volumeName:
label: Volume Name
placeholder: "e.g. vol-0"
storageos:
fsType:
label: FS Type
placeholder: "e.g. ext4"
readOnly:
label: Read Only
secretRef:
name:
label: Name
placeholder: "e.g. secret"
namespace:
label: Namespace
placeholder: "e.g. default"
label: Secret
volumeName:
label: Volume Name
placeholder: "e.g. vol"
volumeNamespace:
label: Volume Namespace
placeholder: "e.g. default"
vsphereVolume:
fsType:
label: FS Type
placeholder: "e.g. ext4"
storagePolicyID:
label: Storage Policy ID
placeholder: "e.g. sp1"
storagePolicyName:
label: Storage Policy Name
placeholder: "e.g. sp"
volumePath:
label: Volume Path
placeholder: "e.g. /"
cruStorageClass:
name:
placeholder: e.g. storage