9
9
from fabric.api import env, run, sudo, task, put
10
from fabric.context_managers import cd
10
from fabric.context_managers import cd, shell_env
11
11
from fabric.contrib import files
24
24
def _config_get(service_name):
25
25
yaml_conf = Popen(['juju', 'get', service_name], stdout=PIPE)
26
26
conf = yaml.safe_load(yaml_conf.stdout)
27
orig_conf = yaml.safe_load(open('config.yaml', 'r'))['options']
28
return {k: (v['value'] if v['value'] is not None else orig_conf[k]['default']) for k,v in conf['settings'].iteritems()}
27
return {k: (v['value'] if 'value' in v else v['default']) for k,v in conf['settings'].iteritems()}
30
30
def _find_django_admin_cmd():
31
31
for cmd in ['django-admin.py', 'django-admin']:
40
40
env.user = 'ubuntu'
42
d = yaml.safe_load(Popen(['juju','status'],stdout=PIPE).stdout)
42
d = yaml.safe_load(Popen(['juju', 'status'], stdout=PIPE).stdout)
44
44
services = d.get("services", {})
45
45
if services is None:
59
59
env.roledefs.setdefault(service[0], []).append(unit[1]['public-address'])
60
60
env.roledefs.setdefault(unit[0], []).append(unit[1]['public-address'])
63
print "You must select a charm or a unit with the -R option to perform a task"
64
print "Charms: %s" % [role for role in env.roledefs.keys() if not '/' in role]
65
print "Units: %s" % [host for host in env.roledefs.keys() if '/' in host]
68
env.service_name = env.roles[0].split('/')[0]
69
env.sanitized_service_name = _sanitize(env.service_name)
70
env.conf = _config_get(env.service_name)
71
if not env.conf['django_settings']:
72
django_settings_modules = '.'.join([env.sanitized_service_name, 'settings'])
74
django_settings_modules = env.conf['django_settings']
63
env.service_name = env.roles[0].split('/')[0]
64
env.sanitized_service_name = _sanitize(env.service_name)
65
env.conf = _config_get(env.service_name)
66
env.project_dir = os.path.join(env.conf['install_root'], env.sanitized_service_name)
67
env.django_settings_modules = '.'.join([env.sanitized_service_name, env.conf['django_settings']])
76
env.project_dir = os.path.join(env.conf['install_root'], env.sanitized_service_name)
77
env.site_path = os.path.join(env.project_dir, env.conf['application_path'])
78
if env.conf['python_path']:
79
env.python_path = ':'.join([env.conf['install_root'], env.conf['python_path'].replace(',', ':')])
81
env.python_path = env.conf['install_root']
124
152
sudo('adduser %s --disabled-password --gecos ""' % username)
127
def ssh_add_key(pub_key_file, username=None):
129
Add a public SSH key to the authorized_keys file on the remote machine.
131
with open(os.path.normpath(pub_key_file), 'rt') as f:
136
files.append('.ssh/authorized_keys', ssh_key)
138
run('mkdir -p /home/%s/.ssh' % username)
139
files.append('/home/%s/.ssh/authorized_keys' % username, ssh_key)
140
run('chown -R %s:%s /home/%s/.ssh' % (username, username, username))
175
187
def manage(command):
176
188
""" Runs management commands."""
177
189
django_admin_cmd = _find_django_admin_cmd()
178
sudo('%s %s --pythonpath=%s --settings=%s' % \
179
(django_admin_cmd, command, env.conf['install_root'], env.django_settings_modules), \
180
user=env.conf['wsgi_user'])
191
with cd(env.site_path):
192
with shell_env(PYTHONPATH=':'.join([env.project_dir, env.python_path])):
193
sudo('%s %s --settings=%s' %
194
(django_admin_cmd, command, django_settings_modules),
195
user=env.conf['wsgi_user'])
183
199
def load_fixture(fixture_path):
187
203
manage('loaddata %s' % os.path.join('/tmp/', fixture_file))
188
204
run('rm %s' % os.path.join('/tmp/', fixture_file))
192
209
def delete_pyc():
193
210
""" Deletes *.pyc files from project source dir """
195
with env.project_dir:
196
run("find . -name '*.pyc' -delete")
211
with cd(env.project_dir):
212
sudo("find . -name '*.pyc' -delete", user="www-data")