-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathetcd_ls.sh
executable file
·37 lines (34 loc) · 1.12 KB
/
etcd_ls.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash
# Description: ls etcd keys by prefix just like etcd v2.
KEY_FILE=/etc/kubernetes/pki/etcd/server.key
CERT_FILE=/etc/kubernetes/pki/etcd/server.crt
CA_FILE=/etc/kubernetes/pki/etcd/ca.crt
ENDPOINTS=https://127.0.0.1:2379
PREFIX=${1:-/}
ORIG_PREFIX="$PREFIX"
LAST_CHAR=${PREFIX:${#PREFIX}-1:1}
if [[ $LAST_CHAR != '/' ]]; then
PREFIX="$PREFIX/" # Append '/' at the end if not exist
fi
for ITEM in $(etcdctl --key="$KEY_FILE" \
--cert="$CERT_FILE" \
--cacert="$CA_FILE" \
--endpoints "$ENDPOINTS" \
get "$PREFIX" --prefix=true --keys-only | grep "$PREFIX"); do
PREFIX_LEN=${#PREFIX}
CONTENT=${ITEM:$PREFIX_LEN}
POS=$(expr index "$CONTENT" '/')
if [[ $POS -le 0 ]]; then
POS=${#CONTENT} # No '/', it's not dir, get whole str
fi
CONTENT=${CONTENT:0:$POS}
LAST_CHAR=${CONTENT:${#CONTENT}-1:1}
if [[ $LAST_CHAR == '/' ]]; then
CONTENT=${CONTENT:0:-1}
fi
echo "${PREFIX}${CONTENT}"
done | sort | uniq
etcdctl --key="$KEY_FILE" \
--cert="$CERT_FILE" \
--cacert="$CA_FILE" \
--endpoints "$ENDPOINTS" get "$ORIG_PREFIX"