Fix Kyverno OSD policy init container ordering

Use patchesJson6902 with append (/-) for create-block-db-symlink to
ensure it runs after activate, not before. The patchStrategicMerge was
inserting it before activate, causing prime-osd-dir to clear the symlink.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Scooby Husky
2026-03-10 22:15:20 -05:00
co-authored by Claude Opus 4.6
parent 64723eb0ba
commit 550ee8fd13
@@ -13,7 +13,7 @@ metadata:
spec: spec:
background: false background: false
rules: rules:
- name: fix-osd-init-containers - name: noop-expand-bluefs
match: match:
any: any:
- resources: - resources:
@@ -33,31 +33,47 @@ spec:
- name: expand-bluefs - name: expand-bluefs
command: ["/bin/true"] command: ["/bin/true"]
args: [] args: []
- name: create-block-db-symlink - name: add-block-db-symlink
image: quay.io/ceph/ceph:v19.2.0 match:
command: ["/bin/bash", "-c"] any:
args: - resources:
- | kinds:
set -e - Deployment
# Only create block.db symlink if /dev/sdb has a valid BlueStore label namespaces:
if ! ceph-bluestore-tool show-label --dev /dev/sdb 2>/dev/null; then - rook-ceph
echo "No BlueStore label on /dev/sdb, skipping block.db symlink" selector:
exit 0 matchLabels:
fi app: rook-ceph-osd
echo "BlueStore label found on /dev/sdb" mutate:
# Find OSD data directory under rook data path patchesJson6902: |-
for d in /var/lib/rook/rook-ceph/*/; do - op: add
if [ -L "$d/block" ]; then path: /spec/template/spec/initContainers/-
ln -sf /dev/sdb "$d/block.db" value:
echo "Created block.db -> /dev/sdb in $d" name: create-block-db-symlink
break image: quay.io/ceph/ceph:v19.2.0
fi command: ["/bin/bash", "-c"]
done args:
securityContext: - |
privileged: true set -e
runAsUser: 0 # Only create block.db symlink if /dev/sdb has a valid BlueStore label
volumeMounts: if ! ceph-bluestore-tool show-label --dev /dev/sdb 2>/dev/null; then
- name: rook-data echo "No BlueStore label on /dev/sdb, skipping block.db symlink"
mountPath: /var/lib/rook exit 0
- name: devices fi
mountPath: /dev echo "BlueStore label found on /dev/sdb"
# Find OSD data directory under rook data path
for d in /var/lib/rook/rook-ceph/*/; do
if [ -L "$d/block" ]; then
ln -sf /dev/sdb "$d/block.db"
echo "Created block.db -> /dev/sdb in $d"
break
fi
done
securityContext:
privileged: true
runAsUser: 0
volumeMounts:
- name: rook-data
mountPath: /var/lib/rook
- name: devices
mountPath: /dev