Skip to content

Commit 7cd58fb

Browse files
Merge pull request #115 from stfc/update-cloud-users
fix update_cloud_users script to use new username service
2 parents 5c0167b + 827290e commit 7cd58fb

1 file changed

Lines changed: 58 additions & 38 deletions

File tree

os_builders/roles/nubes_bootcontext/files/update_cloud_users.sh

Lines changed: 58 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,53 +9,73 @@ then
99
rm -f /var/lock/firstboot
1010
fi
1111

12-
[[ -d /mnt/context ]] || mkdir /mnt/context
13-
[[ -d /mnt/context/openstack ]] || mount /dev/sr0 /mnt/context
14-
INSTANCEID=$(jq .uuid /mnt/context/openstack/latest/meta_data.json | sed "s/\"//g")
15-
16-
if curl -s http://openstack.nubes.rl.ac.uk:9999/cgi-bin/get_username.sh?"$INSTANCEID" | grep ".";
17-
then
18-
OPENSTACK_URL='openstack.nubes.rl.ac.uk'
19-
else
20-
OPENSTACK_URL='dev-openstack.nubes.rl.ac.uk'
12+
mkdir -p /mnt/context
13+
if [[ ! -d "/mnt/context/openstack" ]]; then
14+
mount /dev/sro /mnt/context
2115
fi
2216

23-
echo $OPENSTACK_URL
17+
INSTANCEID=$(jq -r .uuid /mnt/context/openstack/latest/meta_data.json)
18+
19+
BASE_URLS=(
20+
"https://openstack.stfc.ac.uk"
21+
"https://dev-openstack.stfc.ac.uk"
22+
)
2423

25-
FEDID_RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://$OPENSTACK_URL:9999/cgi-bin/get_username.sh?"$INSTANCEID")
26-
if [[ $FEDID_RESPONSE_CODE != 200 ]]; then
27-
echo "$FEDID_RESPONSE_CODE expected 200"
28-
exit
24+
25+
OPENSTACK_URL=""
26+
for base in "${BASE_URLS[@]}"; do
27+
url="${base}/getusername?serverID=${INSTANCEID}"
28+
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$url")
29+
if [[ $HTTP_CODE = 200 ]]; then
30+
OPENSTACK_URL="$url"
31+
break
32+
else
33+
echo "Error Connecting to ${OPENSTACK_URL}: Expected 200 got ${HTTP_CODE}, trying another"
34+
fi
35+
done
36+
37+
if [[ -z "$OPENSTACK_URL" ]]; then
38+
echo "Failed to get valid OpenStack endpoint"
39+
exit 1
2940
fi
3041

31-
FEDIDS=$(curl -s http://$OPENSTACK_URL:9999/cgi-bin/get_username_list.sh?"$INSTANCEID")
32-
FEDID=$(curl -s http://$OPENSTACK_URL:9999/cgi-bin/get_username.sh?"$INSTANCEID")
3342

34-
while [ -z "$FEDID" ]
35-
do
36-
if [ -z "$INSTANCEID" ]
37-
then
38-
INSTANCEID=$(dmidecode | grep UUID | tr '[:upper:]' '[:lower:]' | sed "s/\\tuuid: //")
43+
# --- Fetch FEDID with retries ---
44+
FEDID=""
45+
for _ in {1..3}; do
46+
FEDID=$(curl -fs "$OPENSTACK_URL" || true)
47+
48+
if [[ -n "$FEDID" ]]; then
49+
break
50+
fi
51+
52+
# fallback to dmidecode if needed
53+
if [[ -z "$INSTANCEID" ]]; then
54+
INSTANCEID=$(dmidecode | awk -F': ' '/UUID/ {print tolower($2)}')
3955
fi
40-
FEDID=$(curl -s http://$OPENSTACK_URL:9999/cgi-bin/get_username.sh?"$INSTANCEID")
41-
((c++)) && ((c==3)) && c=0 && break
42-
done
4356

44-
SSH_PUBLIC_KEY=$(jq .keys[0].data /mnt/context/openstack/latest/meta_data.json | sed "s/\"//g")
57+
sleep 1
58+
done
59+
60+
if [[ -z "$FEDID" ]]; then
61+
echo "Failed to retrieve FEDID from ${OPENSTACK_URL}"
62+
exit 1
63+
fi
64+
65+
SSH_PUBLIC_KEY=$(jq -r .keys[0].data /mnt/context/openstack/latest/meta_data.json)
4566

4667
groupadd wheel
4768

48-
for ID in $FEDID $FEDIDS; do
49-
id -u "$ID" || useradd "$ID" -g wheel -m -s /bin/bash
50-
usermod "$ID" -a -G wheel,cloud
51-
52-
[[ -d /home/"$ID"/.ssh ]] || mkdir -p /home/"$ID"/.ssh
53-
chown "$ID" /home/"$ID"
54-
chown "$ID" /home/"$ID"/.ssh
55-
if [[ "$ID" == "$FEDID" ]]; then
56-
if ! grep -qF "${SSH_PUBLIC_KEY//\\n/}" /home/"$ID"/.ssh/authorized_keys; then
57-
echo "${SSH_PUBLIC_KEY//\\n/}" >> /home/"$ID"/.ssh/authorized_keys
58-
fi
69+
id -u "$ID" || useradd "$ID" -g wheel -m -s /bin/bash
70+
usermod "$ID" -a -G wheel,cloud
71+
72+
[[ -d /home/"$ID"/.ssh ]] || mkdir -p /home/"$ID"/.ssh
73+
chown "$ID" /home/"$ID"
74+
chown "$ID" /home/"$ID"/.ssh
75+
if [[ "$ID" == "$FEDID" ]]; then
76+
if ! grep -qF "${SSH_PUBLIC_KEY//\\n/}" /home/"$ID"/.ssh/authorized_keys; then
77+
echo "${SSH_PUBLIC_KEY//\\n/}" >> /home/"$ID"/.ssh/authorized_keys
5978
fi
60-
chown "$ID" /home/"$ID"/.ssh/authorized_keys
61-
done
79+
fi
80+
chown "$ID" /home/"$ID"/.ssh/authorized_keys
81+

0 commit comments

Comments
 (0)