HOSTIP="$(hostname -i)"
MSIP={{ local_mgmt_ip }}
ADMIN_EMAIL={{ opdk_user_email }}
APIGEE_ADMINPW={{ opdk_user_pass }}
LICENSE_FILE={{ opdk_license_target_file_path }}
USE_LDAP_REMOTE_HOST={{ opdk_ldap_remote_host }}

LDAP_TYPE='{{ opdk_ldap_type }}'
{% if opdk_ldap_type == '2' %}
{% if groups['dc-1-ldap'] is defined and groups['dc-2-ldap'] is defined and inventory_hostname in groups['dc-1-edge'] %}
LDAP_SID=1
LDAP_PEER={{ hostvars[groups['dc-2-ldap'][0]]['private_address']  }}
{% endif %}
{% if groups['dc-1-ldap'] is defined and groups['dc-2-ldap'] is defined and inventory_hostname in groups['dc-2-edge'] %}
LDAP_SID=2
LDAP_PEER={{ hostvars[groups['dc-1-ldap'][0]]['private_address']  }}
{% endif %}
{% endif %}
APIGEE_LDAPPW={{ opdk_ldap_pass }}

ENABLE_AX={{ opdk_enable_ax }}
MP_POD={{ opdk_mp_pod | default(default_mp_pod) }}

REGION={{ region }}

USE_ZK_CLUSTER={{ opdk_use_zk_cluster }}
{# TODO: Build a module to construct the ZK_HOSTS value#}
ZK_HOSTS="{% for host in groups['ds'] %}{{ hostvars[host]['private_address'] }}{% if hostvars[host]['zk_observer'] is defined and hostvars[host]['zk_observer'] == 'true' %}:observer{% endif %}{% if not loop.last %} {% endif %}{% endfor %}"

{# TODO: Build a module to construct the ZK_CLIENT_HOSTS value#}
{% if groups['dc-1-edge'] is defined and inventory_hostname in groups['dc-1-edge'] %}
ZK_CLIENT_HOSTS="{% for host in groups['dc-1-ds'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% elif groups['dc-2-edge'] is defined and inventory_hostname in groups['dc-2-edge']%}
ZK_CLIENT_HOSTS="{% for host in groups['dc-2-ds'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% else %}
ZK_CLIENT_HOSTS="{% for host in groups['ds'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% endif %}

USE_CASS_CLUSTER={{ opdk_use_cass_cluster }}
CASS_HOSTS="{{ cassandra_hosts }}"
CASS_USERNAME={{ opdk_cass_username }}
CASS_PASSWORD={{ opdk_cass_password }}
CASS_AUTH={{ opdk_cass_auth }}

SMTPMAILFROM="{{ opdk_smtp_mail_from }} <{{  opdk_user_email }}>"

SKIP_SMTP={{ opdk_smtp_skip }}
{% if opdk_smtp_skip | trim == 'n' %}
SMTPHOST={{ opdk_smtp_host }}
SMTPPORT={{ opdk_smtp_port }}
SMTPUSER={{ opdk_smtp_user }}
SMTPPASSWORD={{ opdk_smtp_password }}
SMTPSSL={{ opdk_smtp_ssl }}
{% endif %}
BIND_ON_ALL_INTERFACES={{ opdk_bind_on_all_interfaces }}

{% if pgmaster_ip is defined and pgmaster_ip | trim | length > 0 and pgstandby_ip is defined and pgstandby_ip | trim | length > 0 %}
PG_MASTER={{ pgmaster_ip }}
PG_STANDBY={{ pgstandby_ip }}
{% endif %}
PG_PWD={{ pg_pass }}

{% if opdk_monetization is defined and opdk_monetization %}
# Monetization has been configured
PG_USER={{ pg_user }}
MO_PG_HOST={{ pgmaster_ip }}
MO_PG_USER={{ pg_user }}
MO_PG_PASSWD={{ pg_pass }}
CASS_CLUSTERNAME={{ opdk_cass_clustername }}
APIGEE_PORT_HTTP_MS={{ ms_ext_mgmt_port }}
{% if groups['dc-1-qpid'] is defined and inventory_hostname in groups['dc-1-qpid'] %}
QPID_HOST="{{  groups['dc-1-qpid'] | join(' ') }}"
{% else %}
QPID_HOST="{{  groups['dc-2-qpid'] | join(' ') }}"
{% endif %}
QPID_PORT={{ qpid_ext_mgmt_port }}
MX_GROUP=mxgroup
ORG_NAME={{ org_name }}
{% endif %}

ENABLE_SYSTEM_CHECK={{ enable_system_check }}

