Ceph CRUSH map editing script
If you're working with Ceph, you'll find yourself updating the CRUSH map sooner or later. For that, you regularly need to get the current map, decompile it, edit it, comile it and upload it again. Here's a little script that makes this easier.
#!/bin/bash set -e set -u ceph osd getcrushmap -o /tmp/crushmap crushtool -d /tmp/crushmap -o /tmp/crushmap.txt cp /tmp/crushmap.txt /tmp/crushmap.txt.orig ${EDITOR:-vi} /tmp/crushmap.txt # diff returns 0 if the file stayed the same if ! diff /tmp/crushmap.txt.orig /tmp/crushmap.txt > /dev/null; then crushtool -c /tmp/crushmap.txt -o /tmp/crushmap ceph osd setcrushmap -i /tmp/crushmap echo "Updated crush map. Tree is now:" ceph osd tree else echo "Crushmap not changed, not updating ceph" fi
Save as /usr/local/sbin/vicrushmap
or something, chmod +x it and edit away!