Created
June 4, 2012 16:57
-
-
Save jayd3e/2869528 to your computer and use it in GitHub Desktop.
Subprocess usage
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 random | |
import subprocess | |
from pyramid.view import view_config | |
from thewall.repository import Repository | |
import sys | |
@view_config(route_name='home', renderer='home.html') | |
def home(request): | |
# we need the current tags from git | |
# sorted tag list | |
web_app_dir = request.registry.settings['web_app_dir'] | |
repository = Repository(web_app_dir) | |
tags = repository.tags | |
last_tag = getCurrentlyDeployedVersion(request) | |
return {'last_tag': last_tag.rjust(8, '0'), | |
'next_tag': str(int(tags[-1]['number']) + 1).rjust(8, '0'), | |
'tags': reversed(tags)} | |
def getCurrentlyDeployedVersion(request): | |
path = os.path.join(request.registry.settings['web_app_dir'], 'global/version.txt') | |
if os.path.exists(path): | |
with (open(path)) as f: | |
return f.readline() | |
else: | |
return "1" | |
@view_config(route_name='deploy_tag', renderer='json') | |
def tag(request): | |
if (request.method == 'POST'): | |
web_app_dir = request.registry.settings['web_app_dir'] | |
repository = Repository(web_app_dir) | |
try: | |
web_app_dir = request.registry.settings['web_app_dir'] | |
repository = Repository(web_app_dir) | |
repository.tag('deploy_%s' % request.matchdict['id'], 'deploying from website') | |
return {'result': 'success'} | |
except Exception, e: | |
return {'result':'exception: %s' % e} | |
else: | |
return {'result':'you can\'t use a GET to add the tag'} | |
@view_config(route_name='deploy_do', renderer='json') | |
def deploy_do(request): | |
id = request.params['version'] | |
log = get_log_path(request, id) | |
print 'writing to %s' % log | |
test_log = open(log, 'w+') | |
subprocess.Popen( | |
get_args(request, id), | |
stdin=None, | |
stdout=test_log, | |
stderr=test_log | |
) | |
return {'push_id': id} | |
def get_args(request, id): | |
args = [ | |
get_script_path(request), | |
'-s', request.params['environment'], | |
'-t', "deploy_%s" % request.params['version']] | |
if request.params.get('restartMemcache'): | |
args.append('-m') | |
if request.params.get('restartApache'): | |
args.append('-a') | |
print args | |
return args | |
def get_script_path(request): | |
if request.registry.settings['deploy_script_path'] == 'cwd': | |
return os.path.join(os.getcwd(), 'deploy.sh') | |
else: | |
return request.registry.settings['deploy_script_path'] | |
def get_log_path(request, id): | |
if request.registry.settings['log_path'] == 'cwd': | |
return os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logs/log_%s.log' % str(id)) | |
else: | |
return os.path.join(request.registry.settings['log_path'], "d_{}.log".format(id)) | |
@view_config(route_name='deploy_read', renderer='json') | |
def deploy_read(request): | |
id = request.matchdict['id'] | |
print 'reading from %s' % get_log_path(request, id) | |
test_log = open(get_log_path(request, id), 'w+') | |
return {'content': test_log.read()} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment