diff --git a/library/cassandra_hosts.py b/library/cassandra_hosts.py
new file mode 100644
index 0000000..db2c2b0
--- /dev/null
+++ b/library/cassandra_hosts.py
@@ -0,0 +1,156 @@
+from ansible.module_utils.basic import *
+import ast
+import json
+import tempfile
+import os
+
+GROUPS = 'groups'
+PUBLIC_ADDRESS = 'public_address'
+RACK = "rack"
+LOCAL_ADDRESS = 'local_address'
+NOT_DEFINED = 'NOT DEFINED'
+LEAD_GROUP = 'lead_group'
+
+
+def build_cass_hosts_config(inventory_hostname, hostvars):
+    cassandra_groups = extract_cassandra_groups(hostvars[inventory_hostname], hostvars)
+    configured_cassandra_racks = configure_cassandra_racks(cassandra_groups)
+    cassandra_lead_found = determine_lead_group(configured_cassandra_racks,
+                                                inventory_hostname,
+                                                hostvars[inventory_hostname][GROUPS])
+    prioritized_groups = prioritize_cassandra_groups(cassandra_lead_found)
+    return ' '.join(prioritized_groups)
+
+
+def extract_cassandra_groups(inventory_vars, hostvars):
+    cassandra_groups = {}
+    for name in inventory_vars[GROUPS]:
+        if 'dc-' in name and '-ds' in name:
+            cassandra_groups[name] = list(inventory_vars[GROUPS][name])
+
+    cassandra_ip_mappings= { 'lead_group': '' }
+    for cassandra_group_name in cassandra_groups:
+        cassandra_ip_mappings[cassandra_group_name] = {}
+        for ds_ip in cassandra_groups[cassandra_group_name]:
+            if ds_ip in hostvars:
+                hostvar = hostvars[ds_ip]
+                if LOCAL_ADDRESS in hostvar:
+                    private_ip = hostvar[LOCAL_ADDRESS]
+                else:
+                    private_ip = NOT_DEFINED
+            cassandra_ip_map = cassandra_ip_mappings[cassandra_group_name]
+            cassandra_ip_map[ds_ip] = { 'private_ip': private_ip }
+    return cassandra_ip_mappings
+
+
+def configure_cassandra_racks(cassandra_groups):
+    for cassandra_group_name in cassandra_groups:
+        group_name_parts = cassandra_group_name.split('-')
+        for ds_ip in cassandra_groups[cassandra_group_name]:
+            cassandra_groups[cassandra_group_name][ds_ip]['private_ip'] = cassandra_groups[cassandra_group_name][ds_ip]['private_ip'] + ":" + group_name_parts[1] + ',1'
+    return cassandra_groups
+
+
+def determine_lead_group(cassandra_groups, inventory_hostname, groups):
+    for group_name in groups:
+        if 'dc-' in group_name:
+            if inventory_hostname in groups[group_name]:
+                group_name_split = group_name.split('-')
+                cassandra_groups['lead_group'] = group_name_split[0] + '-' + group_name_split[1]
+                break
+    return cassandra_groups
+
+
+def prioritize_cassandra_groups(cassandra_groups):
+    prioritized_groups = []
+    ds_lead_group = cassandra_groups['lead_group'] + '-ds'
+    del cassandra_groups['lead_group']
+
+    for ds_ip in cassandra_groups[ds_lead_group]:
+            prioritized_groups.append(cassandra_groups[ds_lead_group][ds_ip]['private_ip'])
+    del cassandra_groups[ds_lead_group]
+
+    for cassandra_group_name in cassandra_groups:
+        for ds_ip in cassandra_groups[cassandra_group_name]:
+            prioritized_groups.append(cassandra_groups[cassandra_group_name][ds_ip]['private_ip'])
+
+    return prioritized_groups
+
+
+def main():
+    module = AnsibleModule(
+            argument_spec=dict(
+                    inventory_hostname=dict(required=True, type='str'),
+                    hostvars=dict(required=True, type="str")
+            )
+    )
+
+    inventory_hostname = module.params['inventory_hostname']
+    hostvars = module.params['hostvars']
+    json_file = '/tmp/hostvars_params.json'
+    # json_file = tempfile.mkstemp(suffix='json', text=True)
+    with open(json_file, 'w') as hostvars_file:
+        hostvars_file.write(hostvars)
+
+    # hostvars = hostvars.decode('base64')
+    try:
+        hostvars = ast.literal_eval(hostvars)
+    except SyntaxError as e:
+        hostvars = hostvars.replace('{u', '{')
+        hostvars = hostvars.replace(", u'", ", '")
+        hostvars = hostvars.replace(": u'", ": '")
+        hostvars = hostvars.replace("[u'", "['")
+        hostvars = hostvars.replace("'", "\"")
+        with open(json_file, 'w') as file:
+            file.write(hostvars)
+
+        try:
+            hostvars = ast.literal_eval(hostvars)
+        except SyntaxError as e:
+            msg = "ast.literal_eval conversion failed on line {0} with {1}".format(e.lineno, e.msg)
+            msg += "This occurred due to an operating system setting. There is a way around."
+            msg += "This means that you will need re-run with --tags=apigee-silent-config to generate the silent-install.conf file."
+            msg += "Then complete the installation with --skip-tags=os-pre-req,apigee-pre-req."
+            module.fail_json(
+                changed=False,
+                msg=msg,
+            )
+            return
+
+    hostvars = json.dumps(hostvars)
+    with open(json_file, 'w') as hostvars_file:
+        hostvars_file.write(hostvars)
+
+    try:
+        hostvars = json.loads(hostvars)
+    except SyntaxError as e:
+        msg = "json.loads conversion failed: {0} {1}".format(e.lineno, e.msg)
+        module.fail_json(
+            changed=False,
+            msg=msg,
+        )
+        return
+
+
+    try:
+        cass_hosts = build_cass_hosts_config(inventory_hostname, hostvars)
+    except SyntaxError as e:
+        msg = "build_cass_hosts_config failed on line {0} with {1}".format(e.lineno, e.msg)
+        module.fail_json(
+            changed=False,
+            msg=msg,
+        )
+        return
+
+    cass_hosts = json.dumps(cass_hosts)
+    cass_hosts = json.loads(cass_hosts)
+
+    module.exit_json(
+            changed=True,
+            ansible_facts=dict(
+                    cassandra_hosts=cass_hosts
+            )
+    )
+
+if __name__ == '__main__':
+    main()
diff --git a/tasks/cassandra.yml b/tasks/cassandra.yml
new file mode 100644
index 0000000..dfcf458
--- /dev/null
+++ b/tasks/cassandra.yml
@@ -0,0 +1,36 @@
+---
+- name: Fail if cassandra user name is not provided
+  fail:
+    msg: 'cassandra user name is required, please provide cassandra user name'
+  when: opdk_cass_username is not defined or opdk_cass_username == ""
+
+- name: Fail if cassandra user password is not provided
+  fail:
+    msg: 'cassandra user password is required, please provide cassandra user password'
+  when: opdk_cass_password is not defined or opdk_cass_password == ""
+
+- name: Fail if ds group is not provided
+  fail:
+    msg: 'ds group is not defined in the inventory file, please define the ds group in the inventory file'
+  when: groups['ds'] is not defined
+
+- name: Fail if dc-1 group is not provided
+  fail:
+    msg: 'dc-1 group is not defined in the inventory file, please define the dc-1 group in the inventory file'
+  when: groups['dc-1'] is not defined
+
+- name: Fail if dc-1-ds group is not provided
+  fail:
+    msg: 'dc-1-ds group is not defined in the inventory file, please define the dc-1-ds group in the inventory file'
+  when: groups['dc-1-ds'] is not defined
+
+- name: Fail if dc-1-ms group is not provided
+  fail:
+    msg: 'dc-1-ms group is not defined in the inventory file, please define the dc-1-ms group in the inventory file'
+  when: groups['dc-1-ms'] is not defined
+
+- name: Construct cassandra hosts configuration
+  cassandra_hosts:
+    inventory_hostname: '{{ inventory_hostname }}'
+    hostvars: '{{ hostvars }}'
+  when: provided_response_file is not defined or not provided_response_file
diff --git a/tasks/main.yml b/tasks/main.yml
index e6fe24e..cb66689 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -1,5 +1,6 @@
 ---
 # tasks file for apigee-opdk-baas-silent-installation-config
+- include: cassandra.yml
 
 - name: Construct the silent-install file
   template:
diff --git a/templates/baas-silent-install.conf.j2 b/templates/baas-silent-install.conf.j2
index 105e1e0..1ad46e4 100644
--- a/templates/baas-silent-install.conf.j2
+++ b/templates/baas-silent-install.conf.j2
@@ -8,7 +8,15 @@
 AS_ADMIN_EMAIL={{ baas_superuser_email }}
 AS_PASSWD={{ baas_superuser_pass }}
 
+{# TODO: Build a module that discover the region of the inventory_hostname and update the REGION #}
+{% if groups['dc-1'] is defined and inventory_hostname in groups['dc-1'] %}
+REGION=dc-1
+{% elif groups['dc-2'] is defined and inventory_hostname in groups['dc-2'] %}
+REGION=dc-2
+{% endif %}
+
 # Specify Cassandra configuration information.
+{% --
 {% if groups['dc-1-cassandra'] is defined and inventory_hostname in groups['dc-1'] and groups['dc-1-cassandra'] | length > 0 %}
 CASS_HOSTS="{% for host in groups['dc-1-cassandra'] %}{{ hostvars[host][interface_name].ipv4.address }}:1,1{% if not loop.last %} {% endif %}{% endfor %}"
 {% elif groups['dc-2-cassandra'] is defined and inventory_hostname in groups['dc-2'] and groups['dc-2-cassandra'] | length > 0 %}
@@ -16,6 +24,8 @@
 {% else %}
 CASS_HOSTS="{% for host in groups['cassandra'] %}{{ hostvars[host][interface_name].ipv4.address }}{%  if hostvars[host].rack is defined and hostvars[host].rack %}{{ hostvars[host].rack }}{% endif %}{% if not loop.last %} {% endif %}{% endfor %}"
 {% endif %}
+--%}
+CASS_HOSTS="{{ cassandra_hosts }}"
 
 # Cassandra uname/pword if you enabled Cassandra authentication.
 # Even if you have not enabled Cassandra authentication,
