{%- from "opencontrail/map.jinja" import config with context %}
[DEFAULTS]
collectors = {% for member in config.analytics.members %}{{ member.host }}:8086 {% endfor %}
cassandra_server_list={% for member in config.database.members %}{{ member.host }}:9160 {% endfor %}
listen_ip_addr=0.0.0.0
listen_port={{ config.bind.get('api_port', '8082') }}
aaa_mode={{ config.get('aaa_mode', 'cloud-admin') }}
cloud_admin_role={{ config.get('cloud_admin_role', 'admin') }}
log_file=/var/log/contrail/contrail-api.log
log_local=1
log_level=SYS_NOTICE
#zk_server_ip=10.0.102.31:2181,10.0.102.32:2181,10.0.102.33:2181
zk_server_ip={% for member in config.database.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %}
redis_server_ip=$__contrail_redis_ip__
{%- if config.message_queue.members is defined %}
rabbit_server={{ config.message_queue.members|join(',',attribute='host') }}
rabbit_ha_mode=True
{%- else %}
rabbit_server={{ config.message_queue.host }}
{%- endif %}
rabbit_port={{ config.message_queue.port }}
{%- if config.identity.engine == "keystone" and not config.get('k8s_enabled', False) %}
auth=keystone
{%- endif %}
#rabbit_port=5673
{%- if config.message_queue.virtual_host is defined %}
rabbit_vhost={{config.message_queue.virtual_host}}
{%- endif %}
{%- if config.message_queue.user is defined %}
rabbit_user={{config.message_queue.user}}
{%- endif %}
{%- if config.message_queue.password is defined %}
rabbit_password={{config.message_queue.password}}
{%- endif %}
{% if config.override_rpf_default_by is defined %}
override_rpf_default_by={{ config.override_rpf_default_by | lower }}
{% endif %}
{%- if config.get('list_optimization_enabled', False) %}
list_optimization_enabled=True
{%- endif %}

# (StrOpt) default encoding to use for string resources.
# this is optional variable. Define it if you want to override
# the default encoder returned by sys.getdefaultencoding()
# default_encoding = <encoding name>
# Eg. to set ascii as the encoder
# default_encoding = ascii
# Eg. to set utf-8 as the encoder
# default_encoding = utf-8

[SECURITY]
use_certs=False
keyfile=/etc/contrail/ssl/private_keys/apiserver_key.pem
certfile=/etc/contrail/ssl/certs/apiserver.pem
ca_certs=/etc/contrail/ssl/certs/ca.pem

[SANDESH]
#sandesh_ssl_enable=false
#introspect_ssl_enable=false
#sandesh_keyfile=/etc/contrail/ssl/private/server-privkey.pem
#sandesh_certfile=/etc/contrail/ssl/certs/server.pem
#sandesh_ca_cert=/etc/contrail/ssl/certs/ca-cert.pem

[KEYSTONE]
keystone_sync_on_demand={{ config.identity.get('sync_on_demand', 'true') }}
