diff options
author | tomalok <tomalok@gmail.com> | 2019-03-03 21:57:28 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-03 21:57:28 -0800 |
commit | 052cab891417feb432151f5733c507578c72929f (patch) | |
tree | b2a702ba516f27ce1a0a3f36047523e7ca134d69 | |
parent | 00aec03281c9e3f4c4980a2e03455590e2d1a12b (diff) | |
download | alpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.tar.bz2 alpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.tar.xz alpine-ec2-ami-052cab891417feb432151f5733c507578c72929f.zip |
Fix nvme-ebs-links (issue #44) (#45)
* EBS may prepend '/dev/' in front of the EBS alias, adjust the sanity sed to account for this.
* Attempt to get a sane EBS alias up to 50x, sleep 1/10s in between (max duration ~5 secs).
* Log when we add/fail-to-add/remove EBS alias symlinks.
-rwxr-xr-x | nvme/nvme-ebs-links | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/nvme/nvme-ebs-links b/nvme/nvme-ebs-links index f3e0a0a..f2c470b 100755 --- a/nvme/nvme-ebs-links +++ b/nvme/nvme-ebs-links | |||
@@ -2,26 +2,42 @@ | |||
2 | 2 | ||
3 | [ -x /usr/sbin/nvme ] || exit | 3 | [ -x /usr/sbin/nvme ] || exit |
4 | 4 | ||
5 | PROC="$(basename $0)[$$]" | ||
6 | |||
7 | log() { | ||
8 | FACILITY="kern.$1" | ||
9 | shift | ||
10 | logger -s -p "$FACILITY" -t "$PROC" "$@" | ||
11 | } | ||
12 | |||
13 | raw_ebs_alias() { | ||
14 | /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null | ||
15 | } | ||
16 | |||
5 | case $ACTION in | 17 | case $ACTION in |
6 | add|"") | 18 | add|"") |
7 | BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') | 19 | BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') |
8 | PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') | 20 | PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') |
21 | MAXTRY=50 | ||
22 | TRY=0 | ||
9 | until [ -n "$EBS" ]; do | 23 | until [ -n "$EBS" ]; do |
10 | EBS=$( | 24 | EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') |
11 | /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | | 25 | [ -n "$EBS" ] && break |
12 | dd bs=32 skip=96 count=1 2>/dev/null | | 26 | TRY=$((TRY + 1)) |
13 | sed -nre '/^(s|xv)d[a-z]{1,2} +$/p' | | 27 | if [ $TRY -eq $MAXTRY ]; then |
14 | tr -d ' ' | 28 | log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" |
15 | ) | 29 | exit 1 |
30 | fi | ||
31 | sleep 0.1 | ||
16 | done | 32 | done |
17 | EBS=${EBS#/dev/}$PART | 33 | EBS=${EBS#/dev/}$PART |
18 | ln -sf "$MDEV" "${EBS/xvd/sd}" | 34 | ln -sf "$MDEV" "${EBS/xvd/sd}" && log notice "Added ${EBS/xvd/sd} symlink for $MDEV" |
19 | ln -sf "$MDEV" "${EBS/sd/xvd}" | 35 | ln -sf "$MDEV" "${EBS/sd/xvd}" && log notice "Added ${EBS/sd/xvd} symlink for $MDEV" |
20 | ;; | 36 | ;; |
21 | remove) | 37 | remove) |
22 | for TARGET in sd* xvd* | 38 | for TARGET in sd* xvd* |
23 | do | 39 | do |
24 | [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" | 40 | [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" |
25 | done | 41 | done |
26 | ;; | 42 | ;; |
27 | esac | 43 | esac |