Skip to content

Commit 218a58e

Browse files
committed
Fleet upgrade
1 parent c6d62d3 commit 218a58e

9 files changed

+71
-55
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.idea
22
.idea/*
3-
*.iml
3+
*.iml
4+
tests/internal.py

fleet/__init__.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
__all__ = ['client','scheduler']
1+
__all__ = ['deploy', 'undeploy', 'app_status', 'logger_status', 'Deployment']
22

33
import client
44
import deploy
5+
6+
from client import get_provider
7+
from deploy.docker_deployer import deploy, undeploy, app_status, \
8+
logger_status, Deployment

fleet/client/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
'fabric': fleet_fabric.Provider
1212
}
1313

14-
def get_provider(type=_DEFAULT_PROVIDER, **kwargs):
15-
if type in _PROVIDER_DICT:
16-
return _PROVIDER_DICT[type](**kwargs)
14+
def get_provider(provider_type=_DEFAULT_PROVIDER, **kwargs):
15+
if provider_type in _PROVIDER_DICT:
16+
return _PROVIDER_DICT[provider_type](**kwargs)
1717
else:
1818
return None
1919

fleet/client/fleet_fabric.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,18 @@ def deploy(self, service_name, service_data_stream, force_remove=False):
8383
run('if [ -f {} ]; then echo {}; fi'
8484
.format(destination_service, destination_service))
8585

86-
def destroy(self, service_name):
86+
def destroy(self, service_prefix):
8787
with self._logger_stream() as stream:
8888
with self._settings():
89-
run('fleetctl destroy {}'.format(service_name),
90-
stdout=stream, stderr=stream)
89+
run('fleetctl list-units | grep {} | xargs fleetctl destroy'
90+
.format(service_prefix), stdout=stream, stderr=stream)
91+
9192

9293
def status(self, service_name):
9394
with self._logger_stream() as stream:
9495
with self._settings():
9596
return run('fleetctl list-units | grep {} | '
96-
'awk \'{{{{print $5}}}}\''.format(service_name),
97+
'awk \'{{{{print $4}}}}\''.format(service_name),
9798
stdout=stream, stderr=stream)
9899

99100

fleet/deploy/docker_deployer.py

+48-38
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
__author__ = 'sukrit'
55

66
import fleet.client as fleet_client
7-
import template_manager as tmgr
7+
import template_manager as tmgr
8+
89

910
class Deployment:
10-
def __init__(self, **kwargs):
11+
"""
12+
Class for creating new docker deployment in fleet.
13+
"""
14+
def __init__(self, fleet_provider, **kwargs):
15+
self.fleet_provider = fleet_provider
1116
template_group = kwargs.get('template_group', 'default')
1217
app_template_url = kwargs.get(
1318
'app_template_url', tmgr.fetch_bundled_template_url(
@@ -37,13 +42,13 @@ def __init__(self, **kwargs):
3742
'logger_template_url', tmgr.fetch_bundled_template_url(
3843
group=template_group, type='logger'))
3944
self.logger_template = tmgr.fetch_template(logger_template_url)
40-
if kwargs.get('use_register', True):
45+
if kwargs.get('use_register', False):
4146
register_template_url = kwargs.get(
4247
'register_template_url', tmgr.fetch_bundled_template_url(
4348
group=template_group, type='register'))
4449
self.register_template = tmgr.fetch_template(register_template_url)
4550

46-
def _deploy(self, fleet_provider, template, service_name_prefix,
51+
def _deploy(self, template, service_name_prefix,
4752
force_remove=False):
4853
template_args = self.template_args.copy()
4954
for unit in range(1, self.nodes+1):
@@ -52,58 +57,54 @@ def _deploy(self, fleet_provider, template, service_name_prefix,
5257
service_name = "{}-{}.service".format(service_name_prefix, unit)
5358
unit_stream = StringIO()
5459
unit_stream.write(unit_data)
55-
fleet_provider.deploy(service_name, unit_stream,
60+
self.fleet_provider.deploy(service_name, unit_stream,
5661
force_remove=force_remove)
5762

58-
def deploy_app(self, fleet_provider, force_remove=False):
59-
self._deploy(fleet_provider,
60-
self.app_template,
63+
def deploy_app(self, force_remove=False):
64+
self._deploy(self.app_template,
6165
"{}-{}".format(self.name, self.version),
6266
force_remove=force_remove)
6367

64-
def deploy_register(self, fleet_provider, force_remove=True):
65-
self._deploy(fleet_provider, self.register_template,
68+
def deploy_register(self, force_remove=True):
69+
self._deploy(self.register_template,
6670
"{}-register-{}".format(self.name, self.version),
6771
force_remove=force_remove)
6872

69-
def deploy_logger(self, fleet_provider, force_remove=True):
70-
self._deploy(fleet_provider, self.logger_template,
73+
def deploy_logger(self, force_remove=True):
74+
self._deploy(self.logger_template,
7175
"{}-logger-{}".format(self.name, self.version),
7276
force_remove=force_remove)
7377

74-
def deploy(self, fleet_provider):
75-
self.deploy_app(fleet_provider)
78+
def deploy(self):
79+
self.deploy_app(self.fleet_provider)
7680
if self.register_template:
77-
self.deploy_register(fleet_provider)
81+
self.deploy_register(self.fleet_provider)
7882
if self.logger_template:
79-
self.deploy_logger(fleet_provider)
83+
self.deploy_logger(self.fleet_provider)
8084

8185

8286
def deploy(fleet_provider, **kwargs):
83-
deployment = Deployment(**kwargs)
84-
deployment.deploy(fleet_provider)
87+
deployment = Deployment(fleet_provider, **kwargs)
88+
deployment.deploy()
8589
#Replace
8690

87-
def undeploy(fleet_provider, name, version, nodes):
88-
for unit in range(1, nodes+1):
89-
app_service = "{}-{}-{}.service".format(name, version, unit)
90-
register_service = "{}-register-{}-{}.service".format(
91-
name, version, unit)
92-
log_service = "{}-logger-{}-{}.service".format(name, version, unit)
9391

94-
fleet_provider.destroy(app_service)
95-
fleet_provider.destroy(register_service)
96-
fleet_provider.destroy(log_service)
92+
def undeploy(fleet_provider, name, version):
93+
service_prefix = "{}-{}".format(name, version)
94+
fleet_provider.destroy(service_prefix)
95+
9796

9897
def app_status(fleet_provider, name, version, node_num):
9998
app_service = "{}-{}-{}.service".format(name, version, node_num)
10099
return fleet_provider.status(app_service)
101100

101+
102102
def register_status(fleet_provider, name, version, node_num):
103103
register_service = "{}-register-{}-{}.service".format(
104104
name, version, node_num)
105105
return fleet_provider.status(register_service)
106106

107+
107108
def logger_status(fleet_provider, name, version, node_num):
108109
log_service = "{}-logger-{}-{}.service".format(name, version, node_num)
109110
return fleet_provider.status(log_service)
@@ -116,27 +117,36 @@ def logger_status(fleet_provider, name, version, node_num):
116117

117118
num_nodes=3
118119
undeploy(provider,
119-
name='apache',
120-
version='a234wdsa34',
120+
name='yoda',
121+
version='v1',
121122
nodes=num_nodes
122123
)
123124

124125
#In SWF We will poll
125126
sleep(10)
126127

128+
# deploy(provider,
129+
# image='coreos/apache',
130+
# template_group='default',
131+
# name='apache',
132+
# version='a234wdsa34',
133+
# use_logger=True,
134+
# use_register=True,
135+
# nodes = num_nodes,
136+
# docker_args='-p :80',
137+
# app_cmd='''/bin/bash -c \'echo \\"<h1>a234wdsa34</h1>\\" \\
138+
# >/var/www/index.html &&\\
139+
# /usr/sbin/apache2ctl -D FOREGROUND\'''' )
140+
127141
deploy(provider,
128-
image='coreos/apache',
142+
image='totem/yoda-proxy',
129143
template_group='default',
130-
name='apache',
131-
version='a234wdsa34',
144+
name='yoda',
145+
version='v1',
132146
use_logger=True,
133-
use_register=True,
147+
use_register=False,
134148
nodes = num_nodes,
135-
docker_args='-p :80',
136-
app_cmd='''/bin/bash -c \'echo \\"<h1>a234wdsa34</h1>\\" \\
137-
>/var/www/index.html &&\\
138-
/usr/sbin/apache2ctl -D FOREGROUND\'''' )
139-
149+
docker_args='-p :80')
140150
sleep(10)
141151

142152
print app_status(provider,

templates/default-app.service

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ Restart=always
66
RestartSec=20s
77
TimeoutStartSec=20m
88
ExecStartPre=/usr/bin/docker pull {image}
9-
ExecStartPre=/bin/sh -xc "docker inspect {name}-{version} 1>/dev/null 2>&1 && docker rm -f {name}-{version} || true"
10-
ExecStart=/bin/sh -xc "/usr/bin/docker run -P --rm {docker_args} {docker_env} \
11-
--name {name}-{version} {image} {app_cmd}"
12-
ExecStop=/bin/sh -xc "docker inspect {name}-{version} 1>/dev/null 2>&1 && docker rm -f {name}-{version} || true"
9+
ExecStartPre=/bin/sh -xc "docker inspect {name}-{version}-{unit} 1>/dev/null 2>&1 && docker rm -f {name}-{version}-{unit} || true"
10+
ExecStart=/bin/sh -xc "/usr/bin/docker run {docker_args} -P --rm {docker_env} -e DISCOVER_APP_NAME={name} -e DISCOVER_APP_VERSION={version} \
11+
-e DISCOVER_NODE_NAME={name}-{version}-{unit} -e DISCOVER_NODE_NUMBER={unit} \
12+
--name {name}-{version}-{unit} {image} {app_cmd}"
13+
ExecStop=/bin/sh -xc "docker inspect {name}-{version}-{unit} 1>/dev/null 2>&1 && docker rm -f {name}-{version}-{unit} || true"
1314

1415
[X-Fleet]
1516
X-Conflicts={name}-{version}-*.service

templates/default-logger.service

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ BindsTo={name}-{version}-{unit}.service
55
[Service]
66
Restart=always
77
RestartSec=20s
8-
ExecStartPre=/bin/sh -c "until docker inspect {name}-{version} >/dev/null 2>&1; do sleep 1; done"
9-
ExecStart=/bin/sh -c "docker logs -f {name}-{version} 2>&1 | logger -p local0.info -t '{name} {version} {unit}' --udp --server $(etcdctl get /deis/logs/host | cut -d ':' -f1) --port $(etcdctl get /deis/logs/port | cut -d ':' -f2)"
8+
ExecStartPre=/bin/sh -c "until docker inspect {name}-{version}-{unit} >/dev/null 2>&1; do sleep 1; done"
9+
ExecStart=/bin/sh -c "docker logs --tail=100 -f {name}-{version}-{unit} 2>&1 | logger -p local0.info -t '{name}-{version}-{unit}' --udp --server $(etcdctl get /totem/logs/host | cut -d ':' -f1) --port $(etcdctl get /totem/logs/port | cut -d ':' -f2)"
1010

1111

1212
[X-Fleet]

templates/default-register.service

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ExecStartPre=/bin/sh -c "until docker inspect -f '{{{{range $i, $e := .HostConfi
1111
do sleep 2; done; \
1212
port=$(docker inspect -f '{{{{range $i, $e := .HostConfig.PortBindings }}}}{{{{$p := index $e 0}}}}{{{{$p.HostPort}}}}{{{{end}}}}' {name}-{version}); \
1313
echo Waiting for $port/tcp...; until netstat -lnt | grep :$port >/dev/null; do sleep 1; done"
14-
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{{{range $i, $e := .HostConfig.PortBindings }}}}{{{{$p := index $e 0}}}}{{{{$p.HostPort}}}}{{{{end}}}}' {name}-{version}); echo Connected to $COREOS_PRIVATE_IPV4:$port/tcp, publishing to etcd...; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /deis/services/{name}-{version}/{name}-{version}-{unit} $COREOS_PRIVATE_IPV4:$port --ttl 60 >/dev/null; sleep 45; done"
14+
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{{{range $i, $e := .HostConfig.PortBindings }}}}{{{{$p := index $e 0}}}}{{{{$p.HostPort}}}}{{{{end}}}}' {name}-{version}); echo Connected to $COREOS_PRIVATE_IPV4:$port/tcp, publishing to etcd...; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /yoda/upstreams/{name}-{version}/endpoints/{unit} /deis/services/{name}-{version}/{name}-{version}-{unit} $COREOS_PRIVATE_IPV4:$port --ttl 300 >/dev/null; sleep 45; done"
1515
ExecStop=/usr/bin/etcdctl rm --recursive /deis/services/{name}-{version}/{name}-{version}-{unit}
1616

1717
[X-Fleet]

tests/__init__.py

-1
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
__author__ = 'sukrit'

0 commit comments

Comments
 (0)