stack_mapper.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. App.stackMapper = App.QuickDataMapper.create({
  20. modelStack: App.Stack,
  21. modelOS: App.OperatingSystem,
  22. modelRepo: App.Repository,
  23. modelServices: App.ServiceSimple,
  24. configStack: {
  25. id: 'id',
  26. stack_name: 'stack_name',
  27. stack_version: 'stack_version',
  28. stack_default: 'stack_default',
  29. show_available: 'show_available',
  30. type: 'type',
  31. repository_version: 'repository_version',
  32. active: 'active',
  33. parent_stack_version: 'parent_stack_version',
  34. min_upgrade_version: 'min_upgrade_version',
  35. min_jdk_version: 'min_jdk',
  36. max_jdk_version: 'max_jdk',
  37. is_selected: 'is_selected',
  38. config_types: 'config_types',
  39. use_redhat_satellite: 'use_redhat_satellite',
  40. stack_services_key: 'stack_services',
  41. stack_services_type: 'array',
  42. stack_services: {
  43. item: 'id'
  44. },
  45. operating_systems_key: 'operating_systems',
  46. operating_systems_type: 'array',
  47. operating_systems: {
  48. item: 'id'
  49. }
  50. },
  51. configOS: {
  52. id: 'id',
  53. os_type: 'os_type',
  54. stack_name: 'stack_name',
  55. stack_version: 'stack_version',
  56. stack_id: 'stack_id',
  57. is_selected: 'is_selected',
  58. repositories_key: 'repositories',
  59. repositories_type: 'array',
  60. repositories: {
  61. item: 'id'
  62. }
  63. },
  64. configService: {
  65. id: 'id',
  66. name: 'name',
  67. display_name: 'display_name',
  68. latest_version: 'latest_version'
  69. },
  70. configRepository: {
  71. id: 'id',
  72. base_url: 'base_url',
  73. default_base_url: 'default_base_url',
  74. latest_base_url: 'latest_base_url',
  75. mirrors_list: 'mirrors_list',
  76. os_type: 'os_type',
  77. repo_id: 'repo_id',
  78. repo_name: 'repo_name',
  79. stack_name: 'stack_name',
  80. stack_version: 'stack_version',
  81. operating_system_id: 'os_id'
  82. },
  83. map: function(json) {
  84. var modelStack = this.get('modelStack');
  85. var modelOS = this.get('modelOS');
  86. var modelRepo = this.get('modelRepo');
  87. var modelServices = this.get('modelServices');
  88. var resultOS = [];
  89. var resultRepo = [];
  90. var resultServices = [];
  91. var item = json;
  92. var stack = item.VersionDefinition;
  93. if (!stack.id) {
  94. stack.id = stack.stack_name + '-' + stack.stack_version + '-' + stack.repository_version; //HDP-2.5-2.5.0.0
  95. }
  96. var operatingSystemsArray = [];
  97. var servicesArray = [];
  98. item.operating_systems.forEach(function(ops) {
  99. var operatingSystems = ops.OperatingSystems;
  100. var repositoriesArray = [];
  101. ops.repositories.forEach(function(repo) {
  102. repo.Repositories.id = [stack.id, repo.Repositories.os_type, repo.Repositories.repo_id].join('-');
  103. repo.Repositories.os_id = [stack.id, repo.Repositories.os_type].join('-');
  104. if (!repo.Repositories.latest_base_url) repo.Repositories.latest_base_url = repo.Repositories.base_url;
  105. resultRepo.push(this.parseIt(repo.Repositories, this.get('configRepository')));
  106. repositoriesArray.pushObject(repo.Repositories);
  107. }, this);
  108. operatingSystems.id = stack.id + "-" + operatingSystems.os_type;
  109. operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version;
  110. operatingSystems.repositories = repositoriesArray;
  111. operatingSystems.is_selected = (ops.isSelected == true || ops.isSelected == undefined);
  112. resultOS.push(this.parseIt(operatingSystems, this.get('configOS')));
  113. operatingSystemsArray.pushObject(operatingSystems);
  114. }, this);
  115. stack.stack_services.forEach(function(service) {
  116. var serviceObj = {
  117. id: service.name + '-' + stack.id,
  118. name: service.name,
  119. display_name: service.display_name,
  120. latest_version: service.versions? service.versions[0] : ''
  121. };
  122. resultServices.push(this.parseIt(serviceObj, this.get('configService')));
  123. servicesArray.pushObject(serviceObj);
  124. }, this);
  125. //In case ambari_managed_repositories is undefined, set use_redhat_satellite to be false
  126. stack.use_redhat_satellite = item.operating_systems[0].OperatingSystems.ambari_managed_repositories === false;
  127. stack.stack_services = servicesArray;
  128. stack.operating_systems = operatingSystemsArray;
  129. App.store.commit();
  130. App.store.loadMany(modelRepo, resultRepo);
  131. App.store.loadMany(modelOS, resultOS);
  132. App.store.loadMany(modelServices, resultServices);
  133. App.store.load(modelStack, this.parseIt(stack, this.get('configStack')));
  134. }
  135. });