updated validation
diff --git a/echo.yml b/echo.yml
new file mode 100644
index 0000000..22c63ca
--- /dev/null
+++ b/echo.yml
@@ -0,0 +1,7 @@
+---
+- hosts: planet
+  gather_facts: no
+  tasks:
+  - debug:
+      var: groups['dc-1-ms']
+
diff --git a/port-validator-opdk-external-ds.yml b/port-validator-opdk-external-ds.yml
new file mode 100644
index 0000000..569f780
--- /dev/null
+++ b/port-validator-opdk-external-ds.yml
@@ -0,0 +1,143 @@
+---
+- name: Create validation server instances for DS target
+  hosts: "{{ target_region }}-ds"
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_thrift_client_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_cql_native_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_non_ssl_gossip_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_data_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_leader_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_voter_port }}' }
+  tags:
+  - ds_read_ds
+
+- name: Read check from DS validation server instances from DS
+  hosts: "{{ target_region }}-ds"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ds"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  tags:
+  - ds_read_ds
+
+
+- name: Read check from DS validation server instances from RMP
+  hosts: rmp
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ds"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  tags:
+  - rmp_read_ds
+
+- name: Read check from DS validation server instances from QPID
+  hosts: qpid
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ds"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}"  }
+  tags:
+  - qs_read_ds
+
+
+- name: Shutdown and clean up validation server instances from DS
+  hosts: "{{ target_region }}-ds"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ds"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}"  }
+  tags:
+  - read_ds_done
+  - rmp_read_ds
+  - qs_read_ds
+
diff --git a/port-validator-opdk-external-ms.yml b/port-validator-opdk-external-ms.yml
new file mode 100644
index 0000000..1dd5cf2
--- /dev/null
+++ b/port-validator-opdk-external-ms.yml
@@ -0,0 +1,92 @@
+---
+- name: Create validation server instances for MS target
+  hosts: "{{ target_region }}-ms"
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ui_http_port }}' }
+  tags:
+  - ds_read_ms
+  - rmp_read_ms
+  - qpid_read_ms
+  - pg_read_ms
+
+- name: Read check from MS validation server instances from DS
+  hosts: ds
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - ds_read_ms
+
+- name: Read check from MS validation server instances from RMP
+  hosts: rmp
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - rmp_read_ms
+
+- name: Read check from MS validation server instances from QPID
+  hosts: qpid
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - qpid_read_ms
+
+- name: Read check from MS validation server instances from PG
+  hosts: pg
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - pg_read_ms
+
+- name: Shutdown and clean up validation server instances from MS
+  hosts: dc-2-ms
+  gather_facts: no
+  pre_tasks:
+    - name: Construct group_id for target server
+      set_fact:
+        cacheable: yes
+        group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - read_ms_done
+  - ds_read_ms
+  - rmp_read_ms
+  - qpid_read_ms
+  - pg_read_ms
diff --git a/port-validator-opdk-external-openldap.yml b/port-validator-opdk-external-openldap.yml
new file mode 100644
index 0000000..2e90b62
--- /dev/null
+++ b/port-validator-opdk-external-openldap.yml
@@ -0,0 +1,35 @@
+---
+- name: Create validation server instances for LDAP target
+  hosts: "{{ target_region }}-ldap"
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ldap_data_port }}' }
+  tags:
+  - ms_read_ldap
+
+- name: Read check on LDAP validation server instances from MS
+  hosts: "{{ target_region }}-ms"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ldap"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ldap_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - ms_read_ldap
+
+- name: Shutdown and clean up validation server instances from LDAP
+  hosts: "{{ target_region }}-ldap"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ldap"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ldap_data_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - read_ldap_done
+  - ms_read_ldap
diff --git a/port-validator-opdk-external-planet.yml b/port-validator-opdk-external-planet.yml
new file mode 100644
index 0000000..ba9810b
--- /dev/null
+++ b/port-validator-opdk-external-planet.yml
@@ -0,0 +1,204 @@
+---
+- name: Create validation server instances for MS target
+  hosts: ms
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ui_http_port }}' }
+  tags:
+  - ds_read_ms
+  - rmp_read_ms
+  - qpid_read_ms
+  - pg_read_ms
+
+- name: Read check from validation server instances from DS
+  hosts: ds
+  gather_facts: no
+  pre_tasks:
+    - name: Construct group_id for target server
+      set_fact:
+        cacheable: yes
+        group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - ds_read_ms
+
+- name: Read check from validation server instances from RMP
+  hosts: rmp
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - rmp_read_ms
+
+- name: Read check from validation server instances from QPID
+  hosts: qpid
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - qpid_read_ms
+
+- name: Read check from validation server instances from PG
+  hosts: pg
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - pg_read_ms
+
+- name: Shutdown and clean up validation server instances from MS
+  hosts: dc-2-ms
+  gather_facts: no
+  pre_tasks:
+    - name: Construct group_id for target server
+      set_fact:
+        cacheable: yes
+        group_id: "{{ target_region }}-ms"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  tags:
+  - read_ms_done
+  - ds_read_ms
+  - rmp_read_ms
+  - qpid_read_ms
+  - pg_read_ms
+
+
+
+
+
+
+
+- hosts: ds
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_thrift_client_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_cql_native_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_non_ssl_gossip_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_data_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_leader_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_voter_port }}' }
+  tags:
+  - qs_read_ds
+
+- hosts: qpid
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups['ds'][1]].local_address }}"  }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_cql_native_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_non_ssl_gossip_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
+  tags:
+  - qs_read_ds
+
+- hosts: ldap
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ldap_data_port }}' }
+  tags:
+  - ms_read_ldap
+
+- hosts: ms
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ldap_data_port }}', target_server: "{{ hostvars[groups['ldap'][0]].local_address }}" }
+  tags:
+  - ms_read_ldap
+
+- name: Configure port connectivity validation server on Postgres ports
+  hosts: pg
+  gather_facts: no
+  tags: ['pg']
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ pg_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ pg_int_mgmt_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ pg_db_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ pg_ext_mgmt_port }}' }
+
+- name: Validate port connectivity with port connectivity client on Postgres ports
+  hosts: pg
+  gather_facts: no
+  tags: ['pg']
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_jmx_port }}', target_server: "{{ hostvars[groups['pg'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_int_mgmt_port }}', target_server: "{{ hostvars[groups['pg'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_db_port }}', target_server: "{{ hostvars[groups['pg'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_ext_mgmt_port }}', target_server: "{{ hostvars[groups['pg'][0]].local_address }}" }
+
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_jmx_port }}', target_server: "{{ hostvars[groups['pg'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_int_mgmt_port }}', target_server: "{{ hostvars[groups['pg'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_db_port }}', target_server: "{{ hostvars[groups['pg'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ pg_ext_mgmt_port }}', target_server: "{{ hostvars[groups['pg'][1]].local_address }}" }
+
+- name: Configure port connectivity validation server on Postgres ports
+  hosts: qpid
+  gather_facts: no
+  tags: ['qpid']
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ qpid_jmx_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ qpid_int_mgmt_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ qpid_messaging_port }}' }
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ qpid_ext_mgmt_port }}' }
+
+
+- hosts: pg
+  gather_facts: no
+  tags: ['qpid']
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_jmx_port }}', target_server: "{{ hostvars[groups['qpid'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_int_mgmt_port }}', target_server: "{{ hostvars[groups['qpid'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_messaging_port }}', target_server: "{{ hostvars[groups['qpid'][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_ext_mgmt_port }}', target_server: "{{ hostvars[groups['qpid'][0]].local_address }}" }
+    
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_jmx_port }}', target_server: "{{ hostvars[groups['qpid'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_int_mgmt_port }}', target_server: "{{ hostvars[groups['qpid'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_messaging_port }}', target_server: "{{ hostvars[groups['qpid'][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ qpid_ext_mgmt_port }}', target_server: "{{ hostvars[groups['qpid'][1]].local_address }}" }
diff --git a/port-validator-opdk-external.yml b/port-validator-opdk-external-region.yml
similarity index 91%
rename from port-validator-opdk-external.yml
rename to port-validator-opdk-external-region.yml
index ab2cfc1..af31e4b 100644
--- a/port-validator-opdk-external.yml
+++ b/port-validator-opdk-external-region.yml
@@ -1,21 +1,47 @@
 ---
-- hosts: ms
-  roles:
-  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
-  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
-  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ui_http_port }}' }
+- name: Create validation servers on each target host for each port
+  hosts: "{{ target_region }}-ms"
+  gather_facts: no
+  tasks:
+  - name: Create instance of validation server on MS {{ inventory_hostname }} for target port
+    include_role:
+      name: apigee-opdk-validate-external-port-connectivity-server
+    vars:
+      check_port: '{{ item }}'
+    with_items:
+    - "{{ ms_ext_mgmt_port }}"
+    - "{{ ms_jmx_port }}"
+    - "{{ ui_http_port }}"
   tags:
   - ds_read_ms
 
-- hosts: ds
-  roles:
-  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
-  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
-  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
+- name: Create and invoke validation server with client on each target host for each port
+  hosts: "{{ target_region }}-ds"
+  gather_facts: no
+  tasks:
+  - name: Construct group name
+    set_fact:
+      group_id: "{{ target_region }}-ms"
+      target_server: "groups['{{ group_id }}'][0]"
+
+  - name: Invoke validation server on MS for each target port
+    include_role:
+      name: apigee-opdk-validate-external-port-connectivity-client
+    vars:
+      check_port: "{{ item }}"
+    with_items:
+    - { port: "{{ ms_ext_mgmt_port }}", target_server: "groups['{{ group_id }}'][0]" }
+    - { port: "{{ ms_jmx_port }}", target_server: "groups['{{ group_id }}'][0]" }
+    - { port: "{{ ui_http_port }}", target_server: "groups['{{ group_id }}'][0]" }
   tags:
   - ds_read_ms
+#  roles:
+#  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
+#  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
+#  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ui_http_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
 
 - hosts: ms
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
@@ -24,6 +50,7 @@
   - rmp_read_ms
 
 - hosts: rmp
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
@@ -32,6 +59,7 @@
   - rmp_read_ms
 
 - hosts: ms
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
@@ -40,6 +68,7 @@
   - qpid_read_ms
 
 - hosts: qpid
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
@@ -48,6 +77,7 @@
   - qpid_read_ms
 
 - hosts: ms
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_ext_mgmt_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ms_jmx_port }}' }
@@ -56,6 +86,7 @@
   - pg_read_ms
 
 - hosts: pg
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_ext_mgmt_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ms_jmx_port }}', target_server: "{{ hostvars[groups['ms'][0]].local_address }}" }
@@ -64,6 +95,7 @@
   - pg_read_ms
 
 - hosts: ds
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_jmx_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_thrift_client_port }}' }
@@ -72,10 +104,11 @@
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_data_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_leader_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ zk_voter_port }}' }
-  tags: 
+  tags:
   - ds_read_ds
-  
+
 - hosts: ds
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
@@ -98,11 +131,12 @@
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_data_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_leader_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ zk_voter_port }}', target_server: "{{ hostvars[groups['ds'][2]].local_address }}"  }
-  tags: 
+  tags:
   - ds_read_ds
 
 
 - hosts: ds
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_jmx_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_thrift_client_port }}' }
@@ -115,6 +149,7 @@
   - rmp_read_ds
 
 - hosts: rmp
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
@@ -143,12 +178,14 @@
   - rmp_read_ds
 
 - hosts: rmp
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ edge_proxy_port }}' }
   tags:
   - ms_read_rmp
 
 - hosts: ms
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ edge_proxy_port }}',target_server: "{{ hostvars[groups['rmp'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ edge_proxy_port }}',target_server: "{{ hostvars[groups['rmp'][1]].local_address }}" }
@@ -161,6 +198,7 @@
 
 
 - hosts: ds
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_jmx_port }}' }
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ cassandra_thrift_client_port }}' }
@@ -173,6 +211,7 @@
   - qs_read_ds
 
 - hosts: qpid
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_jmx_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}" }
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ cassandra_thrift_client_port }}', target_server: "{{ hostvars[groups['ds'][0]].local_address }}"  }
@@ -201,12 +240,14 @@
   - qs_read_ds
 
 - hosts: ldap
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ ldap_data_port }}' }
   tags:
   - ms_read_ldap
 
 - hosts: ms
+  gather_facts: no
   roles:
   - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ ldap_data_port }}', target_server: "{{ hostvars[groups['ldap'][0]].local_address }}" }
   tags:
diff --git a/port-validator-opdk-external-rmp.yml b/port-validator-opdk-external-rmp.yml
new file mode 100644
index 0000000..a236240
--- /dev/null
+++ b/port-validator-opdk-external-rmp.yml
@@ -0,0 +1,59 @@
+---
+- name: Create validation server instances for RMP target
+  hosts: "{{ target_region }}-rmp"
+  gather_facts: no
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-server, check_port: '{{ edge_proxy_port }}' }
+  tags:
+  - ms_read_rmp
+
+- name: Read check from RMP validation server instances from RMP
+  hosts: "{{ target_region }}-rmp"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-rmp"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][3]].local_address }}" }
+  tags:
+  - ms_read_rmp
+
+- name: Read check from RMP validation server instances from RMP
+  hosts: "{{ target_region }}-ms"
+  gather_facts: no
+  pre_tasks:
+  - name: Construct group_id for target server
+    set_fact:
+      cacheable: yes
+      group_id: "{{ target_region }}-rmp"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][3]].local_address }}" }
+  tags:
+  - ms_read_rmp
+
+
+- name: Shutdown and clean up validation server instances from RMP
+  hosts: "{{ target_region }}-rmp"
+  gather_facts: no
+  pre_tasks:
+    - name: Construct group_id for target server
+      set_fact:
+        cacheable: yes
+        group_id: "{{ target_region }}-rmp"
+  roles:
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][0]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][1]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][2]].local_address }}" }
+  - { role: apigee-opdk-validate-external-port-connectivity-client-done, check_port: '{{ edge_proxy_port }}', target_server: "{{ hostvars[groups[group_id][3]].local_address }}" }
+  tags:
+  - read_rmp_done
+  - ms_read_rmp
+
diff --git a/port-validator-requirements.yml b/port-validator-requirements.yml
index 4eb543a..3282b25 100644
--- a/port-validator-requirements.yml
+++ b/port-validator-requirements.yml
@@ -4,3 +4,5 @@
 - src: https://github.com/carlosfrias/apigee-opdk-validate-external-port-connectivity-server
 
 - src: https://github.com/carlosfrias/apigee-opdk-validate-external-port-connectivity-client
+
+- src: https://github.com/carlosfrias/apigee-opdk-validate-external-port-connectivity-client-done
diff --git a/validate-ports.yml b/validate-ports.yml
index 1c4a74a..34690fb 100644
--- a/validate-ports.yml
+++ b/validate-ports.yml
@@ -1,6 +1,26 @@
 ---
-- include: update_cache.yml
+- import_playbook: update_cache.yml
   tags: ['cache']
 
-- include: port-validator-opdk-external.yml
-  tags: ['validate']
+#- include: port-validator-opdk-external-planet.yml
+#  tags: ['validate']
+
+- import_playbook: port-validator-opdk-external-ms.yml
+  tags: ['readable-ms']
+
+- import_playbook: port-validator-opdk-external-ds.yml
+  tags: ['readable-ds']
+
+- import_playbook: port-validator-opdk-external-rmp.yml
+  tags: ['readable-rmp']
+
+- import_playbook: port-validator-opdk-external-openldap.yml
+  tags: ['readable-ldap']
+
+#- import_playbook: port-validator-opdk-external-qpid.yml
+#  tags: ['readable-qpid']
+#
+#- import_playbook: port-validator-opdk-external-pg.yml
+#  tags: ['readable-pg']
+
+
diff --git a/validation-server-ms.yml b/validation-server-ms.yml
new file mode 100644
index 0000000..6eb5b56
--- /dev/null
+++ b/validation-server-ms.yml
@@ -0,0 +1,17 @@
+---
+# TODO: Not getting used, consider deleting shortly
+- name: Create validation servers on each target host for each port
+  hosts: "{{ target_region }}-ms"
+  gather_facts: no
+  tasks:
+  - name: Check connectivity from DS {{ inventory_hostname }} to MS port:{{ item }}
+    include_role:
+      name: apigee-opdk-validate-external-port-connectivity-server
+    vars:
+      check_port: '{{ item }}'
+    with_items:
+    - "{{ ms_ext_mgmt_port }}"
+    - "{{ ms_jmx_port }}"
+    - "{{ ui_http_port }}"
+  tags:
+  - ds_read_ms