<!--
  ~ 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.
  -->
<div class="container-fluid" id="deployHistoryList">
    <div class="page-content">
        <h2 class="md-title">NameServerAddressList</h2>
        <div class="pull-left">
            <md-chips ng-model="namesvrAddrList"  readonly="ctrl.readonly" md-removable="ctrl.removable" md-enable-chip-edit="true"></md-chips>
        </div>
        <div class="pull-left">
            <button class="btn btn-raised btn-sm btn-primary" type="button" ng-click="updateNameSvrAddr()">{{'UPDATE' | translate}}
            </button>
        </div>
        <br/>
        <br/>
        <h2 class="md-title">IsUseVIPChannel</h2>
        <div  class="pull-left">
            <md-switch class="md-primary" md-no-ink aria-label="Switch No Ink" ng-model="useVIPChannel">
            </md-switch>
        </div>
        <div class="pull-left">
            <button class="btn btn-raised btn-sm btn-primary" type="button" ng-click="updateIsVIPChannel()">{{'UPDATE' | translate}}
            </button>
        </div>
    </div>
</div>
