Browse Source

AMBARI-8651. Ambari View > Versions > View/Edit Version E2E Integration. (Richard Zang via yusaku)

Yusaku Sako 10 years ago
parent
commit
8382315075

+ 77 - 0
ambari-admin/src/main/resources/ui/admin-web/app/assets/data/stack/allStackVersions.json

@@ -0,0 +1,77 @@
+
+{
+  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks?fields=*",
+  "items" : [
+    {
+      "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP",
+      "Stacks" : {
+        "stack_name" : "HDP"
+      },
+      "versions" : [
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/1.3",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "1.3"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/1.3.2",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "1.3.2"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/1.3.3",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "1.3.3"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.0",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.0"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.0.6",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.0.6"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.0.6.GlusterFS",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.0.6.GlusterFS"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.1",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.1"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.1.GlusterFS",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.1.GlusterFS"
+          }
+        },
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2",
+          "Versions" : {
+            "stack_name" : "HDP",
+            "stack_version" : "2.2"
+          }
+        }
+      ]
+    }
+  ]
+}

+ 103 - 43
ambari-admin/src/main/resources/ui/admin-web/app/assets/data/version/version.json

@@ -1,47 +1,107 @@
 {
 {
-  "href": "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/1",
-  "RepositoryVersions": {
-    "id": 1,
-    "repository_version": "2.2.0.1-885",
-    "display_name": "HDP 2.2.0",
-    "upgrade_pack": "upgrade-2.2",
-    "stack": "HDP-2.2",
-    "operating_systems": [
-      {
-        "OperatingSystems": {
-          "os_type": "redhat5"
-        },
-        "repositories": [
-          {
-            "Repositories": {
-              "repo_id": "HDP-2.2",
-              "stack_name": "HDP",
-              "base_url": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0"
-            }
+  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions?fields=repository_versions/operatingSystems/repositories/*&repository_versions/RepositoryVersions/repository_version=2.2.0.1-901",
+  "items" : [
+    {
+      "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2",
+      "Versions" : {
+        "stack_name" : "HDP",
+        "stack_version" : "2.2"
+      },
+      "repository_versions" : [
+        {
+          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15",
+          "RepositoryVersions" : {
+            "id" : 15,
+            "repository_version" : "2.2.0.1-901",
+            "stack_name" : "HDP",
+            "stack_version" : "2.2"
           },
           },
-          {
-            "Repositories": {
-              "repo_id": "HDP-UTILS-1.1.0.20",
-              "stack_name": "HDP-UTILS",
-              "base_url": "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0"
+          "operating_systems" : [
+            {
+              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat5",
+              "OperatingSystems" : {
+                "os_type" : "redhat5",
+                "repository_version_id" : 15,
+                "stack_name" : "HDP",
+                "stack_version" : "2.2"
+              },
+              "repositories" : [
+                {
+                  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat5/repositories/HDP-2.2.0.1-901",
+                  "Repositories" : {
+                    "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0",
+                    "default_base_url" : "",
+                    "latest_base_url" : "",
+                    "mirrors_list" : "",
+                    "os_type" : "redhat5",
+                    "repo_id" : "HDP-2.2.0.1-901",
+                    "repo_name" : "HDP",
+                    "repository_version_id" : 15,
+                    "stack_name" : "HDP",
+                    "stack_version" : "2.2"
+                  }
+                },
+                {
+                  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat5/repositories/HDP-UTILS-2.2.0.1-901",
+                  "Repositories" : {
+                    "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0",
+                    "default_base_url" : "",
+                    "latest_base_url" : "",
+                    "mirrors_list" : "",
+                    "os_type" : "redhat5",
+                    "repo_id" : "HDP-UTILS-2.2.0.1-901",
+                    "repo_name" : "HDP-UTILS",
+                    "repository_version_id" : 15,
+                    "stack_name" : "HDP",
+                    "stack_version" : "2.2"
+                  }
+                }
+              ]
+            },
+            {
+              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat6",
+              "OperatingSystems" : {
+                "os_type" : "redhat6",
+                "repository_version_id" : 15,
+                "stack_name" : "HDP",
+                "stack_version" : "2.2"
+              },
+              "repositories" : [
+                {
+                  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat6/repositories/HDP-2.2.0.1-901",
+                  "Repositories" : {
+                    "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0",
+                    "default_base_url" : "",
+                    "latest_base_url" : "",
+                    "mirrors_list" : "",
+                    "os_type" : "redhat6",
+                    "repo_id" : "HDP-2.2.0.1-901",
+                    "repo_name" : "HDP",
+                    "repository_version_id" : 15,
+                    "stack_name" : "HDP",
+                    "stack_version" : "2.2"
+                  }
+                },
+                {
+                  "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.2/repository_versions/15/operating_systems/redhat6/repositories/HDP-UTILS-2.2.0.1-901",
+                  "Repositories" : {
+                    "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos5/2.x/updates/2.2.0.0",
+                    "default_base_url" : "",
+                    "latest_base_url" : "",
+                    "mirrors_list" : "",
+                    "os_type" : "redhat6",
+                    "repo_id" : "HDP-UTILS-2.2.0.1-901",
+                    "repo_name" : "HDP-UTILS",
+                    "repository_version_id" : 15,
+                    "stack_name" : "HDP",
+                    "stack_version" : "2.2"
+                  }
+                }
+              ]
             }
             }
-          }
-        ]
-      }
-    ],
-    "deployment_info": [
-      {
-        "cluster": "myCluster",
-        "status": "CURRENT",
-        "totalHostCount": 100,
-        "hosts": ["host1", "host2"]
-      },
-      {
-        "cluster": "anotherCluster",
-        "status": "INSTALLED",
-        "totalHostCount": 100,
-        "hosts": ["host1", "host2"]
-      }
-    ]
-  }
+          ]
+        }
+      ]
+    }
+  ]
 }
 }

+ 13 - 13
ambari-admin/src/main/resources/ui/admin-web/app/assets/data/version/versions.json

@@ -11,19 +11,19 @@
         "totalHosts": 100,
         "totalHosts": 100,
         "cluster": "myCluster"
         "cluster": "myCluster"
       }
       }
-    },
-    {
-      "RepositoryVersions": {
-        "id": 2,
-        "repository_version": "2.2.1.1-885",
-        "display_name": "HDP 2.2.1",
-        "upgrade_pack": "upgrade-2.2",
-        "current_hosts": ["host1", "host2"],
-        "status": "INSTALLED",
-        "totalHosts": 100,
-        "cluster": "anotherCluster"
-      }
-    },
+},
+{
+"RepositoryVersions": {
+"id": 2,
+"repository_version": "2.2.1.1-885",
+"display_name": "HDP 2.2.1",
+"upgrade_pack": "upgrade-2.2",
+"current_hosts": ["host1", "host2"],
+"status": "INSTALLED",
+"totalHosts": 100,
+"cluster": "anotherCluster"
+}
+},
     {
     {
       "RepositoryVersions": {
       "RepositoryVersions": {
         "id": 3,
         "id": 3,

+ 1 - 1
ambari-admin/src/main/resources/ui/admin-web/app/index.html

@@ -154,7 +154,7 @@
     <script src="scripts/services/Auth.js"></script>
     <script src="scripts/services/Auth.js"></script>
     <script src="scripts/services/GetDifference.js"></script>
     <script src="scripts/services/GetDifference.js"></script>
     <script src="scripts/services/UnsavedDialog.js"></script>
     <script src="scripts/services/UnsavedDialog.js"></script>
-    <script src="scripts/services/StackVersions.js"></script>
+    <script src="scripts/services/Stack.js"></script>
     <!-- endbuild -->
     <!-- endbuild -->
 </body>
 </body>
 </html>
 </html>

+ 19 - 5
ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsCreateCtrl.js

@@ -18,14 +18,23 @@
 'use strict';
 'use strict';
 
 
 angular.module('ambariAdminConsole')
 angular.module('ambariAdminConsole')
-.controller('StackVersionsCreateCtrl', ['$scope', 'StackVersions', '$routeParams', '$location', function($scope, StackVersions, $routeParams, $location) {
+.controller('StackVersionsCreateCtrl', ['$scope', 'Stack', '$routeParams', '$location', 'Alert', function($scope, Stack, $routeParams, $location, Alert) {
   $scope.clusterName = $routeParams.clusterName;
   $scope.clusterName = $routeParams.clusterName;
   $scope.upgradeStack = {
   $scope.upgradeStack = {
     value: null,
     value: null,
-    options: [
-      '2.2'
-    ]
+    options: []
   };
   };
+  $scope.fetchStackVersionFilterList = function () {
+    Stack.allStackVersions()
+    .then(function (allStackVersions) {
+      $scope.upgradeStack.options = allStackVersions;
+      $scope.upgradeStack.value = allStackVersions[allStackVersions.length - 1].value;
+    })
+    .catch(function (data) {
+      Alert.error('Fetch stack version filter list error', data.message);
+    });
+  };
+  $scope.fetchStackVersionFilterList();
   $scope.upgradeStack.value = $scope.upgradeStack.options[0];
   $scope.upgradeStack.value = $scope.upgradeStack.options[0];
 
 
   // TODO retrieve operating systems and repo names from stack definition
   // TODO retrieve operating systems and repo names from stack definition
@@ -65,9 +74,14 @@ angular.module('ambariAdminConsole')
   ];
   ];
 
 
   $scope.create = function () {
   $scope.create = function () {
-    StackVersions.add($scope.upgradeStack.value, $scope.versionName, $scope.repositories)
+    Stack.addRepo($scope.upgradeStack.value, $scope.versionName, $scope.repositories)
     .success(function () {
     .success(function () {
+      var versionName = $scope.upgradeStack.value + '.' + $scope.versionName;
+      Alert.success('Created version <a href="#/stackVersions/' + versionName + '/edit">' + versionName + '</a>');
       $location.path('/stackVersions');
       $location.path('/stackVersions');
+    })
+    .error(function (data) {
+        Alert.error('Version creation error', data.message);
     });
     });
   };
   };
 }]);
 }]);

+ 34 - 35
ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsEditCtrl.js

@@ -18,51 +18,50 @@
 'use strict';
 'use strict';
 
 
 angular.module('ambariAdminConsole')
 angular.module('ambariAdminConsole')
-.controller('StackVersionsEditCtrl', ['$scope', 'StackVersions', '$routeParams', function($scope, StackVersions, $routeParams) {
-  function loadStackVersionInfo() {
-    return StackVersions.get($routeParams.id).then(function (response) {
-      loadStackRepositories(response.data.RepositoryVersions);
-      $scope.stackVersion = response.data.RepositoryVersions;
-    });
-  }
-
-  function loadStackRepositories(stackVersion) {
-    //todo replace "2.2" with actual version
-    return StackVersions.getStackRepositories('2.2').then(function (response) {
-      var repos = [];
-      response.data.items.forEach(function (repo) {
-        var installedRepo;
-        for (var i in stackVersion.operating_systems) {
-          if (stackVersion.operating_systems[i].OperatingSystems.os_type === repo.OperatingSystems.os_type) {
-            installedRepo = stackVersion.operating_systems[i];
-            break;
-          }
-        }
-        if (installedRepo) {
-          installedRepo.selected = true;
-          repos.push(installedRepo);
-        } else {
-          repo.selected = false;
-          repos.push(repo);
-        }
+.controller('StackVersionsEditCtrl', ['$scope', '$location', 'Stack', '$routeParams', 'ConfirmationModal', 'Alert', function($scope, $location, Stack, $routeParams, ConfirmationModal, Alert) {
+  function loadStackVersionInfo () {
+    return Stack.getRepo($routeParams.versionId).then(function (response) {
+      $scope.id = response.id;
+      $scope.stack = response.stack;
+      $scope.versionName = response.versionName;
+      $scope.stackVersion = response.stackVersion;
+      $scope.updateObj = response.updateObj;
+      $scope.repoVersionFullName = response.repoVersionFullName;
+      angular.forEach(response.osList, function (os) {
+        os.selected = true;
       });
       });
-      $scope.stackVersion.operatingSystems = repos;
+      $scope.osList = response.osList;
     });
     });
   }
   }
 
 
-  $scope.stackVersion;
   $scope.skipValidation = false;
   $scope.skipValidation = false;
-  $scope.editVersionDisabled = true;
   $scope.deleteEnabled = true;
   $scope.deleteEnabled = true;
-  $scope.toggleVersionEdit = function() {
-    $scope.editVersionDisabled = !$scope.editVersionDisabled;
-  };
-  $scope.save = function() {
+
+  $scope.save = function () {
     $scope.editVersionDisabled = true;
     $scope.editVersionDisabled = true;
+
+    delete $scope.updateObj.href;
+    Stack.updateRepo($scope.stackVersion, $scope.id, $scope.updateObj).then(function () {
+      Alert.success('Edited version <a href="#/stackVersions/' + $scope.versionName + '/edit">' + $scope.repoVersionFullName + '</a>');
+      $location.path('/stackVersions');
+    }).catch(function (data) {
+      Alert.error('Version update error', data.message);
+    });
   };
   };
-  $scope.cancel = function() {
+
+  $scope.cancel = function () {
     $scope.editVersionDisabled = true;
     $scope.editVersionDisabled = true;
+    $location.path('/stackVersions');
   };
   };
 
 
+  $scope.delete = function () {
+    ConfirmationModal.show('Delete Version', 'Are you sure you want to delete version "'+ $scope.versionName +'"?').then(function() {
+      Stack.deleteRepo($scope.stackVersion, $scope.id).then( function () {
+        $location.path('/stackVersions');
+      }).catch(function (data) {
+        Alert.error('Version delete error', data.message);
+      });
+    });
+  };
   loadStackVersionInfo();
   loadStackVersionInfo();
 }]);
 }]);

+ 2 - 2
ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/stackVersions/StackVersionsListCtrl.js

@@ -18,7 +18,7 @@
 'use strict';
 'use strict';
 
 
 angular.module('ambariAdminConsole')
 angular.module('ambariAdminConsole')
-  .controller('StackVersionsListCtrl', ['$scope', 'Cluster', 'StackVersions', '$routeParams', function ($scope, Cluster, StackVersions, $routeParams) {
+  .controller('StackVersionsListCtrl', ['$scope', 'Cluster', 'Stack', '$routeParams', function ($scope, Cluster, Stack, $routeParams) {
   $scope.clusterName = $routeParams.clusterName;
   $scope.clusterName = $routeParams.clusterName;
 
 
   // TODO retrieve a list of stacks having "upgrade_pack" from backend
   // TODO retrieve a list of stacks having "upgrade_pack" from backend
@@ -91,7 +91,7 @@ angular.module('ambariAdminConsole')
   $scope.getAllClusters();
   $scope.getAllClusters();
 
 
   $scope.getStackVersions = function () {
   $scope.getStackVersions = function () {
-    return StackVersions.list($scope.filter, $scope.pagination).then(function (stacks) {
+    return Stack.allRepos($scope.filter, $scope.pagination).then(function (stacks) {
       $scope.pagination.totalStacks = stacks.items.length;
       $scope.pagination.totalStacks = stacks.items.length;
       $scope.stacks = [];
       $scope.stacks = [];
       angular.forEach(stacks.items, function(stack) {
       angular.forEach(stacks.items, function(stack) {

+ 78 - 12
ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/StackVersions.js → ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Stack.js

@@ -18,7 +18,7 @@
 'use strict';
 'use strict';
 
 
 angular.module('ambariAdminConsole')
 angular.module('ambariAdminConsole')
-.factory('StackVersions', ['$http', '$q', 'Settings', function ($http, $q, Settings) {
+.factory('Stack', ['$http', '$q', 'Settings', function ($http, $q, Settings) {
   var statusMap = {
   var statusMap = {
     'INSTALLED': {
     'INSTALLED': {
       label: 'Installed',
       label: 'Installed',
@@ -50,7 +50,31 @@ angular.module('ambariAdminConsole')
   }
   }
 
 
   return {
   return {
-    list: function (filter, pagination) {
+    allStackVersions: function () {
+      var url = Settings.baseUrl + '/stacks?fields=*';
+      var deferred = $q.defer();
+      $http.get(url, {mock: 'stack/allStackVersions.json'})
+      .success(function (data) {
+        var allStackVersions = [];
+        angular.forEach(data.items, function (stack) {
+          angular.forEach(stack.versions, function (version) {
+            var stack_name = version.Versions.stack_name;
+            var stack_version = version.Versions.stack_version;
+            allStackVersions.push({
+              displayName: stack_name + '-' + stack_version,
+              value: stack_version
+            });
+          });
+        });
+        deferred.resolve(allStackVersions)
+      })
+      .error(function (data) {
+        deferred.reject(data);
+      });
+      return deferred.promise;
+    },
+
+    allRepos: function (filter, pagination) {
       var stackFilter = filter.stack.current.value;
       var stackFilter = filter.stack.current.value;
       var versionFilter = filter.version;
       var versionFilter = filter.version;
       var clusterFilter = filter.cluster.current.value;
       var clusterFilter = filter.cluster.current.value;
@@ -77,17 +101,18 @@ angular.module('ambariAdminConsole')
       return deferred.promise;
       return deferred.promise;
     },
     },
 
 
-    add: function (stack, version, osList) {
+    addRepo: function (stack, version, osList) {
       var url = '/stacks/HDP/versions/2.2/repository_versions/';
       var url = '/stacks/HDP/versions/2.2/repository_versions/';
       var payload = {};
       var payload = {};
+      var payloadWrap = { RepositoryVersions : payload };
       payload.repository_version = stack + '.' + version;
       payload.repository_version = stack + '.' + version;
       payload.display_name = 'HDP-' + payload.repository_version;
       payload.display_name = 'HDP-' + payload.repository_version;
       payload.upgrade_pack = "upgrade-2.2"; // TODO get this value from backend
       payload.upgrade_pack = "upgrade-2.2"; // TODO get this value from backend
-      payload.operating_systems = [];
+      payloadWrap.operating_systems = [];
       angular.forEach(osList, function (osItem) {
       angular.forEach(osList, function (osItem) {
         if (osItem.selected)
         if (osItem.selected)
         {
         {
-          payload.operating_systems.push({
+          payloadWrap.operating_systems.push({
             "OperatingSystems" : {
             "OperatingSystems" : {
               "os_type" : osItem.os
               "os_type" : osItem.os
             },
             },
@@ -103,18 +128,59 @@ angular.module('ambariAdminConsole')
           });
           });
         }
         }
       });
       });
-      var payloadWrap = { RepositoryVersions : payload };
       return $http.post(Settings.baseUrl + url, payloadWrap);
       return $http.post(Settings.baseUrl + url, payloadWrap);
     },
     },
 
 
-    get: function (version) {
-      var url = Settings.baseUrl + '/stacks?versions/RepositoryVersions/repository_version=' + version +'&fields=versions/RepositoryVersions';
-      return $http.get(url, {mock: 'version/version.json'});
+    getRepo: function (repoVersion) {
+      // TODO do not hard code HDP
+      var url = Settings.baseUrl + '/stacks/HDP/versions?' +
+                'fields=repository_versions/operating_systems/repositories/*' +
+                '&repository_versions/RepositoryVersions/repository_version=' + repoVersion;
+      var deferred = $q.defer();
+      $http.get(url, {mock: 'version/version.json'})
+      .success(function (data) {
+        data = data.items[0];
+        var response = {
+          id : data.repository_versions[0].RepositoryVersions.id,
+          stackVersion : data.Versions.stack_version,
+          stack: data.Versions.stack_name + '-' + data.Versions.stack_version,
+          versionName: data.repository_versions[0].RepositoryVersions.repository_version,
+          repoVersionFullName : data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.repository_version,
+          osList: data.repository_versions[0].operating_systems,
+          updateObj: data.repository_versions[0]
+        };
+        deferred.resolve(response);
+      })
+      .error(function (data) {
+        deferred.reject(data);
+      });
+      return deferred.promise;
     },
     },
 
 
-    getStackRepositories: function (version) {
-      var url = Settings.baseUrl + '/stacks/HDP/versions/' + version + '/operating_systems?fields=*';
-      return $http.get(url, {mock: 'stack/stack.json'});
+    updateRepo: function (stackVersion, id, payload) {
+      var url = Settings.baseUrl + '/stacks/HDP/versions/' + stackVersion + '/repository_versions/' + id;
+      var deferred = $q.defer();
+      $http.put(url, payload)
+      .success(function (data) {
+        deferred.resolve(data)
+      })
+      .error(function (data) {
+        deferred.reject(data);
+      });
+      return deferred.promise;
+    },
+
+    deleteRepo: function (stackVersion, id) {
+      var url = Settings.baseUrl + '/stacks/HDP/versions/' + stackVersion + '/repository_versions/' + id;
+      var deferred = $q.defer();
+      $http.delete(url)
+      .success(function (data) {
+        deferred.resolve(data)
+      })
+      .error(function (data) {
+        deferred.reject(data);
+      });
+      return deferred.promise;
     }
     }
   };
   };
 }]);
 }]);

+ 2 - 2
ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/create.html

@@ -32,8 +32,8 @@
         <div class="col-sm-3">
         <div class="col-sm-3">
           <select class="form-control"
           <select class="form-control"
                   ng-model="upgradeStack.value"
                   ng-model="upgradeStack.value"
-                  ng-options="o as o for o in upgradeStack.options"
-            ></select>
+                  ng-options="o.value as o.displayName for o in upgradeStack.options">
+          </select>
         </div>
         </div>
       </div>
       </div>
       <div class="form-group">
       <div class="form-group">

+ 22 - 21
ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/edit.html

@@ -19,38 +19,35 @@
 <div class="clearfix">
 <div class="clearfix">
   <ol class="breadcrumb pull-left">
   <ol class="breadcrumb pull-left">
     <li><a href="#/stackVersions">Versions</a></li>
     <li><a href="#/stackVersions">Versions</a></li>
-    <li class="active">{{stackVersion.repository_version}}</li>
+    <li class="active">{{versionName}}</li>
   </ol>
   </ol>
   <div class="pull-right top-margin-4" ng-switch="deleteEnabled">
   <div class="pull-right top-margin-4" ng-switch="deleteEnabled">
     <button ng-switch-when="false" class="btn disabled btn-default" tooltip="Cannot Delete Static Instances">Deregister
     <button ng-switch-when="false" class="btn disabled btn-default" tooltip="Cannot Delete Static Instances">Deregister
       Version
       Version
     </button>
     </button>
-    <button ng-switch-when="true" class="btn btn-danger" ng-click="deleteInstance(stackVersion)">Deregister Version
+    <button ng-switch-when="true" class="btn btn-danger" ng-click="delete()">Deregister Version
     </button>
     </button>
   </div>
   </div>
 </div>
 </div>
 <hr>
 <hr>
 <form class="form-horizontal edit-version-form" role="form" name="form-editVersionForm" novalidate>
 <form class="form-horizontal edit-version-form" role="form" name="form-editVersionForm" novalidate>
   <div class="panel panel-default">
   <div class="panel panel-default">
-    <div class="panel-heading clearfix">
-      <h3 class="panel-title pull-left">Details</h3>
-      <div class="pull-right" ng-switch="editVersionDisabled">
-        <a href ng-switch-when="true" ng-click="toggleVersionEdit()" ng-show="editVersionDisabled" class="settings-edit-toggle"> <span class="glyphicon glyphicon-pencil" ></span> Edit</a>
-        <span ng-switch-when="false"> <span class="glyphicon glyphicon-pencil" ></span> Edit</span>
-      </div>
+  <div class="panel-heading clearfix">
+    <h3 class="panel-title pull-left">Details</h3>
+  </div>
+  <div class="panel-body">
+    <div class="form-group">
+      <div class="col-sm-3"><label class="control-label">Stack</label></div>
+      <div class="col-sm-9 form-control-static">{{stack}}</div>
     </div>
     </div>
-    <div class="panel-body">
-      <div class="form-group">
-        <div class="col-sm-3"><label class="control-label">Stack</label></div>
-        <div class="col-sm-9">{{stackVersion.stack}}</div>
-      </div>
-      <div class="form-group">
-        <div class="col-sm-3"><label class="control-label">Version Name</label></div>
-        <div class="col-sm-3"><input type="text" class="form-control" placeholder="Version Name" ng-model="stackVersion.display_name" ng-disabled="editVersionDisabled"></div>
-      </div>
+    <div class="form-group">
+      <div class="col-sm-3"><label class="control-label">Version Name</label></div>
+      <div class="col-sm-3 form-control-static">{{versionName}}</div>
     </div>
     </div>
   </div>
   </div>
+  </div>
 
 
+  <!--
   <div class="panel panel-default">
   <div class="panel panel-default">
     <div class="panel-heading">
     <div class="panel-heading">
       <h3 class="panel-title">Clusters</h3>
       <h3 class="panel-title">Clusters</h3>
@@ -67,10 +64,14 @@
       </div>
       </div>
     </div>
     </div>
   </div>
   </div>
-
+  -->
   <div class="panel panel-default">
   <div class="panel panel-default">
-    <div class="panel-heading">
-      <h3 class="panel-title">Repositories</h3>
+    <div class="panel-heading clearfix">
+      <h3 class="panel-title pull-left">Repositories</h3>
+      <div class="pull-right" ng-switch="editReposDisabled">
+        <a href ng-switch-when="true" ng-click="toggleReposEdit()" class="settings-edit-toggle"> <span class="glyphicon glyphicon-pencil" ></span> Edit</a>
+        <span ng-switch-when="false"> <span class="glyphicon glyphicon-pencil" ></span> Edit</span>
+      </div>
     </div>
     </div>
     <div class="panel-body ">
     <div class="panel-body ">
       <div class="alert alert-info" role="alert">
       <div class="alert alert-info" role="alert">
@@ -81,7 +82,7 @@
         <div class="col-sm-3"><h5><label>Name</label></h5></div>
         <div class="col-sm-3"><h5><label>Name</label></h5></div>
         <div class="col-sm-6"><h5><label>Base URL</label></h5></div>
         <div class="col-sm-6"><h5><label>Base URL</label></h5></div>
       </div>
       </div>
-      <div class="clearfix border-bottom bottom-margin" ng-repeat="os in stackVersion.operatingSystems">
+      <div class="clearfix border-bottom bottom-margin" ng-repeat="os in osList">
         <div class="col-sm-3">
         <div class="col-sm-3">
           <div class="checkbox">
           <div class="checkbox">
             <label>
             <label>

+ 1 - 1
ambari-admin/src/main/resources/ui/admin-web/app/views/stackVersions/list.html

@@ -57,7 +57,7 @@
     </thead>
     </thead>
     <tbody>
     <tbody>
     <tr ng-repeat="stack in stacks">
     <tr ng-repeat="stack in stacks">
-      <td class="col-small">{{stack.display_name}}</td>
+      <td class="col-small">{{stack.stack_name + '-' + stack.stack_version}}</td>
       <td class="col-medium"><a href="#/stackVersions/{{stack.repository_version}}/edit">{{stack.repository_version}}</a></td>
       <td class="col-medium"><a href="#/stackVersions/{{stack.repository_version}}/edit">{{stack.repository_version}}</a></td>
       <td class="col-small">
       <td class="col-small">
         <a href ng-show="stack.cluster">
         <a href ng-show="stack.cluster">