-
-
Save jamesbeedy/c5c2dc96dc517e03ebbde44da5fffa8f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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