AMBARI-15724. Integrate Version Registration in Select Stack Page.(xiwang)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/391b45e9 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/391b45e9 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/391b45e9 Branch: refs/heads/trunk Commit: 391b45e934b8d4e94cb64adab0293736671395db Parents: 81279fa Author: Xi Wang <[email protected]> Authored: Wed Mar 30 17:43:53 2016 -0700 Committer: Xi Wang <[email protected]> Committed: Tue Apr 12 13:38:26 2016 -0700 ---------------------------------------------------------------------- .../wizard/stack/HDP_version_definitions.json | 556 +++++++++++++++ ambari-web/app/controllers/installer.js | 191 +++++- .../main/admin/stack_and_upgrade_controller.js | 33 +- .../controllers/main/service/add_controller.js | 8 +- ambari-web/app/controllers/wizard.js | 55 ++ .../app/controllers/wizard/step1_controller.js | 105 ++- .../app/mappers/repository_version_mapper.js | 11 + ambari-web/app/mappers/stack_mapper.js | 52 +- ambari-web/app/messages.js | 24 +- ambari-web/app/models/stack.js | 42 +- ambari-web/app/routes/add_service_routes.js | 9 +- ambari-web/app/styles/application.less | 177 +++++ .../main/admin/stack_upgrade/services.hbs | 2 +- ambari-web/app/templates/wizard/step1.hbs | 282 +++++--- .../templates/wizard/step1_viewRepositories.hbs | 102 +++ ambari-web/app/templates/wizard/step4.hbs | 2 +- ambari-web/app/utils/ajax/ajax.js | 52 ++ .../main/admin/stack_upgrade/services_view.js | 11 +- ambari-web/app/views/wizard/step1_view.js | 470 +++++++++---- ambari-web/test/controllers/installer_test.js | 27 +- ambari-web/test/mappers/stack_mapper_test.js | 674 ++++++++++++++----- .../admin/stack_upgrade/services_view_test.js | 25 +- ambari-web/test/views/wizard/step1_view_test.js | 296 +------- 23 files changed, 2426 insertions(+), 780 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json b/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json new file mode 100644 index 0000000..fde11e2 --- /dev/null +++ b/ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json @@ -0,0 +1,556 @@ +{ + "href" : "http://c6401.ambari.apache.org:8080/api/v1/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services&show_available=true&VersionDefinition/stack_name=HDP", + "items" : [ + { + "VersionDefinition" : { + "id" : 1, + "show_available": true, + "stack_name" : "HDP", + "stack_version" : "2.3", + "repository_version" : "2.3.4.0-3396", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3396.xml", + "release" : { + "build" : "3396", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2.3396" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3.3396" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 2, + "stack_name" : "HDP", + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.4.0-3397", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3397.xml", + "release" : { + "build" : "3397", + "compatible_with" : "2.3.[0-3].0", + "notes" : "http://example.com", + "version" : "2.3.4.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3397" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3397" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3397" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + { + "VersionDefinition" : { + "id" : 5, + "stack_name" : "HDP", + "stack_version" : "2.3", + "show_available": true, + "repository_version" : "2.3.6.0-3646", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3646.xml", + "release" : { + "build" : "3646", + "compatible_with" : "2.3.[0-6].0", + "notes" : "http://example.com", + "version" : "2.3.6.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-3646" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-3646" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-3646" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6", + "OperatingSystems" : { + "os_type" : "redhat6", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-2.3", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6", + "mirrors_list" : "", + "os_type" : "redhat6", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.3" + } + } + ] + } + ] + }, + + + { + "VersionDefinition" : { + "id" : 3, + "stack_name" : "HDP", + "stack_version" : "2.4", + "show_available": true, + "repository_version" : "2.4.0.0-169", + "type" : "STANDARD", + "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_169.xml", + "release" : { + "build" : "169", + "compatible_with" : "2.4.[0-3].0", + "notes" : "http://example.com", + "version" : "2.4.0.0" + }, + "stack_services" : [ + { + "name" : "HDFS", + "display_name" : "HDFS", + "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "YARN", + "display_name" : "YARN", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "HBase", + "display_name" : "HBase", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "ZOOKEEPER", + "display_name" : "ZooKeeper", + "comment" : "", + "versions" : [ + "1.7.3-169" + ] + }, + { + "name" : "Hive", + "display_name" : "Hive", + "comment" : "", + "versions" : [ + "1.1.0-169" + ] + }, + { + "name" : "MAPREDUCE2", + "display_name" : "MapReduce2", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Slider", + "display_name" : "Slider", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Pig", + "display_name" : "Pig", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + }, + { + "name" : "Sqoop", + "display_name" : "Sqoop", + "comment" : "service", + "versions" : [ + "2.7.1.2-169" + ] + } + ] + }, + "operating_systems" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7", + "OperatingSystems" : { + "os_type" : "debian7", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + }, + "repositories" : [ + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-2.4", + "repo_name" : "HDP", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + }, + { + "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20", + "Repositories" : { + "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7", + "mirrors_list" : "", + "os_type" : "debian7", + "repo_id" : "HDP-UTILS-1.1.0.20", + "repo_name" : "HDP-UTILS", + "repository_version_id" : 1, + "stack_name" : "HDP", + "stack_version" : "2.4" + } + } + ] + } + ] + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/controllers/installer.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js index 9c92282..bf0ae7d 100644 --- a/ambari-web/app/controllers/installer.js +++ b/ambari-web/app/controllers/installer.js @@ -138,8 +138,13 @@ App.InstallerController = App.WizardController.extend({ var stackServices = App.StackService.find().mapProperty('serviceName'); if (!(stackServices && !!stackServices.length && App.StackService.find().objectAt(0).get('stackVersion') == App.get('currentStackVersionNumber'))) { this.loadServiceComponents().complete(function () { - self.set('content.services', App.StackService.find()); - dfd.resolve(); + self.loadServiceVersionFromVersionDefinitions().complete(function () { + self.set('content.services', App.StackService.find().forEach(function (item) { + // user the service version from VersionDefinition + item.serviceVersionDisplay = self.get('serviceVersionsMap')[item.get('serviceName')]; + })); + dfd.resolve(); + }); }); } else { dfd.resolve(); @@ -240,7 +245,7 @@ App.InstallerController = App.WizardController.extend({ App.Tab.find().clear(); this.set('stackConfigsLoaded', false); if (stacks && stacks.get('length')) { - App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id')); + App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion')); dfd.resolve(true); } else { App.ajax.send({ @@ -277,12 +282,12 @@ App.InstallerController = App.WizardController.extend({ var requests = []; this.get('stackNames').forEach(function (stackName) { requests.push(App.ajax.send({ - name: 'wizard.stacks_versions', + name: 'wizard.stacks_versions_definitions', sender: this, data: { stackName: stackName }, - success: 'loadStacksVersionsSuccessCallback', + success: 'loadStacksVersionsDefinitionsSuccessCallback', error: 'loadStacksVersionsErrorCallback' })); }, this); @@ -298,21 +303,21 @@ App.InstallerController = App.WizardController.extend({ /** * Parse loaded data and create array of stacks objects */ - loadStacksVersionsSuccessCallback: function (data) { + loadStacksVersionsDefinitionsSuccessCallback: function (data) { var stacks = App.db.getStacks(); var isStacksExistInDb = stacks && stacks.length; if (isStacksExistInDb) { stacks.forEach(function (_stack) { - var stack = data.items.filterProperty('Versions.stack_name', _stack.stack_name).findProperty('Versions.stack_version', _stack.stack_version); + var stack = data.items.findProperty('VersionDefinition.repository_version', _stack.repository_version); if (stack) { - stack.Versions.is_selected = _stack.is_selected; + stack.VersionDefinition.is_selected = _stack.is_selected; } }, this); } - App.stackMapper.map(data); + App.stackMapper.map(data.items, "VersionDefinition"); if (!this.decrementProperty('loadStacksRequestsCounter')) { if (!isStacksExistInDb) { - var defaultStackVersion = App.Stack.find().findProperty('id', App.defaultStackVersion); + var defaultStackVersion = App.Stack.find().findProperty('stackNameVersion', App.defaultStackVersion); if (defaultStackVersion) { defaultStackVersion.set('isSelected', true) } else { @@ -320,7 +325,7 @@ App.InstallerController = App.WizardController.extend({ } } this.set('content.stacks', App.Stack.find()); - App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id')); + App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion')); } }, @@ -404,7 +409,6 @@ App.InstallerController = App.WizardController.extend({ * @param stepController App.WizardStep5Controller */ saveMasterComponentHosts: function (stepController) { - var obj = stepController.get('selectedServicesMasters'), hosts = this.getDBProperty('hosts'); @@ -505,13 +509,174 @@ App.InstallerController = App.WizardController.extend({ this.set('content.clients', clients); }, + /* + * Post version definition file (.xml) to server + */ + postVersionDefinitionFile: function (isXMLdata, data) { + var dfd = $.Deferred(); + var name = isXMLdata? 'wizard.step1.post_version_definition_file.xml' : 'wizard.step1.post_version_definition_file.url'; + + App.ajax.send({ + name: name, + sender: this, + data: { + dfd: dfd, + data: data + }, + success: 'postVersionDefinitionFileSuccessCallback', + error: 'postVersionDefinitionFileErrorCallback' + }); + return dfd.promise(); + }, + + /** + * onSuccess callback for postVersionDefinitionFile. + */ + postVersionDefinitionFileSuccessCallback: function (response, request, data) { + if (response.resources.length && response.resources[0].VersionDefinition) { + data.dfd.resolve( + { + stackName: response.resources[0].VersionDefinition.stack_name, + id: response.resources[0].VersionDefinition.id, + stackVersion: response.resources[0].VersionDefinition.stack_version + }); + } + }, + + /** + * onError callback for postVersionDefinitionFile. + */ + postVersionDefinitionFileErrorCallback: function (request, ajaxOptions, error, data, params) { + params.dfd.reject(data); + var header = Em.I18n.t('installer.step1.useLocalRepo.uploadFile.error.title'); + var body = ""; + if(request && request.responseText){ + try { + var json = $.parseJSON(request.responseText); + body = json.message; + } catch (err) {} + } + App.showAlertPopup(header, body); + }, + + getSupportedOSList: function (stackName, stackVersion) { + return App.ajax.send({ + name: 'wizard.step1.get_supported_os_types', + sender: this, + data: { + stackName: stackName, + stackVersion: stackVersion + }, + success: 'getSupportedOSListSuccessCallback', + error: 'getSupportedOSListErrorCallback' + }); + }, + + /** + * onSuccess callback for getSupportedOSList. + */ + getSupportedOSListSuccessCallback: function (response, request, data) { + if (response.operating_systems) { + this.set('allSupportedOS', response.operating_systems); + } + }, + + /** + * onError callback for getSupportedOSList + */ + getSupportedOSListErrorCallback: function (request, ajaxOptions, error, data, params) { + var header = Em.I18n.t('installer.step1.useLocalRepo.getSurpottedOs.error.title'); + var body = ""; + if(request && request.responseText){ + try { + var json = $.parseJSON(request.responseText); + body = json.message; + } catch (err) {} + } + App.showAlertPopup(header, body); + }, + + /* + * Get the specific repo by stack name, version and id + */ + getRepoById: function (repo_id, stack_name, stack_version) { + var dfd = $.Deferred(); + App.ajax.send({ + name: 'wizard.step1.get_repo_version_by_id', + sender: this, + data: { + dfd: dfd, + stackName: stack_name, + stackVersion: stack_version, + repoId: repo_id + }, + success: 'getRepoByIdSuccessCallback', + error: 'getRepoByIdErrorCallback' + }); + return dfd.promise(); + }, + + /** + * onSuccess callback for getRepoById. + */ + getRepoByIdSuccessCallback: function (data, request, dataInfo) { + data = data.items[0]; + var self = this; + // load the data info to display for details and contents panel + var response = { + id : data.repository_versions[0].RepositoryVersions.id, + stackVersion : data.Versions.stack_version, + stackName: data.Versions.stack_name, + type: data.repository_versions[0].RepositoryVersions.release? data.repository_versions[0].RepositoryVersions.release.type: null, + stackNameVersion: data.Versions.stack_name + '-' + data.Versions.stack_version, /// HDP-2.3 + actualVersion: data.repository_versions[0].RepositoryVersions.repository_version, /// 2.3.4.0-3846 + version: data.repository_versions[0].RepositoryVersions.release ? data.repository_versions[0].RepositoryVersions.release.version: null, /// 2.3.4.0 + releaseNotes: data.repository_versions[0].RepositoryVersions.release ? data.repository_versions[0].RepositoryVersions.release.release_notes: null, + displayName: data.repository_versions[0].RepositoryVersions.release ? data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.release.version : + data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.repository_version.split('-')[0], //HDP-2.3.4.0 + repoVersionFullName : data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.repository_version, + osList: data.repository_versions[0].operating_systems, + updateObj: data.repository_versions[0] + }; + var services = []; + data.repository_versions[0].RepositoryVersions.services.forEach(function (service) { + services.push({ + name: service.name, + version: service.versions[0].version, + components: service.versions[0].components + }); + }); + response.services = services; + + // to diaplay repos panel, should map all available operating systems including empty ones + this.getSupportedOSList(response.stackName, response.stackVersion).complete(function () { + var existedOS = data.repository_versions[0].operating_systems; + var existedMap = {}; + existedOS.map(function (existedOS) { + existedOS.isSelected = true; + existedMap[existedOS.OperatingSystems.os_type] = existedOS; + }); + self.get('allSupportedOS').forEach(function(supportedOS) { + if(!existedMap[supportedOS.OperatingSystems.os_type]) { + supportedOS.isSelected = false; + supportedOS.repositories.forEach(function(repo) { + repo.Repositories.base_url = ''; + }); + existedOS.push(supportedOS); + } + }); + App.stackMapper.map(data.repository_versions, "RepositoryVersions"); + dataInfo.dfd.resolve(response); + }); + }, + /** * Check validation of the customized local urls */ checkRepoURL: function (wizardStep1Controller) { var selectedStack = this.get('content.stacks').findProperty('isSelected', true); selectedStack.set('reload', true); - var nameVersionCombo = selectedStack.get('id'); + var nameVersionCombo = selectedStack.get('stackNameVersion'); var stackName = nameVersionCombo.split('-')[0]; var stackVersion = nameVersionCombo.split('-')[1]; var dfd = $.Deferred(); http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js index a056d3b..7a7d050 100644 --- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js +++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js @@ -1794,5 +1794,36 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, newWindow = window.open(); newWindow.document.write(output); newWindow.focus(); - } + }, + + /** + * load version for services to display on Choose Servoces page + * should load from VersionDefinition endpoint + */ + loadServiceVersionFromVersionDefinitions: function () { + return App.ajax.send({ + name: 'cluster.load_current_repo_stack_services', + sender: this, + data: { + clusterName: App.clusterName + }, + success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback', + error: 'loadServiceVersionFromVersionDefinitionsErrorCallback' + }); + }, + + serviceVersionsMap: {}, + loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) { + var rv = jsonData.items[0].repository_versions[0].RepositoryVersions; + var map = this.get('serviceVersionsMap'); + if (rv) { + rv.stack_services.forEach(function (item) { + map[item.name] = item.versions[0]; + }); + } + }, + + loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) { + }, + }); http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/controllers/main/service/add_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js index 73abd59..a4fa9b7 100644 --- a/ambari-web/app/controllers/main/service/add_controller.js +++ b/ambari-web/app/controllers/main/service/add_controller.js @@ -192,7 +192,13 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, { this.setSkipSlavesStep(App.StackService.find().filterProperty('isSelected').filterProperty('isInstalled', false), 3); } this.set('serviceToInstall', null); - this.set('content.services', App.StackService.find()); + var self = this; + this.loadServiceVersionFromVersionDefinitions().complete(function () { + self.set('content.services', App.StackService.find().forEach(function (item) { + // user the service version from VersionDefinition + Ember.set(item, 'serviceVersionDisplay', self.get('serviceVersionsMap')[item.get('serviceName')]); + })); + }); }, /** http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/controllers/wizard.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js index c3d7f08..7b55545 100644 --- a/ambari-web/app/controllers/wizard.js +++ b/ambari-web/app/controllers/wizard.js @@ -681,6 +681,61 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM }, /** + * load version for services to display on Choose Servoces page + * should load from VersionDefinition endpoint + */ + loadServiceVersionFromVersionDefinitions: function () { + if (this.get('name') == 'addServiceController') { + return App.ajax.send({ + name: 'cluster.load_current_repo_stack_services', + sender: this, + data: { + clusterName: App.clusterName + }, + success: '_loadServiceVersionFromVersionDefinitionsSuccessCallback', + error: 'loadServiceVersionFromVersionDefinitionsErrorCallback' + }); + } else { + var seletedRepo = App.Stack.find().findProperty('isSelected'); + var name = seletedRepo.get('showAvailable') ? 'wizard.get_shown_version_definition': 'wizard.get_version_definition'; + if (seletedRepo) { + return App.ajax.send({ + name: name, + sender: this, + data: { + repositoryVersion: seletedRepo.get('repositoryVersion') + }, + success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback', + error: 'loadServiceVersionFromVersionDefinitionsErrorCallback' + }); + } + } + }, + + serviceVersionsMap: {}, + loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) { + var versionDefinitions = jsonData.items[0].VersionDefinition; + var map = this.get('serviceVersionsMap'); + if (versionDefinitions) { + versionDefinitions.stack_services.forEach(function (item) { + map[item.name] = item.versions[0]; + }); + } + }, + + _loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) { + var rv = jsonData.items[0].repository_versions[0].RepositoryVersions; + var map = this.get('serviceVersionsMap'); + if (rv) { + rv.stack_services.forEach(function (item) { + map[item.name] = item.versions[0]; + }); + } + }, + loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) { + }, + + /** * Load config groups from local DB */ loadServiceConfigGroups: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/controllers/wizard/step1_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js index c357bf4..dce66a3 100644 --- a/ambari-web/app/controllers/wizard/step1_controller.js +++ b/ambari-web/app/controllers/wizard/step1_controller.js @@ -31,7 +31,110 @@ App.WizardStep1Controller = Em.Controller.extend({ selectedStack: function() { return App.Stack.find().findProperty('isSelected'); - }.property('[email protected]') + }.property('[email protected]'), + optionsToSelect: { + 'usePublicRepo': { + index: 0, + isSelected: true + }, + 'useLocalRepo': { + index: 1, + isSelected: false, + 'uploadFile': { + index: 0, + name: 'uploadFile', + file: '', + hasError: false, + isSelected: true + }, + 'enterUrl': { + index: 1, + name: 'enterUrl', + url: 'http://', + hasError: false, + isSelected: false + } + } + }, + /** + * Used to set version definition file from FileUploader + * @method setVDFFile + * @param {string} vdf + */ + setVDFFile: function (vdf) { + this.set("optionsToSelect.useLocalRepo.uploadFile.file", vdf); + }, + + /** + * Load selected file to current page content + */ + readVersionInfo: function(){ + var data = {}; + var isXMLdata = false; + var loadedVersionInfo = {}; + if (this.get("optionsToSelect.usePublicRepo.isSelected")) return; + if (this.get("optionsToSelect.useLocalRepo.isSelected") && this.get("optionsToSelect.useLocalRepo.enterUrl.isSelected")) { + var url = this.get("optionsToSelect.useLocalRepo.enterUrl.url"); + data = { + "VersionDefinition": { + "version_url": url + } + }; + } else if (this.get("optionsToSelect.useLocalRepo.uploadFile.isSelected")) { + isXMLdata = true; + // load from file browser + data = this.get("optionsToSelect.useLocalRepo.uploadFile.file"); + } + + var installerController = App.router.get('installerController'); + var self = this; + installerController.postVersionDefinitionFile(isXMLdata, data).done(function (versionInfo) { + if (versionInfo.id && versionInfo.stackName && versionInfo.stackVersion) { + installerController.getRepoById(versionInfo.id, versionInfo.stackName, versionInfo.stackVersion).done(function(response) { + loadedVersionInfo.id = response.id; + loadedVersionInfo.isPatch = response.type == 'PATCH'; + loadedVersionInfo.stackNameVersion = response.stackNameVersion; + loadedVersionInfo.displayName = response.displayName; + loadedVersionInfo.version = response.version || 'n/a'; + loadedVersionInfo.actualVersion = response.actualVersion || 'n/a'; + loadedVersionInfo.updateObj = response.updateObj; + loadedVersionInfo.upgradeStack = { + stack_name: response.stackName, + stack_version: response.stackVersion, + display_name: response.displayName + }; + loadedVersionInfo.services = response.services || []; + loadedVersionInfo.repoVersionFullName = response.repoVersionFullName; + self.set('loadedVersionInfo', loadedVersionInfo); + self.set('latestSelectedLocalRepoId', response.repoVersionFullName); + + Ember.run.next(function () { + $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'}); + $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'}); + }); + // load successfully, so make this local stack repo as selectedStack + self.get('content.stacks').setEach('isSelected', false); + self.get('content.stacks').findProperty('id', response.repoVersionFullName).set('isSelected', true); + }) + } + }); + }, + + /** + * On click handler for removing OS + */ + removeOS: function(event) { + var osToRemove = event.context; + Em.set(osToRemove, 'isSelected', false); + }, + + /** + * On click handler for adding new OS + */ + addOS: function(event) { + var osToAdd = event.context; + Em.set(osToAdd, 'isSelected', true); + } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/mappers/repository_version_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/repository_version_mapper.js b/ambari-web/app/mappers/repository_version_mapper.js index 67cfe64..816308b 100644 --- a/ambari-web/app/mappers/repository_version_mapper.js +++ b/ambari-web/app/mappers/repository_version_mapper.js @@ -128,6 +128,17 @@ App.repoVersionMapper = App.QuickDataMapper.create({ serviceArray.pushObject(serviceObj); resultService.push(this.parseIt(serviceObj, this.get('modelService'))); }, this); + } else if (item[repoVersionsKey].stack_services) { + item[repoVersionsKey].stack_services.forEach(function (service) { + var serviceObj = { + id: service.name, + name: service.name, + display_name: service.display_name, + latest_version: service.versions[0] ? service.versions[0]: '' + }; + serviceArray.pushObject(serviceObj); + resultService.push(this.parseIt(serviceObj, this.get('modelService'))); + }, this); } repo.operating_systems = osArray; repo.services = serviceArray; http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/mappers/stack_mapper.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mappers/stack_mapper.js b/ambari-web/app/mappers/stack_mapper.js index 75245e0..784431a 100644 --- a/ambari-web/app/mappers/stack_mapper.js +++ b/ambari-web/app/mappers/stack_mapper.js @@ -21,11 +21,14 @@ App.stackMapper = App.QuickDataMapper.create({ modelStack: App.Stack, modelOS: App.OperatingSystem, modelRepo: App.Repository, + modelServices: App.ServiceSimple, configStack: { id: 'id', stack_name: 'stack_name', stack_version: 'stack_version', + show_available: 'show_available', + repository_version: 'repository_version', active: 'active', parent_stack_version: 'parent_stack_version', min_upgrade_version: 'min_upgrade_version', @@ -33,6 +36,11 @@ App.stackMapper = App.QuickDataMapper.create({ max_jdk_version: 'max_jdk', is_selected: 'is_selected', config_types: 'config_types', + stack_services_key: 'stack_services', + stack_services_type: 'array', + stack_services: { + item: 'id' + }, operating_systems_key: 'operating_systems', operating_systems_type: 'array', operating_systems: { @@ -46,12 +54,20 @@ App.stackMapper = App.QuickDataMapper.create({ stack_name: 'stack_name', stack_version: 'stack_version', stack_id: 'stack_id', + is_selected: 'is_selected', repositories_key: 'repositories', repositories_type: 'array', repositories: { item: 'id' } }, + + configService: { + id: 'id', + name: 'name', + display_name: 'display_name', + latest_version: 'latest_version' + }, configRepository: { id: 'id', @@ -67,42 +83,59 @@ App.stackMapper = App.QuickDataMapper.create({ operating_system_id: 'os_id' }, - map: function(json) { + map: function(json, key) { var modelStack = this.get('modelStack'); var modelOS = this.get('modelOS'); var modelRepo = this.get('modelRepo'); + var modelServices = this.get('modelServices'); var resultStack = []; var resultOS = []; var resultRepo = []; + var resultServices = []; - var stackVersions = json.items.filterProperty('Versions.active'); - stackVersions.sortProperty('Versions.stack_version').reverse().forEach(function(item) { - var stack = item.Versions; + var stackVersions = json; + var propertiesKey = key; + stackVersions.sortProperty(key + '.stack_version').reverse().forEach(function(item) { + var stack = item[key]; var operatingSystemsArray = []; + var servicesArray = []; - stack.id = stack.stack_name + "-" + stack.stack_version; + stack.id = stack.stack_name + "-" + stack.repository_version; item.operating_systems.forEach(function(ops) { var operatingSystems = ops.OperatingSystems; var repositoriesArray = []; ops.repositories.forEach(function(repo) { - repo.Repositories.id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type, repo.Repositories.repo_id].join('-'); - repo.Repositories.os_id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type].join('-'); + repo.Repositories.id = [stack.id, repo.Repositories.os_type, repo.Repositories.repo_id].join('-'); + repo.Repositories.os_id = [stack.id, repo.Repositories.os_type].join('-'); + if (!repo.Repositories.latest_base_url) repo.Repositories.latest_base_url = repo.Repositories.base_url; resultRepo.push(this.parseIt(repo.Repositories, this.get('configRepository'))); repositoriesArray.pushObject(repo.Repositories); }, this); - operatingSystems.id = operatingSystems.stack_name + "-" + operatingSystems.stack_version + "-" + operatingSystems.os_type; + operatingSystems.id = stack.id + "-" + operatingSystems.os_type; operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version; operatingSystems.repositories = repositoriesArray; + operatingSystems.is_selected = (ops.isSelected == true || ops.isSelected == undefined); resultOS.push(this.parseIt(operatingSystems, this.get('configOS'))); operatingSystemsArray.pushObject(operatingSystems); }, this); - + stack.stack_services.forEach(function(service) { + var serviceObj = { + id: service.name + '-' + stack.id, + name: service.name, + display_name: service.display_name, + latest_version: service.versions? service.versions[0] : '' + }; + resultServices.push(this.parseIt(serviceObj, this.get('configService'))); + servicesArray.pushObject(serviceObj); + }, this); + + stack.stack_services = servicesArray; stack.operating_systems = operatingSystemsArray; resultStack.push(this.parseIt(stack, this.get('configStack'))); @@ -111,6 +144,7 @@ App.stackMapper = App.QuickDataMapper.create({ App.store.commit(); App.store.loadMany(modelRepo, resultRepo); App.store.loadMany(modelOS, resultOS); + App.store.loadMany(modelServices, resultServices); App.store.loadMany(modelStack, resultStack); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index 2e4f648..d9064ea 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -541,8 +541,28 @@ Em.I18n.translations = { 'installer.step0.clusterName.error.whitespace':'Cluster Name cannot contain whitespace', 'installer.step0.clusterName.error.specialChar':'Cluster Name cannot contain special characters', - 'installer.step1.header':'Select Stack', - 'installer.step1.body':'Please select the service stack that you want to use to install your Hadoop cluster.', + 'installer.step1.header':'Select Version', + 'installer.step1.body':'Select the software version and method of delivery for your cluster. Using a Public Repository requires Internet connectivity. Using a Local Repository requires you have configured the software in a repository available in your network.', + 'installer.step1.selectUseRepoOptions.public':'Use Public Repository', + 'installer.step1.selectUseRepoOptions.local':'Use Local Repository', + 'installer.step1.usePublicRepo.ReposList.empty':'No other repositories', + 'installer.step1.usePublicRepo.viewRepos':'View Repositories', + 'installer.step1.useLocalRepo.uploadFile': 'Upload Version Definition File', + 'installer.step1.useLocalRepo.uploadFile.error.title': 'Upload Version Definition File Error', + 'installer.step1.useLocalRepo.getSurpottedOs.error.title': 'Cannot get supportted OS types', + 'installer.step1.useLocalRepo.addRepo.button': 'Add Repository', + 'installer.step1.useLocalRepo.enterUrl': 'Version Definition File URL', + 'installer.step1.useLocalRepo.readButton': 'Read Version Info', + 'installer.step1.useLocalRepo.infoForm.details.title': 'Details', + 'installer.step1.useLocalRepo.infoForm.details.stackName': 'Stack Name', + 'installer.step1.useLocalRepo.infoForm.details.displayName': 'Display Name', + 'installer.step1.useLocalRepo.infoForm.details.version': 'Version', + 'installer.step1.useLocalRepo.infoForm.details.actualVersion': 'Actual Version', + 'installer.step1.useLocalRepo.infoForm.details.releaseNotes': 'Release Notes', + 'installer.step1.useLocalRepo.infoForm.content.title': 'Contents', + 'installer.step1.useLocalRepo.infoForm.content.empty': 'No contents to display', + 'installer.step1.useLocalRepo.infoForm.alert.baseUrl': 'Provide Base URLs for the Operating Systems you are configuring.', + 'installer.step1.useLocalRepo.infoForm.alert.warning': 'Some of the repositories failed validation. Make changes to the base url or skip validation if you are sure that urls are correct', 'installer.step1.advancedRepo.title':'Advanced Repository Options', 'installer.step1.advancedRepo.message':'Customize the repository Base URLs for downloading the Stack software packages. If your hosts do not have access to the internet, you will have to create a local mirror of the Stack repository that is accessible by all hosts and use those Base URLs here.', 'installer.step1.advancedRepo.importantMassage':'<b>Important:</b> When using local mirror repositories, you only need to provide Base URLs for the Operating System you are installing for your Stack. Uncheck all other repositories.', http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/models/stack.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/stack.js b/ambari-web/app/models/stack.js index 0b1c9d2..8157ab2 100644 --- a/ambari-web/app/models/stack.js +++ b/ambari-web/app/models/stack.js @@ -19,18 +19,20 @@ var App = require('app'); App.Stack = DS.Model.extend({ - id: DS.attr('string'), // ${stackName}-${stackVersion}. + id: DS.attr('string'), // ${stackName}-${repoVersion}. stackName: DS.attr('string'), stackVersion: DS.attr('string'), - active: DS.attr('boolean'), // All of the instances should have this value to true. We should map only those stacks that has active flag set to true - parentStackVersion: DS.attr('string'), - minUpgradeVersion: DS.attr('string'), - minJdkVersion: DS.attr('string'), - maxJdkVersion: DS.attr('string'), - configTypes: DS.attr('object'), + repositoryVersion: DS.attr('string'), + showAvailable: DS.attr('boolean'), // All of the instances should have this value to true. We should map only those stacks that has this flag set to true + stackServices: DS.hasMany('App.ServiceSimple'), operatingSystems: DS.hasMany('App.OperatingSystem'), isSelected: DS.attr('boolean', {defaultValue: false}), + stackNameVersion: function () { + //${stackName}-${stackVersion}. + return this.get('stackName') + '-' + this.get('stackVersion'); + }.property('stackName', 'stackVersion'), + /** * @return: {Array} returns supported repositories for all OperatingSystem's supported by a stack instance */ @@ -43,30 +45,8 @@ App.Stack = DS.Model.extend({ }, this); }, this); return repositories; - }.property('id'), - - /** - * @return: {Array} App.StackService instances for selected stack instance. For non-selected stack instance returns empty array - */ - services: function () { - var result = []; - var isStackSelected = this.get('isSelected'); - var stackServices = App.StackService.find().get('length'); - if (isStackSelected && stackServices) { - result = App.StackService.find(); - } - return result; - }.property('isSelected'), - - /** - * Right now there ambari-web is not fetching this information from the server as it does not need as of present. - * @TODO: This should return stack level configurations for selected stack instance i.e properties of cluster-env file - */ - configurations: function() { - return []; - }.property('isSelected') - + }.property('id') }); -App.Stack.FIXTURES = []; +App.Stack.FIXTURES = []; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/routes/add_service_routes.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js index 2aaf1c1..bdb4814 100644 --- a/ambari-web/app/routes/add_service_routes.js +++ b/ambari-web/app/routes/add_service_routes.js @@ -101,7 +101,14 @@ module.exports = App.WizardRoute.extend({ controller.loadAllPriorSteps().done(function () { var wizardStep4Controller = router.get('wizardStep4Controller'); wizardStep4Controller.set('wizardController', controller); - controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true)); + controller.loadServiceVersionFromVersionDefinitions().complete(function () { + controller.set('content.services', App.StackService.find().forEach(function (item) { + // user the service version from VersionDefinition + Ember.set(item, 'serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]); + //item.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]); + })); + controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true)); + }); }); }); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/styles/application.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less index 61ccbfa..fb46bfc 100644 --- a/ambari-web/app/styles/application.less +++ b/ambari-web/app/styles/application.less @@ -6199,6 +6199,183 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox { margin-left: -10px; } +#select-stack .stack-version-selection{ + .tabs-left { + border-bottom: none; + padding-top: 20px; + border-right: 1px solid #ddd; + min-height: 264px; + } + .tabs-left>li { + float: none; + margin-bottom: 2px; + margin-right: -1px; + } + .tabs-left>li.active>a, + .tabs-left>li.active>a:hover, + .tabs-left>li.active>a:focus { + border-color: #ddd transparent #ddd #ddd; + } + .tabs-left>li>a:hover, + .tabs-left>li>a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; + } + .tabs-left>li>a { + border-radius: 4px 0 0 4px; + padding: 5px 10px; + margin-right: 0; + display:block; + } + .right-stack-info { + margin-left: 0px; + padding: 10px 20px; + border: 1px solid; + border-color: #ddd #ddd #ddd transparent; + .available-repos-dropdown { + a, a.disbled{ + cursor: pointer; + } + a.disabled{ + color: #999999; + background: none; + } + } + .services-list { + padding: 20px 20px; + margin-top: 10px; + border: 1px #ddd solid; + background-color: #f5f5f5; + height: 150px; + max-height: 150px; + overflow: auto; + .control-label { + font-weight: bold; + min-height: 20px; + line-height: 12px; + } + .version-info { + //padding-top: 2px; + line-height: 12px; + } + } + .badge.badge-important { + margin: 6px 3px; + } + a.view-repos { + cursor: pointer; + text-decoration: none; + padding: 5px 5px; + } + + } +} +#select-stack .stack-version-selection.disabled{ + background-color: #dddddd; + display: none; +} + +#select-stack { + .big-radio { + font-weight: bold; + padding: 5px 15px; + } + #upload-definition-file-panel { + .register-version-options { + padding: 5px 0px; + .local-option-label { + margin-left: 20px; + padding-top: 4px; + } + } + .vdf-url { + input { + width: 80%; + } + } + .read-info-button { + margin: 10px 0px; + } + } +} +#select-stack #localVersionInfoForm { + .accordion-heading { + background-color: #f0f0f0; + font-weight: bold; + p { + margin-bottom: 0px; + display: block; + padding: 8px 15px; + } + } + .accordion-body { + .control-label { + font-weight: bold; + line-height: 14px; + } + .version-info { + padding-top: 5px; + line-height: 14px; + } + } + .details-panel .patch-icon { + color: #ff4500; + } + .contents-panel .version-contents-body { + max-height: 150px; + overflow: auto; + } + .repos-panel { + .remove-icon { + color: red; + margin: 20px 0px; + padding: 0px; + text-align: center; + cursor: pointer; + } + .border-bottom { + border-bottom: 1px solid #ebebeb; + } + .repo-table-title { + padding-left: 5px; + border-bottom: 1px solid #ebebeb; + label { + font-weight: bold; + } + } + .os-type-label { + margin-top: 27px; + padding-left: 10px; + label { + font-weight: bold; + } + } + .repo-name-label { + text-align: left; + padding-top: 10px; + } + .repo-name-url { + padding: 8px 0px; + } + .repo-url input { + width: 90%; + height: 24px; + } + .add-os-button { + margin-top:10px; + } + #skip-validation { + margin-top: 25px; + } + #use-redhat, #skip-validation { + .icon-question-sign { + color: #0572ff; + } + input{ + margin: 0px 10px; + } + } + } +} #combo_search_box { .VS-search { .VS-search-box { http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs index a87c50c..8ba51e8 100644 --- a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs +++ b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs @@ -30,7 +30,7 @@ {{#each service in view.services}} <tr> <td class="service-display-name">{{service.displayName}}</td> - <td class="service-stack-version">{{service.serviceVersion}}</td> + <td class="service-stack-version">{{service.serviceVersionDisplay}}</td> <td class="stack-version-state"> {{#if service.isInstalled}} <span class="label label-success">{{t common.installed}}</span> http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/templates/wizard/step1.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/wizard/step1.hbs b/ambari-web/app/templates/wizard/step1.hbs index ab9a0dd..fc05980 100644 --- a/ambari-web/app/templates/wizard/step1.hbs +++ b/ambari-web/app/templates/wizard/step1.hbs @@ -17,109 +17,213 @@ }} <div id="select-stack"> <h2>{{t installer.step1.header}}</h2> - <p class="alert alert-info"> - {{t installer.step1.body}} - </p> - <p><b>{{t common.stacks}}</b></p> - <form autocomplete="off"> - {{#each stack in view.stacks}} - <label class="radio">{{view view.stackRadioButton contentBinding="stack"}} {{stack.name}}</label> - {{/each}} - </form> + <p class="alert alert-info">{{t installer.step1.body}}</p> + <label class="radio big-radio">{{view view.usePublicRepoRadioButton}} {{t installer.step1.selectUseRepoOptions.public}}</label> - <div class="accordion" id="advancedRepoAccordion"> - <div class="accordion-group"> - <div class="accordion-heading" {{action "onToggleBlock" target="view"}}> - <i {{bindAttr class=":pull-left :accordion-toggle view.isRLCollapsed:icon-caret-right:icon-caret-down"}}></i> - <a class="accordion-toggle"> - {{t installer.step1.advancedRepo.title}} - {{#if view.showErrorsWarningCount}} - <span class="badge badge-important">{{view.totalErrorCnt}}</span> + <form {{bindAttr class="optionsToSelect.useLocalRepo.isSelected:disabled :stack-version-selection :row-fluid"}}> + <div class="span2 left-menu-tabs"> + <ul class="nav nav-tabs tabs-left sideways"> + {{#each stack in view.stackNames}} + {{#if stack.name}} + <li {{bindAttr class="stack.isActive:active"}}> + <a {{bindAttr href="stack.name"}} data-toggle="tab" + {{action "selectStackNameOnTab" stack target="view"}}>{{stack.name}}</a></li> + {{/if}} + {{/each}} + </ul> + </div> + <div class="span9 right-stack-info"> + <div class="repo-list-button btn-group"> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> + {{controller.selectedStack.repositoryVersion}} <span class="caret"></span> + </button> + <ul class="dropdown-menu available-repos-dropdown"> + {{#if view.availableStackRepoList}} + {{#each repo in view.availableStackRepoList}} + {{#if repo.repositoryVersion}} + <li><a {{action "selectRepoInList" repo target="view"}}>{{repo.repositoryVersion}}</a></li> + {{/if}} + {{/each}} + {{else}} + <li><a class="disabled">{{t installer.step1.usePublicRepo.ReposList.empty}}</a></li> + {{/if}} + </ul> + </div> + <div class="services-list"> + {{#each service in view.selectedServices}} + <div class="clearfix row-fluid"> + <label class="control-label span4">{{service.displayName}}</label> + <div class="version-info span8">{{service.version}}</div> + </div> + {{/each}} + </div> + + {{#if view.showErrorsWarningCount}} + <span class="badge badge-important pull-right">{{view.totalErrorCnt}}</span> + {{/if}} + <a class="view-repos pull-right"{{action "viewRepositories" target="view"}}>{{t installer.step1.usePublicRepo.viewRepos}}</a> + </div> + </form> + + + {{!--Local repo loaded info below--}} + <label class="radio big-radio">{{view view.useLocalRepoRadioButton}} {{t installer.step1.selectUseRepoOptions.local}}</label> + {{#if optionsToSelect.useLocalRepo.isSelected}} + <div id="upload-definition-file-panel" > + <div class="clearfix register-version-options row-fluid"> + <div class="span5 option-radio-button"> + <label class="local-option-label radio"> + {{view view.uploadFileRadioButton}} {{t installer.step1.useLocalRepo.uploadFile}} + </label> + </div> + <div class="span7"> + {{#if view.isFileApi}} + {{view App.VersionDefinitionFileUploader disabledBinding="optionsToSelect.useLocalRepo.enterUrl.isSelected"}} {{/if}} - </a> + </div> </div> - <div class="accordion-body collapse in"> - <div class="accordion-inner"> - <div class="alert alert-info">{{t installer.step1.advancedRepo.message}}</div> - <div class="alert alert-warning">{{t installer.step1.advancedRepo.importantMassage}}</div> + <div class="clearfix register-version-options row-fluid"> + <div class="span5 option-radio-button"> + <label class="local-option-label radio"> + {{view view.enterUrlRadioButton}} {{t installer.step1.useLocalRepo.enterUrl}} + </label> + </div> + <div class="span7 vdf-url"> + <div {{bindAttr class="optionsToSelect.useLocalRepo.enterUrl.name optionsToSelect.useLocalRepo.enterUrl.url.hasError:has-error }"}}> + {{view Ember.TextField valueBinding="optionsToSelect.useLocalRepo.enterUrl.url" disabledBinding="optionsToSelect.useLocalRepo.uploadFile.isSelected"}} + </div> + </div> + <div class="span12 read-info-button"> + <button {{bindAttr class="view.readInfoButtonDisabled:disabled :btn :btn-primary :pull-right"}} + {{action "readVersionInfo" target="controller"}}> {{t installer.step1.useLocalRepo.readButton}}</button> + </div> + </div> + </div> - <div class="repositories-table"> - <div class="thead"> - <div class="first-th"> </div> - <div class="th os-th">{{t common.os}}</div> - <div class="th name-th">{{t common.name}}</div> - <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div> + {{#if loadedVersionInfo.stackNameVersion}} + <form id="localVersionInfoForm" class="form-horizontal" role="form" name="localVersionInfoForm" novalidate> + <div class="accordion-group details-panel"> + <div class="accordion-heading"> + <p>{{t installer.step1.useLocalRepo.infoForm.details.title}}</p> + </div> + <div class="accordion-body"> + <div class="accordion-inner"> + <div class="row-fluid"> + <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.stackName}}</label> + <div class="version-info span7">{{loadedVersionInfo.stackNameVersion}}</div> + {{#if loadedVersionInfo.isPatch}} + <div class="span2 patch-icon"><i class="icon-umbrella"></i> {{t common.patch}}</div> + {{/if}} </div> - <div class="tbody"> + <div class="row-fluid"> + <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.displayName}}</label> + <div class="version-info span9">{{loadedVersionInfo.displayName}}</div> + </div> + <div class="row-fluid"> + <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.version}}</label> + <div class="version-info span9">{{loadedVersionInfo.version}}</div> + </div> + <div class="row-fluid"> + <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.actualVersion}}</label> + <div class="version-info span9">{{loadedVersionInfo.actualVersion}}</div> + </div> + </div> + </div> + </div> + <div class="accordion-group contents-panel"> + <div class="accordion-heading"> + <p>{{t installer.step1.useLocalRepo.infoForm.content.title}}</p> + </div> + <div class="accordion-body version-contents-body"> + <div class="accordion-inner"> + {{#unless loadedVersionInfo.services}} + <div class="alert alert-info" role="alert">{{t installer.step1.useLocalRepo.infoForm.content.empty}}</div> + {{/unless}} + {{#each service in loadedVersionInfo.services}} + <div class="clearfix row-fluid"> + <label class="control-label span3">{{service.name}}</label> + <div class="version-info span9">{{service.version}}</div> + </div> + {{/each}} + </div> + </div> + </div> + <div class="accordion-group repos-panel"> + <div class="accordion-heading"> + <p>{{t common.repositories}}</p> + </div> + <div class="accordion-body version-contents-body"> + <div class="accordion-inner"> + <div class="alert alert-info" role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.baseUrl}}</div> + {{#if view.hasValidationErrors}} + <div class="alert alert-warning" role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.warning}}</div> + {{/if}} + + <div class="clearfix repo-table-title row-fluid"> + <div class="span2"><label>{{t common.os}}</label></div> + <div class="span2"><label>{{t common.name}}</label></div> + <div class="span7"><label>{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</label></div> + </div> + {{#each operatingSystem in view.operatingSystems}} - <div class="trow"> - <div {{bindAttr class=":os-td operatingSystem.osType"}}> - <label> - {{view Ember.Checkbox checkedBinding="operatingSystem.isSelected"}} - <span {{bindAttr class=":os operatingSystem.isSelected::disabled-label"}}>{{operatingSystem.osType}}</span> - </label> - </div> - <div style="width:83%"> - {{#each repository in operatingSystem.repositories}} - <div class="sub-trow"> - <div class="name-td">{{repository.repoId}}</div> - <div class="validation-td"> - {{#if repository.validation}} - {{view view.popoverView repositoryBinding="repository"}} - {{/if}} - </div> - <div {{bindAttr class=":url-td operatingSystem.osType repository.repoId repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}> - {{view Ember.TextField valueBinding="repository.baseUrl" disabledBinding="operatingSystem.isDeselected"}} - </div> - <div class="clear-td"> - {{#if repository.clearAll}} - <a {{action "clearGroupLocalRepository" repository target="view" }} {{bindAttr class="operatingSystem.isSelected::disabled-clear-button"}}> - <i class="icon-remove-sign"></i> - </a> - {{/if}} + {{#if operatingSystem.isSelected}} + <div class="clearfix row-fluid border-bottom"> + <div class="span2 os-type-label"> + <label>{{operatingSystem.osType}}</label> + </div> + <div class="span9"> + {{#each repository in operatingSystem.repositories}} + <div class="repo-name-url row-fluid" {{bindAttr class="repository.hasError:has-error"}} > + <label class="repo-name-label control-label span3">{{repository.repoId}}</label> + <div class="validation-td span1"> + {{#if repository.validation}} + {{view view.popoverView repositoryBinding="repository"}} + {{/if}} + </div> + <div {{bindAttr class=":span8 :repo-url repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}> + {{view Ember.TextField valueBinding="repository.baseUrl"}} + </div> </div> - <div class="actions-td"> - {{#if repository.undo}} - <a {{action "undoGroupLocalRepository" repository target="view" }}> - <i class="icon-undo"></i>{{t common.undo}} - </a> - {{/if}} - </div> - </div> - {{/each}} + {{/each}} + </div> + <div class="span1 remove-icon" {{action "removeOS" operatingSystem target="controller"}}><i class="icon-minus"></i>{{t common.remove}}</div> </div> - </div> + {{/if}} {{/each}} + + <div class="add-os-button btn-group pull-right"> + <button class="btn dropdown-toggle" data-toggle="dropdown"> + <i class="icon-plus"></i> {{t common.add}} <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + {{#each operatingSystem in view.operatingSystems}} + {{#unless operatingSystem.isSelected}} + <li><a {{action "addOS" operatingSystem target="controller"}}>{{operatingSystem.osType}}</a></li> + {{/unless}} + {{/each}} + </ul> + </div> + <div id="skip-validation"> + <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}} + <i class="icon-question-sign" rel="skip-validation-tooltip" + data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label> + </div> + <div id="use-redhat"> + <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}} + <i class="icon-question-sign" rel="use-redhat-tooltip" + data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}> + </i> + </label> + </div> </div> </div> - <div id="skip-validation"> - <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}} - <i class="icon-question-sign" rel="skip-validation-tooltip" - data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label> - </div> - <div id="use-redhat"> - <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}} - <i class="icon-question-sign" rel="use-redhat-tooltip" - data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}></i></label> - </div> - {{#if view.invalidFormatUrlExist}} - <div class="alert">{{t installer.step1.attentionNeeded}}</div> - {{/if}} - {{#if view.invalidUrlExist}} - <div class="alert"> - {{t installer.step1.invalidURLAttention}} - <a href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a> - </div> - {{/if}} - {{#if view.allRepoUnchecked}} - <div class="alert">{{t installer.step1.checkAtLeastOneAttention}}</div> - {{/if}} - </div> </div> - </div> - </div> + </form> + {{/if}} + {{/if}} <a class="btn pull-left installer-back-btn" {{action back}}>← {{t common.back}}</a> <button class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}}>{{t common.next}} →</button> + </div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/templates/wizard/step1_viewRepositories.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/wizard/step1_viewRepositories.hbs b/ambari-web/app/templates/wizard/step1_viewRepositories.hbs new file mode 100644 index 0000000..ca8e18f --- /dev/null +++ b/ambari-web/app/templates/wizard/step1_viewRepositories.hbs @@ -0,0 +1,102 @@ +{{! +* 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. +}} + +<div class="accordion" id="advancedRepoAccordion"> + <div class=""> + <div class="accordion-body"> + <div class="accordion-inner"> + <div class="alert alert-info">{{t installer.step1.advancedRepo.message}}</div> + <div class="alert alert-warning">{{t installer.step1.advancedRepo.importantMassage}}</div> + + <div class="repositories-table"> + <div class="thead"> + <div class="first-th"> </div> + <div class="th os-th">{{t common.os}}</div> + <div class="th name-th">{{t common.name}}</div> + <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div> + </div> + <div class="tbody"> + {{#each operatingSystem in view.operatingSystems}} + <div class="trow"> + <div {{bindAttr class=":os-td operatingSystem.osType"}}> + <label> + {{view Ember.Checkbox checkedBinding="operatingSystem.isSelected"}} + <span {{bindAttr class=":os operatingSystem.isSelected::disabled-label"}}>{{operatingSystem.osType}}</span> + </label> + </div> + <div style="width:83%"> + {{#each repository in operatingSystem.repositories}} + <div class="sub-trow"> + <div class="name-td">{{repository.repoId}}</div> + <div class="validation-td"> + {{#if repository.validation}} + {{view view.popoverView repositoryBinding="repository"}} + {{/if}} + </div> + <div {{bindAttr class=":url-td operatingSystem.osType repository.repoId repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}> + {{view Ember.TextField valueBinding="repository.baseUrl" disabledBinding="operatingSystem.isDeselected"}} + </div> + <div class="clear-td"> + {{#if repository.clearAll}} + <a {{action "clearGroupLocalRepository" repository target="view" }} {{bindAttr class="operatingSystem.isSelected::disabled-clear-button"}}> + <i class="icon-remove-sign"></i> + </a> + {{/if}} + </div> + <div class="actions-td"> + {{#if repository.undo}} + <a {{action "undoGroupLocalRepository" repository target="view" }}> + <i class="icon-undo"></i>{{t common.undo}} + </a> + {{/if}} + </div> + </div> + {{/each}} + </div> + </div> + {{/each}} + </div> + </div> + <div id="skip-validation"> + <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}} + <i class="icon-question-sign" rel="" + data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label> + </div> + {{#if App.supports.redhatSatellite}} + <div id="use-redhat"> + <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}} + <i class="icon-question-sign" rel="use-redhat-tooltip" + data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}></i></label> + </div> + {{/if}} + {{#if view.invalidFormatUrlExist}} + <div class="alert">{{t installer.step1.attentionNeeded}}</div> + {{/if}} + {{#if view.invalidUrlExist}} + <div class="alert"> + {{t installer.step1.invalidURLAttention}} + <a href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a> + </div> + {{/if}} + {{#if view.isNoOsChecked}} + <div class="alert">{{t installer.step1.checkAtLeastOneAttention}}</div> + {{/if}} + </div> + </div> + </div> +</div> http://git-wip-us.apache.org/repos/asf/ambari/blob/391b45e9/ambari-web/app/templates/wizard/step4.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/wizard/step4.hbs b/ambari-web/app/templates/wizard/step4.hbs index cc4c68f..21c2aae 100644 --- a/ambari-web/app/templates/wizard/step4.hbs +++ b/ambari-web/app/templates/wizard/step4.hbs @@ -40,7 +40,7 @@ disabledBinding="isInstalled" checkedBinding="isSelected"}}{{displayNameOnSelectServicePage}}</label> </td> - <td>{{serviceVersion}}</td> + <td>{{serviceVersionDisplay}}</td> <td>{{{comments}}}</td> </tr> {{/unless}}
