config_property_helper.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  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. module.exports = {
  20. initialValue: function (configProperty, localDB, dependencies) {
  21. var masterComponentHostsInDB = localDB.masterComponentHosts;
  22. var slaveComponentHostsInDB = localDB.slaveComponentHosts;
  23. var isOnlyFirstOneNeeded = true;
  24. var hostWithPort = "([\\w|\\.]*)(?=:)";
  25. var hostWithPrefix = ":\/\/" + hostWithPort;
  26. switch (configProperty.get('name')) {
  27. case 'namenode_host':
  28. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName'));
  29. break;
  30. case 'dfs.namenode.rpc-address':
  31. case 'dfs.http.address':
  32. case 'dfs.namenode.http-address':
  33. case 'dfs.https.address':
  34. case 'dfs.namenode.https-address':
  35. var nnHost = masterComponentHostsInDB.findProperty('component', 'NAMENODE').hostName;
  36. this.setRecommendedValue(configProperty, hostWithPort,nnHost);
  37. break;
  38. case 'fs.default.name':
  39. case 'fs.defaultFS':
  40. case 'hbase.rootdir':
  41. case 'instance.volumes':
  42. var nnHost = masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName');
  43. this.setRecommendedValue(configProperty, hostWithPrefix,'://' + nnHost);
  44. break;
  45. case 'snamenode_host':
  46. // Secondary NameNode does not exist when NameNode HA is enabled
  47. var snn = masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE');
  48. if (snn) {
  49. configProperty.set('value', snn.hostName);
  50. }
  51. break;
  52. case 'dfs.secondary.http.address':
  53. case 'dfs.namenode.secondary.http-address':
  54. var snnHost = masterComponentHostsInDB.findProperty('component', 'SECONDARY_NAMENODE');
  55. if (snnHost) {
  56. this.setRecommendedValue(configProperty, hostWithPort,snnHost.hostName);
  57. }
  58. break;
  59. case 'datanode_hosts':
  60. configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'DATANODE').hosts.mapProperty('hostName'));
  61. break;
  62. case 'nfsgateway_hosts':
  63. var gwyHost = slaveComponentHostsInDB.findProperty('componentName', 'NFS_GATEWAY');
  64. if(gwyHost) {
  65. configProperty.set('value', gwyHost.hosts.mapProperty('hostName'));
  66. }
  67. break;
  68. case 'hs_host':
  69. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName'));
  70. break;
  71. case 'yarn.log.server.url':
  72. var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
  73. this.setRecommendedValue(configProperty, hostWithPrefix,'://' + hsHost);
  74. break;
  75. case 'mapreduce.jobhistory.webapp.address':
  76. case 'mapreduce.jobhistory.address':
  77. var hsHost = masterComponentHostsInDB.filterProperty('component', 'HISTORYSERVER').mapProperty('hostName');
  78. this.setRecommendedValue(configProperty, hostWithPort,hsHost);
  79. break;
  80. case 'rm_host':
  81. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName);
  82. break;
  83. case 'ats_host':
  84. var atsHost = masterComponentHostsInDB.findProperty('component', 'APP_TIMELINE_SERVER');
  85. if (atsHost)
  86. configProperty.set('value', atsHost.hostName);
  87. else
  88. configProperty.set('value', 'false');
  89. break;
  90. case 'yarn.resourcemanager.hostname':
  91. var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
  92. configProperty.set('recommendedValue',rmHost);
  93. configProperty.set('value',configProperty.get('recommendedValue'));
  94. break;
  95. case 'yarn.resourcemanager.resource-tracker.address':
  96. case 'yarn.resourcemanager.webapp.https.address':
  97. case 'yarn.resourcemanager.webapp.address':
  98. case 'yarn.resourcemanager.scheduler.address':
  99. case 'yarn.resourcemanager.address':
  100. case 'yarn.resourcemanager.admin.address':
  101. var rmHost = masterComponentHostsInDB.findProperty('component', 'RESOURCEMANAGER').hostName;
  102. this.setRecommendedValue(configProperty, hostWithPort,rmHost);
  103. break;
  104. case 'yarn.timeline-service.webapp.address':
  105. case 'yarn.timeline-service.webapp.https.address':
  106. case 'yarn.timeline-service.address':
  107. var atsHost = masterComponentHostsInDB.findProperty('component', 'APP_TIMELINE_SERVER');
  108. if (atsHost && atsHost.hostName) {
  109. this.setRecommendedValue(configProperty, hostWithPort,atsHost.hostName);
  110. }
  111. break;
  112. case 'nm_hosts':
  113. configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'NODEMANAGER').hosts.mapProperty('hostName'));
  114. break;
  115. case 'jobtracker_host':
  116. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName);
  117. break;
  118. case 'mapred.job.tracker':
  119. case 'mapred.job.tracker.http.address':
  120. var jtHost = masterComponentHostsInDB.findProperty('component', 'JOBTRACKER').hostName;
  121. this.setRecommendedValue(configProperty, hostWithPort,jtHost);
  122. break;
  123. case 'mapreduce.history.server.http.address':
  124. var jtHost = masterComponentHostsInDB.findProperty('component', 'HISTORYSERVER').hostName;
  125. this.setRecommendedValue(configProperty, hostWithPort,jtHost);
  126. break;
  127. case 'tasktracker_hosts':
  128. configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER').hosts.mapProperty('hostName'));
  129. break;
  130. case 'hbasemaster_host':
  131. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'HBASE_MASTER').mapProperty('hostName'));
  132. break;
  133. case 'regionserver_hosts':
  134. configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'HBASE_REGIONSERVER').hosts.mapProperty('hostName'));
  135. break;
  136. case 'hivemetastore_host':
  137. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'));
  138. break;
  139. case 'hive_ambari_host':
  140. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName);
  141. break;
  142. case 'hive_master_hosts':
  143. var hostNames = masterComponentHostsInDB.filter(function (masterComponent) {
  144. return ['HIVE_METASTORE', 'HIVE_SERVER'].contains(masterComponent.component);
  145. });
  146. configProperty.set('value', hostNames.mapProperty('hostName').uniq().join(','));
  147. break;
  148. case 'hive_database':
  149. var newMySQLDBOption = configProperty.get('options').findProperty('displayName', 'New MySQL Database');
  150. if (newMySQLDBOption) {
  151. var isNewMySQLDBOptionHidden = !App.get('supports.alwaysEnableManagedMySQLForHive') && App.get('router.currentState.name') != 'configs' &&
  152. !App.get('isManagedMySQLForHiveEnabled');
  153. if (isNewMySQLDBOptionHidden && configProperty.get('value') == 'New MySQL Database') {
  154. configProperty.set('value', 'Existing MySQL Database');
  155. }
  156. Em.set(newMySQLDBOption, 'hidden', isNewMySQLDBOptionHidden);
  157. }
  158. break;
  159. case 'oozieserver_host':
  160. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'OOZIE_SERVER').mapProperty('hostName'));
  161. break;
  162. case 'oozie.base.url':
  163. var oozieHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
  164. this.setRecommendedValue(configProperty, hostWithPrefix,'://' + oozieHost);
  165. break;
  166. case 'webhcatserver_host':
  167. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'WEBHCAT_SERVER').hostName);
  168. break;
  169. case 'oozie_ambari_host':
  170. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName);
  171. break;
  172. case 'hadoop_host':
  173. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'NAMENODE').mapProperty('hostName'));
  174. break;
  175. case 'hive_existing_mysql_host':
  176. case 'hive_existing_postgresql_host':
  177. case 'hive_existing_oracle_host':
  178. case 'hive_existing_mssql_server_host':
  179. case 'hive_existing_mssql_server_2_host':
  180. var hiveServerHost = masterComponentHostsInDB.findProperty('component', 'HIVE_SERVER').hostName;
  181. configProperty.set('value', hiveServerHost).set('recommendedValue', hiveServerHost);
  182. break;
  183. case 'hive.metastore.uris':
  184. var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']);
  185. if (hiveMSUris) {
  186. this.setRecommendedValue(configProperty, "(.*)", hiveMSUris);
  187. }
  188. break;
  189. case 'oozie_existing_mysql_host':
  190. case 'oozie_existing_postgresql_host':
  191. case 'oozie_existing_oracle_host':
  192. case 'oozie_existing_mssql_server_host':
  193. case 'oozie_existing_mssql_server_2_host':
  194. var oozieServerHost = masterComponentHostsInDB.findProperty('component', 'OOZIE_SERVER').hostName;
  195. configProperty.set('value', oozieServerHost).set('recommendedValue', oozieServerHost);
  196. break;
  197. case 'storm.zookeeper.servers':
  198. case 'zookeeperserver_hosts':
  199. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName'));
  200. break;
  201. case 'nimbus.host':
  202. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'NIMBUS').hostName);
  203. break;
  204. case 'nimbus.seeds':
  205. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'NIMBUS').mapProperty('hostName'));
  206. break;
  207. case 'falconserver_host':
  208. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName);
  209. break;
  210. case 'drpcserver_host':
  211. var drpcHost = masterComponentHostsInDB.findProperty('component', 'DRPC_SERVER');
  212. if (drpcHost) {
  213. configProperty.set('value', drpcHost.hostName);
  214. }
  215. break;
  216. case 'stormuiserver_host':
  217. configProperty.set('value', masterComponentHostsInDB.findProperty('component', 'STORM_UI_SERVER').hostName);
  218. break;
  219. case 'storm_rest_api_host':
  220. var stormRresApiHost = masterComponentHostsInDB.findProperty('component', 'STORM_REST_API');
  221. if(stormRresApiHost) {
  222. configProperty.set('value', stormRresApiHost.hostName);
  223. }
  224. break;
  225. case 'supervisor_hosts':
  226. configProperty.set('value', slaveComponentHostsInDB.findProperty('componentName', 'SUPERVISOR').hosts.mapProperty('hostName'));
  227. break;
  228. case 'knox_gateway_host':
  229. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'KNOX_GATEWAY').mapProperty('hostName'));
  230. break;
  231. case 'kafka_broker_hosts':
  232. configProperty.set('value', masterComponentHostsInDB.filterProperty('component', 'KAFKA_BROKER').mapProperty('hostName'));
  233. break;
  234. case 'kafka.ganglia.metrics.host':
  235. var gangliaHost = masterComponentHostsInDB.findProperty('component', 'GANGLIA_SERVER');
  236. if (gangliaHost) {
  237. configProperty.set('value', gangliaHost.hostName);
  238. }
  239. break;
  240. case 'hbase.zookeeper.quorum':
  241. if (configProperty.get('filename') == 'hbase-site.xml') {
  242. var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
  243. this.setRecommendedValue(configProperty, "(\\w*)", zkHosts);
  244. }
  245. break;
  246. case 'yarn.resourcemanager.zk-address':
  247. var value = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').map(function (component) {
  248. return component.hostName + ':' + dependencies.clientPort
  249. }).join(',');
  250. configProperty.setProperties({
  251. value: value,
  252. recommendedValue: value
  253. });
  254. break;
  255. case 'zookeeper.connect':
  256. case 'hive.zookeeper.quorum':
  257. case 'templeton.zookeeper.hosts':
  258. case 'hadoop.registry.zk.quorum':
  259. case 'hive.cluster.delegation.token.store.zookeeper.connectString':
  260. case 'instance.zookeeper.host': // for accumulo
  261. var zkHosts = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER').mapProperty('hostName');
  262. var zkHostPort = zkHosts;
  263. var regex = "\\w*:(\\d+)"; //regex to fetch the port
  264. var portValue = configProperty.get('recommendedValue').match(new RegExp(regex));
  265. if (!portValue) return;
  266. if (portValue[1]) {
  267. for ( var i = 0; i < zkHosts.length; i++ ) {
  268. zkHostPort[i] = zkHosts[i] + ":" + portValue[1];
  269. }
  270. }
  271. this.setRecommendedValue(configProperty, "(.*)", zkHostPort);
  272. break;
  273. case 'templeton.hive.properties':
  274. var hiveMSUris = this.getHiveMetastoreUris(masterComponentHostsInDB, dependencies['hive.metastore.uris']).replace(',', '\\,');
  275. if (/\/\/localhost:/g.test(configProperty.get('value'))) {
  276. configProperty.set('recommendedValue', configProperty.get('value') + ',hive.metastore.execute.setugi=true');
  277. }
  278. this.setRecommendedValue(configProperty, "(hive\\.metastore\\.uris=)([^\\,]+)", "$1" + hiveMSUris);
  279. break;
  280. case 'dfs.name.dir':
  281. case 'dfs.namenode.name.dir':
  282. case 'dfs.data.dir':
  283. case 'dfs.datanode.data.dir':
  284. case 'yarn.nodemanager.local-dirs':
  285. case 'yarn.nodemanager.log-dirs':
  286. case 'mapred.local.dir':
  287. case 'log.dirs': // for Kafka Broker
  288. this.unionAllMountPoints(configProperty, !isOnlyFirstOneNeeded, localDB);
  289. break;
  290. case 'fs.checkpoint.dir':
  291. case 'dfs.namenode.checkpoint.dir':
  292. case 'yarn.timeline-service.leveldb-timeline-store.path':
  293. case 'yarn.timeline-service.leveldb-state-store.path':
  294. case 'dataDir':
  295. case 'oozie_data_dir':
  296. case 'storm.local.dir':
  297. case '*.falcon.graph.storage.directory':
  298. case '*.falcon.graph.serialize.path':
  299. this.unionAllMountPoints(configProperty, isOnlyFirstOneNeeded, localDB);
  300. break;
  301. case '*.broker.url':
  302. var falconServerHost = masterComponentHostsInDB.findProperty('component', 'FALCON_SERVER').hostName;
  303. this.setRecommendedValue(configProperty, 'localhost', falconServerHost);
  304. break;
  305. case 'RANGER_HOST':
  306. var rangerAdminHost = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN');
  307. if(rangerAdminHost) {
  308. configProperty.set('value', rangerAdminHost.hostName);
  309. } else {
  310. configProperty.set('isVisible', 'false');
  311. configProperty.set('isRequired', 'false');
  312. }
  313. break;
  314. case 'db_host':
  315. case 'rangerserver_host':
  316. var masterComponent = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN');
  317. if (masterComponent) {
  318. configProperty.set('value', masterComponent.hostName);
  319. };
  320. break;
  321. case 'ranger_mysql_host':
  322. case 'ranger_oracle_host':
  323. case 'ranger_postgres_host':
  324. case 'ranger_mssql_host':
  325. var masterComponent = masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN'),
  326. rangerServerHost = masterComponent ? masterComponentHostsInDB.findProperty('component', 'RANGER_ADMIN').hostName : '';
  327. if (rangerServerHost) {
  328. configProperty.set('value', rangerServerHost).set('recommendedValue', rangerServerHost);
  329. }
  330. break;
  331. }
  332. },
  333. /**
  334. * Get hive.metastore.uris initial value
  335. * @param hosts
  336. * @param recommendedValue
  337. * @returns {string}
  338. */
  339. getHiveMetastoreUris: function (hosts, recommendedValue) {
  340. var hiveMSHosts = hosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName'),
  341. hiveMSUris = hiveMSHosts,
  342. regex = "\\w*:(\\d+)",
  343. portValue = recommendedValue && recommendedValue.match(new RegExp(regex));
  344. if (!portValue) return '';
  345. if (portValue[1]) {
  346. for (var i = 0; i < hiveMSHosts.length; i++) {
  347. hiveMSUris[i] = "thrift://" + hiveMSHosts[i] + ":" + portValue[1];
  348. }
  349. }
  350. return hiveMSUris.join(',');
  351. },
  352. /**
  353. * @param regex : String
  354. * @param replaceWith : String
  355. * @param configProperty
  356. */
  357. setRecommendedValue: function(configProperty, regex, replaceWith) {
  358. var recommendedValue = !Em.isNone(configProperty.get('recommendedValue')) ? configProperty.get('recommendedValue') : '';
  359. var re = new RegExp(regex);
  360. recommendedValue = recommendedValue.replace(re,replaceWith);
  361. configProperty.set('recommendedValue', recommendedValue);
  362. configProperty.set('value', !Em.isNone(configProperty.get('recommendedValue')) ? configProperty.get('recommendedValue') : '');
  363. },
  364. unionAllMountPoints: function (configProperty, isOnlyFirstOneNeeded, localDB) {
  365. var hostname = '';
  366. var mountPointsPerHost = [];
  367. var mountPointAsRoot;
  368. var masterComponentHostsInDB = localDB.masterComponentHosts;
  369. var slaveComponentHostsInDB = localDB.slaveComponentHosts;
  370. var hostsInfo = localDB.hosts; // which we are setting in installerController in step3.
  371. //all hosts should be in local storage without using App.Host model
  372. App.Host.find().forEach(function(item){
  373. if(!hostsInfo[item.get('id')]){
  374. hostsInfo[item.get('id')] = {
  375. name: item.get('id'),
  376. cpu: item.get('cpu'),
  377. memory: item.get('memory'),
  378. disk_info: item.get('diskInfo'),
  379. bootStatus: "REGISTERED",
  380. isInstalled: true
  381. };
  382. }
  383. });
  384. var temp = '';
  385. var setOfHostNames = [];
  386. var components = [];
  387. switch (configProperty.get('name')) {
  388. case 'dfs.namenode.name.dir':
  389. case 'dfs.name.dir':
  390. components = masterComponentHostsInDB.filterProperty('component', 'NAMENODE');
  391. components.forEach(function (component) {
  392. setOfHostNames.push(component.hostName);
  393. }, this);
  394. break;
  395. case 'fs.checkpoint.dir':
  396. case 'dfs.namenode.checkpoint.dir':
  397. components = masterComponentHostsInDB.filterProperty('component', 'SECONDARY_NAMENODE');
  398. components.forEach(function (component) {
  399. setOfHostNames.push(component.hostName);
  400. }, this);
  401. break;
  402. case 'dfs.data.dir':
  403. case 'dfs.datanode.data.dir':
  404. temp = slaveComponentHostsInDB.findProperty('componentName', 'DATANODE');
  405. temp.hosts.forEach(function (host) {
  406. setOfHostNames.push(host.hostName);
  407. }, this);
  408. break;
  409. case 'mapred.local.dir':
  410. temp = slaveComponentHostsInDB.findProperty('componentName', 'TASKTRACKER') || slaveComponentHostsInDB.findProperty('componentName', 'NODEMANAGER');
  411. temp.hosts.forEach(function (host) {
  412. setOfHostNames.push(host.hostName);
  413. }, this);
  414. break;
  415. case 'yarn.nodemanager.log-dirs':
  416. case 'yarn.nodemanager.local-dirs':
  417. temp = slaveComponentHostsInDB.findProperty('componentName', 'NODEMANAGER');
  418. temp.hosts.forEach(function (host) {
  419. setOfHostNames.push(host.hostName);
  420. }, this);
  421. break;
  422. case 'yarn.timeline-service.leveldb-timeline-store.path':
  423. case 'yarn.timeline-service.leveldb-state-store.path':
  424. components = masterComponentHostsInDB.filterProperty('component', 'APP_TIMELINE_SERVER');
  425. components.forEach(function (component) {
  426. setOfHostNames.push(component.hostName);
  427. }, this);
  428. break;
  429. case 'dataDir':
  430. components = masterComponentHostsInDB.filterProperty('component', 'ZOOKEEPER_SERVER');
  431. components.forEach(function (component) {
  432. setOfHostNames.push(component.hostName);
  433. }, this);
  434. break;
  435. case 'oozie_data_dir':
  436. components = masterComponentHostsInDB.filterProperty('component', 'OOZIE_SERVER');
  437. components.forEach(function (component) {
  438. setOfHostNames.push(component.hostName);
  439. }, this);
  440. break;
  441. case 'storm.local.dir':
  442. temp = slaveComponentHostsInDB.findProperty('componentName', 'SUPERVISOR');
  443. temp.hosts.forEach(function (host) {
  444. setOfHostNames.push(host.hostName);
  445. }, this);
  446. components = masterComponentHostsInDB.filterProperty('component', 'NIMBUS');
  447. components.forEach(function (component) {
  448. setOfHostNames.push(component.hostName);
  449. }, this);
  450. break;
  451. case '*.falcon.graph.storage.directory':
  452. case '*.falcon.graph.serialize.path':
  453. components = masterComponentHostsInDB.filterProperty('component', 'FALCON_SERVER');
  454. components.forEach(function (component) {
  455. setOfHostNames.push(component.hostName);
  456. }, this);
  457. break;
  458. case 'log.dirs':
  459. components = masterComponentHostsInDB.filterProperty('component', 'KAFKA_BROKER');
  460. components.forEach(function (component) {
  461. setOfHostNames.push(component.hostName);
  462. }, this);
  463. break;
  464. }
  465. // In Add Host Wizard, if we did not select this slave component for any host, then we don't process any further.
  466. if (setOfHostNames.length === 0) {
  467. return;
  468. }
  469. var allMountPoints = [];
  470. for (var i = 0; i < setOfHostNames.length; i++) {
  471. hostname = setOfHostNames[i];
  472. mountPointsPerHost = hostsInfo[hostname].disk_info;
  473. mountPointAsRoot = mountPointsPerHost.findProperty('mountpoint', '/');
  474. // If Server does not send any host details information then atleast one mountpoint should be presumed as root
  475. // This happens in a single container Linux Docker environment.
  476. if (!mountPointAsRoot) {
  477. mountPointAsRoot = {mountpoint: '/'};
  478. }
  479. mountPointsPerHost = mountPointsPerHost.filter(function (mPoint) {
  480. return !(['/', '/home'].contains(mPoint.mountpoint)
  481. || ['/etc/resolv.conf', '/etc/hostname', '/etc/hosts'].contains(mPoint.mountpoint) // docker specific mount points
  482. || mPoint.mountpoint && (mPoint.mountpoint.startsWith('/boot') || mPoint.mountpoint.startsWith('/mnt'))
  483. || ['devtmpfs', 'tmpfs', 'vboxsf', 'CDFS'].contains(mPoint.type)
  484. || mPoint.available == 0);
  485. });
  486. mountPointsPerHost.forEach(function (mPoint) {
  487. if( !allMountPoints.findProperty("mountpoint", mPoint.mountpoint)) {
  488. allMountPoints.push(mPoint);
  489. }
  490. }, this);
  491. }
  492. if (allMountPoints.length == 0) {
  493. allMountPoints.push(mountPointAsRoot);
  494. }
  495. configProperty.set('value', '');
  496. var winRegex = /^([a-z]):\\?$/;
  497. if (!isOnlyFirstOneNeeded) {
  498. allMountPoints.forEach(function (eachDrive) {
  499. var mPoint = configProperty.get('value');
  500. if (!mPoint) {
  501. mPoint = "";
  502. }
  503. if (eachDrive.mountpoint === "/") {
  504. mPoint += configProperty.get('defaultDirectory') + "\n";
  505. } else if(winRegex.test(eachDrive.mountpoint.toLowerCase())) {
  506. switch (configProperty.get('name')) {
  507. case 'dfs.name.dir':
  508. case 'dfs.namenode.name.dir':
  509. case 'dfs.data.dir':
  510. case 'dfs.datanode.data.dir':
  511. var winDriveUrl = eachDrive.mountpoint.toLowerCase().replace(winRegex, "file:///$1:");
  512. mPoint += winDriveUrl + configProperty.get('defaultDirectory') + "\n";
  513. break;
  514. default:
  515. var winDrive = eachDrive.mountpoint.toLowerCase().replace(winRegex, "$1:");
  516. var winDir = configProperty.get('defaultDirectory').replace(/\//g, "\\");
  517. mPoint += winDrive + winDir + "\n";
  518. }
  519. } else {
  520. mPoint += eachDrive.mountpoint + configProperty.get('defaultDirectory') + "\n";
  521. }
  522. configProperty.set('value', mPoint);
  523. configProperty.set('recommendedValue', mPoint);
  524. }, this);
  525. } else {
  526. var mPoint = allMountPoints[0].mountpoint;
  527. if (mPoint === "/") {
  528. mPoint = configProperty.get('defaultDirectory');
  529. } else if(winRegex.test(mPoint.toLowerCase())) {
  530. switch (configProperty.get('name')) {
  531. case 'fs.checkpoint.dir':
  532. case 'dfs.namenode.checkpoint.dir':
  533. var winDriveUrl = mPoint.toLowerCase().replace(winRegex, "file:///$1:");
  534. mPoint = winDriveUrl + configProperty.get('defaultDirectory') + "\n";
  535. break;
  536. case 'zk_data_dir':
  537. var winDrive = mPoint.toLowerCase().replace(winRegex, "$1:");
  538. var winDir = configProperty.get('defaultDirectory').replace(/\//g, "\\\\");
  539. mPoint = winDrive + winDir + "\n";
  540. break;
  541. default:
  542. var winDrive = mPoint.toLowerCase().replace(winRegex, "$1:");
  543. var winDir = configProperty.get('defaultDirectory').replace(/\//g, "\\");
  544. mPoint = winDrive + winDir + "\n";
  545. }
  546. } else {
  547. mPoint = mPoint + configProperty.get('defaultDirectory');
  548. }
  549. configProperty.set('value', mPoint);
  550. configProperty.set('recommendedValue', mPoint);
  551. }
  552. }
  553. };