AmbariConfig.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. #!/usr/bin/env python
  2. '''
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing, software
  12. distributed under the License is distributed on an "AS IS" BASIS,
  13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. See the License for the specific language governing permissions and
  15. limitations under the License.
  16. '''
  17. import ConfigParser
  18. import StringIO
  19. import json
  20. from NetUtil import NetUtil
  21. content = """
  22. [server]
  23. hostname=localhost
  24. url_port=8440
  25. secured_url_port=8441
  26. [agent]
  27. prefix=/tmp/ambari-agent
  28. tmp_dir=/tmp/ambari-agent/tmp
  29. data_cleanup_interval=86400
  30. data_cleanup_max_age=2592000
  31. data_cleanup_max_size_MB = 100
  32. ping_port=8670
  33. cache_dir=/var/lib/ambari-agent/cache
  34. [services]
  35. [python]
  36. custom_actions_dir = /var/lib/ambari-agent/resources/custom_actions
  37. [command]
  38. maxretries=2
  39. sleepBetweenRetries=1
  40. [security]
  41. keysdir=/tmp/ambari-agent
  42. server_crt=ca.crt
  43. passphrase_env_var_name=AMBARI_PASSPHRASE
  44. [heartbeat]
  45. state_interval = 6
  46. dirs=/etc/hadoop,/etc/hadoop/conf,/var/run/hadoop,/var/log/hadoop
  47. rpms=glusterfs,openssl,wget,net-snmp,ntpd,ganglia,nagios,glusterfs
  48. log_lines_count=300
  49. """
  50. imports = [
  51. "hdp/manifests/*.pp",
  52. "hdp-hadoop/manifests/*.pp",
  53. "hdp-hbase/manifests/*.pp",
  54. "hdp-zookeeper/manifests/*.pp",
  55. "hdp-oozie/manifests/*.pp",
  56. "hdp-pig/manifests/*.pp",
  57. "hdp-sqoop/manifests/*.pp",
  58. "hdp-templeton/manifests/*.pp",
  59. "hdp-hive/manifests/*.pp",
  60. "hdp-hcat/manifests/*.pp",
  61. "hdp-mysql/manifests/*.pp",
  62. "hdp-monitor-webserver/manifests/*.pp",
  63. "hdp-repos/manifests/*.pp"
  64. ]
  65. rolesToClass = {
  66. 'GLUSTERFS': 'hdp-hadoop::glusterfs',
  67. 'GLUSTERFS_CLIENT': 'hdp-hadoop::glusterfs_client',
  68. 'GLUSTERFS_SERVICE_CHECK': 'hdp-hadoop::glusterfs_service_check',
  69. 'NAMENODE': 'hdp-hadoop::namenode',
  70. 'DATANODE': 'hdp-hadoop::datanode',
  71. 'SECONDARY_NAMENODE': 'hdp-hadoop::snamenode',
  72. 'JOBTRACKER': 'hdp-hadoop::jobtracker',
  73. 'TASKTRACKER': 'hdp-hadoop::tasktracker',
  74. 'RESOURCEMANAGER': 'hdp-yarn::resourcemanager',
  75. 'NODEMANAGER': 'hdp-yarn::nodemanager',
  76. 'HISTORYSERVER': 'hdp-yarn::historyserver',
  77. 'YARN_CLIENT': 'hdp-yarn::yarn_client',
  78. 'HDFS_CLIENT': 'hdp-hadoop::client',
  79. 'MAPREDUCE_CLIENT': 'hdp-hadoop::client',
  80. 'MAPREDUCE2_CLIENT': 'hdp-yarn::mapreducev2_client',
  81. 'ZOOKEEPER_SERVER': 'hdp-zookeeper',
  82. 'ZOOKEEPER_CLIENT': 'hdp-zookeeper::client',
  83. 'HBASE_MASTER': 'hdp-hbase::master',
  84. 'HBASE_REGIONSERVER': 'hdp-hbase::regionserver',
  85. 'HBASE_CLIENT': 'hdp-hbase::client',
  86. 'PIG': 'hdp-pig',
  87. 'SQOOP': 'hdp-sqoop',
  88. 'OOZIE_SERVER': 'hdp-oozie::server',
  89. 'OOZIE_CLIENT': 'hdp-oozie::client',
  90. 'HIVE_CLIENT': 'hdp-hive::client',
  91. 'HCAT': 'hdp-hcat',
  92. 'HIVE_SERVER': 'hdp-hive::server',
  93. 'HIVE_METASTORE': 'hdp-hive::metastore',
  94. 'MYSQL_SERVER': 'hdp-mysql::server',
  95. 'WEBHCAT_SERVER': 'hdp-templeton::server',
  96. 'DASHBOARD': 'hdp-dashboard',
  97. 'NAGIOS_SERVER': 'hdp-nagios::server',
  98. 'GANGLIA_SERVER': 'hdp-ganglia::server',
  99. 'GANGLIA_MONITOR': 'hdp-ganglia::monitor',
  100. 'HTTPD': 'hdp-monitor-webserver',
  101. 'HUE_SERVER': 'hdp-hue::server',
  102. 'HDFS_SERVICE_CHECK': 'hdp-hadoop::hdfs::service_check',
  103. 'MAPREDUCE_SERVICE_CHECK': 'hdp-hadoop::mapred::service_check',
  104. 'MAPREDUCE2_SERVICE_CHECK': 'hdp-yarn::mapred2::service_check',
  105. 'ZOOKEEPER_SERVICE_CHECK': 'hdp-zookeeper::zookeeper::service_check',
  106. 'ZOOKEEPER_QUORUM_SERVICE_CHECK': 'hdp-zookeeper::quorum::service_check',
  107. 'HBASE_SERVICE_CHECK': 'hdp-hbase::hbase::service_check',
  108. 'HIVE_SERVICE_CHECK': 'hdp-hive::hive::service_check',
  109. 'HCAT_SERVICE_CHECK': 'hdp-hcat::hcat::service_check',
  110. 'OOZIE_SERVICE_CHECK': 'hdp-oozie::oozie::service_check',
  111. 'PIG_SERVICE_CHECK': 'hdp-pig::pig::service_check',
  112. 'SQOOP_SERVICE_CHECK': 'hdp-sqoop::sqoop::service_check',
  113. 'WEBHCAT_SERVICE_CHECK': 'hdp-templeton::templeton::service_check',
  114. 'DASHBOARD_SERVICE_CHECK': 'hdp-dashboard::dashboard::service_check',
  115. 'DECOMMISSION_DATANODE': 'hdp-hadoop::hdfs::decommission',
  116. 'HUE_SERVICE_CHECK': 'hdp-hue::service_check',
  117. 'RESOURCEMANAGER_SERVICE_CHECK': 'hdp-yarn::resourcemanager::service_check',
  118. 'HISTORYSERVER_SERVICE_CHECK': 'hdp-yarn::historyserver::service_check',
  119. 'TEZ_CLIENT': 'hdp-tez::tez_client',
  120. 'YARN_SERVICE_CHECK': 'hdp-yarn::yarn::service_check',
  121. 'FLUME_SERVER': 'hdp-flume',
  122. 'JOURNALNODE': 'hdp-hadoop::journalnode',
  123. 'ZKFC': 'hdp-hadoop::zkfc'
  124. }
  125. serviceStates = {
  126. 'START': 'running',
  127. 'INSTALL': 'installed_and_configured',
  128. 'STOP': 'stopped'
  129. }
  130. servicesToPidNames = {
  131. 'GLUSTERFS' : 'glusterd.pid$',
  132. 'NAMENODE': 'hadoop-{USER}-namenode.pid$',
  133. 'SECONDARY_NAMENODE': 'hadoop-{USER}-secondarynamenode.pid$',
  134. 'DATANODE': 'hadoop-{USER}-datanode.pid$',
  135. 'JOBTRACKER': 'hadoop-{USER}-jobtracker.pid$',
  136. 'TASKTRACKER': 'hadoop-{USER}-tasktracker.pid$',
  137. 'RESOURCEMANAGER': 'yarn-{USER}-resourcemanager.pid$',
  138. 'NODEMANAGER': 'yarn-{USER}-nodemanager.pid$',
  139. 'HISTORYSERVER': 'mapred-{USER}-historyserver.pid$',
  140. 'JOURNALNODE': 'hadoop-{USER}-journalnode.pid$',
  141. 'ZKFC': 'hadoop-{USER}-zkfc.pid$',
  142. 'OOZIE_SERVER': 'oozie.pid',
  143. 'ZOOKEEPER_SERVER': 'zookeeper_server.pid',
  144. 'FLUME_SERVER': 'flume-node.pid',
  145. 'TEMPLETON_SERVER': 'templeton.pid',
  146. 'NAGIOS_SERVER': 'nagios.pid',
  147. 'GANGLIA_SERVER': 'gmetad.pid',
  148. 'GANGLIA_MONITOR': 'gmond.pid',
  149. 'HBASE_MASTER': 'hbase-{USER}-master.pid',
  150. 'HBASE_REGIONSERVER': 'hbase-{USER}-regionserver.pid',
  151. 'HCATALOG_SERVER': 'webhcat.pid',
  152. 'KERBEROS_SERVER': 'kadmind.pid',
  153. 'HIVE_SERVER': 'hive-server.pid',
  154. 'HIVE_METASTORE': 'hive.pid',
  155. 'MYSQL_SERVER': 'mysqld.pid',
  156. 'HUE_SERVER': '/var/run/hue/supervisor.pid',
  157. 'WEBHCAT_SERVER': 'webhcat.pid',
  158. }
  159. #Each service, which's pid depends on user should provide user mapping
  160. servicesToLinuxUser = {
  161. 'NAMENODE': 'hdfs_user',
  162. 'SECONDARY_NAMENODE': 'hdfs_user',
  163. 'DATANODE': 'hdfs_user',
  164. 'JOURNALNODE': 'hdfs_user',
  165. 'ZKFC': 'hdfs_user',
  166. 'JOBTRACKER': 'mapred_user',
  167. 'TASKTRACKER': 'mapred_user',
  168. 'RESOURCEMANAGER': 'yarn_user',
  169. 'NODEMANAGER': 'yarn_user',
  170. 'HISTORYSERVER': 'mapred_user',
  171. 'HBASE_MASTER': 'hbase_user',
  172. 'HBASE_REGIONSERVER': 'hbase_user',
  173. }
  174. pidPathesVars = [
  175. {'var' : 'glusterfs_pid_dir_prefix',
  176. 'defaultValue' : '/var/run'},
  177. {'var' : 'hadoop_pid_dir_prefix',
  178. 'defaultValue' : '/var/run/hadoop'},
  179. {'var' : 'hadoop_pid_dir_prefix',
  180. 'defaultValue' : '/var/run/hadoop'},
  181. {'var' : 'ganglia_runtime_dir',
  182. 'defaultValue' : '/var/run/ganglia/hdp'},
  183. {'var' : 'hbase_pid_dir',
  184. 'defaultValue' : '/var/run/hbase'},
  185. {'var' : '',
  186. 'defaultValue' : '/var/run/nagios'},
  187. {'var' : 'zk_pid_dir',
  188. 'defaultValue' : '/var/run/zookeeper'},
  189. {'var' : 'oozie_pid_dir',
  190. 'defaultValue' : '/var/run/oozie'},
  191. {'var' : 'hcat_pid_dir',
  192. 'defaultValue' : '/var/run/webhcat'},
  193. {'var' : 'hive_pid_dir',
  194. 'defaultValue' : '/var/run/hive'},
  195. {'var' : 'mysqld_pid_dir',
  196. 'defaultValue' : '/var/run/mysqld'},
  197. {'var' : 'hcat_pid_dir',
  198. 'defaultValue' : '/var/run/webhcat'},
  199. {'var' : 'yarn_pid_dir_prefix',
  200. 'defaultValue' : '/var/run/hadoop-yarn'},
  201. {'var' : 'mapred_pid_dir_prefix',
  202. 'defaultValue' : '/var/run/hadoop-mapreduce'},
  203. ]
  204. class AmbariConfig:
  205. TWO_WAY_SSL_PROPERTY = "security.server.two_way_ssl"
  206. CONFIG_FILE = "/etc/ambari-agent/conf/ambari-agent.ini"
  207. SERVER_CONNECTION_INFO = "{0}/connection_info"
  208. CONNECTION_PROTOCOL = "https"
  209. config = None
  210. net = None
  211. def __init__(self):
  212. global content
  213. self.config = ConfigParser.RawConfigParser()
  214. self.net = NetUtil()
  215. self.config.readfp(StringIO.StringIO(content))
  216. def get(self, section, value, default=None):
  217. try:
  218. return self.config.get(section, value)
  219. except ConfigParser.Error, err:
  220. if default:
  221. return default
  222. raise err
  223. def set(self, section, option, value):
  224. self.config.set(section, option, value)
  225. def add_section(self, section):
  226. self.config.add_section(section)
  227. def setConfig(self, customConfig):
  228. self.config = customConfig
  229. def getConfig(self):
  230. return self.config
  231. def getRolesToClass(self):
  232. global rolesToClass
  233. return rolesToClass
  234. def getServiceStates(self):
  235. global serviceStates
  236. return serviceStates
  237. def getServicesToPidNames(self):
  238. global servicesToPidNames
  239. return servicesToPidNames
  240. def getImports(self):
  241. global imports
  242. return imports
  243. def getPidPathesVars(self):
  244. global pidPathesVars
  245. return pidPathesVars
  246. def has_option(self, section, option):
  247. return self.config.has_option(section, option)
  248. def remove_option(self, section, option):
  249. return self.config.remove_option(section, option)
  250. def load(self, data):
  251. self.config = ConfigParser.RawConfigParser(data)
  252. def read(self, filename):
  253. self.config.read(filename)
  254. def getServerOption(self, url, name, default=None):
  255. status, response = self.net.checkURL(url)
  256. if status is True:
  257. try:
  258. data = json.loads(response)
  259. if name in data:
  260. return data[name]
  261. except:
  262. pass
  263. return default
  264. def get_api_url(self):
  265. return "%s://%s:%s" % (self.CONNECTION_PROTOCOL,
  266. self.get('server', 'hostname'),
  267. self.get('server', 'url_port'))
  268. def isTwoWaySSLConnection(self):
  269. req_url = self.get_api_url()
  270. response = self.getServerOption(self.SERVER_CONNECTION_INFO.format(req_url), self.TWO_WAY_SSL_PROPERTY, 'false')
  271. if response is None:
  272. return False
  273. elif response.lower() == "true":
  274. return True
  275. else:
  276. return False
  277. def main():
  278. print AmbariConfig().config
  279. if __name__ == "__main__":
  280. main()