You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2014/11/18 13:20:59 UTC
ambari git commit: AMBARI-8364 Create mocks for installing repo
versions per on hosts. (ababiichuk)
Repository: ambari
Updated Branches:
refs/heads/trunk 70c640772 -> 03b45ee1d
AMBARI-8364 Create mocks for installing repo versions per on hosts. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/03b45ee1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/03b45ee1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/03b45ee1
Branch: refs/heads/trunk
Commit: 03b45ee1dbbadcf1960be3656234f6a1920aa1d6
Parents: 70c6407
Author: aBabiichuk <ab...@cybervisiontech.com>
Authored: Tue Nov 18 13:56:51 2014 +0200
Committer: aBabiichuk <ab...@cybervisiontech.com>
Committed: Tue Nov 18 14:21:00 2014 +0200
----------------------------------------------------------------------
.../host_upgrade_tasks.json | 52 +++++++++
.../data/stack_versions/stack_version_all.json | 18 ++--
ambari-web/app/assets/test/tests.js | 1 +
.../stack_version_details_controller.js | 107 ++++++++++++++++++-
.../stack_versions/stack_versions_controller.js | 28 ++---
ambari-web/app/mappers/stack_version_mapper.js | 12 ++-
ambari-web/app/messages.js | 2 +
ambari-web/app/models/stack_version/version.js | 62 ++++++++++-
ambari-web/app/styles/application.less | 19 ++--
.../stack_versions/stack_version_details.hbs | 10 +-
.../admin/stack_versions/stack_versions.hbs | 18 ++--
ambari-web/app/utils/ajax/ajax.js | 16 ++-
.../stack_version_details_view.js | 44 ++------
.../stack_version_details_controller_test.js | 95 ++++++++++++++++
.../stack_version/stack_version_details_test.js | 49 +--------
15 files changed, 404 insertions(+), 129 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/assets/data/background_operations/host_upgrade_tasks.json
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/data/background_operations/host_upgrade_tasks.json b/ambari-web/app/assets/data/background_operations/host_upgrade_tasks.json
new file mode 100644
index 0000000..79f1ec3
--- /dev/null
+++ b/ambari-web/app/assets/data/background_operations/host_upgrade_tasks.json
@@ -0,0 +1,52 @@
+{
+ "Requests" : {
+ "aborted_task_count" : 0,
+ "cluster_name" : "tdk",
+ "completed_task_count" : 6,
+ "create_time" : 1414268004421,
+ "end_time" : 1414268130964,
+ "exclusive" : false,
+ "failed_task_count" : 0,
+ "id" : 12,
+ "inputs" : null,
+ "operation_level" : null,
+ "progress_percent" : 100.0,
+ "queued_task_count" : 0,
+ "request_context" : "Upgrade Hosts",
+ "request_schedule" : null,
+ "request_status" : "IN_PROGRESS",
+ "resource_filters" : [ ],
+ "start_time" : 1414268004446,
+ "task_count" : 6,
+ "timed_out_task_count" : 0,
+ "type" : "INTERNAL_REQUEST"
+ },
+ "tasks" : [
+ {
+ "Tasks" : {
+ "command" : "INSTALL REPO",
+ "command_detail" : "DATANODE UPGRADE",
+ "end_time" : 1414268113552,
+ "exit_code" : 0,
+ "host_name" : "dev01.hortonworks.com",
+ "id" : 18,
+ "role" : "DATANODE",
+ "start_time" : 1414268004452,
+ "status" : "COMPLETED"
+ }
+ },
+ {
+ "Tasks" : {
+ "command" : "INSTALL REPO",
+ "command_detail" : "SECONDARY_NAMENODE UPGRADE",
+ "end_time" : 1414268127338,
+ "exit_code" : 0,
+ "host_name" : "dev01.hortonworks.com",
+ "id" : 21,
+ "role" : "SECONDARY_NAMENODE",
+ "start_time" : 1414268004453,
+ "status" : "IN_PROGRESS"
+ }
+ }
+ ]
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/assets/data/stack_versions/stack_version_all.json
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/data/stack_versions/stack_version_all.json b/ambari-web/app/assets/data/stack_versions/stack_version_all.json
index 15e1415..59b05f7 100644
--- a/ambari-web/app/assets/data/stack_versions/stack_version_all.json
+++ b/ambari-web/app/assets/data/stack_versions/stack_version_all.json
@@ -3,7 +3,7 @@
{
"StackVersion": {
"name": "HDP 2.2.0.1",
- "version": "HDP-2.2.2",
+ "version": "2.2.0.1-885",
"installed_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"current_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"repositories": [
@@ -27,8 +27,8 @@
},
{
"StackVersion": {
- "name": "HDP 2.2.0.2",
- "version": "HDP-2.2.3",
+ "name": "HDP 2.2.1.1",
+ "version": "2.2.1.1-885",
"installed_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"current_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"repositories": [
@@ -52,8 +52,8 @@
},
{
"StackVersion": {
- "name": "HDP 2.2.0.0",
- "version": "2.2.0.1",
+ "name": "HDP 2.2.2.0",
+ "version": "2.2.2.1-885",
"installed_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"current_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com"],
"repositories": [
@@ -92,10 +92,10 @@
},
{
"StackVersion": {
- "name": "HDP 2.2.0.1",
- "version": "2.2.0.2",
- "installed_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com", "dev03.hortonworks.com"],
- "current_hosts": ["dev01.hortonworks.com", "dev02.hortonworks.com", "dev03.hortonworks.com"],
+ "name": "HDP 2.3.0.1",
+ "version": "2.3.0.1-885",
+ "installed_hosts": [],
+ "current_hosts": [],
"repositories": [
{
"os": "redhat6",
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index 194a806..485355f 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -50,6 +50,7 @@ var files = ['test/init_model_test',
'test/controllers/main/alerts/definitions_details_controller_test',
'test/controllers/main/alerts/alert_instances_controller_test',
'test/controllers/main/admin/stack_and_upgrade_test',
+ 'test/controllers/main/admin/stack_version/stack_version_details_controller_test',
'test/controllers/main/admin/serviceAccounts_controller_test',
'test/controllers/main/admin/highAvailability_controller_test',
'test/controllers/main/admin/highAvailability/progress_controller_test',
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js b/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js
index 365b171..1f3c90c 100644
--- a/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_versions/stack_version_details_controller.js
@@ -27,7 +27,110 @@ App.MainStackVersionsDetailsController = Em.Controller.extend({
return App.get('allHostNames.length');
}.property('App.allHostNames.length'),
- //TODO method that will perform stack upgrade on host
- installStackVersion: Em.K
+ /**
+ * true if install stack version is in progress at least on 1 host
+ * {Boolean}
+ */
+ installInProgress: function() {
+ return this.get('content.upgradingHostStacks.length');
+ }.property('content.upgradingHostStacks.length'),
+ /**
+ * true if repo version is installed on all hosts
+ * {Boolean}
+ */
+ allInstalled: function() {
+ return this.get('content.notInstalledHostStacks.length') == 0;
+ }.property('content.notInstalledHostStacks.length'),
+
+ /**
+ * depending on state run or install repo request
+ * or show the installation process popup
+ * @param event
+ * @method installStackVersion
+ */
+ installStackVersion: function(event) {
+ if (this.get('installInProgress')) {
+ this.showProgressPopup();
+ } else if (!this.get('allInstalled')) {
+ this.doInstallStackVersion(event.context);
+ }
+ },
+
+ /**
+ * opens a popup with installations state per host
+ * @method showProgressPopup
+ */
+ showProgressPopup: function() {
+ var popupTitle = Em.I18n.t('admin.stackVersions.datails.install.hosts.popup.title').format(this.get('content.version'));
+ var requestIds = App.get('testMode') ? [1] : App.db.get('stackUpgrade', 'id');
+ var hostProgressPopupController = App.router.get('highAvailabilityProgressPopupController');
+ hostProgressPopupController.initPopup(popupTitle, requestIds, this, true);
+ },
+
+ /**
+ * runs request to install repo version
+ * @param stackVersion
+ * @returns {*|$.ajax}
+ * @method doInstallStackVersion
+ */
+ doInstallStackVersion: function(stackVersion) {
+ var services = App.Service.find();
+ var data = this.generateDataForInstall(stackVersion, services);
+ return App.ajax.send({
+ name: 'admin.stack_version.install.repo_version',
+ data: data,
+ success: 'installStackVersionSuccess'
+ })
+ },
+
+ /**
+ * generates the request data for installing repoversions
+ * @param {Ember.object} stackVersion
+ * @param {Array} services - array of service objects
+ * @returns {JSON}
+ * {
+ * RequestInfo:
+ * {
+ * context: string,
+ * action: string,
+ * parameters:
+ * {
+ * name: string,
+ * name_list: string,
+ * base_url_list: string,
+ * packages: string
+ * }
+ * },
+ * Requests/resource_filters: [{hosts:string}]
+ * }
+ */
+ generateDataForInstall: function(stackVersion, services) {
+ var hostNames = stackVersion.get('hostStackVersions').mapProperty('host.hostName');
+ var base_urls = stackVersion.get('operatingSystems').map(function(os) {
+ return os.get('repositories').mapProperty('baseurl').join(",");
+ });
+ var serviceNames = services.mapProperty('serviceName');
+ return {
+ "RequestInfo": {
+ "context":"Install Repo Version" + stackVersion.get('version'),
+ "action":"ru_install_repo",
+ "parameters": {
+ "name": stackVersion.get('version'),
+ "name_list": stackVersion.get('name'),
+ "base_url_list": base_urls.join(","),
+ "packages": serviceNames.join(",")
+ }
+ },
+ "Requests/resource_filters": [
+ {
+ "hosts": hostNames.join(",")
+ }
+ ]
+ };
+ },
+
+ installStackVersionSuccess: function(data) {
+ App.db.set('stackUpgrade', 'id', [data.id]);
+ }
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js b/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js
index 8cae2e6..a2dd28f 100644
--- a/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_versions/stack_versions_controller.js
@@ -73,19 +73,21 @@ App.MainStackVersionsController = Em.ArrayController.extend({
var status = event.currentTarget.title.toCapital();
var version = event.contexts[0];
var hosts = event.contexts[1];
- return App.ModalPopup.show({
- bodyClass: Ember.View.extend({
- title: Em.I18n.t('admin.stackVersions.hosts.popup.title').format(version, status, hosts.length),
- template: Em.Handlebars.compile('<h4>{{view.title}}</h4><span class="limited-height-2">'+ hosts.join('<br/>') + '</span>')
- }),
- header: Em.I18n.t('admin.stackVersions.hosts.popup.header').format(status),
- primary: Em.I18n.t('admin.stackVersions.hosts.popup.primary'),
- secondary: Em.I18n.t('common.close'),
- onPrimary: function() {
- this.hide();
- self.filterHostsByStack(version, status);
- }
- });
+ if (hosts.length) {
+ return App.ModalPopup.show({
+ bodyClass: Ember.View.extend({
+ title: Em.I18n.t('admin.stackVersions.hosts.popup.title').format(version, status, hosts.length),
+ template: Em.Handlebars.compile('<h4>{{view.title}}</h4><span class="limited-height-2">'+ hosts.join('<br/>') + '</span>')
+ }),
+ header: Em.I18n.t('admin.stackVersions.hosts.popup.header').format(status),
+ primary: Em.I18n.t('admin.stackVersions.hosts.popup.primary'),
+ secondary: Em.I18n.t('common.close'),
+ onPrimary: function() {
+ this.hide();
+ self.filterHostsByStack(version, status);
+ }
+ });
+ }
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/mappers/stack_version_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_version_mapper.js b/ambari-web/app/mappers/stack_version_mapper.js
index b07865e..b0e34ea 100644
--- a/ambari-web/app/mappers/stack_version_mapper.js
+++ b/ambari-web/app/mappers/stack_version_mapper.js
@@ -31,6 +31,11 @@ App.stackVersionMapper = App.QuickDataMapper.create({
operating_systems: {
item: 'id'
},
+ host_stack_versions_key: 'host_stack_versions',
+ host_stack_versions_type: 'array',
+ host_stack_versions: {
+ item: 'id'
+ },
installed_hosts: 'installed_hosts',
current_hosts: 'current_hosts'
},
@@ -67,6 +72,7 @@ App.stackVersionMapper = App.QuickDataMapper.create({
var stack = item.StackVersion;
stack.id = item.StackVersion.name + item.StackVersion.version;
var osArray = [];
+ var hostStackVersions = [];
if (Em.get(item, 'StackVersion.repositories')) {
item.StackVersion.repositories.forEach(function (os) {
@@ -88,7 +94,11 @@ App.stackVersionMapper = App.QuickDataMapper.create({
osArray.pushObject(os);
}, this);
}
-
+ //TODO change loading form current api
+ App.HostStackVersion.find().filterProperty('version', item.StackVersion.version).forEach(function(hv) {
+ hostStackVersions.push({id: hv.get('id')});
+ });
+ stack.host_stack_versions = hostStackVersions;
stack.operating_systems = osArray;
resultStack.push(this.parseIt(stack, this.get('modelStack')));
}, this);
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 0a849e6..ea16bef 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1197,6 +1197,8 @@ Em.I18n.translations = {
'admin.stackVersions.datails.hosts.btn.installing': "Installing...",
'admin.stackVersions.datails.hosts.btn.nothing': "Nothing to Install",
'admin.stackVersions.datails.hosts.btn.na': "Status not available",
+ 'admin.stackVersions.datails.install.hosts.popup.title': "Install {0} version",
+
'admin.stackVersions.hosts.popup.header': "Version Status: {0}",
'admin.stackVersions.hosts.popup.title': "{0} Version is {1} on {2} hosts:",
'admin.stackVersions.hosts.popup.primary': "Go to Hosts",
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/models/stack_version/version.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/version.js b/ambari-web/app/models/stack_version/version.js
index fb0d4f7..c602fcb 100644
--- a/ambari-web/app/models/stack_version/version.js
+++ b/ambari-web/app/models/stack_version/version.js
@@ -24,7 +24,67 @@ App.StackVersion = DS.Model.extend({
version: DS.attr('string'),
installedHosts: DS.attr('array'),
currentHosts: DS.attr('array'),
- operatingSystems: DS.hasMany('App.OS')
+ operatingSystems: DS.hasMany('App.OS'),
+ hostStackVersions: DS.hasMany('App.HostStackVersion'),
+
+ setStatusHosts: function(){
+ Em.run.once(this, 'updateStatus');
+ }.observes('hostStackVersions.@each.status'),
+
+ updateStatus: function() {
+ var current = [];
+ var installed = [];
+ var upgradeFailed = [];
+ var upgrading = [];
+ var init = [];
+ var notInstalled = [];
+ this.get('hostStackVersions').forEach(function(hv) {
+ switch(hv.get('status')) {
+ case 'CURRENT':
+ current.push(hv);
+ case 'INSTALLED':
+ installed.push(hv);
+ break;
+ case 'INIT':
+ init.push(hv);
+ notInstalled.push(hv);
+ break;
+ case 'UPGRADE_FAILED':
+ upgradeFailed.push(hv);
+ notInstalled.push(hv);
+ break;
+ case 'UPGRADING':
+ upgrading.push(hv);
+ break;
+ }
+ });
+ this.set('currentHostStacks', current);
+ this.set('installedHostStacks', installed);
+ this.set('notInstalledHostStacks', notInstalled);
+ this.set('upgradeFailedHostStacks', upgradeFailed);
+ this.set('initHostStacks', init);
+ this.set('upgradingHostStacks', upgrading);
+ },
+
+ currentHostStacks: [],
+
+ installedHostStacks: [],
+
+ upgradeFailedHostStacks: [],
+
+ upgradingHostStacks: [],
+
+ initHostStacks: [],
+
+ notInstalledHostStacks: [],
+
+ noInstalledHosts: function() {
+ return this.get('installedHosts.length') == 0;
+ }.property('installedHosts.length'),
+
+ noCurrentHosts: function() {
+ return this.get('currentHosts.length') == 0;
+ }.property('currentHosts.length')
});
App.StackVersion.FIXTURES = [];
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 8f27d1b..d223fa4 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -939,15 +939,6 @@ h1 {
i {
font-size: 20px;
}
- .not-active-link{
- color: #999;
- a{
- text-decoration: none;
- pointer-events: none;
- color: #999;
- cursor: default;
- }
- }
.active-link{
a{
pointer-events: auto;
@@ -4993,6 +4984,16 @@ ul.inline li {
}
}
+.not-active-link{
+ color: #999;
+ a{
+ text-decoration: none;
+ pointer-events: none;
+ color: #999;
+ cursor: default;
+ }
+}
+
#stack_versions {
.table {
thead {
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs b/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs
index 065bea3..10e3080 100644
--- a/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs
+++ b/ambari-web/app/templates/main/admin/stack_versions/stack_version_details.hbs
@@ -44,15 +44,15 @@
<div class="span8">
<div class="row-fluid">
<div class="span3">{{t admin.stackVersions.datails.installed.on}}</div>
- <div class="span6">
- <a href="#" title='installed' {{action showHosts controller.content.version controller.content.currentHosts target="App.router.mainStackVersionsController"}}>
+ <div class="span6" {{bindAttr class="controller.content.noInstalledHosts:not-active-link"}}>
+ <a href="#" title='installed' {{action showHosts controller.content.version controller.content.installedHosts target="App.router.mainStackVersionsController"}}>
<span>{{content.installedHosts.length}}/{{totalHostCount}}</span>
</a>
</div>
</div>
<div class="row-fluid">
<div class="span3">{{t admin.stackVersions.datails.current.on}}</div>
- <div class="span6">
+ <div class="span6" {{bindAttr class="controller.content.noCurrentHosts:not-active-link"}}>
<a href="#" title='current' {{action showHosts controller.content.version controller.content.currentHosts target="App.router.mainStackVersionsController"}}>
<span>{{content.currentHosts.length}}/{{totalHostCount}}</span>
</a>
@@ -60,8 +60,8 @@
</div>
</div>
<div class="span4">
- <a {{bindAttr class="view.statusClass :btn :stack-status-button"}} {{action installStackVersion target="controller"}}>
- <i {{bindAttr class="view.installInProgress:icon-cog"}}> </i>{{view.stackTextStatus}}
+ <a {{bindAttr class="view.statusClass :btn :stack-status-button"}} {{action installStackVersion content target="controller"}}>
+ <i {{bindAttr class="installInProgress:icon-cog"}}> </i>{{view.stackTextStatus}}
</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/templates/main/admin/stack_versions/stack_versions.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_versions/stack_versions.hbs b/ambari-web/app/templates/main/admin/stack_versions/stack_versions.hbs
index 017b0f7..4b282d1 100644
--- a/ambari-web/app/templates/main/admin/stack_versions/stack_versions.hbs
+++ b/ambari-web/app/templates/main/admin/stack_versions/stack_versions.hbs
@@ -56,14 +56,20 @@
</div>
</td>
<td>
- <a href="#" title='installed' {{action showHosts view.content.version view.content.installedHosts target="controller"}}>
- <span>{{view.content.installedHosts.length}}</span>
- </a>
+ <span {{bindAttr class="view.content.noInstalledHosts:not-active-link"}}>
+ <a href="#"
+ title='installed' {{action showHosts view.content.version view.content.installedHosts target="controller"}}>
+ <span>{{view.content.installedHosts.length}}</span>
+ </a>
+ </span>
</td>
<td>
- <a href="#" title='current' {{action showHosts view.content.version view.content.currentHosts target="controller"}}>
- <span>{{view.content.currentHosts.length}}</span>
- </a>
+ <span {{bindAttr class="view.content.noCurrentHosts:not-active-link"}}>
+ <a href="#"
+ title='current' {{action showHosts view.content.version view.content.currentHosts target="controller"}}>
+ <span>{{view.content.currentHosts.length}}</span>
+ </a>
+ </span>
</td>
{{/view}}
{{/each}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 4c577b1..1db65cd 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1083,7 +1083,7 @@ var urls = {
},
'admin.high_availability.polling': {
'real': '/clusters/{clusterName}/requests/{requestId}?fields=tasks/*,Requests/*',
- 'mock': ''
+ 'mock': '/data/background_operations/host_upgrade_tasks.json'
},
'admin.high_availability.getNnCheckPointStatus': {
'real': '/clusters/{clusterName}/hosts/{hostName}/host_components/NAMENODE',
@@ -1244,6 +1244,20 @@ var urls = {
'real': '/clusters/{clusterName}/stack_versions',
'mock': '/data/stack_versions/stack_version_all.json'
},
+ 'admin.stack_version.install.repo_version': {
+ 'type': 'POST',
+ 'real': 'clusters/{clusterName}/requests',
+ 'format': function(data) {
+ return {
+ type: 'POST',
+ dataType: 'text',
+ data: data.data
+ }
+ },
+ 'mock': ''
+ },
+
+
'wizard.advanced_repositories.valid_url': {
'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems/{osType}/repositories/{repoId}',
'mock': '',
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js b/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js
index 9889fc8..b8eae2b 100644
--- a/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js
+++ b/ambari-web/app/views/main/admin/stack_versions/stack_version_details_view.js
@@ -21,45 +21,20 @@ var App = require('app');
App.MainStackVersionsDetailsView = Em.View.extend({
templateName: require('templates/main/admin/stack_versions/stack_version_details'),
- /**
- * list of hostsStackVersions objects for current config version
- * {Array}
- */
- hostStackVersions: function() {
- return App.HostStackVersion.find().filterProperty('version', this.get('controller.content.version'));
- }.property('controller.content.version'),
-
- /**
- * list of hosts on which this stack version is not installed
- * {Array}
- */
- notInstalledHosts: function() {
- return this.get('hostStackVersions').filterProperty('installEnabled');
- }.property('hostStackVersions'),
-
- /**
- * true if install stack version is in progress at least on 1 host
- * {Boolean}
- */
- installInProgress: function() {
- return this.get('hostStackVersions').someProperty('status', 'INSTALLING');
- }.property('hostStackVersions'),
/**
* installation status of stack version on hosts
* {String}
*/
status: function() {
- if (this.get('installInProgress')) {
+ if (this.get('controller.installInProgress')) {
return 'INSTALLING'
- } else if (this.get('notInstalledHosts.length') == 0) {
+ } else if (this.get('controller.allInstalled')) {
return 'ALL_INSTALLED';
- } else if (this.get('notInstalledHosts.length') > 0) {
- return 'INSTALL';
} else {
- return 'UNDEFINED';
+ return 'INSTALL';
}
- }.property('notInstalledHosts.length'),
+ }.property('controller.installInProgress', 'controller.allInstalled'),
/**
* text on install buttons
@@ -67,20 +42,17 @@ App.MainStackVersionsDetailsView = Em.View.extend({
*/
stackTextStatus: function() {
switch(this.get('status')) {
- case 'INSTALL':
- return Em.I18n.t('admin.stackVersions.datails.hosts.btn.install').format(this.get('notInstalledHosts.length'));
- break;
case 'INSTALLING':
return Em.I18n.t('admin.stackVersions.datails.hosts.btn.installing');
break;
case 'ALL_INSTALLED':
return Em.I18n.t('admin.stackVersions.datails.hosts.btn.nothing');
break;
- default:
- return Em.I18n.t('admin.stackVersions.datails.hosts.btn.na');
+ case 'INSTALL':
+ return Em.I18n.t('admin.stackVersions.datails.hosts.btn.install').format(this.get('controller.content.notInstalledHostStacks.length'));
break;
}
- }.property('status', 'notInstalledHosts'),
+ }.property('status', 'controller.content.notInstalledHostStacks.length'),
/**
* class on install buttons
@@ -92,7 +64,7 @@ App.MainStackVersionsDetailsView = Em.View.extend({
return 'btn-success';
break;
case 'INSTALLING':
- return 'btn-primary disabled';
+ return 'btn-primary';
break;
default:
return 'disabled';
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js b/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js
new file mode 100644
index 0000000..0333546
--- /dev/null
+++ b/ambari-web/test/controllers/main/admin/stack_version/stack_version_details_controller_test.js
@@ -0,0 +1,95 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+var App = require('app');
+require('controllers/main/admin/stack_versions/stack_version_details_controller');
+var mainStackVersionsDetailsController;
+
+describe('App.MainStackVersionsDetailsController', function () {
+
+ beforeEach(function () {
+ mainStackVersionsDetailsController = App.MainStackVersionsDetailsController.create();
+ });
+
+ describe('#installStackVersion', function () {
+ beforeEach(function() {
+ sinon.stub(mainStackVersionsDetailsController, 'showProgressPopup', Em.K);
+ sinon.stub(mainStackVersionsDetailsController, 'doInstallStackVersion', Em.K);
+ });
+ afterEach(function() {
+ mainStackVersionsDetailsController.showProgressPopup.restore();
+ mainStackVersionsDetailsController.doInstallStackVersion.restore();
+ });
+ it("shows installing proggress", function() {
+ mainStackVersionsDetailsController.reopen({'installInProgress': true});
+ mainStackVersionsDetailsController.installStackVersion({});
+ expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.true;
+ expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.false;
+ });
+ it("runs install stack version", function() {
+ mainStackVersionsDetailsController.reopen({'installInProgress': false});
+ mainStackVersionsDetailsController.reopen({'allInstalled': false});
+ mainStackVersionsDetailsController.installStackVersion({});
+ expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.false;
+ expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.true;
+ });
+ it("doesn't do anything", function() {
+ mainStackVersionsDetailsController.reopen({'installInProgress': false});
+ mainStackVersionsDetailsController.reopen({'allInstalled': true});
+ mainStackVersionsDetailsController.installStackVersion({});
+ expect(mainStackVersionsDetailsController.showProgressPopup.calledOnce).to.be.false;
+ expect(mainStackVersionsDetailsController.doInstallStackVersion.calledOnce).to.be.false;
+ });
+ });
+
+ describe('#showProgressPopup', function () {
+ beforeEach(function() {
+ sinon.stub(App.router.get('highAvailabilityProgressPopupController'), 'initPopup', Em.K);
+ App.set('testMode', true);
+ });
+ afterEach(function() {
+ App.router.get('highAvailabilityProgressPopupController').initPopup.restore();
+ App.set('testMode', false);
+ });
+ it("runs initPopup", function() {
+ mainStackVersionsDetailsController.reopen({'content': { 'version': "v1"}});
+ var popupTitle = Em.I18n.t('admin.stackVersions.datails.install.hosts.popup.title').format("v1");
+ var requestIds =[1];
+ mainStackVersionsDetailsController.showProgressPopup();
+ expect(App.router.get('highAvailabilityProgressPopupController').initPopup.calledWith(popupTitle, requestIds, mainStackVersionsDetailsController, true)).to.be.true;
+ });
+ });
+
+ describe('#doInstallStackVersion', function () {
+ beforeEach(function() {
+ sinon.stub(App.ajax, 'send', Em.K);
+ sinon.stub(mainStackVersionsDetailsController, 'generateDataForInstall', Em.K);
+ });
+ afterEach(function() {
+ App.ajax.send.restore();
+ mainStackVersionsDetailsController.generateDataForInstall.restore();
+ });
+ it("runs initPopup", function() {
+ mainStackVersionsDetailsController.doInstallStackVersion({});
+ expect(mainStackVersionsDetailsController.generateDataForInstall.calledOnce).to.be.true;
+ expect(App.ajax.send.calledOnce).to.be.true;
+ });
+ });
+
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/03b45ee1/ambari-web/test/views/main/admin/stack_version/stack_version_details_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_version/stack_version_details_test.js b/ambari-web/test/views/main/admin/stack_version/stack_version_details_test.js
index 3710733..8cf6253 100644
--- a/ambari-web/test/views/main/admin/stack_version/stack_version_details_test.js
+++ b/ambari-web/test/views/main/admin/stack_version/stack_version_details_test.js
@@ -22,54 +22,11 @@ require('views/main/admin/stack_versions/stack_version_view');
var mainStackVersionsDetailsView;
describe('App.MainStackVersionsDetailsView', function () {
- var hostStackVersions = [
- {
- installEnabled: true,
- status: "INIT"
- },
- {
- installEnabled: true,
- status: "INSTALL_FAILED"
- },
- {
- installEnabled: false,
- status: "INSTALLED"
- }
- ];
- beforeEach(function () {
- mainStackVersionsDetailsView = App.MainStackVersionsDetailsView.create({hostStackVersions: hostStackVersions});
- });
-
- describe('#notInstalledHosts', function () {
- it("list on host without current config version", function() {
- var notInstalled = [
- {
- installEnabled: true,
- status: "INIT"
- },
- {
- installEnabled: true,
- status: "INSTALL_FAILED"
- }
- ];
- expect(mainStackVersionsDetailsView.get('notInstalledHosts')).to.eql(notInstalled);
- });
- });
- describe('#installInProgress', function () {
- it("stack version install is not in progress", function() {
- expect(mainStackVersionsDetailsView.get('installInProgress')).to.be.false;
- });
- it("stack version install is in progress", function() {
- mainStackVersionsDetailsView.get('hostStackVersions').pushObject({
- installEnabled: false,
- status: "INSTALLING"
- });
- expect(mainStackVersionsDetailsView.get('installInProgress')).to.be.true;
- });
+ beforeEach(function () {
+ mainStackVersionsDetailsView = App.MainStackVersionsDetailsView.create();
});
-
describe('#statusClass', function () {
var tests = [
{
@@ -82,7 +39,7 @@ describe('App.MainStackVersionsDetailsView', function () {
},
{
status: "INSTALLING",
- buttonClass: 'btn-primary disabled'
+ buttonClass: 'btn-primary'
}
].forEach(function(t) {
it("status is " + t.status + " class is " + t.buttonClass, function() {