
# Must resolve to IP address or DNS name of host - not to 127.0.0.1 or localhost.
HOSTIP={{ hostvars[public_address][interface_name].ipv4.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.
{% 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 %}
CASS_HOSTS="{% for host in groups['dc-2-cassandra'] %}{{ hostvars[host][interface_name].ipv4.address }}:2,1{% if not loop.last %} {% endif %}{% endfor %}"
{% 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 %}

# 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"
{% if opdk_version == '4.17.01' %}
BAAS_CLUSTER_SEEDS="{% for host in groups['dc-1-baas'] %}dc-1:{{ hostvars[host][interface_name].ipv4.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-2"
{% if opdk_version == '4.17.01' %}
BAAS_CLUSTER_SEEDS="{% for host in groups['dc-2-baas'] %}dc-2:{{ hostvars[host][interface_name].ipv4.address }}{% if not loop.last %},{% endif %}{% endfor %}"
{% endif %}
{% endif %}



# Replication is in the form "dataCenterName:#CassandraNodes".
# For example, for dc-1 with three Cassandra nodes, it is dc-1:3.
{% if groups['dc-1-cassandra'] is defined and inventory_hostname in groups['dc-1'] %}
BAAS_CASS_REPLICATION=dc-1:{{ groups['dc-1-cassandra'] | length }}
{% elif groups['dc-2-cassandra'] is defined and inventory_hostname in groups['dc-2'] %}
BAAS_CASS_REPLICATION=dc-2:{{ groups['dc-2-cassandra'] | length }}
{% else %}
BAAS_CASS_REPLICATION=dc-1:{{ groups['cassandra'] | length }}
{% 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][interface_name].ipv4.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][interface_name].ipv4.address }}{% if not loop.last %} {% endif %}{% endfor %}"
{% else %}
ES_HOSTS="{% for host in groups['elastic'] %}{{ hostvars[host][interface_name].ipv4.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]]['local_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]]['local_address'] }}:{{ baas_portal_port }}"
{% else %}
BAAS_PORTAL_URL="http://{{ hostvars[groups['portal'][0]]['local_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 }}

LICENSE_FILE={{ opdk_license_target_file_path }}
