PageRenderTime 31ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/silverlining/mgr-scripts/update-service.py

https://bitbucket.org/ianb/silverlining/
Python | 73 lines | 71 code | 1 blank | 1 comment | 0 complexity | 1363b34b2bd0e092355badc2911af774 MD5 | raw file
Possible License(s): GPL-2.0
  1. #!/usr/bin/env python
  2. import sys
  3. sys.path.insert(0, '/usr/local/share/silverlining/lib')
  4. import os
  5. import shutil
  6. from optparse import OptionParser
  7. from silversupport.appconfig import AppConfig
  8. from silversupport.appdata import instance_for_location, normalize_location
  9. from silversupport.shell import apt_install, run
  10. parser = OptionParser(
  11. usage="%prog INSTANCE_NAME",
  12. description="""\
  13. Runs any setup necessary for the new instance's services. Also
  14. apt-get installs any packages listed in app.ini.
  15. """)
  16. parser.add_option(
  17. '--clear',
  18. action='store_true',
  19. help='Clear the database')
  20. parser.add_option(
  21. '--location',
  22. help='location to update/clear (instead of INSTANCE_NAME)')
  23. php_packages = [
  24. 'php5',
  25. 'php5-cgi',
  26. 'php5-cli',
  27. 'libapache2-mod-php5',
  28. ]
  29. def update_service(instance_name, clear=False):
  30. app_config = AppConfig.from_instance_name(instance_name)
  31. app_config.install_services(clear)
  32. for script in app_config.package_install_script:
  33. print 'Running install script %s' % script
  34. run([script])
  35. packages = app_config.packages
  36. if packages:
  37. print 'Confirming packages installed: %s' % ', '.join(packages)
  38. apt_install(packages)
  39. if (app_config.platform == 'php' and
  40. (not os.path.exists('/usr/share/doc/php5')
  41. or not os.path.exists('/usr/bin/php5'))):
  42. apt_install(php_packages)
  43. run(['a2enmod', 'php5'])
  44. run(['/etc/init.d/apache2', 'restart'])
  45. tmp = os.path.join('/var/lib/silverlining/tmp', app_config.app_name)
  46. if os.path.exists(tmp):
  47. for name in os.listdir(tmp):
  48. fn = os.path.join(tmp, name)
  49. if os.path.isdir(fn):
  50. shutil.rmtree(fn)
  51. else:
  52. os.unlink(fn)
  53. else:
  54. os.makedirs(tmp)
  55. if not os.path.exists(app_config.log_dir):
  56. run(['sudo', '-u', 'www-data', 'mkdir', '-p', app_config.log_dir])
  57. for script in app_config.after_install_script:
  58. print 'Running post script %s' % script
  59. run([script])
  60. if __name__ == '__main__':
  61. options, args = parser.parse_args()
  62. if options.location:
  63. instance_name = instance_for_location(*normalize_location(options.location))
  64. else:
  65. instance_name = args[0]
  66. update_service(instance_name, options.clear)