Skip to content

Commit a6b7d86

Browse files
committed
fix(contrib/ec2): prepare etcd before starting etcd
coreos-cloudinit processes units as they are listed in the cloud-config file, so even though `prepare-etcd-data-directory.service` asks to be started before etcd with `Before=etcd.service`, etcd has already been started by the time this unit is encountered. This commit prepends the Docker volume and etcd data volme preparation to the main unit list, so they are started before etcd/fleet. TESTING: Provision an EC2 cluster. You should notice that `/media/ephemeral/etcd` has `log` and `conf` files, as well as a `snapshots` directory. The lack of a snapshots directory is what resulted in a panic when etcd tried to write a snapshot to disk.
1 parent 18cf1a9 commit a6b7d86

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

contrib/ec2/gen-json.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
Type=oneshot
3838
RemainAfterExit=yes
3939
ExecStart=/usr/bin/mkdir -p /media/ephemeral/etcd
40-
ExecStart=/usr/bin/chown -R etcd /media/ephemeral/etcd
40+
ExecStart=/usr/bin/chown -R etcd:etcd /media/ephemeral/etcd
4141
'''
4242
FORMAT_DOCKER_VOLUME = '''
4343
[Unit]
@@ -62,12 +62,19 @@
6262
Type=btrfs
6363
'''
6464

65+
new_units = [
66+
dict({'name': 'format-ephemeral-volume.service', 'command': 'start', 'content': FORMAT_EPHEMERAL_VOLUME}),
67+
dict({'name': 'media-ephemeral.mount', 'command': 'start', 'content': MOUNT_EPHEMERAL_VOLUME}),
68+
dict({'name': 'prepare-etcd-data-directory.service', 'command': 'start', 'content': PREPARE_ETCD_DATA_DIRECTORY}),
69+
dict({'name': 'format-docker-volume.service', 'command': 'start', 'content': FORMAT_DOCKER_VOLUME}),
70+
dict({'name': 'var-lib-docker.mount', 'command': 'start', 'content': MOUNT_DOCKER_VOLUME})
71+
]
72+
6573
data = yaml.load(file(os.path.join(CURR_DIR, '..', 'coreos', 'user-data'), 'r'))
66-
data['coreos']['units'].append(dict({'name': 'format-ephemeral-volume.service', 'command': 'start', 'content': FORMAT_EPHEMERAL_VOLUME}))
67-
data['coreos']['units'].append(dict({'name': 'media-ephemeral.mount', 'command': 'start', 'content': MOUNT_EPHEMERAL_VOLUME}))
68-
data['coreos']['units'].append(dict({'name': 'prepare-etcd-data-directory.service', 'command': 'start', 'content': PREPARE_ETCD_DATA_DIRECTORY}))
69-
data['coreos']['units'].append(dict({'name': 'format-docker-volume.service', 'command': 'start', 'content': FORMAT_DOCKER_VOLUME}))
70-
data['coreos']['units'].append(dict({'name': 'var-lib-docker.mount', 'command': 'start', 'content': MOUNT_DOCKER_VOLUME}))
74+
75+
# coreos-cloudinit will start the units in order, so we want these to be processed before etcd/fleet
76+
# are started
77+
data['coreos']['units'] = new_units + data['coreos']['units']
7178

7279
# configure etcd to use the ephemeral drive
7380
data['coreos']['etcd']['data-dir'] = '/media/ephemeral/etcd'

0 commit comments

Comments
 (0)