manage_config_groups_controller.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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.ManageConfigGroupsController = App.WizardController.extend({
  20. name: 'manageConfigGroupsController',
  21. isLoaded: false,
  22. serviceName: null,
  23. configGroups: [],
  24. selectedConfigGroup: null,
  25. loadConfigGroups: function (serviceName) {
  26. this.set('serviceName', serviceName);
  27. App.ajax.send({
  28. name: 'service.load_config_groups',
  29. sender: this,
  30. data: {
  31. serviceName: serviceName
  32. },
  33. success: 'onLoadConfigGroupsSuccess',
  34. error: 'onLoadConfigGroupsError'
  35. });
  36. },
  37. onLoadConfigGroupsSuccess: function (data) {
  38. var usedHosts = [];
  39. var unusedHosts = [];
  40. var defaultConfigGroup = App.ConfigGroup.create({
  41. name: "Default",
  42. description: "Default cluster level " + this.get('serviceName') + " configuration",
  43. isDefault: true,
  44. parentConfigGroup: null,
  45. service: this.get('content'),
  46. configSiteTags: []
  47. });
  48. if (data && data.items) {
  49. var groupToTypeToTagMap = {};
  50. var configGroups = [];
  51. data.items.forEach(function (configGroup) {
  52. configGroup = configGroup.ConfigGroup;
  53. var newConfigGroup = App.ConfigGroup.create({
  54. id: configGroup.id,
  55. name: configGroup.group_name,
  56. description: configGroup.description,
  57. isDefault: false,
  58. parentConfigGroup: defaultConfigGroup,
  59. service: App.Service.find().findProperty('serviceName', configGroup.tag),
  60. hosts: configGroup.hosts.mapProperty('host_name'),
  61. configSiteTags: [],
  62. properties: []
  63. });
  64. usedHosts = usedHosts.concat(newConfigGroup.get('hosts'));
  65. configGroups.push(newConfigGroup);
  66. configGroup.desired_configs.forEach(function (config) {
  67. if (!groupToTypeToTagMap[configGroup.group_name]) {
  68. groupToTypeToTagMap[configGroup.group_name] = {}
  69. }
  70. groupToTypeToTagMap[configGroup.group_name][config.type] = config.tag;
  71. });
  72. }, this);
  73. unusedHosts = App.Host.find().mapProperty('hostName');
  74. usedHosts.uniq().forEach(function (host) {
  75. unusedHosts = unusedHosts.without(host);
  76. }, this);
  77. defaultConfigGroup.set('childConfigGroups', configGroups);
  78. defaultConfigGroup.set('hosts', unusedHosts);
  79. this.set('configGroups', [defaultConfigGroup].concat(configGroups));
  80. this.loadProperties(groupToTypeToTagMap);
  81. this.set('isLoaded', true);
  82. }
  83. },
  84. onLoadConfigGroupsError: function () {
  85. console.error('Unable to load config groups for service.');
  86. },
  87. loadProperties: function (groupToTypeToTagMap) {
  88. var typeTagToGroupMap = {};
  89. var urlParams = [];
  90. for (var group in groupToTypeToTagMap) {
  91. var overrideTypeTags = groupToTypeToTagMap[group];
  92. for (var type in overrideTypeTags) {
  93. var tag = overrideTypeTags[type];
  94. typeTagToGroupMap[type + "///" + tag] = group;
  95. urlParams.push('(type=' + type + '&tag=' + tag + ')');
  96. }
  97. }
  98. var params = urlParams.join('|');
  99. if (urlParams.length) {
  100. App.ajax.send({
  101. name: 'config.host_overrides',
  102. sender: this,
  103. data: {
  104. params: params,
  105. typeTagToGroupMap: typeTagToGroupMap
  106. },
  107. success: 'onLoadPropertiesSuccess'
  108. });
  109. }
  110. },
  111. onLoadPropertiesSuccess: function (data, opt, params) {
  112. data.items.forEach(function (configs) {
  113. var typeTagConfigs = [];
  114. App.config.loadedConfigurationsCache[configs.type + "_" + configs.tag] = configs.properties;
  115. var group = params.typeTagToGroupMap[configs.type + "///" + configs.tag];
  116. for (var config in configs.properties) {
  117. typeTagConfigs.push({
  118. name: config,
  119. value: configs.properties[config]
  120. });
  121. }
  122. this.get('configGroups').findProperty('name', group).get('properties').pushObjects(typeTagConfigs);
  123. }, this);
  124. },
  125. showProperties: function () {
  126. var properies = this.get('selectedConfigGroup.propertiesList');
  127. if (properies) {
  128. App.showAlertPopup(Em.I18n.t('services.service.config_groups_popup.properties'), properies);
  129. }
  130. }
  131. });