Skip to content

Instantly share code, notes, and snippets.

@jamesbeedy
Created February 20, 2017 15:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesbeedy/c5c2dc96dc517e03ebbde44da5fffa8f to your computer and use it in GitHub Desktop.
Save jamesbeedy/c5c2dc96dc517e03ebbde44da5fffa8f to your computer and use it in GitHub Desktop.
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