~george-edison55/charms/precise/uwsgi/trunk

« back to all changes in this revision

Viewing changes to hooks/hooks.py

  • Committer: Nathan Osman
  • Date: 2014-04-07 00:03:09 UTC
  • Revision ID: admin@quickmediasolutions.com-20140407000309-1cy8lc8ib2eci9a1
A number of minor fixes. The charm is now in a working state.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
UWSGI_CONFIG_DIR = '/etc/uwsgi/apps-enabled'
18
18
 
19
19
def get_app_filename(app=None):
20
 
    """Return the filename for an app."""
 
20
    """Return the absolute filename for an app."""
21
21
    if app is None:
22
22
        app = '%s.json' % hookenv.remote_unit().split('/')[0]
23
23
    return os.path.join(UWSGI_CONFIG_DIR, app)
45
45
    """Return the config settings provided by the relation."""
46
46
    relation = hookenv.relation_get()
47
47
    config = {
48
 
        'uwsgi': {
49
 
            'socket': '%s:%d' % (
50
 
                relation.get('listen_ip', '0.0.0.0'),
51
 
                relation.get('port', 8080),
52
 
            ),
53
 
        },
 
48
        'http-socket': '%s:%s' % (
 
49
            relation.get('listen_ip', '0.0.0.0'),
 
50
            relation.get('port', 8080),
 
51
        ),
54
52
    }
55
53
    for key, value in relation.items():
56
54
        if key in UWSGI_CONFIG_MAP:
57
 
            config[value] = relation[key]
 
55
            config[UWSGI_CONFIG_MAP[key]] = value
58
56
    return config
59
57
 
60
58
def update_uwsgi_app(app, new_config):
61
59
    """Update an app with new config values."""
62
 
    with open(get_app_filename(), 'a+') as f:
63
 
        try:
 
60
    try:
 
61
        with open(get_app_filename(app), 'r') as f:
64
62
            config = json.loads(f.read())
65
63
            config['uwsgi']
66
 
        except (KeyError, ValueError,):
67
 
            config = {}
68
 
        config['uwsgi'].update(new_config)
69
 
        f.seek(0)
 
64
    except (IOError, KeyError, ValueError,):
 
65
        config = {'uwsgi': {},}
 
66
    config['uwsgi'].update(new_config)
 
67
    with open(get_app_filename(app), 'w') as f:
70
68
        f.write(json.dumps(config))
71
 
        f.truncate()
72
69
 
73
70
def update_all_uwsgi_apps():
74
71
    """Write the updated config to all uWSGI apps."""
75
72
    for app in os.listdir(UWSGI_CONFIG_DIR):
76
 
        update_uwsgi_app(app, get_unit_app_config())
 
73
        if app.endswith('.json'):
 
74
            update_uwsgi_app(app, get_unit_app_config())
77
75
 
78
76
##################
79
77
# HOOK FUNCTIONS #
83
81
def install():
84
82
    """Install or upgrade the charm."""
85
83
    fetch.apt_update()
86
 
    fetch.apt_install(['uwsgi',])
 
84
    fetch.apt_install(['uwsgi', 'uwsgi-plugin-python',])
87
85
 
88
86
@hooks.hook('config-changed')
89
87
def config_changed():
90
88
    """Update all configuration files."""
91
 
    update_all_uwsgi_files()
 
89
    update_all_uwsgi_apps()
92
90
    host.service_restart('uwsgi')
93
91
 
94
92
@hooks.hook('wsgi-file-relation-changed')
95
93
def wsgi_file_relation_changed():
96
 
    """Invoked when a WSGI relation has changed."""
 
94
    """Update the app configuration."""
97
95
    update_uwsgi_app(get_app_filename(), get_relation_app_config())
 
96
    host.service_restart('uwsgi')
98
97
    
99
98
if __name__ == "__main__":
100
99
    hooks.execute(sys.argv)