File cloud-init-resize-ro-btrfs.patch of Package cloud-init

--- cloudinit/config/cc_resizefs.py
+++ cloudinit/config/cc_resizefs.py	2017/11/27 11:55:37
@@ -59,7 +59,16 @@
 
 
 def _resize_btrfs(mount_point, devpth):
-    return ('btrfs', 'filesystem', 'resize', 'max', mount_point)
+# That btrfs utilities are using a path and not a device is bad,
+# because the subvolume specified by '/' could be read-only
+# and btrfs will wrongly fail. Correct fix would be to mount the
+# real root of the filesystem (subvolid=5) and resize that. But
+# using /.snapshots as workaround is Ok, too, since this is
+# normally writeable.
+    if mount_point == '/' and os.path.isdir("/.snapshots"):
+        return ('btrfs', 'filesystem', 'resize', 'max', '/.snapshots')
+    else:
+        return ('btrfs', 'filesystem', 'resize', 'max', mount_point)
 
 
 def _resize_ext(mount_point, devpth):