|
9 | 9 | rm -f /var/lock/firstboot |
10 | 10 | fi |
11 | 11 |
|
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 |
21 | 15 | fi |
22 | 16 |
|
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 | +) |
24 | 23 |
|
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 |
29 | 40 | fi |
30 | 41 |
|
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") |
33 | 42 |
|
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)}') |
39 | 55 | fi |
40 | | - FEDID=$(curl -s http://$OPENSTACK_URL:9999/cgi-bin/get_username.sh?"$INSTANCEID") |
41 | | - ((c++)) && ((c==3)) && c=0 && break |
42 | | - done |
43 | 56 |
|
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) |
45 | 66 |
|
46 | 67 | groupadd wheel |
47 | 68 |
|
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 |
59 | 78 | 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