Skip to content

Commit e9082d4

Browse files
fix(controller): Determine registry address during start
Before this change re-deploying apps failed when the registry was re-scheduled to a different instance in the cluster. Fixes #1128
1 parent d21fc37 commit e9082d4

5 files changed

Lines changed: 26 additions & 8 deletions

File tree

builder/templates/builder

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ if __name__ == '__main__':
4545
# define image names
4646
tmp_image = "{app}:git-{short_sha}".format(**locals())
4747
target_image = "{{ .deis_registry_host }}:{{ .deis_registry_port }}/{app}".format(**locals())
48+
image_reference = "{app}".format(**locals())
4849
for d in (cache_dir, build_dir):
4950
if not os.path.exists(d):
5051
os.mkdir(d)
@@ -117,7 +118,7 @@ if __name__ == '__main__':
117118
body['sha'] = sha
118119
body['receive_user'] = user
119120
body['receive_repo'] = app
120-
body['image'] = target_image
121+
body['image'] = image_reference
121122
# use sha of branch
122123
with open(os.path.join(repo_dir, branch)) as f:
123124
body['sha'] = f.read().strip('\n')

contrib/coreos/user-data

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,21 @@ write_files:
6060

6161
# remove leading slash
6262
echo ${IMAGE#/}
63+
- path: /run/deis/bin/determine_registry
64+
permissions: 0755
65+
content: |
66+
#!/bin/bash
67+
# usage: determine_registry <build_image>
68+
REGISTRY_HOST=`etcdctl get /deis/registry/host 2>/dev/null`
69+
if [ $? -ne 0 ]; then
70+
echo "Can't find registry host in /deis/registry/host."
71+
exit 1
72+
fi
73+
74+
REGISTRY_PORT=`etcdctl get /deis/registry/port 2>/dev/null`
75+
if [ $? -ne 0 ]; then
76+
echo "Can't find registry port in /deis/registry/port."
77+
exit 1
78+
fi
79+
80+
echo $REGISTRY_HOST:$REGISTRY_PORT/$1

controller/api/models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,7 @@ def new(self, user, config=None, build=None, summary=None, source_version='lates
469469
new_version = self.version + 1
470470
tag = 'v{}'.format(new_version)
471471
release_image = '{}:{}'.format(self.app.id, tag)
472-
target_image = '{}:{}/{}'.format(
473-
settings.REGISTRY_HOST, settings.REGISTRY_PORT, self.app.id)
472+
target_image = '{}'.format(self.app.id)
474473
# create new release and auto-increment version
475474
release = Release.objects.create(
476475
owner=user, app=self.app, config=config,

controller/api/tests/test_hooks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def test_build_hook(self):
116116
url = '/api/hooks/builds'.format(**locals())
117117
body = {'receive_user': 'autotest',
118118
'receive_repo': app_id,
119-
'image': 'registry.local:5000/{app_id}:v2'.format(**locals())}
119+
'image': '{app_id}:v2'.format(**locals())}
120120
# post the build without a session
121121
self.assertIsNone(self.client.logout())
122122
response = self.client.post(url, json.dumps(body), content_type='application/json')
@@ -142,7 +142,7 @@ def test_build_hook_procfile(self):
142142
SHA = 'ecdff91c57a0b9ab82e89634df87e293d259a3aa'
143143
body = {'receive_user': 'autotest',
144144
'receive_repo': app_id,
145-
'image': 'registry.local:5000/{app_id}:v2'.format(**locals()),
145+
'image': '{app_id}:v2'.format(**locals()),
146146
'sha': SHA,
147147
'procfile': PROCFILE}
148148
# post the build without a session
@@ -191,7 +191,7 @@ def test_build_hook_dockerfile(self):
191191
"""
192192
body = {'receive_user': 'autotest',
193193
'receive_repo': app_id,
194-
'image': 'registry.local:5000/{app_id}:v2'.format(**locals()),
194+
'image': '{app_id}:v2'.format(**locals()),
195195
'sha': SHA,
196196
'dockerfile': DOCKERFILE}
197197
# post the build without a session

controller/scheduler/coreos.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ def attach(self, name):
222222
Description={name}
223223
224224
[Service]
225-
ExecStartPre=/usr/bin/docker pull {image}
225+
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/determine_registry {image}`; docker pull $IMAGE"
226226
ExecStartPre=/bin/sh -c "docker inspect {name} >/dev/null 2>&1 && docker rm -f {name} || true"
227-
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{{{range $k, $v := .ContainerConfig.ExposedPorts }}}}{{{{$k}}}}{{{{end}}}}' {image} | cut -d/ -f1) ; docker run --name {name} -P -e PORT=$port {image} {command}"
227+
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/determine_registry {image}`; port=$(docker inspect -f '{{{{range $k, $v := .ContainerConfig.ExposedPorts }}}}{{{{$k}}}}{{{{end}}}}' $IMAGE | cut -d/ -f1) ; docker run --name {name} -P -e PORT=$port $IMAGE {command}"
228228
ExecStop=/usr/bin/docker rm -f {name}
229229
TimeoutStartSec=20m
230230
"""

0 commit comments

Comments
 (0)