diff --git a/kayobe/plugins/filter/networks.py b/kayobe/plugins/filter/networks.py
index 0a5f18e93..f7681e725 100644
--- a/kayobe/plugins/filter/networks.py
+++ b/kayobe/plugins/filter/networks.py
@@ -591,6 +591,11 @@ def net_configdrive_network_device(context, name, inventory_hostname=None):
     gateway = net_gateway(context, name, inventory_hostname)
     bootproto = net_bootproto(context, name, inventory_hostname)
     mtu = net_mtu(context, name, inventory_hostname)
+    vlan = net_vlan(context, name, inventory_hostname)
+    if vlan:
+        backend = [device.split('.')[0]]
+    else:
+        backend = None
     interface = {
         'device': device,
         'address': ip,
@@ -598,7 +603,10 @@ def net_configdrive_network_device(context, name, inventory_hostname=None):
         'gateway': gateway,
         'bootproto': bootproto or 'static',
         'mtu': mtu,
+        'backend': backend,
     }
+    if vlan:
+        interface['type'] = 'vlan'
     interface = {k: v for k, v in interface.items() if v is not None}
     return interface
 
diff --git a/releasenotes/notes/configdrive-vlans-4e8b6ed07b229233.yaml b/releasenotes/notes/configdrive-vlans-4e8b6ed07b229233.yaml
new file mode 100644
index 000000000..a1012c3ca
--- /dev/null
+++ b/releasenotes/notes/configdrive-vlans-4e8b6ed07b229233.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Fixes an issue with the seed's configdrive when the admin network is a
+    VLAN. See `story 2008089
+    <https://storyboard.openstack.org/#!/story/2008089>`__ for details.
diff --git a/requirements.yml b/requirements.yml
index 1197eca6a..c56202d51 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -8,7 +8,7 @@ roles:
     version: 1.1.0
   - src: jriguera.configdrive
     # There are no versioned releases of this role.
-    version: e12d38378ae127c9c61d170fa4ba4729f2c5f2ad
+    version: 29871bf3279ef95fc8f7339b9abd13f869980750
   - src: MichaelRigart.interfaces
     version: v1.12.0
   - src: mrlesmithjr.chrony