summaryrefslogtreecommitdiff
path: root/udev/66-azure-ephemeral.rules
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2015-07-22 15:17:10 -0400
committerScott Moser <smoser@ubuntu.com>2015-07-22 15:17:10 -0400
commitd68b340f8a6abf40f4d5cb546c91122c8856aa83 (patch)
tree8b617c3adcb7afaa6f535918429e6a064fccd5e1 /udev/66-azure-ephemeral.rules
parentde18aa66ad5cfdff5e0e25ae4f8f7a0328021b5b (diff)
parent452ea086beb8b28b41f5ccc610f4e5433010e35b (diff)
downloadvyos-cloud-init-d68b340f8a6abf40f4d5cb546c91122c8856aa83.tar.gz
vyos-cloud-init-d68b340f8a6abf40f4d5cb546c91122c8856aa83.zip
mounts: support reliably detecting and using Azure ephemeral disks
Azure's ephemeral disks are not guaranteed to be assigned the same name by the kernel every boot. This causes problems on ~2% of Azure instances, and can be fixed by using udev rules to give us a deterministic path to mount; this patch introduces those udev rules and modifies the Azure data source to use them. Changes to a couple of config modules were also required. In some places, they just needed to learn to dereference symlinks. In cc_mounts this wasn't sufficient because the dereferenced device would have been put in /etc/fstab (rather defeating the point of using the udev rules in the first place). A fairly hefty refactor was required to separate "is this a valid block device?" from "what shall I put in fstab?". LP: #1411582
Diffstat (limited to 'udev/66-azure-ephemeral.rules')
-rw-r--r--udev/66-azure-ephemeral.rules18
1 files changed, 18 insertions, 0 deletions
diff --git a/udev/66-azure-ephemeral.rules b/udev/66-azure-ephemeral.rules
new file mode 100644
index 00000000..b9c5c3ef
--- /dev/null
+++ b/udev/66-azure-ephemeral.rules
@@ -0,0 +1,18 @@
+# Azure specific rules
+ACTION!="add|change", GOTO="cloud_init_end"
+SUBSYSTEM!="block", GOTO="cloud_init_end"
+ATTRS{ID_VENDOR}!="Msft", GOTO="cloud_init_end"
+ATTRS{ID_MODEL}!="Virtual_Disk", GOTO="cloud_init_end"
+
+# Root has a GUID of 0000 as the second value
+# The resource/resource has GUID of 0001 as the second value
+ATTRS{device_id}=="?00000000-0000-*", ENV{fabric_name}="azure_root", GOTO="ci_azure_names"
+ATTRS{device_id}=="?00000000-0001-*", ENV{fabric_name}="azure_resource", GOTO="ci_azure_names"
+GOTO="cloud_init_end"
+
+# Create the symlinks
+LABEL="ci_azure_names"
+ENV{DEVTYPE}=="disk", SYMLINK+="disk/cloud/$env{fabric_name}"
+ENV{DEVTYPE}=="partition", SYMLINK+="disk/cloud/$env{fabric_name}-part%n"
+
+LABEL="cloud_init_end"