Skip to content

Commit 517b4b6

Browse files
committed
Merge pull request #245 from helgi/remove_etcd
ref(*): remove etcd now that all state is being handled by db/k8s
2 parents 2c93028 + d2fb1f7 commit 517b4b6

7 files changed

Lines changed: 16 additions & 150 deletions

File tree

rootfs/Dockerfile

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ RUN apk add --update-cache curl bash openssl sudo && rm -rf /var/cache/apk/*
55

66
# install etcdctl and confd
77
RUN apk add --update-cache curl tar \
8-
&& curl -sSL https://github.com/coreos/etcd/releases/download/v2.2.1/etcd-v2.2.1-linux-amd64.tar.gz \
9-
| tar -vxz -C /usr/local/bin --strip=1 etcd-v2.2.1-linux-amd64/etcdctl \
10-
&& chown root:root /usr/local/bin/etcdctl \
118
&& curl -sSL -o /usr/local/bin/confd https://github.com/kelseyhightower/confd/releases/download/v0.10.0/confd-0.10.0-linux-amd64 \
129
&& chmod +x /usr/local/bin/confd \
1310
&& apk del --purge curl tar \

rootfs/api/management/commands/load_db_state_to_etcd.py renamed to rootfs/api/management/commands/load_db_state_to_k8s.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
class Command(BaseCommand):
77
"""Management command for publishing Deis platform state from the database
8-
to etcd.
8+
to k8s.
99
"""
1010
def handle(self, *args, **options):
1111
"""Publishes Deis platform state from the database to etcd."""
12-
print("Publishing DB state to etcd...")
12+
print("Publishing DB state to k8s...")
1313
for model in (Key, App, Domain, Certificate, Config):
1414
for obj in model.objects.all():
1515
obj.save()
16-
print("Done Publishing DB state to etcd.")
16+
print("Done Publishing DB state to k8s.")

rootfs/api/models/__init__.py

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
"""
44
Data models for the Deis API.
55
"""
6-
import etcd
76
import importlib
87
import logging
98
import uuid
@@ -16,8 +15,8 @@
1615
from django.dispatch import receiver
1716
from django.core.exceptions import ValidationError
1817
from rest_framework.authtoken.models import Token
19-
from api.utils import fingerprint, dict_merge
2018

19+
from api.utils import dict_merge
2120

2221
logger = logging.getLogger(__name__)
2322

@@ -42,20 +41,6 @@ def validate_label(value):
4241
raise ValidationError("Can only contain a-z (lowercase), 0-9 and hypens")
4342

4443

45-
def get_etcd_client():
46-
if not hasattr(get_etcd_client, "client"):
47-
# wire up etcd publishing if we can connect
48-
try:
49-
get_etcd_client.client = etcd.Client(
50-
host=settings.ETCD_HOST,
51-
port=int(settings.ETCD_PORT))
52-
get_etcd_client.client.get('/deis')
53-
except etcd.EtcdException:
54-
logger.log(logging.WARNING, 'Cannot synchronize with etcd cluster')
55-
get_etcd_client.client = None
56-
return get_etcd_client.client
57-
58-
5944
class AuditedModel(models.Model):
6045
"""Add created and updated fields to a model."""
6146

@@ -184,48 +169,6 @@ def _log_cert_removed(**kwargs):
184169
logger.info("cert {} removed".format(cert))
185170

186171

187-
def _etcd_publish_key(**kwargs):
188-
key = kwargs['instance']
189-
_etcd_client.write('/deis/builder/users/{}/{}'.format(
190-
key.owner.username, fingerprint(key.public)), key.public)
191-
192-
193-
def _etcd_purge_key(**kwargs):
194-
key = kwargs['instance']
195-
try:
196-
_etcd_client.delete('/deis/builder/users/{}/{}'.format(
197-
key.owner.username, fingerprint(key.public)))
198-
except KeyError:
199-
pass
200-
201-
202-
def _etcd_purge_user(**kwargs):
203-
username = kwargs['instance'].username
204-
try:
205-
_etcd_client.delete(
206-
'/deis/builder/users/{}'.format(username), dir=True, recursive=True)
207-
except KeyError:
208-
# If _etcd_publish_key() wasn't called, there is no user dir to delete.
209-
pass
210-
211-
212-
def _etcd_publish_app(**kwargs):
213-
appname = kwargs['instance']
214-
try:
215-
_etcd_client.write('/deis/services/{}'.format(appname), None, dir=True)
216-
except KeyError:
217-
# Ignore error when the directory already exists.
218-
pass
219-
220-
221-
def _etcd_purge_app(**kwargs):
222-
appname = kwargs['instance']
223-
try:
224-
_etcd_client.delete('/deis/services/{}'.format(appname), dir=True, recursive=True)
225-
except KeyError:
226-
pass
227-
228-
229172
# Log significant app-related events
230173
post_save.connect(_log_build_created, sender=Build, dispatch_uid='api.models.log')
231174
post_save.connect(_log_release_created, sender=Release, dispatch_uid='api.models.log')
@@ -241,14 +184,3 @@ def _etcd_purge_app(**kwargs):
241184
def create_auth_token(sender, instance=None, created=False, **kwargs):
242185
if created:
243186
Token.objects.create(user=instance)
244-
245-
246-
_etcd_client = get_etcd_client()
247-
248-
249-
if _etcd_client:
250-
post_save.connect(_etcd_publish_key, sender=Key, dispatch_uid='api.models')
251-
post_delete.connect(_etcd_purge_key, sender=Key, dispatch_uid='api.models')
252-
post_delete.connect(_etcd_purge_user, sender=settings.AUTH_USER_MODEL, dispatch_uid='api.models') # noqa
253-
post_save.connect(_etcd_publish_app, sender=App, dispatch_uid='api.models')
254-
post_delete.connect(_etcd_purge_app, sender=App, dispatch_uid='api.models')

rootfs/bin/boot

Lines changed: 9 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -13,62 +13,11 @@ echo system information:
1313
echo "Django Version: $(./manage.py --version)"
1414
python --version
1515

16-
# configure etcd
17-
export ETCD_PORT=${DEIS_ETCD_1_SERVICE_PORT_CLIENT:-4001}
18-
export ETCD_HOST=${DEIS_ETCD_1_SERVICE_HOST:-$HOST}
19-
export ETCD="$ETCD_HOST:$ETCD_PORT"
20-
export ETCD_PATH=${ETCD_PATH:-/deis/controller}
21-
export ETCD_TTL=${ETCD_TTL:-20}
16+
# spawn confd in the background to update services based on changes
17+
confd -backend env --confdir /app --log-level error --interval 5 &
2218

23-
# wait for etcd to be available
24-
until etcdctl --no-sync -C "$ETCD" ls >/dev/null 2>&1; do
25-
echo "waiting for etcd at $ETCD..."
26-
sleep $((ETCD_TTL/2)) # sleep for half the TTL
27-
done
28-
29-
function etcd_set_default {
30-
set +e
31-
ERROR="$(etcdctl --no-sync -C "$ETCD" mk "$ETCD_PATH/$1" "$2" 2>&1)"
32-
if [[ $? -ne 0 ]] && echo "$ERROR" | grep -iqve "key already exists"; then
33-
echo "etcd_set_default: an etcd error occurred ($ERROR)"
34-
echo "aborting..."
35-
exit 1
36-
fi
37-
set -e
38-
}
39-
40-
function etcd_safe_mkdir {
41-
set +e
42-
ERROR="$(etcdctl --no-sync -C "$ETCD" mkdir "$1" 2>&1)"
43-
44-
if [[ $? -ne 0 ]] && echo "$ERROR" | grep -iqve "key already exists"; then
45-
echo "etcd_safe_mkdir: an etcd error occurred ($ERROR)"
46-
echo "aborting..."
47-
exit 1
48-
fi
49-
set -e
50-
}
51-
52-
etcd_set_default protocol "${DEIS_PROTOCOL:-http}"
53-
etcd_set_default registrationMode "enabled"
54-
etcd_set_default webEnabled 0
55-
56-
# safely create required keyspaces
57-
etcd_safe_mkdir /deis/domains
58-
etcd_safe_mkdir /deis/platform
59-
etcd_safe_mkdir /deis/scheduler
60-
etcd_safe_mkdir /deis/services
61-
62-
# wait for confd to run once and install initial templates
63-
until confd -onetime -node "$ETCD" --confdir /app --log-level error; do
64-
echo "controller: waiting for confd to write initial templates..."
65-
sleep $((ETCD_TTL/2)) # sleep for half the TTL
66-
done
67-
68-
cd /app
69-
70-
mkdir -p /data/logs
71-
chmod 777 /data/logs
19+
mkdir -p /app/data/logs
20+
chmod -R 777 /app/data/logs
7221

7322
# allow deis user group permission to Docker socket
7423
if addgroup -g "$(stat -c "%g" /var/run/docker.sock)" docker; then
@@ -78,18 +27,18 @@ else
7827
fi
7928

8029
echo "Django checks:"
81-
./manage.py check --deploy api
30+
python /app/manage.py check --deploy api
8231

8332
echo "Health Checks:"
84-
./manage.py healthchecks
33+
python /app/manage.py healthchecks
8534

8635
echo "Database Migrations:"
87-
sudo -E -u deis ./manage.py migrate --noinput
36+
sudo -E -u deis python /app/manage.py migrate --noinput
8837

8938
# spawn a gunicorn server in the background
90-
sudo -E -u deis gunicorn -c deis/gconf.py deis.wsgi &
39+
sudo -E -u deis gunicorn -c /app/deis/gconf.py deis.wsgi &
9140

92-
./manage.py load_db_state_to_etcd
41+
python /app/manage.py load_db_state_to_k8s
9342

9443
# smart shutdown on SIGTERM (SIGINT is handled by gunicorn)
9544
function on_exit() {
@@ -100,9 +49,6 @@ function on_exit() {
10049
}
10150
trap on_exit TERM
10251

103-
# spawn confd in the background to update services based on etcd changes
104-
confd -node "$ETCD" --confdir /app --log-level error --interval 5 &
105-
10652
echo deis-controller running...
10753

10854
wait

rootfs/deis/settings.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,6 @@
248248
}
249249
TEST_RUNNER = 'api.tests.SilentDjangoTestSuiteRunner'
250250

251-
# etcd settings
252-
ETCD_HOST = os.environ.get('DEIS_ETCD_1_SERVICE_HOST', '127.0.0.1')
253-
ETCD_PORT = os.environ.get('DEIS_ETCD_1_SERVICE_PORT_CLIENT', 4001)
254-
255251
# default deis settings
256252
LOG_LINES = 100
257253
TEMPDIR = tempfile.mkdtemp(prefix='deis')
@@ -296,13 +292,6 @@
296292

297293
APP_URL_REGEX = '[a-z0-9-]+'
298294

299-
# Unit Hostname handling.
300-
# Supports:
301-
# default - Docker generated hostname
302-
# application - Hostname based on application unit name (i.e. my-application.v2.web.1)
303-
# server - Hostname based on CoreOS server hostname
304-
UNIT_HOSTNAME = 'default'
305-
306295
# Create a file named "local_settings.py" to contain sensitive settings data
307296
# such as database configuration, admin email, or passwords and keys. It
308297
# should also be used for any settings which differ between development

rootfs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jsonfield==1.0.3
1010
morph==0.1.2
1111
ndg-httpsclient==0.4.0
1212
psycopg2==2.6.1
13-
python-etcd==0.3.2
13+
PyOpenSSL==0.15.1
1414
PyYAML==3.11
1515
requests==2.9.1
1616
simpleflock==0.0.3

rootfs/templates/confd_settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
{{ if exists "/deis/controller/registrationMode" }}
1818
REGISTRATION_MODE = '{{ getv "/deis/controller/registrationMode" }}'
19+
{{ else }}
20+
REGISTRATION_MODE = 'enabled'
1921
{{ end }}
2022

2123
{{ if exists "/deis/controller/subdomain" }}

0 commit comments

Comments
 (0)