Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.79 KB | None | 0 0
  1. import os
  2. import stat
  3. from shutil import rmtree, chown
  4. from subprocess import check_call, CalledProcessError, call, check_output
  5.  
  6. from charmhelpers.core import hookenv
  7. from charmhelpers.core.hookenv import status_set
  8. from charmhelpers.core.host import adduser, chownr, mkdir
  9. from charmhelpers.fetch.archiveurl import ArchiveUrlFetchHandler
  10. from charms.reactive import when, when_not, set_state, remove_state, is_state
  11. from charms.reactive.helpers import data_changed
  12. from charmhelpers.core.templating import render
  13. from socket import gethostname;
  14. from charms.leadership import leader_set, leader_get
  15.  
  16.  
  17. @when_not('java.ready')
  18. def update_java_status():
  19. status_set('blocked', 'Waiting for Java.')
  20.  
  21.  
  22. @when_not('pdi.installed')
  23. def install():
  24. status_set('maintenance', 'Installing PDI')
  25. adduser('etl')
  26. mkdir('/home/etl')
  27. chownr('/home/etl', 'etl', 'etl', chowntopdir=True)
  28. os.chmod('/home/etl', 0o755)
  29.  
  30. au = ArchiveUrlFetchHandler()
  31. au.install(hookenv.config()['pdi_url'], '/opt/')
  32. chownr('/opt/data-integration', 'etl', 'etl', chowntopdir=True)
  33. st = os.stat('/opt/data-integration/spoon.sh')
  34. os.chmod('/opt/data-integration/spoon.sh', st.st_mode | stat.S_IEXEC)
  35. os.chmod('/opt/data-integration/carte.sh', st.st_mode | stat.S_IEXEC)
  36. os.chmod('/opt/data-integration/encr.sh', st.st_mode | stat.S_IEXEC)
  37. os.chmod('/opt/data-integration/kitchen.sh', st.st_mode | stat.S_IEXEC)
  38. os.chmod('/opt/data-integration/pan.sh', st.st_mode | stat.S_IEXEC)
  39. status_set('maintenance', 'PDI Installed')
  40. set_state('pdi.installed')
  41.  
  42.  
  43. @when('java.ready')
  44. @when('pdi.installed')
  45. @when('leadership.set.init')
  46. def check_running(java):
  47. if data_changed('pdi.url', hookenv.config('pdi_url')):
  48. stop()
  49. remove()
  50. install()
  51.  
  52. if (data_changed('carte_password', hookenv.config())):
  53. change_carte_password(hookenv.config('carte_password'))
  54.  
  55. if data_changed('pdi.config', hookenv.config()) and hookenv.config('run_carte'):
  56. restart(None)
  57. elif data_changed('pdi.config', hookenv.config()) and hookenv.config('run_carte') is False:
  58. stop()
  59. status_set('active', 'PDI Installed. Carte Server Disabled.')
  60. elif hookenv.config('run_carte'):
  61. start()
  62. elif hookenv.config('run_carte') is False:
  63. stop()
  64. status_set('active', 'PDI Installed. Carte Server Disabled.')
  65.  
  66.  
  67. @when('pdi.installed')
  68. @when('java.updated')
  69. def restart(java):
  70. status_set('maintenance', 'Configuration has changed, restarting Carte.')
  71. stop()
  72. start()
  73. remove_state('java.updated')
  74.  
  75.  
  76. def start():
  77. currentenv = dict(os.environ)
  78. port = hookenv.config('carte_port')
  79. javaopts = hookenv.config('java_opts')
  80.  
  81. if javaopts:
  82. currentenv['JAVA_OPTS'] = javaopts
  83.  
  84. try:
  85. check_call(['pgrep', '-f', 'carte.sh'])
  86. except CalledProcessError:
  87. check_call(['su', 'etl', '-c', '/opt/data-integration/carte.sh '
  88. '/opt/data-integration/pwd/carte-config.xml &'],
  89. env=currentenv, cwd="/opt/data-integration")
  90.  
  91. hookenv.open_port(port)
  92. status_set('active', 'Carte is ready! Master is:' + leader_get('public_ip'))
  93.  
  94.  
  95. def stop():
  96. call(['pkill', '-f', 'carte.sh'])
  97.  
  98.  
  99. def remove():
  100. rmtree('/opt/data-integration')
  101.  
  102.  
  103. def change_carte_password(pword):
  104. process = check_output(['sh', '/opt/data-integration/encr.sh', '-carte', pword])
  105. encrpword = process.splitlines()[-1]
  106. with open("/opt/data-integration/pwd/kettle.pwd", "w") as text_file:
  107. text_file.write("cluster: " + encrpword.decode('utf-8'))
  108. chown('/opt/data-integration/encr.sh', 'etl', 'etl')
  109.  
  110.  
  111. @when('leadership.is_leader')
  112. def change_leader():
  113. leader_set(hostname=hookenv.unit_private_ip())
  114. leader_set(public_ip=hookenv.unit_public_ip())
  115. leader_set(username='cluster')
  116. leader_set(init=True)
  117.  
  118.  
  119. @when('leadership.is_leader', 'leadership.changed')
  120. def update_master_config():
  121. render_master_config()
  122. restart(None)
  123.  
  124. @when('leadership.changed')
  125. @when_not('leadership.is_leader')
  126. def update_slave_config():
  127. render_slave_config()
  128. restart(None)
  129.  
  130. # @when_not('pdi.leader_configured')
  131. # @when('leadership.is_leader')
  132. # def add_leader_config():
  133. # render_master_config()
  134. # leader_set(hostname=hookenv.unit_private_ip())
  135. # leader_set(public_ip=hookenv.unit_public_ip())
  136. # leader_set(port=hookenv.config('carte_port'))
  137. # leader_set(username='cluster')
  138. # leader_set(password=hookenv.config('carte_password'))
  139. # leader_set(init=True)
  140. # set_state('pdi.leader_configured')
  141. #
  142. # @when_not('leadership.is_leader')
  143. # def add_slave_config():
  144. # render_slave_config()
  145. #
  146. #
  147. # @when('leadership.changed')
  148. # @when('leadership.is_leader')
  149. # def change_leader():
  150. # leader_set(hostname=hookenv.unit_private_ip())
  151. # leader_set(public_ip=hookenv.unit_public_ip())
  152. # leader_set(port=hookenv.config('carte_port'))
  153. # leader_set(username='cluster')
  154. # leader_set(password=hookenv.config('carte_password'))
  155. # leader_set(init=True)
  156. # render_master_config()
  157. # restart(None)
  158. #
  159. # @when('leadership.changed')
  160. # @when_not('leadership.is_leader')
  161. # def change_slave():
  162. # render_slave_config()
  163. # restart(None)
  164.  
  165.  
  166. def render_slave_config():
  167. render('carte-config/slave.xml.j2', '/opt/data-integration/pwd/carte-config.xml', {
  168. 'carteslaveport': hookenv.config('carte_port'),
  169. 'carteslavehostname': hookenv.unit_private_ip(),
  170. 'cartemasterhostname': leader_get('hostname'),
  171. 'carteslavepassword': leader_get('password'),
  172. 'cartemasterpassword': leader_get('password'),
  173. 'cartemasterport': hookenv.config('carte_port')
  174. })
  175.  
  176.  
  177. def render_master_config():
  178. render('carte-config/master.xml.j2', '/opt/data-integration/pwd/carte-config.xml', {
  179. 'carteport': hookenv.config('carte_port'),
  180. 'cartehostname': hookenv.unit_private_ip()
  181. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement