diff --git a/app/admin-tab/route.js b/app/admin-tab/auth/route.js similarity index 100% rename from app/admin-tab/route.js rename to app/admin-tab/auth/route.js diff --git a/app/components/host-pod/component.js b/app/components/host-pod/component.js index a532fa708..7545668ca 100644 --- a/app/components/host-pod/component.js +++ b/app/components/host-pod/component.js @@ -41,7 +41,9 @@ export default Ember.Component.extend(ManageLabels, GroupedInstances, { isActive: Ember.computed.equal('model.state','active'), isProvisioning: Ember.computed.equal('model.state','provisioning'), + isError: Ember.computed.equal('model.state','error'), showAdd: Ember.computed.alias('isActive'), + showOnlyMessage: Ember.computed.or('isProvisioning','isError'), stateBackground: function() { return this.get('model.stateColor').replace("text-","bg-"); diff --git a/app/components/host-pod/template.hbs b/app/components/host-pod/template.hbs index 1f5127fc6..afa76644d 100644 --- a/app/components/host-pod/template.hbs +++ b/app/components/host-pod/template.hbs @@ -5,21 +5,24 @@
{{model.displayName}} - {{#if (and (not isProvisioning) model.showTransitioningMessage)}} + {{#if (and (not showOnlyMessage) model.showTransitioningMessage)}}
{{model.transitioningMessage}}
{{/if}}
-{{#if isProvisioning}} +{{#if showOnlyMessage}}
- {{model.transitioningMessage}} + {{model.transitioningMessage}}
{{else}}
-
{{format-ip model.displayIp}}
+ {{#if model.displayIp}} +
{{format-ip model.displayIp}}
+ {{/if}} + {{#if model.dockerBlurb}}
{{model.dockerBlurb}}
{{/if}} diff --git a/app/components/machine/driver-digitalocean/component.js b/app/components/machine/driver-digitalocean/component.js index a1943dad7..ad7d8862d 100644 --- a/app/components/machine/driver-digitalocean/component.js +++ b/app/components/machine/driver-digitalocean/component.js @@ -6,7 +6,7 @@ import Util from 'ui/utils/util'; const DIGITALOCEAN_API = 'api.digitalocean.com/v2'; const VALID_IMAGES = [ // 'centos-6-x64', -// 'centos-7-0-x64', + 'centos-7-0-x64', // 'coreos-alpha', // 'coreos-beta', // 'coreos-stable', @@ -17,7 +17,8 @@ const VALID_IMAGES = [ // 'freebsd-10-1-x64', // 'freebsd-10-2-x64', 'ubuntu-14-04-x64', -// 'ubuntu-16-04-x64' + 'ubuntu-16-04-x64' +// 'ubuntu-16-10-x64' ]; export default Ember.Component.extend(Driver, { @@ -61,6 +62,7 @@ export default Ember.Component.extend(Driver, { }); let filteredImages = hash.images.images.filter(function(image) { + // 64-bit only return !((image.name||'').match(/x32$/)); }).map(function(image) { image.disabled = VALID_IMAGES.indexOf(image.slug) === -1; @@ -99,7 +101,7 @@ export default Ember.Component.extend(Driver, { accessToken : '', size : '1gb', region : 'nyc3', - image : 'ubuntu-14-04-x64' + image : 'ubuntu-16-04-x64' }); this.set('model', this.get('store').createRecord({ diff --git a/app/components/upgrade-btn/template.hbs b/app/components/upgrade-btn/template.hbs index 7d6fd9a51..c3d1b6df2 100644 --- a/app/components/upgrade-btn/template.hbs +++ b/app/components/upgrade-btn/template.hbs @@ -1 +1,3 @@ -{{t (concat-str 'upgradeBtn.status.' upgradeStatus character='')}} +{{#tooltip-element type="tooltip-basic" model=currentVersion tooltipTemplate='tooltip-static' aria-describedby="tooltip-base"}} + {{t (concat-str 'upgradeBtn.status.' upgradeStatus character='')}} +{{/tooltip-element}} diff --git a/app/mixins/subscribe.js b/app/mixins/subscribe.js index cfa65351b..ae4f9b369 100644 --- a/app/mixins/subscribe.js +++ b/app/mixins/subscribe.js @@ -5,6 +5,12 @@ import C from 'ui/utils/constants'; let DEADTOME = ['removed','purging','purged']; +const ORCHESTRATION_STACKS = [ + 'infra*k8s', + 'infra*swarm', + 'infra*mesos' +]; + export default Ember.Mixin.create({ k8s : Ember.inject.service(), projects : Ember.inject.service(), @@ -156,32 +162,16 @@ export default Ember.Mixin.create({ console.log('Subscribe ping ' + this.forStr()); }, - loadBalancerTargetChanged: function(change) { - this._includeChanged('loadBalancer', 'loadBalancerTargets', 'loadBalancerId', change.data.resource); - }, + stackChanged: function(change) { + let stack = change.data.resource; - loadBalancerChanged: function(change) { - var balancer = change.data.resource; - var config = balancer.get('loadBalancerConfig'); - var balancers = config.get('loadBalancers'); - if ( !balancers ) - { - balancers = []; - config.set('loadBalancers',balancers); + if ( ORCHESTRATION_STACKS.indexOf(stack.get('externalIdInfo.name')) >= 0 ) { + Ember.run.once(this, function() { + this.get('projects.current').reload().then(() => { + this.get('projects').updateOrchestrationState(); + }); + }); } - - if ( config.get('state') === 'removed' ) - { - balancers.removeObject(balancer); - } - else - { - balancers.addObject(balancer); - } - }, - - registryCredentialChanged: function(change) { - this._includeChanged('registry', 'credentials', 'registryId', change.data.resource); }, k8sResourceChanged: function(changeType, obj) { @@ -200,96 +190,4 @@ export default Ember.Mixin.create({ this.get('store')._remove(resource.get('type'), resource); } }, - - // Update the `?include=`-ed arrays of a host, - // e.g. when an instance changes: - // Update the destProperty='instances' array on all models of type resourceName='hosts'. - // to match the list in the the 'changed' resource's expectedProperty='hosts' - // _includeChanged( 'host', 'hosts', 'instances', 'hosts', instance) - _includeChanged: function(resourceName, destProperty, expectedProperty, changed) { - if (!changed) - { - return; - } - - let start = (new Date().getTime()); - - var changedId = changed.get('id'); - var store = this.get('store'); - - //console.log('Include changed',resourceName,destProperty,expectedProperty,changedId); - - // All the resources - var all = store.all(resourceName); - - // IDs the resource should be on - var expectedIds = []; - var expected = changed.get(expectedProperty)||[]; - if ( !Ember.isArray(expected) ) - { - expected = [expected]; - } - - if ( changed.get('state') !== 'purged' ) - { - expectedIds = expected.map(function(item) { - if ( typeof item === 'object' ) - { - return item.get('id'); - } - else - { - return item; - } - }); - } - - // IDs it is currently on - var curIds = []; - all.forEach(function(item) { - var existing = (item.get(destProperty)||[]).filterBy('id', changedId); - if ( existing.length ) - { - curIds.push(item.get('id')); - } - }); - - // Remove from resources the changed shouldn't be on - var remove = Util.arrayDiff(curIds, expectedIds); - remove.forEach((id) => { - //console.log('Remove',id); - store.find(resourceName, id).then((item) => { - var list = item.get(destProperty); - if ( list ) - { - //console.log('Removing',changedId,'from',item.get('id')); - list.removeObjects(list.filterBy('id', changedId)); - } - }).catch(() => {}); - }); - - // Add or update resources the changed should be on - expectedIds.forEach((id) => { - //console.log('Expect',id); - store.find(resourceName, id).then((item) => { - var list = item.get(destProperty); - if ( !list ) - { - list = []; - //console.log('Adding empty to',item.get('id'), destProperty); - item.set(destProperty, list); - } - - var existing = list.filterBy('id', changedId); - if ( existing.length === 0) - { - //console.log('Adding',changedId,'to',item.get('id'), destProperty); - list.pushObject(changed); - } - }).catch(() => {}); - }); - - let diff = ((new Date()).getTime())-start; - console.log('includechanged:', resourceName, destProperty, expectedProperty, diff); - }, }); diff --git a/app/models/stack.js b/app/models/stack.js index ae6175e55..3f6b21341 100644 --- a/app/models/stack.js +++ b/app/models/stack.js @@ -5,12 +5,6 @@ import C from 'ui/utils/constants'; import Util from 'ui/utils/util'; import { denormalizeServiceArray } from 'ui/utils/denormalize-snowflakes'; -const ORCHESTRATION_STACKS = [ - 'infra*k8s', - 'infra*swarm', - 'infra*mesos' -]; - export function activeIcon(stack) { if ( stack.get('system') ) @@ -253,17 +247,6 @@ var Stack = Resource.extend({ return true; }, - - updateOrchestrationState: function() { - if ( ORCHESTRATION_STACKS.indexOf(this.get('externalIdInfo.name')) >= 0 ) { - Ember.run.once(this, function() { - this.get('projectsService').updateOrchestrationState(); - if ( ['updating-active','activating','active'].indexOf(this.get('state')) >= 0 ) { - this.get('projectsService.current').reload(); - } - }); - } - }.observes('combinedState'), }); Stack.reopenClass({ diff --git a/app/stacks/index/controller.js b/app/stacks/index/controller.js index f726bacee..cd2dcb1bf 100644 --- a/app/stacks/index/controller.js +++ b/app/stacks/index/controller.js @@ -118,8 +118,8 @@ export default Ember.Controller.extend(Sortable, { return out; - // stateSort isn't really a dependency here, but sortable won't recompute when it changes otherwise - }.property('model.[]','model.@each.{stateSort,grouping}','which','tags'), + // state isn't really a dependency here, but sortable won't recompute when it changes otherwise + }.property('model.stacks.[]','model.stacks.@each.{state,grouping}','which','tags'), sortableContent: Ember.computed.alias('filteredStacks'), sortBy: 'name', diff --git a/package.json b/package.json index 4010657f9..f2eea3464 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui", - "version": "1.2.15", + "version": "1.2.17", "private": true, "directories": { "doc": "doc",