# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

[groups]
admin = admin_all
subadmin = admin_host1
consumer0 = consumer_t1_all
consumer1 = consumer_t1_host1
consumer2 = consumer_t2_host2
producer0 = producer_t1_all
producer1 = producer_t1_host1
producer2 = producer_t2_host2
consumer_producer0 = consumer_producer_t1

[roles]
admin_all = host=*->action=all
admin_host1 = host=1.2.3.4->action=all
consumer_t1_all = host=*->topic=t1->action=read
consumer_t1_host1 = host=host1->topic=t1->action=read
consumer_t2_host2 = host=host2->topic=t2->action=read
producer_t1_all = host=*->topic=t1->action=write
producer_t1_host1 = host=host1->topic=t1->action=write
producer_t2_host2 = host=host2->topic=t2->action=write
consumer_producer_t1 = host=host1->topic=t1->action=all
