diff --git a/app/models/storageclass.js b/app/models/storageclass.js index 4f476739a..021d28f21 100644 --- a/app/models/storageclass.js +++ b/app/models/storageclass.js @@ -6,18 +6,18 @@ import { all } from 'rsvp'; const DEFAULT_ANNOTATION = 'storageclass.kubernetes.io/is-default-class'; const PROVISIONERS = []; -registerProvisioner('aws-ebs', 'kubernetes.io/aws-ebs', true); -registerProvisioner('gce-pd', 'kubernetes.io/gce-pd', ); -registerProvisioner('glusterfs', 'kubernetes.io/glusterfs', ); -registerProvisioner('cinder', 'kubernetes.io/cinder', ); -registerProvisioner('vsphere-volume', 'kubernetes.io/vpshere-volume', ); -registerProvisioner('rbd', 'kubernetes.io/rbd', ); -registerProvisioner('quobyte', 'kubernetes.io/quobyte', ); -registerProvisioner('azure-disk', 'kubernetes.io/azure-disk', ); -registerProvisioner('azure-file', 'kubernetes.io/azure-file', ); -registerProvisioner('portworx-volume','kubernetes.io/portworx-volume',); -registerProvisioner('scaleio', 'kubernetes.io/scaleio', ); -registerProvisioner('storageos', 'kubernetes.io/storageos', ); +registerProvisioner('aws-ebs', 'kubernetes.io/aws-ebs', true); +registerProvisioner('gce-pd', 'kubernetes.io/gce-pd', true); +registerProvisioner('glusterfs', 'kubernetes.io/glusterfs', true); +registerProvisioner('cinder', 'kubernetes.io/cinder', true); +registerProvisioner('vsphere-volume', 'kubernetes.io/vpshere-volume', true); +registerProvisioner('rbd', 'kubernetes.io/rbd', true); +registerProvisioner('quobyte', 'kubernetes.io/quobyte', true); +registerProvisioner('azure-disk', 'kubernetes.io/azure-disk', true); +registerProvisioner('azure-file', 'kubernetes.io/azure-file', true); +registerProvisioner('portworx-volume','kubernetes.io/portworx-volume', true); +registerProvisioner('scaleio', 'kubernetes.io/scaleio', true); +registerProvisioner('storageos', 'kubernetes.io/storageos', true); export function registerProvisioner(name, provisioner, component) { if ( component === true ) { diff --git a/lib/shared/addon/components/cru-storage-class/template.hbs b/lib/shared/addon/components/cru-storage-class/template.hbs index 7ac10ac95..82bee8e94 100644 --- a/lib/shared/addon/components/cru-storage-class/template.hbs +++ b/lib/shared/addon/components/cru-storage-class/template.hbs @@ -16,9 +16,10 @@ {{else}} {{form-name-description model=primaryResource - nameRequired=true - namePlaceholder="newSecret.name.placeholder" - descriptionPlaceholder="newSecret.description.placeholder" + nameRequired=false + nameDisabled=isEdit + namePlaceholder="cruStorageClass.name.placeholder" + descriptionPlaceholder="cruStorageClass.description.placeholder" }} {{/if}} @@ -99,7 +100,7 @@
@@ -108,6 +109,7 @@
{{form-value-array initialValues=primaryResource.mountOptions + editing=(not isView) valueLabel="cruStorageClass.mountOptions.label" addActionLabel="cruStorageClass.mountOptions.addActionLabel" changed=(action "updateOptions") diff --git a/lib/shared/addon/components/form-value-array/template.hbs b/lib/shared/addon/components/form-value-array/template.hbs index 9423c08d0..27a9a1b33 100644 --- a/lib/shared/addon/components/form-value-array/template.hbs +++ b/lib/shared/addon/components/form-value-array/template.hbs @@ -20,6 +20,8 @@ {{/each}} +{{else if (not editing)}} + {{t 'formValueArray.noData'}} {{/if}} {{#if editing}} diff --git a/lib/shared/addon/components/storage-class/provisioner-aws-ebs/template.hbs b/lib/shared/addon/components/storage-class/provisioner-aws-ebs/template.hbs index f8a6185c0..f9aad08ac 100644 --- a/lib/shared/addon/components/storage-class/provisioner-aws-ebs/template.hbs +++ b/lib/shared/addon/components/storage-class/provisioner-aws-ebs/template.hbs @@ -47,7 +47,7 @@
{{#unless zoneAutomatic}} - {{textarea-autogrow spellcheck="false" required=true value=zones}} + {{textarea-autogrow placeholder="cruStorageClass.aws-ebs.zone.placeholder" spellcheck="false" required=true value=zones}} {{/unless}} {{else}}
diff --git a/lib/shared/addon/components/storage-class/provisioner-azure-disk/component.js b/lib/shared/addon/components/storage-class/provisioner-azure-disk/component.js new file mode 100644 index 000000000..4d0965af9 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-azure-disk/component.js @@ -0,0 +1,12 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['skuName', 'location', 'storageAccount', 'storageaccounttype', 'kind']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'azure-disk', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-azure-disk/template.hbs b/lib/shared/addon/components/storage-class/provisioner-azure-disk/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-azure-disk/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-azure-file/component.js b/lib/shared/addon/components/storage-class/provisioner-azure-file/component.js new file mode 100644 index 000000000..e17e7afd2 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-azure-file/component.js @@ -0,0 +1,12 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['skuName', 'location', 'storageAccount']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'azure-file', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-azure-file/template.hbs b/lib/shared/addon/components/storage-class/provisioner-azure-file/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-azure-file/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-cinder/component.js b/lib/shared/addon/components/storage-class/provisioner-cinder/component.js new file mode 100644 index 000000000..af2109748 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-cinder/component.js @@ -0,0 +1,12 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['type', 'availability']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'cinder', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-cinder/template.hbs b/lib/shared/addon/components/storage-class/provisioner-cinder/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-cinder/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-gce-pd/component.js b/lib/shared/addon/components/storage-class/provisioner-gce-pd/component.js new file mode 100644 index 000000000..5ca6c20fd --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-gce-pd/component.js @@ -0,0 +1,56 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; +import { get, setProperties, computed, observer } from '@ember/object'; + +export const VOLUME_TYPES = [ + 'pd-standard', + 'pd-ssd', +]; + +export default Component.extend(StorageClassProvisioner, { + layout, + volumeTypes: VOLUME_TYPES, + + volumeType: null, + zones: null, + zoneAutomatic: null, + + didReceiveAttrs() { + const changes = {}; + + changes['volumeType'] = get(this, 'parameters.type')||'pd-standard'; + + const zone = get(this, 'parameters.zone'); + const zones = get(this, 'parameters.zones'); + if ( zones && zones.length ) { + changes['zoneAutomatic'] = false; + changes['zones'] = zones; + } else if ( zone ) { + changes['zoneAutomatic'] = false; + changes['zones'] = zone; + } else { + changes['zoneAutomatic'] = true; + changes['zones'] = ''; + } + + setProperties(this, changes); + }, + + sendUpdate: observer('volumeType','zones','zoneAutomatic', function() { + const type = get(this, 'volumeType'); + const out = { + type: type, + }; + + const zoneAutomatic = get(this, 'zoneAutomatic'); + if ( !zoneAutomatic ) { + const zones = (get(this, 'zones')||'').trim(); + if ( zones ) { + out['zones'] = zones; + } + } + + this.sendAction('changed', out); + }) +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-gce-pd/template.hbs b/lib/shared/addon/components/storage-class/provisioner-gce-pd/template.hbs new file mode 100644 index 000000000..5cbb43947 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-gce-pd/template.hbs @@ -0,0 +1,43 @@ +
+
+ + {{#if editing}} + {{#each volumeTypes as |name|}} +
+ +
+ {{/each}} + {{else}} + {{t (concat 'cruStorageClass.gce-pd.type.' volumeType)}} + {{/if}} +
+
+ + {{#if editing}} +
+ +
+
+ +
+ {{#unless zoneAutomatic}} + {{textarea-autogrow placeholder="cruStorageClass.gce-pd.zone.placeholder" spellcheck="false" required=true value=zones}} + {{/unless}} + {{else}} + {{#if zoneAutomatic}} + {{t 'cruStorageClass.gce-pd.zone.automatic'}} + {{else}} + {{zones}} + {{/if}} + {{/if}} +
+
diff --git a/lib/shared/addon/components/storage-class/provisioner-glusterfs/component.js b/lib/shared/addon/components/storage-class/provisioner-glusterfs/component.js new file mode 100644 index 000000000..9e8743c4d --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-glusterfs/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['resturl', 'restuser', 'restuserkey', + 'secretNamespace', 'secretName', 'clusterid', 'gidMin', 'gidMax', 'volumetype']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'glusterfs', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-glusterfs/template.hbs b/lib/shared/addon/components/storage-class/provisioner-glusterfs/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-glusterfs/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-portworx-volume/component.js b/lib/shared/addon/components/storage-class/provisioner-portworx-volume/component.js new file mode 100644 index 000000000..77d702ce8 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-portworx-volume/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['fs', 'block_size', 'repl', + 'io_priority', 'snap_interval', 'aggregation_level', 'ephemeral']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'portworx-volume', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-portworx-volume/template.hbs b/lib/shared/addon/components/storage-class/provisioner-portworx-volume/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-portworx-volume/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-quobyte/component.js b/lib/shared/addon/components/storage-class/provisioner-quobyte/component.js new file mode 100644 index 000000000..94dcacce8 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-quobyte/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['quobyteAPIServer', 'registry', 'adminSecretNamespace', + 'adminSecretName', 'user', 'group', 'quobyteConfig', 'quobyteTenant']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'quobyte', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-quobyte/template.hbs b/lib/shared/addon/components/storage-class/provisioner-quobyte/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-quobyte/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-rbd/component.js b/lib/shared/addon/components/storage-class/provisioner-rbd/component.js new file mode 100644 index 000000000..3a0bb5fa7 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-rbd/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['monitors', 'adminId', 'adminSecretNamespace', + 'adminSecret', 'pool', 'userId', 'userSecretName', 'fsType', 'imageFormat', 'imageFeatures']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'rbd', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-rbd/template.hbs b/lib/shared/addon/components/storage-class/provisioner-rbd/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-rbd/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-scaleio/component.js b/lib/shared/addon/components/storage-class/provisioner-scaleio/component.js new file mode 100644 index 000000000..3eaf7b575 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-scaleio/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['gateway', 'system', 'protectionDomain', + 'storagePool', 'storageMode', 'secretRef', 'readOnly', 'fsType']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'scaleio', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-scaleio/template.hbs b/lib/shared/addon/components/storage-class/provisioner-scaleio/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-scaleio/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-storageos/component.js b/lib/shared/addon/components/storage-class/provisioner-storageos/component.js new file mode 100644 index 000000000..3bd4a30d5 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-storageos/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['pool', 'description', 'fsType', + 'adminSecretNamespace', 'adminSecretName']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'storageos', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-storageos/template.hbs b/lib/shared/addon/components/storage-class/provisioner-storageos/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-storageos/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/component.js b/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/component.js new file mode 100644 index 000000000..bbc836cb6 --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/component.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from './template'; +import StorageClassProvisioner from 'shared/mixins/storage-class-provisioner'; + +const FIELDS = ['diskformat', 'storagePolicyName', 'datastore', + 'hostFailuresToTolerate', 'cachereservation', 'fstype']; + +export default Component.extend(StorageClassProvisioner, { + layout, + + provisioner: 'vsphere-volume', + fields: FIELDS, +}); diff --git a/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/template.hbs b/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/template.hbs new file mode 100644 index 000000000..e80e6de2f --- /dev/null +++ b/lib/shared/addon/components/storage-class/provisioner-vsphere-volume/template.hbs @@ -0,0 +1,12 @@ +{{#each fieldsGroup as |fields|}} +
+ {{#each fields as |field|}} +
+ + {{#input-or-display editable=editing value=(get model field)}} + {{input type="text" value=(get model field) classNames="form-control" placeholder=(t (concat 'cruStorageClass.' provisioner '.' field '.placeholder'))}} + {{/input-or-display}} +
+ {{/each}} +
+{{/each}} \ No newline at end of file diff --git a/lib/shared/addon/mixins/storage-class-provisioner.js b/lib/shared/addon/mixins/storage-class-provisioner.js index 14326f8ef..d0c378097 100644 --- a/lib/shared/addon/mixins/storage-class-provisioner.js +++ b/lib/shared/addon/mixins/storage-class-provisioner.js @@ -1,8 +1,62 @@ import Mixin from '@ember/object/mixin'; - +import { get, setProperties, computed } from '@ember/object'; export default Mixin.create({ parameters: null, editing: null, + fields: [], + model: null, + + didInsertElement() { + const fields = get(this, 'fields') || []; + if (fields.length > 0) { + fields.forEach(field => { + this.addObserver(`model.${field}`, this, 'sendUpdate'); + }); + this.sendUpdate(); + } + }, + + fieldsGroup: computed('fields.[]', function () { + const fields = get(this, 'fields') || []; + const group = []; + let groupIndex = 0; + fields.forEach((item, index) => { + if (index % 3 === 0) { + group.push([item]); + groupIndex++; + } else { + group[groupIndex - 1].push(item); + } + }); + return group; + }), + + didReceiveAttrs() { + const fields = get(this, 'fields') || []; + if (fields.length > 0) { + const changes = {}; + fields.forEach(field => { + changes[field] = get(this, `parameters.${field}`) || ''; + }); + setProperties(this, { + model: changes + }); + } + }, + + sendUpdate: function () { + const fields = get(this, 'fields') || []; + if (fields.length > 0) { + const out = {}; + fields.forEach(field => { + const value = get(this, `model.${field}`) || ''; + if (value) { + out[field] = value; + } + }); + this.sendAction('changed', out); + } + }, actions: { changed(map) { diff --git a/lib/shared/app/components/storage-class/provisioner-azure-disk/component.js b/lib/shared/app/components/storage-class/provisioner-azure-disk/component.js new file mode 100644 index 000000000..bc0e7fe8f --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-azure-disk/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-azure-disk/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-azure-file/component.js b/lib/shared/app/components/storage-class/provisioner-azure-file/component.js new file mode 100644 index 000000000..0f6c07677 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-azure-file/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-azure-file/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-cinder/component.js b/lib/shared/app/components/storage-class/provisioner-cinder/component.js new file mode 100644 index 000000000..7bebfc451 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-cinder/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-cinder/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-gce-pd/component.js b/lib/shared/app/components/storage-class/provisioner-gce-pd/component.js new file mode 100644 index 000000000..86ba9929b --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-gce-pd/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-gce-pd/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-glusterfs/component.js b/lib/shared/app/components/storage-class/provisioner-glusterfs/component.js new file mode 100644 index 000000000..a9c5cfd48 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-glusterfs/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-glusterfs/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-portworx-volume/component.js b/lib/shared/app/components/storage-class/provisioner-portworx-volume/component.js new file mode 100644 index 000000000..6f7cfe82f --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-portworx-volume/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-portworx-volume/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-quobyte/component.js b/lib/shared/app/components/storage-class/provisioner-quobyte/component.js new file mode 100644 index 000000000..3f9a188ac --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-quobyte/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-quobyte/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-rbd/component.js b/lib/shared/app/components/storage-class/provisioner-rbd/component.js new file mode 100644 index 000000000..d8708fb53 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-rbd/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-rbd/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-scaleio/component.js b/lib/shared/app/components/storage-class/provisioner-scaleio/component.js new file mode 100644 index 000000000..de8c5a13f --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-scaleio/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-scaleio/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-storageos/component.js b/lib/shared/app/components/storage-class/provisioner-storageos/component.js new file mode 100644 index 000000000..71bfe91e7 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-storageos/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-storageos/component'; diff --git a/lib/shared/app/components/storage-class/provisioner-vsphere-volume/component.js b/lib/shared/app/components/storage-class/provisioner-vsphere-volume/component.js new file mode 100644 index 000000000..703ab5448 --- /dev/null +++ b/lib/shared/app/components/storage-class/provisioner-vsphere-volume/component.js @@ -0,0 +1 @@ +export { default } from 'shared/components/storage-class/provisioner-vsphere-volume/component'; diff --git a/translations/en-us.yaml b/translations/en-us.yaml index 0c9ac2fbd..ce38d0524 100644 --- a/translations/en-us.yaml +++ b/translations/en-us.yaml @@ -1719,6 +1719,10 @@ cruRegistry: saved: Saved cruStorageClass: + name: + placeholder: e.g. storage + description: + placeholder: e.g. AWS EBS Storage title: new: Add Storage Class edit: 'Edit Storage Class: {name}' @@ -1753,6 +1757,7 @@ cruStorageClass: label: Availability Zone automatic: "Automatic: Zones the cluster has a node in" manual: "Manual: Choose specific zones" + placeholder: "us-east-1d, us-east-1c" iopsPerGB: label: Provisioned IOPS unit: per second, per GB @@ -1762,7 +1767,215 @@ cruStorageClass: label: KMS Key ID for Encryption automatic: "Automatic: Generate a key" manual: "Manual: Use a specific key (full ARN)" - + gce-pd: + type: + label: Volume Type + pd-standard: 'Standard' + pd-ssd: 'SSD' + zone: + label: Availability Zone + automatic: "Automatic: Zones the cluster has a node in" + manual: "Manual: Choose specific zones" + placeholder: "us-central1-a, us-central1-b" + cinder: + type: + label: Volume Type + placeholder: "e.g. fast" + availability: + label: Availability Zone + placeholder: "e.g. nova" + vsphere-volume: + diskformat: + label: Disk Format + placeholder: "e.g. thin" + storagePolicyName: + label: Storage Policy Name + placeholder: "e.g. gold" + datastore: + label: Datastore + placeholder: "e.g. VSANDatastore" + fstype: + label: FS Type + placeholder: "e.g. ext3" + hostFailuresToTolerate: + label: Host Failures To Tolerate + placeholder: "e.g. 2" + cachereservation: + label: Cache Reservation + placeholder: "e.g. 20" + azure-disk: + skuName: + label: Sku Name + placeholder: "e.g. Standard_LRS" + location: + label: Location + placeholder: "e.g. eastus" + storageAccount: + label: Storage Account + placeholder: "e.g. azure_storage_account_name" + storageaccounttype: + label: Storage Account Type + placeholder: "e.g. Standard_LRS" + kind: + label: Kind + placeholder: "e.g. Shared" + azure-file: + skuName: + label: Sku Name + placeholder: "e.g. Standard_LRS" + location: + label: Location + placeholder: "e.g. eastus" + storageAccount: + label: Storage Account + placeholder: "e.g. azure_storage_account_name" + portworx-volume: + fs: + label: Filesystem + placeholder: "e.g. ext4" + block_size: + label: Block Size + placeholder: "e.g. 32" + repl: + label: Repl + placeholder: "e.g. 1" + io_priority: + label: I/O Priority + placeholder: "e.g. low" + snap_interval: + label: Snapshots Interval + placeholder: "e.g. 70" + aggregation_level: + label: Aggregation Level + placeholder: "e.g. 0" + ephemeral: + label: Ephemeral + placeholder: "e.g. true" + scaleio: + gateway: + label: Gateway + placeholder: "e.g. https://192.168.99.200:443/api" + system: + label: System + placeholder: "e.g. scaleio" + protectionDomain: + label: Protection Domain + placeholder: "e.g. pd0" + storagePool: + label: Storage Pool + placeholder: "e.g. sp1" + storageMode: + label: Storage Mode + placeholder: "e.g. ThinProvisioned" + secretRef: + label: Secret Ref + placeholder: "e.g. sio-secret" + readOnly: + label: Read Only + placeholder: "e.g. false" + fsType: + label: FS Type + placeholder: "e.g. xfs" + storageos: + pool: + label: Pool + placeholder: "e.g. default" + description: + label: Description + placeholder: "e.g. Kubernetes volume" + adminSecretNamespace: + label: Admin Secret Namespace + placeholder: "e.g. default" + adminSecretName: + label: Admin Secret Name + placeholder: "e.g. storageos-secret" + fsType: + label: FS Type + placeholder: "e.g. ext4" + quobyte: + quobyteAPIServer: + label: Quobyte API Server + placeholder: "e.g. http://138.68.74.142:7860" + registry: + label: Registry + placeholder: "e.g. 138.68.74.142:7861" + adminSecretNamespace: + label: Admin Secret Namespace + placeholder: "e.g. kube-system" + adminSecretName: + label: Admin Secret Name + placeholder: "e.g. quobyte-admin-secret" + user: + label: User + placeholder: "e.g. root" + group: + label: Group + placeholder: "e.g. root" + quobyteConfig: + label: Quobyte Config + placeholder: "e.g. BASE" + quobyteTenant: + label: Quobyte Tenant + placeholder: "e.g. DEFAULT" + rbd: + monitors: + label: Monitors + placeholder: "e.g. 10.16.153.105:6789" + adminId: + label: Admin ID + placeholder: "e.g. kube" + adminSecretNamespace: + label: Admin Secret Namespace + placeholder: "e.g. kube-system" + adminSecret: + label: Admin Secret + placeholder: "e.g. secret" + pool: + label: Pool + placeholder: "e.g. kube" + userId: + label: User ID + placeholder: "e.g. kube" + userSecretName: + label: User Secret Name + placeholder: "e.g. ceph-secret-user" + fsType: + label: FS Type + placeholder: "e.g. ext4" + imageFormat: + label: Image Format + placeholder: "e.g. 2" + imageFeatures: + label: Image Features + placeholder: "e.g. layering" + glusterfs: + resturl: + label: REST URL + placeholder: "e.g. http://127.0.0.1:8081" + restuser: + label: REST User + placeholder: "e.g. admin" + restuserkey: + label: REST User Key + placeholder: "e.g. password" + secretNamespace: + label: Secret Namespace + placeholder: "e.g. default" + secretName: + label: Secret Name + placeholder: "e.g. heketi-secret" + clusterid: + label: Cluster ID + placeholder: "e.g. 630372ccdc720a92c681fb928f27b53f" + gidMin: + label: GID MIN + placeholder: "e.g. 40000" + gidMax: + label: GID MAX + placeholder: "e.g. 50000" + volumetype: + label: Volume Type + placeholder: "e.g. replicate:3" dangerZone: header: Advanced Settings @@ -2850,6 +3063,7 @@ formValueArray: addActionLabel: Add Value valueLabel: Value valuePlaceholder: Value + noData: No Data protip: "ProTip: Paste one or more lines of values into any field for easy bulk entry." formVolumeRow: