diff --git a/doc/source/cloud-roles.rst b/doc/source/cloud-roles.rst
new file mode 100644
index 000000000..da76e7554
--- /dev/null
+++ b/doc/source/cloud-roles.rst
@@ -0,0 +1,4 @@
+Cloud Computing Roles
+=====================
+
+.. zuul:autorole:: install-devstack
diff --git a/doc/source/roles.rst b/doc/source/roles.rst
index debc6534d..89be8f5b6 100644
--- a/doc/source/roles.rst
+++ b/doc/source/roles.rst
@@ -8,6 +8,7 @@ Roles
    log-roles
    afs-roles
    container-roles
+   cloud-roles
    deprecated-roles
    galaxy-roles
    js-roles
diff --git a/roles/install-devstack/README.rst b/roles/install-devstack/README.rst
new file mode 100644
index 000000000..98a68b5be
--- /dev/null
+++ b/roles/install-devstack/README.rst
@@ -0,0 +1,12 @@
+Install OpenStack using devstack.
+
+There are currently no configuration options available.  This role
+uses the devstack default settings, except that it does not install
+horizon, tempest, cinder, or swift, and it supplies a restricted
+network configuration designed to work in the maximum number of
+environments.
+
+.. warning:: Do not use this role for testing changes to OpenStack or
+             OpenStack related projects.  Use the ``devstack`` job
+             defined in the https://opendev.org/openstack/devstack
+             project instead.
diff --git a/roles/install-devstack/tasks/main.yaml b/roles/install-devstack/tasks/main.yaml
new file mode 100644
index 000000000..46a38102e
--- /dev/null
+++ b/roles/install-devstack/tasks/main.yaml
@@ -0,0 +1,20 @@
+- name: Set ownership of /opt
+  become: true
+  file:
+    path: /opt
+    state: directory
+    owner: "{{ ansible_user }}"
+    group: "{{ ansible_user }}"
+- name: Clone devstack
+  git:
+    repo: https://opendev.org/openstack/devstack
+    dest: /opt/devstack
+    version: master
+- name: Write local.conf
+  template:
+    dest: /opt/devstack/local.conf
+    src: local.conf.j2
+- name: Run devstack
+  command: ./stack.sh
+  args:
+    chdir: /opt/devstack
diff --git a/roles/install-devstack/templates/local.conf.j2 b/roles/install-devstack/templates/local.conf.j2
new file mode 100644
index 000000000..c2ac2c3b3
--- /dev/null
+++ b/roles/install-devstack/templates/local.conf.j2
@@ -0,0 +1,15 @@
+[[local|localrc]]
+disable_service horizon
+disable_service tempest
+disable_service cinder
+disable_service swift
+ADMIN_PASSWORD=secret
+DATABASE_PASSWORD=$ADMIN_PASSWORD
+RABBIT_PASSWORD=$ADMIN_PASSWORD
+SERVICE_PASSWORD=$ADMIN_PASSWORD
+NETWORK_GATEWAY=10.1.0.1
+FIXED_RANGE=10.1.0.0/20
+IPV4_ADDRS_SAFE_TO_USE=10.1.0.0/20
+FLOATING_RANGE=172.24.5.0/24
+PUBLIC_NETWORK_GATEWAY=172.24.5.1
+LIBVIRT_TYPE=qemu