blob: cc592b28aa886b38aa7d679d30e77c6ec54ce133 [file] [log] [blame]
<!--
/**
* 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.
*/
-->
<form novalidate name="clusterForm" id="clusterGeneralStep">
<div class="col-xs-8">
<label class="light" tooltip="cluster.name">Cluster Name<mandatory-field></mandatory-field></label>
<input type="text" class="form-control nameInput" ng-disabled="editingMode"
ng-pattern="validations.patterns.name"
ng-model="clusterEntity.clusterModel.cluster._name" ng-required="true"
ng-keydown="validations.acceptNoSpaces($event)"
check-name="{type:'cluster', check:!editingMode}"
ng-class="{fakeInvalid:!validations.nameAvailable}"
ng-disabled="xmlPreview.edit"/>
<!--check-type="cluster" check-name-flag="nameValid" check="true"-->
</div>
<div class="col-xs-16">
<label class="light" tooltip="cluster.colo">Data Center or Colo Name<mandatory-field></mandatory-field></label>
<input type="text" class="form-control"
ng-pattern="validations.patterns.name"
ng-required="true" ng-disabled="xmlPreview.edit"
ng-model="clusterEntity.clusterModel.cluster._colo" validation-message="{{validations.messages.colo}}"/>
</div>
<div class="col-xs-24">
<label class="light">Description</label>
<input type="text" class="form-control"
ng-disabled="xmlPreview.edit"
ng-pattern="validations.patterns.freeText"
ng-model="clusterEntity.clusterModel.cluster._description" />
</div>
<div class="col-xs-24">
<label class="light">Tags</label>
</div>
<div class="col-xs-24">
<div ng-repeat="tag in tagsArray" class="row dynamic-table-spacer">
<div class="col-xs-8">
<input type="text" class="form-control" ng-model="tag.key" ng-disabled="xmlPreview.edit" placeholder="key"
ng-pattern="validations.patterns.alpha" ng-required="tag.value" validation-optional-message="{{validations.messages.key}}"/>
</div>
<div class="col-xs-8">
<input type="text" class="form-control" ng-disabled="xmlPreview.edit" placeholder="value"
ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key" validation-optional-message="{{validations.messages.value}}"/>
</div>
<div class="col-xs-8">
<button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last">
<span class="entypo minus"></span> delete
</button>
<button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last">
<span class="entypo plus"></span> add tag
</button>
</div>
</div>
</div>
<div class="col-xs-24"><label class="mt15">INTERFACES</label></div>
<div class="col-xs-24 plr0px">
<label class="col-xs-6">
Type
</label>
<label class="col-xs-10">
Endpoint
</label>
<div id="interfaces-detail" class="col-xs-24"
ng-repeat="_interface in clusterEntity.clusterModel.cluster.interfaces.interface">
<div class="row">
<div class="col-xs-6">
<input type="checkbox" ng-checked="registry.check" ng-model="registry.check"
ng-if="_interface._type === 'registry'" ng-disabled="xmlPreview.edit"/>
<input type="checkbox" ng-checked="spark.check" ng-model="spark.check"
ng-if="_interface._type === 'spark'" ng-disabled="xmlPreview.edit"/>
<label class="light font11px pt5px" tooltip="cluster.interfaces.{{_interface._type}}">{{clusterInterfaceLabels(_interface._type)}}</label>
</div>
<div class="col-xs-10">
<input id="interface.{{_interface._type}}" type="text" class="form-control" ng-pattern="validations.patterns.interfaceEndpoints"
ng-model="_interface._endpoint"
ng-required="true"
validation-optional-message="{{validations.messages.interfaceEndpoints}}"
ng-disabled="xmlPreview.edit" interface-endpoint
ng-if="_interface._type !== 'registry' && _interface._type !== 'spark'"/>
<input id="interface.{{upperCase(_interface._type)}}" type="text" class="form-control" ng-pattern="validations.patterns.interfaceEndpoints"
ng-model="_interface._endpoint" ng-required="registry.check" validation-optional-message="{{validations.messages.interfaceEndpoints}}"
ng-disabled="_interface._type === 'registry' && !registry.check || xmlPreview.edit" interface-endpoint
ng-if="_interface._type === 'registry'"/>
<div class="col-xs-24 plr0px" ng-if="_interface._type === 'spark'">
<input type="radio" name="sparkInterface" value="yarn-cluster" ng-model="_interface._endpoint"
ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
Yarn Cluster
<input type="radio" name="sparkInterface" class="ml20" value="yarn-client" ng-model="_interface._endpoint"
ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
Yarn Client
<input type="radio" name="sparkInterface" class="ml20" value="local" ng-model="_interface._endpoint"
ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
Local
<input type="radio" name="sparkInterface" class="ml20"
value="local[*]" ng-model="_interface._endpoint"
ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
Custom
<input id="interface.{{_interface._type}}" type="text"
ng-model="_interface._endpoint"
ng-required="spark.check"
ng-if="!(_interface._endpoint==='yarn-cluster' || _interface._endpoint==='yarn-client' || _interface._endpoint==='local')"
validation-optional-message="{{validations.messages.interfaceEndpoints}}"
ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit" interface-endpoint
title="Custom spark url like local[*],local[1] etc."/>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-24"><label class="mt15">PROPERTIES</label></div>
<div class="col-xs-24 plr0px">
<div class="row m0">
<label class="col-xs-8">Property Name</label><label class="col-xs-16">Value</label>
</div>
<div ng-repeat="property in clusterEntity.clusterModel.cluster.properties.property" class="row m0">
<div class="col-xs-8 dynamic-table-spacer">
<input type="text" class="form-control" ng-model="property._name"
ng-pattern="validations.patterns.propertyName"
validation-optional-message="{{validations.messages.name}}"
ng-disabled="xmlPreview.edit"
ng-required="property._value" placeholder="name" />
</div>
<div class="col-xs-8 dynamic-table-spacer">
<input type="text" class="form-control" ng-model="property._value"
validation-optional-message="{{validations.messages.value}}"
ng-disabled="xmlPreview.edit"
ng-required="property._name" placeholder="value" />
</div>
<div class="dynamic-table-spacer">
<button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" ng-if="!$first || !$last"
ng-disabled="xmlPreview.edit">
<span class="entypo minus"></span> delete
</button>
<button type="button" class="btn btn-default btn-xs" ng-click="addProperty()" ng-disabled="xmlPreview.edit" ng-if="$last">
<span class="entypo plus"></span> add property
</button>
</div>
</div>
</div>
<div class="col-xs-24"><label class="mt15">LOCATION</label></div>
<div class="col-xs-24 plr0px">
<div class="col-xs-24 mb5 plr0px">
<label class="col-xs-6">Location Name</label><label class="col-xs-10">Path</label>
</div>
<div ng-repeat="location in clusterEntity.clusterModel.cluster.locations.location" class="col-xs-24 mt5">
<div id="clusterLocationBox" class="row" ng-if="location._name === 'staging' || location._name === 'working' || location._name === 'temp'">
<div class="col-xs-6 dynamic-table-spacer">
<label class="light font11px pt5px" tooltip="cluster.locations.{{location._name}}">
{{capitalize(location._name)}}<mandatory-field></mandatory-field>
</label>
</div>
<div class="col-xs-10 dynamic-table-spacer">
<input id="location.{{location._name}}" type="text" class="form-control" ng-model="location._path" ng-pattern="validations.patterns.path"
ng-disabled="xmlPreview.edit" ng-required="location._name===staging" validation-optional-message="{{validations.messages.location}}"/>
<span class="error" ng-show="locationsEqualError">Staging and Working location should be different</span>
</div>
<div class="dynamic-table-spacer">
<button class="btn btn-default btn-xs" ng-click="removeLocation($index)" ng-if="$index>2 && !$last"
ng-disabled="xmlPreview.edit" >
<span class="entypo minus"></span> delete
</button>
<button type="button" class="btn btn-default btn-xs" ng-click="addLocation()" ng-disabled="xmlPreview.edit" ng-if="$last">
<span class="entypo plus"></span> add location
</button>
</div>
</div>
<!-- <div class="row" ng-if="location._name !== 'staging' && location._name !== 'working' && location._name !== 'temp'">
<div class="col-xs-6 dynamic-table-spacer">
<input type="text" class="form-control" ng-model="location._name"
validation-optional-message="{{validations.messages.name}}"
ng-pattern="validations.patterns.name"
ng-disabled="xmlPreview.edit" ng-required="location._path" placeholder="name" />
</div>
<div class="col-xs-10 dynamic-table-spacer">
<input type="text" class="form-control" ng-model="location._path"
validation-optional-message="{{validations.messages.path}}"
ng-pattern="validations.patterns.path"
ng-disabled="xmlPreview.edit" ng-required="location._name" placeholder="path" />
</div>
<div class="dynamic-table-spacer">
<button class="btn btn-default btn-xs" ng-click="removeLocation($index)" ng-if="$index>3"
ng-disabled="xmlPreview.edit" >
<span class="entypo minus"></span> delete
</button>
<button type="button" class="btn btn-default btn-xs" ng-click="addLocation()" ng-disabled="xmlPreview.edit" ng-if="$last">
<span class="entypo plus"></span> add location
</button>
</div>
</div> -->
</div>
</div>
<div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="clusterAdvancedOption">
<label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
<i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
<i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
</div>
<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
<div class="col-xs-24"><label class="mt15">ACCESS CONTROL LIST</label></div>
<div class="col-xs-24 plr0px">
<div class="col-xs-12">
<label class="light">Owner<mandatory-field></mandatory-field></label>
<input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.owner}}"
ng-required="true"
ng-pattern="validations.patterns.unixId"
ng-model="clusterEntity.clusterModel.cluster.ACL._owner"/>
</div>
<div class="col-xs-12">
<label class="light">Group<mandatory-field></mandatory-field></label>
<input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.group}}"
ng-required="true"
ng-pattern="validations.patterns.unixId"
ng-model="clusterEntity.clusterModel.cluster.ACL._group"/>
</div>
<div class="col-xs-12">
<label class="light">Permissions<mandatory-field></mandatory-field></label>
<acl-permissions acl-model="clusterEntity.clusterModel.cluster.ACL._permission"></acl-permissions>
</div>
</div>
</div>
<div class="col-xs-24 pb15px mt35">
<div class="pull-right">
<a class="btn cnclBtn" ui-sref="main">
CANCEL
</a>
<button id="cluster.step1" class="btn nextBtn" ng-disabled="xmlPreview.edit || buttonSpinners.show"
ng-click="goSummaryStep(clusterForm.$invalid)" scroll-to-error>
NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
</button>
</div>
</div>
</form>