diff --git a/app/admin-tab/ha/controller.js b/app/admin-tab/ha/controller.js
index 9c7c1fecc..e50601259 100644
--- a/app/admin-tab/ha/controller.js
+++ b/app/admin-tab/ha/controller.js
@@ -8,7 +8,7 @@ export default Ember.Controller.extend({
{
translationKey: 'generic.uuid',
name: 'uuid',
- sort: ['stateSort','address','uuid'],
+ sort: ['sortState','address','uuid'],
},
{
translationKey: 'haPage.table.address',
diff --git a/app/authenticated/clusters/index/controller.js b/app/authenticated/clusters/index/controller.js
index f22393fa0..88a155c1c 100644
--- a/app/authenticated/clusters/index/controller.js
+++ b/app/authenticated/clusters/index/controller.js
@@ -1,5 +1,52 @@
import Ember from 'ember';
-import { headersWithCluster } from 'ui/components/cluster-box/component';
+
+const headers = [
+ {
+ name: 'expand',
+ sort: false,
+ searchField: null,
+ width: 30
+ },
+ {
+ name: 'state',
+ sort: ['stateSort','name','id'],
+ translationKey: 'generic.state',
+ width: 125,
+ },
+ {
+ name: 'name',
+ sort: ['displayName','id'],
+ translationKey: 'clustersPage.cluster.label',
+ },
+ {
+ name: 'hosts',
+ sort: ['numHosts','name','id'],
+ translationKey: 'clustersPage.hosts.label',
+ width: 100,
+ classNames: 'text-center',
+ },
+ {
+ name: 'cpu',
+ sort: ['numGhz','name','id'],
+ translationKey: 'clustersPage.cpu.label',
+ width: 100,
+ classNames: 'text-center',
+ },
+ {
+ name: 'memory',
+ sort: ['numMem','name','id'],
+ translationKey: 'clustersPage.memory.label',
+ width: 100,
+ classNames: 'text-center',
+ },
+ {
+ name: 'storage',
+ sort: ['numStorage','name','id'],
+ translationKey: 'clustersPage.storage.label',
+ width: 100,
+ classNames: 'text-center',
+ },
+];
export default Ember.Controller.extend({
queryParams: ['mode'],
@@ -11,10 +58,24 @@ export default Ember.Controller.extend({
settings: Ember.inject.service(),
application: Ember.inject.controller(),
- headers: headersWithCluster,
- sortBy: 'cluster',
+ headers: headers,
+ sortBy: 'name',
searchText: null,
+ bulkActions: true,
- sortClusters: ['name','id'],
- arrangedClusters: Ember.computed.sort('model.clusters','sortClusters'),
+ init() {
+ this._super(...arguments);
+ this.set('expandedClusters',[]);
+ },
+
+ actions: {
+ toggleExpand(id) {
+ let list = this.get('expandedClusters');
+ if ( list.includes(id) ) {
+ list.removeObject(id);
+ } else {
+ list.addObject(id);
+ }
+ },
+ },
});
diff --git a/app/authenticated/clusters/index/route.js b/app/authenticated/clusters/index/route.js
new file mode 100644
index 000000000..8e3725ecd
--- /dev/null
+++ b/app/authenticated/clusters/index/route.js
@@ -0,0 +1,18 @@
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+ actions: {
+ toggleGrouping() {
+ let choices = ['list','grouped'];
+ let cur = this.get('controller.mode');
+ let neu = choices[((choices.indexOf(cur)+1) % choices.length)];
+ Ember.run.next(() => {
+ this.set('controller.mode', neu);
+ });
+ },
+ },
+
+ shortcuts: {
+ 'g': 'toggleGrouping',
+ }
+});
diff --git a/app/authenticated/clusters/index/template.hbs b/app/authenticated/clusters/index/template.hbs
index 5c5fdcf40..81615b6b1 100644
--- a/app/authenticated/clusters/index/template.hbs
+++ b/app/authenticated/clusters/index/template.hbs
@@ -15,6 +15,11 @@
{{t 'clustersPage.newCluster'}}
{{/link-to}}
+
+ {{#link-to "authenticated.clusters.new-project" class="btn bg-primary btn-sm icon-btn"}}
+
+ {{t 'clustersPage.newProject'}}
+ {{/link-to}}
@@ -30,25 +35,25 @@
{{/unless}}
{{#if (eq mode "grouped")}}
- {{#each arrangedClusters as |cluster|}}
- {{cluster-box model=cluster}}
- {{/each}}
-{{else}}
{{#sortable-table
classNames="grid sortable-table"
- body=model.projects
+ body=model.clusters
searchText=searchText
sortBy=sortBy
- bulkActions=true
+ bulkActions=false
fullRows=true
- pagingLabel="pagination.project"
+ subRows=true
+ pagingLabel="pagination.cluster"
headers=headers as |sortable kind inst dt|
}}
- {{project-row
+ {{cluster-row
model=inst
- showCluster=true
fullColspan=sortable.fullColspan
+ toggle=(action "toggleExpand" inst.id)
+ expanded=(array-includes expandedClusters inst.id)
dt=dt
}}
{{/sortable-table}}
+{{else}}
+ {{project-table model=model.projects showCluster=true}}
{{/if}}
diff --git a/app/authenticated/clusters/new-project/route.js b/app/authenticated/clusters/new-project/route.js
index 17cc0de06..241cebbd4 100644
--- a/app/authenticated/clusters/new-project/route.js
+++ b/app/authenticated/clusters/new-project/route.js
@@ -13,7 +13,6 @@ export default Ember.Route.extend({
}).then((hash) => {
var project = userStore.createRecord({
type: 'project',
- clusterId: params.clusterId,
name: '',
description: '',
});
diff --git a/app/authenticated/project/apikeys/account/controller.js b/app/authenticated/project/apikeys/account/controller.js
index 719a1fdf4..2a2462151 100644
--- a/app/authenticated/project/apikeys/account/controller.js
+++ b/app/authenticated/project/apikeys/account/controller.js
@@ -5,15 +5,6 @@ export default Ember.Controller.extend({
access: Ember.inject.service(),
'tab-session': Ember.inject.service(),
- sortBy: 'name',
- sorts: {
- state: ['stateSort','name','id'],
- name: ['name','id'],
- description: ['description','name','id'],
- publicValue: ['publicValue','id'],
- created: ['created','name','id'],
- },
-
application: Ember.inject.controller(),
cookies: Ember.inject.service(),
projects: Ember.inject.service(),
@@ -23,10 +14,11 @@ export default Ember.Controller.extend({
modalService: Ember.inject.service('modal'),
bulkActionHandler: Ember.inject.service(),
+ sortBy: 'name',
headers: [
{
name: 'state',
- sort: ['stateSort','name','id'],
+ sort: ['sortState','name','id'],
translationKey: 'apiPage.table.state',
width: 125,
},
diff --git a/app/authenticated/project/hooks/index/controller.js b/app/authenticated/project/hooks/index/controller.js
index 85195ec47..2a2b7bec8 100644
--- a/app/authenticated/project/hooks/index/controller.js
+++ b/app/authenticated/project/hooks/index/controller.js
@@ -8,7 +8,7 @@ export default Ember.Controller.extend({
{
translationKey: 'generic.state',
name: 'state',
- sort: ['stateSort','name','id'],
+ sort: ['sortState','name','id'],
width: '121'
},
{
diff --git a/app/certificates/index/controller.js b/app/certificates/index/controller.js
index 328788124..787adebdc 100644
--- a/app/certificates/index/controller.js
+++ b/app/certificates/index/controller.js
@@ -5,7 +5,7 @@ export default Ember.Controller.extend({
headers: [
{
name: 'state',
- sort: ['stateSort','name','id'],
+ sort: ['sortState','name','id'],
translationKey: 'certificatesPage.index.table.header.state',
width: 125,
},
diff --git a/app/components/cluster-box/template.hbs b/app/components/cluster-box/template.hbs
deleted file mode 100644
index 16e5ef8f7..000000000
--- a/app/components/cluster-box/template.hbs
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
- {{#unless (eq model.state 'active')}}
- {{badge-state model=model}}
- {{/unless}}
-
-
- {{#if model.registrationToken.hostCommand}}
- {{#if model.registrationToken.clusterCommand}}
- {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-transparent icon-btn ml-20"}}
- {{t 'clusterBox.importCluster'}}
- {{/link-to}}
- {{/if}}
- {{#link-to "authenticated.clusters.cluster.host-templates" model.id (query-params backTo="clusters") class="btn btn-sm bg-primary icon-btn ml-20"}}
-
- {{t 'clusterBox.addHost'}}
- {{/link-to}}
- {{/if}}
- {{#if model.registrationToken.clusterCommand}}
- {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-primary icon-btn ml-20"}}
-
- {{t 'clusterBox.importCluster'}}
- {{/link-to}}
- {{/if}}
- {{action-menu model=model showPrimary=false classNames="ml-10 inline-block" size="sm"}}
-
-
-
-
-
-{{#if model.showTransitioningMessage}}
- {{model.transitioningMessage}}
-{{/if}}
-
-{{#if (eq model.state 'active')}}
-
-
-
-
Hosts
-
-
{{model.numHosts}} Total
-
-
-
-
-
-
-
CPU
-
-
{{model.numGhz}} Total GHz
-
-
-
-
-
-
-
Memory
-
-
{{model.numMem}} Total GB
-
-
-
-
-
-
-
Storage
-
-
{{model.numStorage}} Total GB
-
-
-
-
-
-{{/if}}
-
-
- {{#sortable-table
- tableClassNames="bordered"
- bulkActions=true
- rightActions=true
- paging=true
- pagingLabel="pagination.project"
- search=true
- sortBy=sortBy
- descending=descending
- headers=headers
- body=model.projects
- fullRows=true
- stickyHeader=false
- as |sortable kind p dt|
- }}
- {{#if (eq kind "row")}}
- {{project-row model=p dt=dt}}
- {{else if (eq kind "nomatch")}}
-
| {{t 'clusterBox.noMatch'}} |
- {{else if (eq kind "norows")}}
- | {{t 'clusterBox.noData'}} |
- {{else if (eq kind "right-actions")}}
- {{#link-to "authenticated.clusters.new-project" (query-params clusterId=model.id) class="btn btn-sm bg-link icon-btn"}}
-
- {{t 'clustersPage.newProject'}}
- {{/link-to}}
- {{/if}}
- {{/sortable-table}}
-
diff --git a/app/components/cluster-row/component.js b/app/components/cluster-row/component.js
new file mode 100644
index 000000000..0f4bc940b
--- /dev/null
+++ b/app/components/cluster-row/component.js
@@ -0,0 +1,14 @@
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+ model: null,
+ tagName: '',
+
+ expanded: null,
+
+ actions: {
+ toggle() {
+ this.sendAction('toggle');
+ },
+ },
+});
diff --git a/app/components/cluster-row/template.hbs b/app/components/cluster-row/template.hbs
new file mode 100644
index 000000000..3df042239
--- /dev/null
+++ b/app/components/cluster-row/template.hbs
@@ -0,0 +1,66 @@
+
+ |
+ Open accordion
+ |
+
+ {{badge-state model=model}}
+ |
+
+ {{model.displayName}}
+ |
+ {{#if (eq model.state "inactive")}}
+
+ {{#if (or model.registrationToken.hostCommand model.registrationToken.clusterCommand)}}
+ {{#if model.registrationToken.hostCommand}}
+ {{#link-to "authenticated.clusters.cluster.host-templates" model.id (query-params backTo="clusters") class="btn btn-sm bg-primary icon-btn ml-20"}}
+
+ {{t 'clusterRow.addHost'}}
+ {{/link-to}}
+ {{/if}}
+ {{#if model.registrationToken.clusterCommand}}
+ {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-primary icon-btn ml-20"}}
+
+ {{t 'clusterRow.importCluster'}}
+ {{/link-to}}
+ {{/if}}
+ {{else}}
+ {{t 'clusterRow.noHosts'}}
+ {{/if}}
+ |
+ {{else}}
+
+ {{model.numHosts}}
+ |
+
+ {{model.numGhz}} GHz
+ |
+
+ {{model.numMem}} GiB
+ |
+
+ {{model.numStorage}} GiB
+ |
+ {{/if}}
+
+ {{action-menu model=model}}
+ |
+
+
+
+ | {{! expand}} |
+
+ {{#if expanded}}
+ {{project-table
+ model=model.projects
+ bulkActions=false
+ search=false
+ }}
+ {{/if}}
+ |
+
+
+{{#if expanded}}
+
+ |
+
+{{/if}}
diff --git a/app/components/container-table/component.js b/app/components/container-table/component.js
index 0b40c762d..dbb17e9e5 100644
--- a/app/components/container-table/component.js
+++ b/app/components/container-table/component.js
@@ -3,7 +3,7 @@ import Ember from 'ember';
export const headersAll = [
{
name: 'state',
- sort: ['stateSort','sortName','id'],
+ sort: ['sortState','sortName','id'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 150,
diff --git a/app/components/env-catalog/template.hbs b/app/components/env-catalog/template.hbs
index 18e6ba10c..a04b63afb 100644
--- a/app/components/env-catalog/template.hbs
+++ b/app/components/env-catalog/template.hbs
@@ -56,7 +56,14 @@
|
- {{t 'generic.environment'}}
+ {{new-select
+ classNames="form-control"
+ content=kindChoices
+ optionLabelPath="translationKey"
+ optionValuePath="value"
+ localizedLabel=true
+ value=row.kind
+ }}
|
|
diff --git a/app/components/new-edit-cluster/component.js b/app/components/new-edit-cluster/component.js
index a774d92fa..eda7c22dd 100644
--- a/app/components/new-edit-cluster/component.js
+++ b/app/components/new-edit-cluster/component.js
@@ -2,11 +2,20 @@ import Ember from 'ember';
import NewOrEdit from 'ui/mixins/new-or-edit';
export default Ember.Component.extend(NewOrEdit, {
+ projects: Ember.inject.service(),
+
editing: true,
primaryResource: Ember.computed.alias('cluster'),
cluster: null,
+ didInsertElement() {
+ let el = this.$('INPUT')[0];
+ if ( el ) {
+ el.focus();
+ }
+ },
+
actions: {
done() {
this.sendAction('done');
@@ -25,7 +34,13 @@ export default Ember.Component.extend(NewOrEdit, {
},
},
- doneSaving: function() {
+ didSave() {
+ return this.get('primaryResource').waitForTransition().then(() => {
+ return this.get('projects').refreshAll();
+ });
+ },
+
+ doneSaving() {
this.send('cancel');
}
});
diff --git a/app/components/project-row/template.hbs b/app/components/project-row/template.hbs
index 5bcd97a68..dacd12417 100644
--- a/app/components/project-row/template.hbs
+++ b/app/components/project-row/template.hbs
@@ -1,6 +1,8 @@
- |
- {{check-box nodeId=model.id}}
- |
+{{#if bulkActions}}
+
+ {{check-box nodeId=model.id}}
+ |
+{{/if}}
{{badge-state model=model}}
|
diff --git a/app/components/cluster-box/component.js b/app/components/project-table/component.js
similarity index 67%
rename from app/components/cluster-box/component.js
rename to app/components/project-table/component.js
index 3180a9537..3b3243fd7 100644
--- a/app/components/cluster-box/component.js
+++ b/app/components/project-table/component.js
@@ -1,9 +1,9 @@
import Ember from 'ember';
-export const headersWithCluster = [
+const headersWithCluster = [
{
name: 'state',
- sort: ['stateSort','name','id'],
+ sort: ['sortState','name','id'],
translationKey: 'generic.state',
width: 125,
},
@@ -11,11 +11,13 @@ export const headersWithCluster = [
name: 'cluster',
sort: ['cluster.displayName','displayName','id'],
translationKey: 'clustersPage.cluster.label',
+ searchField: ['cluster.displayName'],
},
{
name: 'name',
sort: ['displayName','id'],
translationKey: 'clustersPage.environment.label',
+ searchField: ['displayName'],
},
{
name: 'stacks',
@@ -41,17 +43,25 @@ export const headersWithCluster = [
{
name: 'default',
sort: false,
- translationKey: 'clusterBox.loginDefault',
+ translationKey: 'clusterRow.loginDefault',
width: 60,
classNames: 'text-center',
},
];
-export const headersWithoutCluster = headersWithCluster.filter(x => x.name !== 'cluster');
+const headersWithoutCluster = headersWithCluster.filter(x => x.name !== 'cluster');
export default Ember.Component.extend({
- classNames: ['box','mt-20','pt-0'],
+ tagName: '',
+ showCluster: false,
+ bulkActions: true,
+ search: true,
- sortBy: 'name',
- headers: headersWithoutCluster,
+ headers: Ember.computed('showCluster', function() {
+ if ( this.get('showCluster') ) {
+ return headersWithCluster;
+ } else {
+ return headersWithoutCluster;
+ }
+ }),
});
diff --git a/app/components/project-table/template.hbs b/app/components/project-table/template.hbs
new file mode 100644
index 000000000..7d672f7bb
--- /dev/null
+++ b/app/components/project-table/template.hbs
@@ -0,0 +1,22 @@
+{{#sortable-table
+ tableClassNames="bordered"
+ bulkActions=bulkActions
+ paging=true
+ pagingLabel="pagination.project"
+ search=search
+ sortBy=sortBy
+ descending=descending
+ headers=headers
+ body=model
+ fullRows=true
+ stickyHeader=false
+ as |sortable kind p dt|
+}}
+ {{#if (eq kind "row")}}
+ {{project-row model=p dt=dt showCluster=showCluster search=search bulkActions=bulkActions}}
+ {{else if (eq kind "nomatch")}}
+ | {{t 'clusterRow.noMatch'}} |
+ {{else if (eq kind "norows")}}
+ | {{t 'clusterRow.noData'}} |
+ {{/if}}
+{{/sortable-table}}
diff --git a/app/components/view-edit-project/component.js b/app/components/view-edit-project/component.js
index 121046f2b..5372692f4 100644
--- a/app/components/view-edit-project/component.js
+++ b/app/components/view-edit-project/component.js
@@ -41,7 +41,14 @@ export default Ember.Component.extend(NewOrEdit, {
width: '40',
},
],
+
stacks: null,
+ clusters: null,
+
+ init() {
+ this._super(...arguments);
+ this.set('clusters', this.get('userStore').all('cluster'));
+ },
actions: {
cancel() {
diff --git a/app/components/view-edit-project/template.hbs b/app/components/view-edit-project/template.hbs
index 5a56cc993..b73256f9c 100644
--- a/app/components/view-edit-project/template.hbs
+++ b/app/components/view-edit-project/template.hbs
@@ -24,6 +24,19 @@
descriptionPlaceholder="viewEditDescription.form.description.placeholder"
}}
+
+
+
+ {{new-select
+ classNames="form-control"
+ optionValuePath="id"
+ optionLabelPath="displayName"
+ content=clusters
+ value=project.clusterId
+ prompt="viewEditProject.showEdit.cluster.prompt"
+ localizedPrompt=true
+ }}
+
{{else if project.description}}
diff --git a/app/container/controller.js b/app/container/controller.js
index e3f173c2a..6d60adf04 100644
--- a/app/container/controller.js
+++ b/app/container/controller.js
@@ -42,7 +42,7 @@ export default Ember.Controller.extend({
storageHeaders: [
{
name: 'state',
- sort: ['stateSort','displayUri','id'],
+ sort: ['sortState','displayUri','id'],
translationKey: 'hostsPage.hostPage.storageTab.table.header.state',
width: 125,
},
diff --git a/app/containers/index/controller.js b/app/containers/index/controller.js
index 4d2f070ed..0503ad0b6 100644
--- a/app/containers/index/controller.js
+++ b/app/containers/index/controller.js
@@ -10,7 +10,7 @@ export const headers = [
},
{
name: 'state',
- sort: ['stateSort','displayName'],
+ sort: ['sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
diff --git a/app/dns/index/controller.js b/app/dns/index/controller.js
index 1ae09a6d1..7c82d5f8b 100644
--- a/app/dns/index/controller.js
+++ b/app/dns/index/controller.js
@@ -30,7 +30,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stack.isDefault:desc','stack.displayName','stateSort','displayName'],
+ sort: ['stack.isDefault:desc','stack.displayName','sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
diff --git a/app/host/controller.js b/app/host/controller.js
index 45bef8d92..be78486bf 100644
--- a/app/host/controller.js
+++ b/app/host/controller.js
@@ -16,7 +16,7 @@ export default Ember.Controller.extend(ContainerSparkStats, {
storageHeaders: [
{
name: 'state',
- sort: ['stateSort','displayUri','id'],
+ sort: ['sortState','displayUri','id'],
translationKey: 'hostsPage.hostPage.storageTab.table.header.state',
width: 125,
},
diff --git a/app/hosts/index/controller.js b/app/hosts/index/controller.js
index cbe85bb7f..2446f63c3 100644
--- a/app/hosts/index/controller.js
+++ b/app/hosts/index/controller.js
@@ -44,7 +44,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stateSort','displayName'],
+ sort: ['sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
diff --git a/app/mixins/cattle-transitioning-resource.js b/app/mixins/cattle-transitioning-resource.js
index 8bfef3ef9..5cc53b18c 100644
--- a/app/mixins/cattle-transitioning-resource.js
+++ b/app/mixins/cattle-transitioning-resource.js
@@ -112,6 +112,10 @@ export default Ember.Mixin.create({
return this.get('name') || '('+this.get('id')+')';
}.property('name','id'),
+ sortName: function() {
+ return Util.sortableNumericSuffix(this.get('displayName'));
+ }.property('displayName'),
+
isTransitioning: Ember.computed.equal('transitioning','yes'),
isError: Ember.computed.equal('transitioning','error'),
isRemoved: Ember.computed('state', () => { return !C.REMOVEDISH_STATES.includes(this.state); }),
@@ -214,7 +218,7 @@ export default Ember.Mixin.create({
return this.constructor.defaultStateColor;
}.property('relevantState','isError'),
- stateSort: function() {
+ sortState: function() {
var color = this.get('stateColor').replace('text-','');
return (stateColorSortMap[color] || stateColorSortMap['other']) + ' ' + this.get('relevantState');
}.property('stateColor','relevantState'),
@@ -522,10 +526,10 @@ export default Ember.Mixin.create({
}, 'Wait for state='+state);
},
- waitForNotTransitioning: function() {
+ waitForTransition: function() {
return this._waitForTestFn(function() {
return this.get('transitioning') !== 'yes';
- }, 'Wait for not transitioning');
+ }, 'Wait for transition');
},
waitForAction: function(name) {
diff --git a/app/mixins/state-counts.js b/app/mixins/state-counts.js
index e4605e523..93d617b62 100644
--- a/app/mixins/state-counts.js
+++ b/app/mixins/state-counts.js
@@ -16,7 +16,7 @@ export default Ember.Mixin.create({
let good = 0;
let notGood = 0;
- this.get(inputKey).sortBy('stateSort').forEach((inst) => {
+ this.get(inputKey).sortBy('sortState').forEach((inst) => {
let color = inst.get('stateBackground');
if ( color === 'bg-muted' ) {
color = 'bg-success';
diff --git a/app/models/container.js b/app/models/container.js
index 71c5c8b45..34c78d8a9 100644
--- a/app/models/container.js
+++ b/app/models/container.js
@@ -206,10 +206,6 @@ var Container = Instance.extend(EndpointPorts, {
return (this.get('labels')||{})[C.LABEL.SCHED_GLOBAL] + '' === 'true';
}.property('labels'),
- sortName: function() {
- return Util.sortableNumericSuffix(this.get('displayName'));
- }.property('displayName'),
-
isSidekick: function() {
return (this.get('labels')||{})[C.LABEL.LAUNCH_CONFIG] + '' !== C.LABEL.LAUNCH_CONFIG_PRIMARY;
}.property('labels'),
diff --git a/app/models/machinedriver.js b/app/models/machinedriver.js
index c78beeaa8..ac1b89be3 100644
--- a/app/models/machinedriver.js
+++ b/app/models/machinedriver.js
@@ -4,7 +4,7 @@ import PolledResource from 'ui/mixins/cattle-polled-resource';
import C from 'ui/utils/constants';
import { parseExternalId } from 'ui/utils/parse-externalid';
-const builtInUi = ['amazonec2','azure','digitalocean','exoscale','packet','rackspace','vmwarevsphere','aliyunecs'];
+export const builtInUi = ['amazonec2','azure','digitalocean','exoscale','packet','rackspace','vmwarevsphere','aliyunecs'];
function displayUrl(url) {
url = url||'';
diff --git a/app/registries/index/controller.js b/app/registries/index/controller.js
index 539bb441d..74c6c9241 100644
--- a/app/registries/index/controller.js
+++ b/app/registries/index/controller.js
@@ -5,7 +5,7 @@ export default Ember.Controller.extend({
headers: [
{
name: 'state',
- sort: ['stateSort','displayAddress','id'],
+ sort: ['sortState','displayAddress','id'],
translationKey: 'registriesPage.index.table.header.state',
width: 125,
},
diff --git a/app/secrets/index/controller.js b/app/secrets/index/controller.js
index b32a0d38e..d8f608678 100644
--- a/app/secrets/index/controller.js
+++ b/app/secrets/index/controller.js
@@ -8,8 +8,8 @@ export default Ember.Controller.extend({
headers: [
{
- name: 'stateSort',
- sort: ['stateSort','name','id'],
+ name: 'state',
+ sort: ['sortState','name','id'],
type: 'string',
searchField: 'displayState',
translationKey: 'generic.state',
diff --git a/app/stack/index/controller.js b/app/stack/index/controller.js
index d17668755..495703581 100644
--- a/app/stack/index/controller.js
+++ b/app/stack/index/controller.js
@@ -45,7 +45,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stack.isDefault:desc','stack.displayName','stateSort','displayName'],
+ sort: ['stack.isDefault:desc','stack.displayName','sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
@@ -79,7 +79,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stateSort','displayName'],
+ sort: ['sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
@@ -115,7 +115,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stateSort','displayName'],
+ sort: ['sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
diff --git a/app/volumes/index/controller.js b/app/volumes/index/controller.js
index eb7a0c556..882da98e2 100644
--- a/app/volumes/index/controller.js
+++ b/app/volumes/index/controller.js
@@ -30,7 +30,7 @@ export default Ember.Controller.extend({
},
{
name: 'state',
- sort: ['stateSort','displayName'],
+ sort: ['sortState','displayName'],
searchField: 'displayState',
translationKey: 'generic.state',
width: 120
diff --git a/translations/en-us.yaml b/translations/en-us.yaml
index 360c13565..fbffe869f 100644
--- a/translations/en-us.yaml
+++ b/translations/en-us.yaml
@@ -471,6 +471,16 @@ clustersPage:
label: Cluster Name
environment:
label: Environment Name
+ projects:
+ label: Environments
+ hosts:
+ label: Hosts
+ cpu:
+ label: CPU
+ memory:
+ label: RAM
+ storage:
+ label: Disk
containerPage:
header: 'Container: {name}'
@@ -1299,9 +1309,10 @@ catalogSettings:
label: Branch
placeholder: 'e.g. master'
-clusterBox:
+clusterRow:
noMatch: No environments match the current search
noData: This cluster doesn't have any environments yet.
+ noHosts: External cluster has no hosts
addHost: Add Hosts
importCluster: Use existing Kubernetes
loginDefault: Login
@@ -3348,6 +3359,9 @@ viewEditProject:
edit: "Edit Environment:"
add: Add Environment
template: Environment Template
+ cluster:
+ label: Cluster
+ prompt: Select a Cluster...
accessControl: Access Control
noMembers: Add one or more members who can use this environment.
networkPolicy: