Skip to content

Commit 77079bc

Browse files
committed
fix(ibmcloud): mount data volume via systemd on IBM Power
Replace inline cloud-init polling with a systemd oneshot service that waits for the multipath data volume to appear before formatting and mounting it at /home. Pulumi attaches the volume after instance boot, so the runcmd polling window was too short; the systemd approach persists across reboots and blocks runner installation until /home is ready. IBM Z cloud-config reverted to plain boot-volume sizing (no separate data volume to mount).
1 parent 8467012 commit 77079bc

3 files changed

Lines changed: 44 additions & 40 deletions

File tree

pkg/provider/ibmcloud/action/ibm-power/cloud-config

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,45 @@
11
#cloud-config
2-
{{- if or .OtelColScript .GitLabRunnerScript}}
32
write_files:
3+
- path: /usr/local/bin/mount-data-home.sh
4+
permissions: '0700'
5+
owner: root:root
6+
content: |
7+
#!/bin/bash
8+
set -euo pipefail
9+
if mountpoint -q /home; then
10+
exit 0
11+
fi
12+
DATA_DEV=""
13+
while true; do
14+
DATA_DEV=$(lsblk -dpno NAME,PTTYPE | awk '$2=="" && $1 ~ /\/dev\/mapper\// && $1 !~ /control/ {print $1}' | head -1)
15+
[ -n "$DATA_DEV" ] && break
16+
udevadm trigger --subsystem-match=block 2>/dev/null || true
17+
udevadm settle 2>/dev/null || true
18+
multipathd reconfigure 2>/dev/null || true
19+
sleep 10
20+
done
21+
mkfs.xfs -f -K "$DATA_DEV"
22+
UUID=$(blkid -s UUID -o value "$DATA_DEV")
23+
mkdir -p /mnt/home-tmp
24+
cp -a /home/. /mnt/home-tmp/
25+
mount "$DATA_DEV" /home
26+
cp -a /mnt/home-tmp/. /home/
27+
rm -rf /mnt/home-tmp
28+
echo "UUID=$UUID /home xfs defaults 0 2" >> /etc/fstab
29+
- path: /etc/systemd/system/mount-data-home.service
30+
permissions: '0644'
31+
content: |
32+
[Unit]
33+
Description=Mount data volume at /home
34+
35+
[Service]
36+
Type=oneshot
37+
ExecStart=/usr/local/bin/mount-data-home.sh
38+
RemainAfterExit=yes
39+
TimeoutStartSec=0
40+
41+
[Install]
42+
WantedBy=multi-user.target
443
{{- if .OtelColScript}}
544
- path: /opt/install-otelcol.sh
645
permissions: '0700'
@@ -33,31 +72,14 @@ write_files:
3372
content: |
3473
{{.GitLabRunnerScript}}
3574
{{- end}}
36-
{{- end}}
3775
runcmd:
38-
- |
39-
udevadm settle
40-
DATA_DEV=""
41-
for i in $(seq 1 24); do
42-
DATA_DEV=$(lsblk -dpno NAME,PTTYPE | awk '$2=="" && $1 ~ /\/dev\/mapper\// && $1 !~ /control/ {print $1}' | head -1)
43-
[ -n "$DATA_DEV" ] && break
44-
sleep 5
45-
done
46-
if [ -n "$DATA_DEV" ]; then
47-
mkfs.xfs -f "$DATA_DEV"
48-
UUID=$(blkid -s UUID -o value "$DATA_DEV")
49-
mkdir -p /mnt/home-tmp
50-
cp -a /home/. /mnt/home-tmp/
51-
mount "$DATA_DEV" /home
52-
cp -a /mnt/home-tmp/. /home/
53-
rm -rf /mnt/home-tmp
54-
echo "UUID=$UUID /home xfs defaults 0 2" >> /etc/fstab
55-
fi
76+
- systemctl enable mount-data-home.service
5677
- dnf install -y git podman
5778
- |
5879
IFACE=$(ip route show default | awk '/default/ {print $5; exit}')
5980
ip route add 10.0.0.0/8 via {{.Gateway}} dev "$IFACE" 2>/dev/null || true
6081
echo "10.0.0.0/8 via {{.Gateway}}" > "/etc/sysconfig/network-scripts/route-$IFACE"
82+
- systemctl start mount-data-home.service
6183
{{- if .OtelColScript}}
6284
- bash /opt/install-otelcol.sh
6385
{{- end}}

pkg/provider/ibmcloud/action/ibm-power/ibm-power_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func TestPiUserData_noRunner(t *testing.T) {
2424
if strings.Contains(cfg, "install-glrunner") {
2525
t.Error("expected no GitLab runner section when script is empty")
2626
}
27-
if strings.Contains(cfg, "write_files") {
28-
t.Error("expected no write_files when otel and runner are both absent")
27+
if !strings.Contains(cfg, "mount-data-home") {
28+
t.Error("expected mount-data-home service in write_files regardless of runner/otel config")
2929
}
3030
}
3131

pkg/provider/ibmcloud/action/ibm-z/cloud-config

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,6 @@ write_files:
3535
{{- end}}
3636
{{- end}}
3737
runcmd:
38-
- |
39-
udevadm settle
40-
DATA_DEV=""
41-
for i in $(seq 1 24); do
42-
DATA_DEV=$(lsblk -dpno NAME,PTTYPE | awk '$2=="" && $1 ~ /\/dev\/mapper\// && $1 !~ /control/ {print $1}' | head -1)
43-
[ -n "$DATA_DEV" ] && break
44-
sleep 5
45-
done
46-
if [ -n "$DATA_DEV" ]; then
47-
mkfs.xfs -f "$DATA_DEV"
48-
UUID=$(blkid -s UUID -o value "$DATA_DEV")
49-
mkdir -p /mnt/home-tmp
50-
cp -a /home/. /mnt/home-tmp/
51-
mount "$DATA_DEV" /home
52-
cp -a /mnt/home-tmp/. /home/
53-
rm -rf /mnt/home-tmp
54-
echo "UUID=$UUID /home xfs defaults 0 2" >> /etc/fstab
55-
fi
5638
- apt-get update -y
5739
- apt-get install -y git podman
5840
{{- if .OtelColScript}}

0 commit comments

Comments
 (0)