| import os | |
| import subprocess as sp | |
| from shutil import copyfile, rmtree | |
| from charmhelpers.core.templating import render | |
| from charms.reactive import ( | |
| hook, | |
| when, | |
| when_not, | |
| set_state | |
| ) | |
| from charmhelpers.core.host import ( | |
| service_restart, | |
| service_running, | |
| service_start, | |
| ) | |
| from charmhelpers.context import Relations | |
| from charmhelpers.core.hookenv import ( | |
| unit_private_ip, | |
| resource_get, | |
| leader_get, | |
| status_set, | |
| relation_set, | |
| is_leader, | |
| open_port, | |
| config, | |
| log | |
| ) | |
| import charms.leadership | |
| TOMCAT_CONF = os.path.join('/', 'var', 'lib', 'tomcat7', 'conf') | |
| TOMCAT_BIN = os.path.join('/', 'usr', 'share', 'tomcat7', 'bin') | |
| COPY_PROPERTIES = os.path.join(TOMCAT_CONF, 'copy.properties') | |
| SERVER_XML = os.path.join(TOMCAT_CONF, 'server.xml') | |
| SET_ENV = os.path.join(TOMCAT_BIN, 'setenv.sh') | |
| WAR_DIR = os.path.join('/', 'var', 'lib', 'tomcat7', 'webapps') | |
| TARGET_WAR = os.path.join(WAR_DIR, 'ROOT.war') | |
| COPY_ENV = config('copy-env') | |
| def start_restart(service): | |
| if service_running(service): | |
| service_restart(service) | |
| else: | |
| service_start(service) | |
| def render_conf(cfg_path, cfg_tmpl, owner='www-data', | |
| group='www-data', ctxt={}, perms=0o644): | |
| if os.path.exists(cfg_path): | |
| os.remove(cfg_path) | |
| render(source=cfg_tmpl, target=cfg_path, owner=owner, | |
| group=group, perms=perms, context=ctxt) | |
| def install_copy_war(): | |
| # Check for and remove ROOT/ | |
| webapps_root_dir = os.path.join(WAR_DIR, 'ROOT') | |
| if os.path.exists(webapps_root_dir): | |
| rmtree(webapps_root_dir) | |
| # Check for pre-existing war, remove if exists | |
| if os.path.exists(TARGET_WAR): | |
| os.remove(TARGET_WAR) | |
| # Chmod write | |
| chmod = "chmod -R g+w %s" % WAR_DIR | |
| sp.call(chmod.split()) | |
| # Copy resource over | |
| copyfile(resource_get('copy-war'), TARGET_WAR) | |
| # Chmod remove write | |
| chmod = "chmod -R g-w %s" % WAR_DIR | |
| sp.call(chmod.split()) | |
| # chgrp war dir | |
| chgrp = "chgrp -R tomcat7 %s" % WAR_DIR | |
| sp.call(chgrp.split()) | |
| # Start/Restart tomcat | |
| start_restart('tomcat7') | |
| @when_not('copy.installed') | |
| def install_copy(): | |
| # Render copy config | |
| ctxt = {'view_api_token': config('view-api-token'), | |
| 'view_api_email': config('view-api-email'), | |
| 'pg_uri': config('feed-pg-uri'), | |
| 'pg_user': config('feed-pg-user'), | |
| 'pg_pass': config('feed-pg-password')} | |
| if config('fqdn'): | |
| ctxt['fqdn'] = config('fqdn') | |
| # Check for pre-existing copy.properties, remove if exists | |
| if os.path.exists(COPY_PROPERTIES): | |
| os.remove(COPY_PROPERTIES) | |
| # Render copy properties | |
| render_conf(COPY_PROPERTIES, 'copy.properties.tmpl', | |
| owner='root', group='tomcat7', ctxt=ctxt) | |
| # Check for pre-existing server.xml, remove if exists | |
| if os.path.exists(SERVER_XML): | |
| os.remove(SERVER_XML) | |
| # Render copy properties | |
| render_conf(SERVER_XML, 'server.xml.tmpl', | |
| owner='root', group='tomcat7', ctxt={'port': config('port')}) | |
| # Check for pre-existing setenv.sh, remove if exists | |
| if os.path.exists(SET_ENV): | |
| os.remove(SET_ENV) | |
| # Render copy setenv.sh | |
| render_conf(SET_ENV, 'setenv.sh.tmpl', owner='tomcat7', group='tomcat7') | |
| # Install ROOT.war | |
| install_copy_war() | |
| open_port(config('port')) | |
| # Set state copy.installed | |
| set_state('copy.installed') | |
| @when('copy.installed') | |
| def set_available_status(): | |
| status_set('active', "COPY available at http://%s" % unit_private_ip()) | |
| @hook('upgrade-charm') | |
| def replace_war_on_upgrade(): | |
| log("Upgrading Resource") | |
| install_copy_war() | |
| log("Resource upgraded") | |
| @when('website.available') | |
| def configure_http(http): | |
| http.configure(config('port')) | |
| #@hook('http-relation-changed') | |
| #def set_http_data(): | |
| # rels = Relations() | |
| # log("HTTP_RELATION_CHANGED %s" % rels) | |
| #@hook('https-relation-changed') | |
| #def set_https_data(): | |
| # rels = Relations() | |
| # log("HTTPS_RELATION_CHANGED %s" % rels) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment