def wsgi_relation(): """ Setup relation for serving the WSGI file (e.g. gunicorn) Sets a whole bunch of relation settings including log file locations and environent variables """ log('Hook function: wsgi_relation') config_data = ansible_config() log_file_path = path.join( config_data['log_dir'], config_data['app_label'] + '-access.log' ) env_dictionary = parse_json_file(env_file_path) env_list = ["{0}={1}".format(k, v) for k, v in env_dictionary.items()] env_string = " ".join(env_list) wsgi_relation_settings = { 'project_name': config_data.get('app_label', ''), 'working_dir': path.join(config_data.get('code_dir', ''), 'current'), 'python_path': config_data.get('python_path', ''), 'wsgi_user': config_data.get('wsgi_user', ''), 'wsgi_group': config_data.get('wsgi_group', ''), 'port': config_data.get('listen_port', ''), 'wsgi_access_logfile': log_file_path, 'wsgi_wsgi_file': config_data.get('wsgi_application', ''), 'wsgi_extra': '--error-logfile=' + log_file_path, 'env_extra': env_string, 'timestamp': datetime.now().isoformat() } # Set these settings on any wsgi-file relations for relation_id in relation_ids('wsgi-file'): log( 'Setting wsgi-file relation settings: ' + str(wsgi_relation_settings) ) relation_set( relation_id=relation_id, **wsgi_relation_settings ) # Relation changed - re-run update target update_target() open_port(config_data['listen_port'])
def update_env(): 'Save any environment variables as JSON' env_vars_string = config('environment_variables') if env_vars_string: env_vars = parse_json_file(env_file_path) for env_var_string in env_vars_string.split(' '): key, value = env_var_string.split('=') value = dequote(value) env_vars[key] = value save_to_json_file(env_file_path, env_vars)
def unlink_webservice(): """ Remove "WEBSERVICE_URL" environment variable """ log('Function: unlink_database') env_vars = parse_json_file(env_file_path) if 'WEBSERVICE_URL' in env_vars: del env_vars['WEBSERVICE_URL'] save_to_json_file(env_file_path, env_vars) # Reset wsgi relation settings wsgi_relation()
def unlink_database(variable_name): """ Remove "DATABASE_URL" environment variable """ log('Function: unlink_database') env_vars = parse_json_file(env_file_path) if 'DATABASE_URL' in env_vars: del env_vars['DATABASE_URL'] save_to_json_file(env_file_path, env_vars) # Reset wsgi relation settings wsgi_relation()
def update_target(): """ Run the "update-charm" make target within the project """ log('Hook function: update_target') config_data = ansible_config() required_configs = [ 'build_label', 'archive_filename', 'current_code_dir', 'update_make_target' ] # Check all required configs are set if ( items_are_not_empty(config_data, required_configs) and path.isdir(config_data['current_code_dir']) ): # Ensure make is installed apt_output = sh.apt_get.install('make') log('Installed make:') log(str(apt_output)) env_vars = parse_json_file(env_file_path) # Execute make target with all environment variables make_output = sh.make( config_data['update_make_target'], directory=path.join(config_data['current_code_dir']), _env=env_vars ) log('Make output:') log(str(make_output))