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 <j...@golieb.net>
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
jonathanhur...@apache.org.

Reply via email to