# Must resolve to IP address or DNS name of host - not to 127.0.0.1 or localhost.
HOSTIP={{ hostvars[inventory_hostname]['private_address'] }}

# Define the API BaaS administrator account.
# User name - default is "superuser".
AS_ADMIN={{ baas_superuser_name }}
AS_ADMIN_EMAIL={{ baas_superuser_email }}
AS_PASSWD={{ baas_superuser_pass }}

# Specify Cassandra configuration information.
CASS_HOSTS="{{ cassandra_hosts }}"

# Cassandra uname/pword if you enabled Cassandra authentication.
# Even if you have not enabled Cassandra authentication,
# you must pass values for these properties.
CASS_USERNAME={{ opdk_cass_username }}
# Default value
CASS_PASSWORD={{ opdk_cass_password }}

# Specify BaaS Cassandra connection information.
# Specify the data center name.
# Default is dc-1.
{% if groups['dc-1'] is defined and inventory_hostname in groups['dc-1'] %}
BAAS_CASS_LOCALDC=dc-1
BAAS_CASS_DC_LIST=dc-1
REGION=dc-1

# Replication is in the form "dataCenterName:#CassandraNodes".
# For example, for dc-1 with three Cassandra nodes, it is dc-1:3.
BAAS_CASS_REPLICATION=dc-1:{{ groups['dc-1-cassandra'] | length }}
{% if opdk_version == '4.17.01' %}
BAAS_CLUSTER_SEEDS="{% for host in groups['dc-1-baas'] %}dc-1:{{ hostvars[host]['private_address'] }}{% if not loop.last %},{% endif %}{% endfor %}"
{% endif %}
{% elif groups['dc-2'] is defined and inventory_hostname in groups['dc-2'] %}
BAAS_CASS_LOCALDC=dc-2
BAAS_CASS_DC_LIST=dc-1,dc-2
REGION=dc-2

# Replication is in the form "dataCenterName:#CassandraNodes".
# For example, for dc-1 with three Cassandra nodes, it is dc-1:3.
BAAS_CASS_REPLICATION= dc-1:{{ groups['dc-1-cassandra'] | length }},dc-2:{{ groups['dc-2-cassandra'] | length }}
{% if opdk_version == '4.17.01' %}
BAAS_CLUSTER_SEEDS="{% for host in groups['dc-1-baas'] %}dc-1:{{ hostvars[host]['private_address']}},{% endfor %}{% for host in groups['dc-2-baas'] %}dc-2:{{ hostvars[host]['private_address'] }}{% if not loop.last %},{% endif %}{% endfor %}"
{% endif %}
{% endif %}

# ElasticSearch IPs or DNS names, separated by spaces.
{% if groups['dc-1-elastic'] is defined and inventory_hostname in groups['dc-1'] %}
ES_HOSTS="{% for host in groups['dc-1-elastic'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% elif groups['dc-2-elastic'] is defined and inventory_hostname in groups['dc-2'] %}
ES_HOSTS="{% for host in groups['dc-2-elastic'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% else %}
ES_HOSTS="{% for host in groups['elastic'] %}{{ hostvars[host]['private_address'] }}{% if not loop.last %} {% endif %}{% endfor %}"
{% endif %}

# API BaaS Stack information.
# Default cluster name is "apigee_baas"
BAAS_USERGRID_CLUSTERNAME="{{ baas_cluster_name }}"

# URL and port of the load balancer for the API BaaS Stack nodes, # or IP/DNS and port of a single Stack node with no load balancer.
{% if baas_load_balancer_host is defined and baas_load_balancer_host and baas_load_balancer_port is defined and baas_load_balancer_port %}
BAAS_USERGRID_URL="http://{{ baas_load_balancer_host }}:{{ baas_load_balancer_port }}"
{% elif groups['portal'][0] is defined and groups['baas'][0] and baas_portal_port is defined and baas_portal_port %}
BAAS_USERGRID_URL="http://{{ groups['baas'][0] }}:{{ baas_load_balancer_port }}"
{% endif %}

# API BaaS Portal information.
# URL and port number of load balancer, if there is one in front of the Portal, # or the URL and port of the Portal node.
{% if groups['dc-1-portal'] is defined and inventory_hostname in groups['dc-1'] %}
BAAS_PORTAL_URL="http://{{ hostvars[groups['dc-1-portal'][0]]['public_address'] }}:{{baas_portal_port }}"
{% elif groups['dc-2-portal'] is defined and inventory_hostname in groups['dc-2'] %}
BAAS_PORTAL_URL="http://{{ hostvars[groups['dc-2-portal'][0]]['public_address'] }}:{{ baas_portal_port }}"
{% else %}
BAAS_PORTAL_URL="http://{{ hostvars[groups['portal'][0]]['public_address'] }}:{{ baas_portal_port }}"
{% endif %}

# Portal port. Default value is 9000.
BAAS_PORTAL_LISTEN_PORT={{ baas_portal_port }}

# SMTP information. BaaS requires an SMTP server.
SMTPHOST={{ baas_smtp_host }}
SMTPPORT={{ baas_smtp_port }}
SMTPUSER='{{ baas_smtp_user }}'
SMTPPASSWORD='{{ baas_smtp_user_pass }}'
SMTPSSL={{ baas_smtp_ssl }}

# File path to the Apigee license file
LICENSE_FILE={{ opdk_license_target_file_path }}
