Skip to content

Commit

Permalink
Adding check running task
Browse files Browse the repository at this point in the history
  • Loading branch information
sukrit007 committed Oct 9, 2014
1 parent ee49fca commit b0cc761
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 25 deletions.
9 changes: 7 additions & 2 deletions conf/appconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
DEPLOYMENT_TYPE_GITHUB_QUAY: {
'deployment': {
'name': '{GIT_OWNER}-{GIT_REPO}-{GIT_BRANCH}',
'type': 'github-quay',
'type': 'github-quay'
},
'templates': {
'default-app': {
Expand Down Expand Up @@ -52,7 +52,8 @@
},
'deployment': {
'type': 'default',
'version': None
'version': None,
'nodes': 2
},
'templates': {
}
Expand All @@ -65,3 +66,7 @@
'service-type': 'app',
'args': {}
}

FLEET_SETTINGS = {
'host': os.getenv('FLEET_HOST', '172.17.42.1')
}
10 changes: 10 additions & 0 deletions deployer/fleet.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from __future__ import absolute_import
from fleet.client.fleet_fabric import Provider
from fleet.deploy.deployer import default_jinja_environment
from conf.appconfig import FLEET_SETTINGS

jinja_env = default_jinja_environment()


def get_fleet_provider():
return Provider(hosts=FLEET_SETTINGS['host'])
52 changes: 43 additions & 9 deletions deployer/tasks/deployment.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import logging
import time
from celery.canvas import group, chain
from fleet.deploy.deployer import Deployment, status
from deployer.fleet import get_fleet_provider, jinja_env

__author__ = 'sukrit'

Expand Down Expand Up @@ -46,11 +48,14 @@ def _deploy_all(deployment):
for template in deployment['templates'].values()
if template['enabled']})
tasks = []
name, version, nodes = deployment['deployment']['name'], \
deployment['deployment']['version'], \
deployment['deployment']['nodes']
for priority in priorities:
fleet_tasks = [
fleet_deploy.si(deployment['deployment']['name'],
deployment['deployment']['version'],
template_name, template)
_fleet_deploy.si(name, version, nodes, template_name, template) |
_fleet_check_all_running.s(template_name, name, version, nodes,
template['service-type'])
for template_name, template in deployment['templates'].iteritems()
if template['priority'] == priority and template['enabled']]
tasks.append(group(fleet_tasks) | _processed_templates.s(deployment))
Expand Down Expand Up @@ -117,19 +122,48 @@ def _deployment_defaults(deployment):
return deployment_upd


@app.task(name='deployment.fleet_deploy')
def fleet_deploy(name, version, template_name, template):
logger.info('Deploying %s:%s:%s %r', name, version, template_name,
template)
@app.task(name='deployment._fleet_deploy')
def _fleet_deploy(name, version, nodes, template_name, template):
logger.info('Deploying %s:%s:%s nodes:%d %r', name, version, template_name,
nodes, template)
fleet_deployment = Deployment(
fleet_provider=get_fleet_provider(), jinja_env=jinja_env, name=name,
version=version, template=template_name+'.service',
template_args=template['args'], service_type=template['service-type'])
fleet_deployment.deploy()
return template_name


@app.task(name='deployment._fleet_status', default_retry_delay=20, bind=True,
max_retries=15)
def _fleet_check_running(self, name, version, node_num,
service_type):
try:
if status(get_fleet_provider(), name, version, node_num, service_type)\
is not 'running':
raise NodeNotRunningException()
except NodeNotRunningException as exc:
self.retry(exc=exc)
return '%s:%s:%d:%s is running' % (name, version, node_num, service_type)


@app.task
def _fleet_check_all_running(template_name, name, version, nodes,
service_type):
return group(
[_fleet_check_running.si(name, version, node_num, service_type)
for node_num in range(1, nodes+1)])()


@app.task(name='deployment._processed_deployment')
def _processed_templates(template_names, deployment):
logger.info('Deployed templates %r', template_names)
def _processed_templates(node_status, deployment):
logger.info('Deployed nodes %r', node_status)
return deployment


class NodeNotRunningException(Exception):
pass

# @app.task
# def _add(a, b):
# print(a, b)
Expand Down
27 changes: 19 additions & 8 deletions local.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from celery.result import ResultBase
import deployer.celery
import os
from deployer.tasks.deployment import create
from deployer.tasks.deployment import create, _fleet_check_running

from deployer.server import app

Expand All @@ -13,20 +13,24 @@
'meta-info': {
'github': {
'owner': 'totem',
'repo': 'cluster-deployer'
'repo': 'cluster-deployer',
'commit': '',
'branch': 'master'
}

},
'deployment': {
'name': 'totem-cluster-deployer-develop',
'version': 'v1',
'type': 'github-quay',
},

'templates': {
'default-app': {
'enabled': True,
'priority': 1,
'args': {
'image': ''
}
},
'yoda-ec2-register': {
'enabled': False
Expand All @@ -44,11 +48,18 @@
# print result.ready()
print result

if result.ready():
output = result.get(propagate=False)
while isinstance(output, ResultBase):
output = output.get(propagate=False)
print(output)
def ready(result):
if result.ready():
output = result.get(propagate=False)
while isinstance(output, ResultBase):
output = output.get(propagate=False)
print(output)
ready(result)

result = _fleet_check_running.delay('test', 'v1', 1, 'app')
result.get(propagate=False)
# print result.ready()
ready(result)

# print deployer.celery.app.AsyncResult(
# u'0fe50924-80b3-41ff-8bc3-717000c83ba5').result
Expand Down
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ flower==0.7.2
pymongo==2.7.2
gevent==1.0.1
uWSGI==2.0.7
supervisor==3.1.2
supervisor==3.1.2
https://github.com/totem/fleet-py/archive/master.tar.gz
14 changes: 9 additions & 5 deletions tests/unit/tasks/test_deployment.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ def test_deployment_defaults_for_type_github_quay(mock_time):
'deployment': {
'name': 'testowner-testrepo-testbranch',
'type': 'github-quay',
'version': 101
'version': 101,
'nodes': 2
},
'templates': {
'default-app': {
Expand Down Expand Up @@ -100,7 +101,7 @@ def test_deployment_defaults_for_type_github_quay_with_overrides(mock_time):
deployment['templates'] = {
'default-logger': {
'priority': 3,
'enabled': False
'enabled': False,
}
}

Expand All @@ -125,7 +126,8 @@ def test_deployment_defaults_for_type_github_quay_with_overrides(mock_time):
'deployment': {
'name': 'testowner-testrepo-testbranch',
'type': 'github-quay',
'version': 1000
'version': 1000,
'nodes': 2
},
'templates': {
'default-app': {
Expand Down Expand Up @@ -163,7 +165,8 @@ def test_deployment_defaults_for_custom_deployment(mock_time):
deployment = _create_test_deployment()
deployment['deployment'] = {
'name': 'testdeployment',
'type': 'custom'
'type': 'custom',
'nodes': 3
}

deployment['templates'] = {
Expand Down Expand Up @@ -204,7 +207,8 @@ def test_deployment_defaults_for_custom_deployment(mock_time):
'deployment': {
'name': 'testdeployment',
'type': 'custom',
'version': 1000
'version': 1000,
'nodes': 3
},
'templates': {
'custom-app': {
Expand Down

0 comments on commit b0cc761

Please sign in to comment.