diff --git a/contrib/terraform/openstack/README.md b/contrib/terraform/openstack/README.md
index 83d28a17b293ab8fe2d5fe676a7e60bec2b156a2..7e31a93d6b49c3b93927af72b11c2d42cba88c8c 100644
--- a/contrib/terraform/openstack/README.md
+++ b/contrib/terraform/openstack/README.md
@@ -16,13 +16,13 @@ most modern installs of OpenStack that support the basic services.
 - [ElastX](https://elastx.se/)
 - [EnterCloudSuite](https://www.entercloudsuite.com/)
 - [FugaCloud](https://fuga.cloud/)
+- [OVH](https://www.ovh.com/)
+- [Rackspace](https://www.rackspace.com/)
 - [Ultimum](https://ultimum.io/)
 - [VexxHost](https://vexxhost.com/)
 - [Zetta](https://www.zetta.io/)
 
 ### Known incompatible public clouds
-- OVH: No router support
-- Rackspace: No router support
 - T-Systems / Open Telekom Cloud: requires `wait_until_associated`
 
 ## Approach
diff --git a/contrib/terraform/openstack/kubespray.tf b/contrib/terraform/openstack/kubespray.tf
index 8c733e1895f5c58af7c9713addaff102856df852..f2df92a5694238ce6bd3d7ac9714cc4909c14653 100644
--- a/contrib/terraform/openstack/kubespray.tf
+++ b/contrib/terraform/openstack/kubespray.tf
@@ -6,6 +6,7 @@ module "network" {
   subnet_cidr     = "${var.subnet_cidr}"
   cluster_name    = "${var.cluster_name}"
   dns_nameservers = "${var.dns_nameservers}"
+  use_neutron     = "${var.use_neutron}"
 }
 
 module "ips" {
diff --git a/contrib/terraform/openstack/modules/compute/variables.tf b/contrib/terraform/openstack/modules/compute/variables.tf
index 6258a4fabb01b01d6f8c09bcd3b9c029cfb0476d..713e878ab6eb8e48abf6f50b7de8291f13f5f7e3 100644
--- a/contrib/terraform/openstack/modules/compute/variables.tf
+++ b/contrib/terraform/openstack/modules/compute/variables.tf
@@ -46,7 +46,9 @@ variable "network_name" {}
 
 variable "flavor_bastion" {}
 
-variable "network_id" {}
+variable "network_id" {
+  default = ""
+}
 
 variable "k8s_master_fips" {
   type = "list"
diff --git a/contrib/terraform/openstack/modules/ips/variables.tf b/contrib/terraform/openstack/modules/ips/variables.tf
index b5a32d5b22f4fa6b2ea61e63192181b624b437b9..acc3ced38e074f39f101b58955e88a225a90ef00 100644
--- a/contrib/terraform/openstack/modules/ips/variables.tf
+++ b/contrib/terraform/openstack/modules/ips/variables.tf
@@ -12,4 +12,6 @@ variable "external_net" {}
 
 variable "network_name" {}
 
-variable "router_id" {}
+variable "router_id" {
+  default = ""
+}
diff --git a/contrib/terraform/openstack/modules/network/main.tf b/contrib/terraform/openstack/modules/network/main.tf
index 7c02869d4d70f9340663ed7b335ea7ee5b357f26..9c23513395a7d4e0fbbc9968418b473f87ea72e6 100644
--- a/contrib/terraform/openstack/modules/network/main.tf
+++ b/contrib/terraform/openstack/modules/network/main.tf
@@ -1,16 +1,19 @@
 resource "openstack_networking_router_v2" "k8s" {
   name                = "${var.cluster_name}-router"
+  count               = "${var.use_neutron}"
   admin_state_up      = "true"
   external_network_id = "${var.external_net}"
 }
 
 resource "openstack_networking_network_v2" "k8s" {
   name           = "${var.network_name}"
+  count          = "${var.use_neutron}"
   admin_state_up = "true"
 }
 
 resource "openstack_networking_subnet_v2" "k8s" {
   name            = "${var.cluster_name}-internal-network"
+  count           = "${var.use_neutron}"
   network_id      = "${openstack_networking_network_v2.k8s.id}"
   cidr            = "${var.subnet_cidr}"
   ip_version      = 4
@@ -18,6 +21,7 @@ resource "openstack_networking_subnet_v2" "k8s" {
 }
 
 resource "openstack_networking_router_interface_v2" "k8s" {
+  count     = "${var.use_neutron}"
   router_id = "${openstack_networking_router_v2.k8s.id}"
   subnet_id = "${openstack_networking_subnet_v2.k8s.id}"
 }
diff --git a/contrib/terraform/openstack/modules/network/outputs.tf b/contrib/terraform/openstack/modules/network/outputs.tf
index 430cc9181a579a166081a0116fb7915073f92a9d..8da4b69399e956995928e9010e6c4d949314fb81 100644
--- a/contrib/terraform/openstack/modules/network/outputs.tf
+++ b/contrib/terraform/openstack/modules/network/outputs.tf
@@ -1,11 +1,12 @@
 output "router_id" {
-  value = "${openstack_networking_router_v2.k8s.id}"
+  value = "${element(concat(openstack_networking_router_v2.k8s.*.id, list("")), 0)}"
 }
 
 output "router_internal_port_id" {
-  value = "${openstack_networking_router_interface_v2.k8s.id}"
+  value = "${element(concat(openstack_networking_router_interface_v2.k8s.*.id, list("")), 0)}"
+
 }
 
 output "subnet_id" {
-  value = "${openstack_networking_subnet_v2.k8s.id}"
+  value = "${element(concat(openstack_networking_subnet_v2.k8s.*.id, list("")), 0)}"
 }
diff --git a/contrib/terraform/openstack/modules/network/variables.tf b/contrib/terraform/openstack/modules/network/variables.tf
index 6494358aa3f302a3a97a3dcfe7efd793b8bd3fb7..c19b7e2d70baa75255235e916a6070dd8969c68c 100644
--- a/contrib/terraform/openstack/modules/network/variables.tf
+++ b/contrib/terraform/openstack/modules/network/variables.tf
@@ -9,3 +9,5 @@ variable "dns_nameservers" {
 }
 
 variable "subnet_cidr" {}
+
+variable "use_neutron" {}
diff --git a/contrib/terraform/openstack/variables.tf b/contrib/terraform/openstack/variables.tf
index ddaf00b536388ee609a489027b119e657bdb45aa..cce00549d77e14a2fd07e7b9307e4b9a7cb7541c 100644
--- a/contrib/terraform/openstack/variables.tf
+++ b/contrib/terraform/openstack/variables.tf
@@ -103,6 +103,11 @@ variable "network_name" {
   default     = "internal"
 }
 
+variable "use_neutron" {
+  description = "Use neutron"
+  default     = 1
+}
+
 variable "subnet_cidr" {
   description = "Subnet CIDR block."
   type = "string"