This is an automated email from the ASF dual-hosted git repository.
jonathanhurley pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by
this push:
new bb72d33 [AMBARI-23518] Fix install wizard summary OS/repo info (#960)
bb72d33 is described below
commit bb72d3335f1bbb496d557bb6e3dfdb22feeb7a1c
Author: Jason Golieb <[email protected]>
AuthorDate: Wed Apr 11 10:08:32 2018 -0400
[AMBARI-23518] Fix install wizard summary OS/repo info (#960)
---
ambari-web/app/controllers/installer.js | 2 +-
ambari-web/app/controllers/wizard.js | 2 +-
.../wizard/customProductRepos_controller.js | 236 ++++++++++++---------
.../wizard/downloadMpacks_controller.js | 4 +-
.../app/controllers/wizard/step8_controller.js | 44 ++--
ambari-web/app/mappers/stack_mapper.js | 2 +-
ambari-web/app/routes/installer.js | 2 +
ambari-web/app/utils/ajax/ajax.js | 4 +-
8 files changed, 171 insertions(+), 125 deletions(-)
diff --git a/ambari-web/app/controllers/installer.js
b/ambari-web/app/controllers/installer.js
index 290b75f..0fe9dc0 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -826,6 +826,7 @@ App.InstallerController =
App.WizardController.extend(App.Persist, {
{
type: 'async',
callback: function () {
+ this.loadRegisteredMpacks();
return
this.loadSelectedServiceInfo(this.getStepSavedState('customProductRepos'));
}
},
@@ -835,7 +836,6 @@ App.InstallerController =
App.WizardController.extend(App.Persist, {
type: 'sync',
callback: function () {
this.loadConfirmedHosts();
- this.loadRegisteredMpacks();
}
}
],
diff --git a/ambari-web/app/controllers/wizard.js
b/ambari-web/app/controllers/wizard.js
index ad60107..f8f37d4 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -1428,7 +1428,7 @@ App.WizardController =
Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
this.set('content.serviceGroups', serviceGroups);
registeredMpacks.forEach(rmp => {
- App.stackMapper.map(rmp);
+ App.stackMapper.map(JSON.parse(JSON.stringify(rmp)));
});
},
diff --git a/ambari-web/app/controllers/wizard/customProductRepos_controller.js
b/ambari-web/app/controllers/wizard/customProductRepos_controller.js
index c0ae0aa..bfe2b56 100644
--- a/ambari-web/app/controllers/wizard/customProductRepos_controller.js
+++ b/ambari-web/app/controllers/wizard/customProductRepos_controller.js
@@ -44,116 +44,117 @@ App.WizardCustomProductReposController =
App.WizardStepController.extend({
return false;
},
- getRegisteredMpackInfo: function () {
- return App.ajax.send({
- name: 'mpack.get_all_registered',
- sender: this
- })
+ /**
+ * Gets registered mpack info and updates it with info from user's
selections.
+ * Returns mapped mpacks for use in this step.
+ */
+ getRegisteredMpackInfo: function (selectedMpacks) {
+ const registeredMpacks = this.get('content.registeredMpacks');
+ const mpacks = [];
+
+ registeredMpacks.forEach(mpack => {
+ const selectedMpack = selectedMpacks.find(selectedMpack =>
selectedMpack.name === mpack.MpackInfo.mpack_name && selectedMpack.version ===
mpack.MpackInfo.mpack_version);
+
+ mpacks.push(Em.Object.create({
+ id: mpack.MpackInfo.id,
+ name: mpack.MpackInfo.mpack_name,
+ displayName: mpack.MpackInfo.mpack_display_name,
+ publicUrl: selectedMpack.publicUrl,
+ downloadUrl: selectedMpack.downloadUrl,
+ version: mpack.MpackInfo.mpack_version,
+ operatingSystems: mpack.default_operating_systems.map(os => {
+ //determines if the OS was selected in the database (as when the
mpack is initially registered)
+ let initiallySelected;
+ if (mpack.operating_systems) {
+ initiallySelected = mpack.operating_systems.find(mpackOs =>
mpackOs.OperatingSystems.os_type === os.OperatingSystems.os_type);
+ }
+
+ //checks if the OS was selected in the UI
+ let selectedOs;
+ if (selectedMpack && selectedMpack.operatingSystems) {
+ selectedOs = selectedMpack.operatingSystems.find(mpackOs =>
mpackOs.type === os.OperatingSystems.os_type);
+ }
+
+ return Em.Object.create({
+ postdata: JSON.parse(JSON.stringify(os.OperatingSystems)),
+ type: os.OperatingSystems.os_type,
+ initiallySelected: initiallySelected ? true : false,
+ selected: selectedOs ? true : false,
+ isFirstSelected: false,
+ isLastSelected: false,
+ repos: os.OperatingSystems.repositories.map((repo, index, repos)
=> {
+ let downloadUrl;
+
+ if (selectedOs && selectedOs.repos) {
+ const selectedRepo = selectedOs.repos.findProperty('repoId',
repo.repo_id);
+
+ if (selectedRepo) {
+ downloadUrl = selectedRepo.downloadUrl;
+ }
+ }
+
+ return Em.Object.create({
+ id:
`${mpack.MpackInfo.mpack_name}-${mpack.MpackInfo.mpack_version}-${os.OperatingSystems.os_type}-${repo.repo_id}`,
//this is a unique ID used in client logic
+ repoId: repo.repo_id, //this is the repo ID used by the server
and displayed in the UI
+ name: repo.repo_name,
+ publicUrl: repo.base_url,
+ downloadUrl: downloadUrl || repo.base_url,
+ isFirst: index === 0,
+ isLast: index === repos.length - 1
+ });
+ })
+ });
+ })
+ }))
+ });
+
+ return mpacks;
},
/**
* Populates mpacks array, repos array, and operatingSystems array based on
info about registered mpacks.
*/
loadStep: function () {
- this.getRegisteredMpackInfo().then(registeredMpacks => {
- const selectedMpacks = this.get('content.selectedMpacks');
- const mpacks = [];
+ const selectedMpacks = this.get('content.selectedMpacks');
- registeredMpacks.items.forEach(mpack => {
- const selectedMpack = selectedMpacks.find(selectedMpack =>
selectedMpack.name === mpack.MpackInfo.mpack_name && selectedMpack.version ===
mpack.MpackInfo.mpack_version);
-
- mpacks.push(Em.Object.create({
- id: mpack.MpackInfo.id,
- name: mpack.MpackInfo.mpack_name,
- displayName: mpack.MpackInfo.mpack_display_name,
- publicUrl: selectedMpack.publicUrl,
- downloadUrl: selectedMpack.downloadUrl,
- version: mpack.MpackInfo.mpack_version,
- operatingSystems: mpack.default_operating_systems.map(os => {
- //determines if the OS was selected in the database (as when the
mpack is initially registered)
- let initiallySelected;
- if (mpack.operating_systems) {
- initiallySelected = mpack.operating_systems.find(mpackOs =>
mpackOs.OperatingSystems.os_type === os.OperatingSystems.os_type);
- }
-
- //checks if the OS was selected in the UI
- let selectedOs;
- if (selectedMpack && selectedMpack.operatingSystems) {
- selectedOs = selectedMpack.operatingSystems.find(mpackOs =>
mpackOs.type === os.OperatingSystems.os_type);
- }
-
- return Em.Object.create({
- postdata: os.OperatingSystems,
- type: os.OperatingSystems.os_type,
- initiallySelected: initiallySelected ? true : false,
- selected: selectedOs ? true : false,
- isFirstSelected: false,
- isLastSelected: false,
- repos: os.OperatingSystems.repositories.map((repo, index, repos)
=> {
- let downloadUrl;
-
- if (selectedOs && selectedOs.repos) {
- const selectedRepo = selectedOs.repos.findProperty('repoId',
repo.repo_id);
-
- if (selectedRepo) {
- downloadUrl = selectedRepo.downloadUrl;
- }
- }
-
- return Em.Object.create({
- id:
`${mpack.MpackInfo.mpack_name}-${mpack.MpackInfo.mpack_version}-${os.OperatingSystems.os_type}-${repo.repo_id}`,
//this is a unique ID used in client logic
- repoId: repo.repo_id, //this is the repo ID used by the
server and displayed in the UI
- name: repo.repo_name,
- publicUrl: repo.base_url,
- downloadUrl: downloadUrl || repo.base_url,
- isFirst: index === 0,
- isLast: index === repos.length - 1
- });
- })
- });
- })
- }))
- });
- this.set('mpacks', mpacks);
-
- const repos = mpacks.reduce(
- (repos, mpack) => repos.concat(
- mpack.get('operatingSystems').reduce(
- (repos, os) => repos.concat(
- os.get('repos')
- ),
- [])
+ const mpacks = this.getRegisteredMpackInfo(selectedMpacks);
+ this.set('mpacks', mpacks);
+
+ const repos = mpacks.reduce(
+ (repos, mpack) => repos.concat(
+ mpack.get('operatingSystems').reduce(
+ (repos, os) => repos.concat(
+ os.get('repos')
),
- []
- );
- this.set('repos', repos);
+ [])
+ ),
+ []
+ );
+ this.set('repos', repos);
- const uniqueOperatingSystems = {};
- mpacks.forEach(mpack => {
- mpack.get('operatingSystems').forEach(os => {
- const osType = os.get('type');
- uniqueOperatingSystems[osType]
- ? uniqueOperatingSystems[osType].mpacks.pushObject(mpack)
- : uniqueOperatingSystems[osType] = {
- selected: os.get('selected'),
- mpacks: [mpack]
- };
- })
- });
-
- const operatingSystems = [];
- for (let osType in uniqueOperatingSystems) {
- operatingSystems.pushObject(Em.Object.create({
- type: osType,
- selected: uniqueOperatingSystems[osType].selected,
- mpacks: uniqueOperatingSystems[osType].mpacks
- }))
- }
- operatingSystems.sort((a, b) =>
a.get('type').localeCompare(b.get('type')));
- this.set('operatingSystems', operatingSystems);
- },
-
- this.get('wizardController').addErrors);
+ const uniqueOperatingSystems = {};
+ mpacks.forEach(mpack => {
+ mpack.get('operatingSystems').forEach(os => {
+ const osType = os.get('type');
+ uniqueOperatingSystems[osType]
+ ? uniqueOperatingSystems[osType].mpacks.pushObject(mpack)
+ : uniqueOperatingSystems[osType] = {
+ selected: os.get('selected'),
+ mpacks: [mpack]
+ };
+ })
+ });
+
+ const operatingSystems = [];
+ for (let osType in uniqueOperatingSystems) {
+ operatingSystems.pushObject(Em.Object.create({
+ type: osType,
+ selected: uniqueOperatingSystems[osType].selected,
+ mpacks: uniqueOperatingSystems[osType].mpacks
+ }))
+ }
+ operatingSystems.sort((a, b) =>
a.get('type').localeCompare(b.get('type')));
+ this.set('operatingSystems', operatingSystems);
},
/**
@@ -224,8 +225,8 @@ App.WizardCustomProductReposController =
App.WizardStepController.extend({
({
name: selectedMpack.name,
displayName: selectedMpack.displayName,
- publicUrl: selectedMpack.publicUrl,
- downloadUrl: selectedMpack.downloadUrl,
+ publicUrl: selectedMpack.publicUrl, //these are the URLs of the
mpack itself
+ downloadUrl: selectedMpack.downloadUrl, //don't delete them thinking
they're not used :)
version: selectedMpack.version,
operatingSystems:
selectedMpack.get('operatingSystems').filterProperty('selected').map(os =>
({
@@ -275,8 +276,35 @@ App.WizardCustomProductReposController =
App.WizardStepController.extend({
});
$.when(...osRepoPromises).then(() => {
+ //update registeredMpacks with user's changes so they will be persisted
and mapped to App.Stack model
+ this.updateRegisteredMpacks(selectedMpacks);
+
App.router.send('next');
- }, () =>
this.get('wizardController').addError(Em.i18n.t('installer.error.mpackOsModifications')));
+ }, () =>
this.get('wizardController').addError(Em.I18n.t('installer.error.mpackOsModifications')));
+ },
+
+ updateRegisteredMpacks: function (selectedMpacks) {
+ const registeredMpacks = this.get('content.registeredMpacks');
+
+ selectedMpacks.forEach(mpack => {
+ const rmp = registeredMpacks.find(rmp => rmp.MpackInfo.mpack_name ===
mpack.name && rmp.MpackInfo.mpack_version === mpack.version);
+ if (rmp) {
+ mpack.operatingSystems.forEach(os => {
+ const ros = rmp.operating_systems.find(ros => ros.os_type ===
os.type);
+ if (ros) {
+ ros.is_selected = os.selected;
+ os.repositories.forEach(repo => {
+ const rr = ros.repos.find(rr => rr.repo_id === repo.id);
+ if (rr) {
+ rr.base_url = repo.downloadUrl;
+ }
+ })
+ }
+ })
+ }
+ });
+
+ this.set('content.registeredMpacks', registeredMpacks);
},
createOsRepos: function (mpack, os, data) {
diff --git a/ambari-web/app/controllers/wizard/downloadMpacks_controller.js
b/ambari-web/app/controllers/wizard/downloadMpacks_controller.js
index 471080e..5eb63d4 100644
--- a/ambari-web/app/controllers/wizard/downloadMpacks_controller.js
+++ b/ambari-web/app/controllers/wizard/downloadMpacks_controller.js
@@ -86,14 +86,14 @@ App.WizardDownloadMpacksController =
App.WizardStepController.extend({
failureMessage = request.statusText;
break;
default:
- failureMessage =
Em.i18n.t('installer.downloadMpacks.failure.default');
+ failureMessage =
Em.I18n.t('installer.downloadMpacks.failure.default');
}
this.get('mpacks').findProperty('name',
params.name).set('failureMessage', failureMessage);
}
},
- loadMpackInfo(data) {
+ loadMpackInfo: function (data) {
App.ajax.send({
name: 'mpack.get_registered_mpack',
sender: this,
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js
b/ambari-web/app/controllers/wizard/step8_controller.js
index 91a01d1..2ca005e 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -315,23 +315,39 @@ App.WizardStep8Controller =
App.WizardStepController.extend(App.AddSecurityConfi
} else {
// from install wizard
var downloadConfig = this.get('downloadConfig');
- var selectedStack = this.getSelectedStack();
var allRepos = [];
- if (selectedStack && selectedStack.get('operatingSystems')) {
- selectedStack.get('operatingSystems').forEach(function (os) {
- if (os.get('isSelected')) {
- os.get('repositories').forEach(function(repo) {
- if (repo.get('showRepo')) {
- allRepos.push(Em.Object.create({
- base_url: repo.get('baseUrl'),
- os_type: repo.get('osType'),
- repo_id: repo.get('repoId')
- }));
+ var selectedMpacks = this.get('content.selectedMpacks');
+ var registeredMpacks = this.get('content.registeredMpacks');
+ if (selectedMpacks && registeredMpacks) {
+ selectedMpacks.forEach(mpack => {
+ if (mpack.operatingSystems) { //repos have been customized
+ mpack.operatingSystems.forEach(os => {
+ if (os.selected) {
+ os.repos.forEach(function (repo) {
+ allRepos.push(Em.Object.create({
+ base_url: repo.downloadUrl,
+ os_type: os.type,
+ repo_id: repo.repoId
+ }));
+ });
}
- }, this);
+ })
+ } else { //repos have not been customized, so use default info
+ const rmp = registeredMpacks.find(rmp => rmp.MpackInfo.mpack_name
=== mpack.name && rmp.MpackInfo.mpack_version === mpack.version);
+ if (rmp) {
+ rmp.operating_systems.forEach(os => {
+ os.OperatingSystems.repositories.forEach(function (repo) {
+ allRepos.push(Em.Object.create({
+ base_url: repo.base_url,
+ os_type: repo.os_type,
+ repo_id: repo.repo_id
+ }));
+ })
+ })
+ }
}
- }, this);
- }
+ });
+ }
allRepos.set('display_name',
Em.I18n.t("installer.step8.repoInfo.displayName"));
this.get('clusterInfo').set('useRedhatSatellite',
downloadConfig.useRedhatSatellite);
this.get('clusterInfo').set('repoInfo', allRepos);
diff --git a/ambari-web/app/mappers/stack_mapper.js
b/ambari-web/app/mappers/stack_mapper.js
index 162d24e..09167e0 100644
--- a/ambari-web/app/mappers/stack_mapper.js
+++ b/ambari-web/app/mappers/stack_mapper.js
@@ -123,7 +123,7 @@ App.stackMapper = App.QuickDataMapper.create({
operatingSystems.id = stack.id + "-" + operatingSystems.os_type;
operatingSystems.stack_id = stack.id;
operatingSystems.repositories = repositoriesArray;
- operatingSystems.is_selected = ops.isSelected == true || ops.isSelected
== undefined;
+ operatingSystems.is_selected = false;
resultOS.push(this.parseIt(operatingSystems, this.get('configOS')));
operatingSystemsArray.pushObject(operatingSystems);
diff --git a/ambari-web/app/routes/installer.js
b/ambari-web/app/routes/installer.js
index ac1bb6d..03171d2 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -315,6 +315,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
router.get('wizardStep6Controller').set('isClientsSet', false);
}
controller.setStepSaved('selectMpacks');
+ controller.save('downloadConfig');
const downloadConfig = controller.get('content.downloadConfig');
if (downloadConfig && downloadConfig.useCustomRepo) {
router.transitionTo('customMpackRepos');
@@ -467,6 +468,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
const controller = router.get('installerController');
controller.clearErrors();
controller.save('selectedMpacks');
+ controller.save('registeredMpacks');
controller.setStepSaved('customProductRepos');
router.transitionTo('verifyProducts');
console.timeEnd('customProductRepos next');
diff --git a/ambari-web/app/utils/ajax/ajax.js
b/ambari-web/app/utils/ajax/ajax.js
index 6f4d8bc..8b1522b 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -57,7 +57,7 @@ var urls = {
},
'common.services.update' : {
- 'real':
'/clusters/{clusterName}/servicegroups/{serviceGroupName}/services?{urlParams}',
+ 'real':
'/clusters/{clusterName}/servicegroups/{serviceGroup}/services?{urlParams}',
'mock': '/data/wizard/deploy/poll_1.json',
'format': function (data) {
return {
@@ -247,7 +247,7 @@ var urls = {
'common.service.create.configs': {
'type': 'POST',
-
'real':'/clusters/{clusterName}/servicegroups/{serviceGroupName}/services/{serviceName}/configurations',
+
'real':'/clusters/{clusterName}/servicegroups/{serviceGroup}/services/{serviceName}/configurations',
'format': function(data) {
return {
apiPrefix: 'api/v2',
--
To stop receiving notification emails like this one, please contact
[email protected].