diff --git a/.zuul.d/jobs.yaml b/.zuul.d/jobs.yaml
index 5cc3bf5a0..30544156d 100644
--- a/.zuul.d/jobs.yaml
+++ b/.zuul.d/jobs.yaml
@@ -23,8 +23,6 @@
         - apt-sources/test-sources
         - centos-minimal/7-build-succeeds
         - centos-minimal/8-build-succeeds
-        - fedora-minimal/build-succeeds
-        - pip-and-virtualenv/source-install-fedora
         - pip-and-virtualenv/source-install-ubuntu
         - ubuntu-minimal/trusty-build-succeeds
         - ubuntu-minimal/xenial-build-succeeds
@@ -45,7 +43,6 @@
         - centos/8-build-succeeds
         - opensuse/build-succeeds
         - opensuse/opensuse15-build-succeeds
-        - fedora/build-succeeds
         - ubuntu/trusty-build-succeeds
         - ubuntu/xenial-build-succeeds
         - ubuntu/bionic-build-succeeds
@@ -93,6 +90,11 @@
       Run the default tests on a Bionic build host with Python 3
     parent: dib-functests-default
     nodeset: ubuntu-bionic
+    vars:
+      # These can only build on bionic
+      dib_functests_extra:
+        - fedora-minimal/build-succeeds
+        - pip-and-virtualenv/source-install-fedora
     voting: false
 
 - job:
@@ -101,6 +103,9 @@
       The image tests on a Bionic build host with Python 3
     parent: dib-functests-image
     nodeset: ubuntu-bionic
+    vars:
+      dib_functests_extra:
+        - fedora/build-succeeds
     voting: false
 
 - job:
@@ -241,6 +246,19 @@
         base_element: fedora-minimal
         release: '30'
 
+- job:
+    name: dib-nodepool-functional-openstack-fedora-31-src
+    description: |
+      Test building and booting a Fedora 31 image with Nodepool and OpenStack
+    parent: dib-nodepool-functional-src-base
+    vars:
+      nodepool_extra_packages:
+        - rpm
+        - yum-utils
+      nodepool_diskimage:
+        base_element: fedora-minimal
+        release: '31'
+
 - job:
     name: dib-nodepool-functional-openstack-ubuntu-xenial-src
     description: |
diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml
index d49caad06..263347366 100644
--- a/.zuul.d/project.yaml
+++ b/.zuul.d/project.yaml
@@ -12,7 +12,7 @@
         - openstack-tox-pylint
         - dib-nodepool-functional-openstack-centos-7-src
         - dib-nodepool-functional-openstack-centos-8-src
-        - dib-nodepool-functional-openstack-fedora-30-src
+        - dib-nodepool-functional-openstack-fedora-31-src
         - dib-nodepool-functional-openstack-ubuntu-xenial-src
         - dib-nodepool-functional-openstack-ubuntu-bionic
         - dib-nodepool-functional-openstack-ubuntu-bionic-src
@@ -49,7 +49,7 @@
         - openstack-tox-pylint
         - dib-nodepool-functional-openstack-centos-7-src
         - dib-nodepool-functional-openstack-centos-8-src
-        - dib-nodepool-functional-openstack-fedora-30-src
+        - dib-nodepool-functional-openstack-fedora-31-src
         - dib-nodepool-functional-openstack-ubuntu-xenial-src
         - dib-nodepool-functional-openstack-ubuntu-bionic
         - dib-nodepool-functional-openstack-ubuntu-bionic-src
diff --git a/diskimage_builder/elements/fedora-minimal/environment.d/10-fedora-distro-name.bash b/diskimage_builder/elements/fedora-minimal/environment.d/10-fedora-distro-name.bash
index 993e1f976..520fb229d 100644
--- a/diskimage_builder/elements/fedora-minimal/environment.d/10-fedora-distro-name.bash
+++ b/diskimage_builder/elements/fedora-minimal/environment.d/10-fedora-distro-name.bash
@@ -1,2 +1,2 @@
 export DISTRO_NAME=fedora
-export DIB_RELEASE=${DIB_RELEASE:-30}
+export DIB_RELEASE=${DIB_RELEASE:-31}
diff --git a/diskimage_builder/elements/fedora/environment.d/10-fedora-distro-name.bash b/diskimage_builder/elements/fedora/environment.d/10-fedora-distro-name.bash
index 1188e697d..15a8e2588 100644
--- a/diskimage_builder/elements/fedora/environment.d/10-fedora-distro-name.bash
+++ b/diskimage_builder/elements/fedora/environment.d/10-fedora-distro-name.bash
@@ -1,5 +1,5 @@
 export DISTRO_NAME=fedora
-export DIB_RELEASE=${DIB_RELEASE:-30}
+export DIB_RELEASE=${DIB_RELEASE:-31}
 
 # Note the filename URL has a "sub-release" in it
 #  http:// ... Fedora-Cloud-Base-25-1.3.x86_64.qcow2
@@ -17,6 +17,8 @@ elif [[ ${DIB_RELEASE} == '29' ]]; then
     export DIB_FEDORA_SUBRELEASE=1.2
 elif [[ ${DIB_RELEASE} == '30' ]]; then
     export DIB_FEDORA_SUBRELEASE=1.2
+elif [[ ${DIB_RELEASE} == '31' ]]; then
+    export DIB_FEDORA_SUBRELEASE=1.9
 else
     echo "Unsupported Fedora release"
     exit 1
diff --git a/diskimage_builder/elements/pip-and-virtualenv/install.d/pip-and-virtualenv-source-install/04-install-pip b/diskimage_builder/elements/pip-and-virtualenv/install.d/pip-and-virtualenv-source-install/04-install-pip
index 8c3d2a825..e7b69febd 100755
--- a/diskimage_builder/elements/pip-and-virtualenv/install.d/pip-and-virtualenv-source-install/04-install-pip
+++ b/diskimage_builder/elements/pip-and-virtualenv/install.d/pip-and-virtualenv-source-install/04-install-pip
@@ -31,7 +31,7 @@ if [[ $DISTRO_NAME =~ (opensuse|fedora|centos|centos7|rhel|rhel7) ]]; then
         fedora)
             _do_py3=1
             packages="python2-virtualenv python2-pip python2-setuptools"
-            packages+=" python3-virtualenv python3-pip python3-setuptools"
+            packages=" python3-virtualenv python3-pip python3-setuptools"
             ;;
         rhel)
             case "$DIB_RELEASE" in
diff --git a/diskimage_builder/elements/simple-init/pkg-map b/diskimage_builder/elements/simple-init/pkg-map
index 4e2bee160..e2343f4dc 100644
--- a/diskimage_builder/elements/simple-init/pkg-map
+++ b/diskimage_builder/elements/simple-init/pkg-map
@@ -25,6 +25,9 @@
       },
       "30": {
         "network-scripts": "network-scripts"
+      },
+      "31": {
+        "network-scripts": "network-scripts"
       }
     }
   },
diff --git a/doc/source/user_guide/supported_distros.rst b/doc/source/user_guide/supported_distros.rst
index 16dc6fbf9..b4d49bbf0 100644
--- a/doc/source/user_guide/supported_distros.rst
+++ b/doc/source/user_guide/supported_distros.rst
@@ -5,7 +5,7 @@ Distributions which are supported as a build host:
 
 - Centos 6, 7
 - Debian 8 ("jessie")
-- Fedora 28, 29, 30
+- Fedora 30, 31
 - RHEL 6, 7
 - Ubuntu 14.04 ("trusty")
 - Gentoo
@@ -16,7 +16,7 @@ Distributions which are supported as a target for an image:
 
 - Centos 6, 7
 - Debian 8 ("jessie")
-- Fedora 28, 29, 30
+- Fedora 30, 31
 - RHEL 6, 7
 - Ubuntu 12.04 ("precise"), 14.04 ("trusty")
 - Gentoo