diff --git a/openstack/tests/ansible/roles/port/defaults/main.yml b/openstack/tests/ansible/roles/port/defaults/main.yml
index a81f6a2ea..212afe346 100644
--- a/openstack/tests/ansible/roles/port/defaults/main.yml
+++ b/openstack/tests/ansible/roles/port/defaults/main.yml
@@ -1,4 +1,5 @@
 network_name: ansible_port_network
+network_external: true
 subnet_name: ansible_port_subnet
 port_name: ansible_port
 secgroup_name: ansible_port_secgroup
diff --git a/openstack/tests/ansible/roles/port/tasks/main.yml b/openstack/tests/ansible/roles/port/tasks/main.yml
index 05ce1e20f..5011d97ba 100644
--- a/openstack/tests/ansible/roles/port/tasks/main.yml
+++ b/openstack/tests/ansible/roles/port/tasks/main.yml
@@ -4,7 +4,7 @@
      cloud: "{{ cloud }}"
      state: present
      name: "{{ network_name }}"
-     external: True
+     external: "{{ network_external }}"
 
 - name: Create subnet
   os_subnet:
diff --git a/openstack/tests/ansible/roles/router/defaults/main.yml b/openstack/tests/ansible/roles/router/defaults/main.yml
index df5cbeb55..f7d53933a 100644
--- a/openstack/tests/ansible/roles/router/defaults/main.yml
+++ b/openstack/tests/ansible/roles/router/defaults/main.yml
@@ -1,2 +1,3 @@
 external_network_name: ansible_external_net
+network_external: true
 router_name: ansible_router
diff --git a/openstack/tests/ansible/roles/router/tasks/main.yml b/openstack/tests/ansible/roles/router/tasks/main.yml
index 9987f4c9b..083d4f066 100644
--- a/openstack/tests/ansible/roles/router/tasks/main.yml
+++ b/openstack/tests/ansible/roles/router/tasks/main.yml
@@ -1,11 +1,5 @@
 ---
-- name: Create external network
-  os_network:
-     cloud: "{{ cloud }}"
-     state: present
-     name: "{{ external_network_name }}"
-     external: true
-
+# Regular user operation
 - name: Create internal network
   os_network:
      cloud: "{{ cloud }}"
@@ -14,19 +8,11 @@
      external: false
 
 - name: Create subnet1
-  os_subnet:
-     cloud: "{{ cloud }}"
-     state: present
-     network_name: "{{ external_network_name }}"
-     name: shade_subnet1
-     cidr: 10.6.6.0/24
-
-- name: Create subnet2
   os_subnet:
      cloud: "{{ cloud }}"
      state: present
      network_name: "{{ network_name }}"
-     name: shade_subnet2
+     name: shade_subnet1
      cidr: 10.7.7.0/24
 
 - name: Create router
@@ -34,16 +20,45 @@
      cloud: "{{ cloud }}"
      state: present
      name: "{{ router_name }}"
-     network: "{{ external_network_name }}"
 
-- name: Update router
+- name: Update router (add interface)
+  os_router:
+     cloud: "{{ cloud }}"
+     state: present
+     name: "{{ router_name }}"
+     interfaces:
+         - shade_subnet1
+
+# Admin operation
+- name: Create external network
+  os_network:
+     cloud: "{{ cloud }}"
+     state: present
+     name: "{{ external_network_name }}"
+     external: "{{ network_external }}"
+  when:
+    - network_external
+
+- name: Create subnet2
+  os_subnet:
+     cloud: "{{ cloud }}"
+     state: present
+     network_name: "{{ external_network_name }}"
+     name: shade_subnet2
+     cidr: 10.6.6.0/24
+  when:
+    - network_external
+
+- name: Update router (add external gateway)
   os_router:
      cloud: "{{ cloud }}"
      state: present
      name: "{{ router_name }}"
      network: "{{ external_network_name }}"
      interfaces:
-         - shade_subnet2
+         - shade_subnet1
+  when:
+    - network_external
 
 - name: Delete router
   os_router:
@@ -62,6 +77,8 @@
      cloud: "{{ cloud }}"
      state: absent
      name: shade_subnet2
+  when:
+    - network_external
 
 - name: Delete internal network
   os_network:
@@ -74,3 +91,5 @@
      cloud: "{{ cloud }}"
      state: absent
      name: "{{ external_network_name }}"
+  when:
+    - network_external
diff --git a/openstack/tests/ansible/roles/server/defaults/main.yaml b/openstack/tests/ansible/roles/server/defaults/main.yaml
index 3db7edf8a..7d7ec01dc 100644
--- a/openstack/tests/ansible/roles/server/defaults/main.yaml
+++ b/openstack/tests/ansible/roles/server/defaults/main.yaml
@@ -1,3 +1,4 @@
 server_network: private
 server_name: ansible_server
 flavor: m1.tiny
+floating_ip_pool_name: public
diff --git a/openstack/tests/ansible/roles/server/tasks/main.yml b/openstack/tests/ansible/roles/server/tasks/main.yml
index f25bc2ef6..f2ff6f639 100644
--- a/openstack/tests/ansible/roles/server/tasks/main.yml
+++ b/openstack/tests/ansible/roles/server/tasks/main.yml
@@ -54,7 +54,7 @@
      flavor: "{{ flavor }}"
      network: "{{ server_network }}"
      floating_ip_pools:
-       - public
+       - "{{ floating_ip_pool_name }}"
      wait: true
   register: server
 
diff --git a/openstack/tests/ansible/roles/subnet/defaults/main.yml b/openstack/tests/ansible/roles/subnet/defaults/main.yml
index b9df9212a..5ccc85abc 100644
--- a/openstack/tests/ansible/roles/subnet/defaults/main.yml
+++ b/openstack/tests/ansible/roles/subnet/defaults/main.yml
@@ -1 +1,2 @@
 subnet_name: shade_subnet
+enable_subnet_dhcp: false
diff --git a/openstack/tests/ansible/roles/subnet/tasks/main.yml b/openstack/tests/ansible/roles/subnet/tasks/main.yml
index 8d70cd2b5..a7ca490ad 100644
--- a/openstack/tests/ansible/roles/subnet/tasks/main.yml
+++ b/openstack/tests/ansible/roles/subnet/tasks/main.yml
@@ -11,7 +11,7 @@
     network_name: "{{ network_name }}"
     name: "{{ subnet_name }}"
     state: present
-    enable_dhcp: false
+    enable_dhcp: "{{ enable_subnet_dhcp }}"
     dns_nameservers:
       - 8.8.8.7
       - 8.8.8.8
diff --git a/tox.ini b/tox.ini
index 3f1666631..b70fd9563 100644
--- a/tox.ini
+++ b/tox.ini
@@ -75,7 +75,7 @@ commands =
 [testenv:ansible]
 # Need to pass some env vars for the Ansible playbooks
 basepython = {env:OPENSTACKSDK_TOX_PYTHON:python2}
-passenv = HOME USER
+passenv = HOME USER ANSIBLE_VAR_*
 deps =
     {[testenv]deps}
     ansible