#
# 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.
#

admin_rest_api:
  type: info
  title: The REST API is *the* admin interface
  content: |
    Under the hood, both the `pulsar-admin` CLI tool and the Java client both use the REST API. If you'd like to implement your own admin interface client, you should use the REST API as well. Full documentation can be found [here](../../reference/RestApi).
tls_role_tokens:
  type: warning
  title: TLS encryption strongly recommended
  content: |
    Please note that using TLS encryption is strongly recommended when using Athenz as an authentication provider, as it can protect role tokens from being intercepted and reused (see also [this doc](https://github.com/yahoo/athenz/blob/master/docs/data_model.md)).
broker_conf_doc:
  type: info
  content: |
    A full listing of parameters available in the `conf/broker.conf` file, as well as the default values for those parameters, can be found in [Broker Configuration](../../reference/Configuration#broker).
client_conf_doc:
  type: info
  content: |
    A full listing of parameters available in the `conf/client.conf` file, as well as the default values for those parameters, can be found in [Client Configuration](../../reference/Configuration#client).
properties_multiple_clusters:
  type: success
  content: |
    When working with properties, you can specify which of your Pulsar clusters your property is allowed to use. This enables you to also have cluster-level authorization schemes.
subscriptions_local:
  type: warning
  title: Subscriptions are local to a cluster
  content: |
     While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you'll need to create a new subscription in the desired cluster.
shared_mode_limitations:
  type: warning
  title: Limitations of shared mode
  content: |
    There are two important things to be aware of when using shared mode:

    1. Message ordering is not guaranteed.
    2. You cannot use [cumulative acknowledgment](#acknowledgement) with shared mode.
global_cluster: |
  If you're running a multi-cluster Pulsar instance, you can manage instance-level
superuser:
  type: warning
  content: Please note that this operation requires [superuser](../../admin/Authz#superusers) privileges.
mark_delete:
  type: info
  content: TODO
