{{!
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.
}}
{{#error}}
  <div class="text-error">{{.}}</div>
{{/error}}
{{#even_masters}}
  {{! TODO(wdberkeley): Un-actionable warning. Link to add/remove master docs once they exist. }}
  <div class="alert alert-danger" role="alert">WARNING: There are an even number of master peers.
    This provides no more fault tolerance than having one less master.
    In particular, 2 masters cannot tolerate the failure of a single master.
  </div>
{{/even_masters}}
{{^error}}
  <h2>Live Masters</h2>
  <table class='table table-striped'>
    <thead><tr>
      <th>UUID</th>
      <th>Cluster ID</th>
      <th>Role</th>
      <th>Start time</th>
      <th>Registration</th>
    </tr></thead>
    <tbody>
    {{#masters}}
      <tr>
          <td>{{#target}}<a href="{{.}}">{{/target}}{{uuid}}{{#target}}</a>{{/target}}</td>
          <td>{{cluster_id}}</td>
          <td>{{role}}</td>
          <td>{{start_time}}</td>
          <td><pre><code>{{registration}}</code></pre></td>
      </tr>
    {{/masters}}
    </tbody>
  </table>
  {{^has_no_errors}}
  <h2>Errors</h2>
  <table class='table table-striped'>
    <thead><tr>
      <th>UUID</th>
      <th>Error</th>
    </tr></thead>
    <tbody>
    {{#errors}}
      <tr>
        <td>{{uuid}}</td>
        <td><pre><code>{{error}}</code></pre></td>
      </tr>
    {{/errors}}
    </tbody>
  </table>
  {{/has_no_errors}}
{{/error}}
