
{#
Copyright 2017-present Open Networking Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}


# This file autogenerated by monitoring-channel observer
# It contains a list of attributes to be used by ceilometer proxy web server
# syntax: key=value

[default]
auth_url={{ auth_url }}
admin_user={{ admin_user }}
admin_tenant={{ admin_tenant }}
admin_password={{ admin_password }}
ceilometer_pub_sub_url={{ ceilometer_pub_sub_url }}

[allowed_tenants]
{% if allowed_tenant_ids %}
{% for tenant_id in allowed_tenant_ids %}
{{ tenant_id }}
{% endfor %}
{% endif %}
