http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/connector.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/connector.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/connector.pug
new file mode 100644
index 0000000..76c5016
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/connector.pug
@@ -0,0 +1,100 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'connector'
+-var model = '$ctrl.clonedCluster.connector'
+-var enabled = model + '.enabled'
+-var sslEnabled = enabled + ' && ' + model + '.sslEnabled'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Connector configuration
+    panel-description
+        | Configure HTTP REST configuration to enable HTTP server features. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/rest-api#general-configuration";
 target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"restEnabled"', 'Flag 
indicating whether to configure connector configuration')
+            .pc-form-grid-col-60
+                +text-enabled('Jetty configuration path:', 
`${model}.jettyPath`, '"connectorJettyPath"', enabled, 'false', 'Input path to 
Jetty configuration',
+                    'Path, either absolute or relative to IGNITE_HOME, to 
Jetty XML configuration file<br/>\
+                    Jetty is used to support REST over HTTP protocol for 
accessing Ignite APIs remotely<br/>\
+                    If not provided, Jetty instance with default configuration 
will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and 
IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively')
+            .pc-form-grid-col-20
+                +text-ip-address('TCP host:', `${model}.host`, 
'"connectorHost"', enabled, 'IgniteConfiguration#getLocalHost()',
+                    'Host for TCP binary protocol server<br/>\
+                    This can be either an IP address or a domain name<br/>\
+                    If not defined, system - wide local address will be used 
IgniteConfiguration#getLocalHost()<br/>\
+                    You can also use "0.0.0.0" value to bind to all locally - 
available IP addresses')
+            .pc-form-grid-col-20
+                +number-min-max('TCP port:', `${model}.port`, 
'"connectorPort"', enabled, '11211', '1024', '65535', 'Port for TCP binary 
protocol server')
+            .pc-form-grid-col-20
+                +number('TCP port range:', `${model}.portRange`, 
'"connectorPortRange"', enabled, '100', '1', 'Number of ports for TCP binary 
protocol server to try if configured port is already in use')
+            .pc-form-grid-col-60
+                +number('Idle query cursor timeout:', 
`${model}.idleQueryCursorTimeout`, '"connectorIdleQueryCursorTimeout"', 
enabled, '600000', '0',
+                    'Reject open query cursors that is not used timeout<br/>\
+                    If no fetch query request come within idle timeout, it 
will be removed on next check for old query cursors')
+            .pc-form-grid-col-60
+                +number('Idle query cursor check frequency:', 
`${model}.idleQueryCursorCheckFrequency`, 
'"connectorIdleQueryCursorCheckFrequency"', enabled, '60000', '0',
+                    'Idle query cursors check frequency<br/>\
+                    This setting is used to reject open query cursors that is 
not used')
+            .pc-form-grid-col-30
+                +number('Idle timeout:', `${model}.idleTimeout`, 
'"connectorIdleTimeout"', enabled, '7000', '0',
+                    'Idle timeout for REST server<br/>\
+                    This setting is used to reject half - opened sockets<br/>\
+                    If no packets come within idle timeout, the connection is 
closed')
+            .pc-form-grid-col-30
+                +number('Receive buffer size:', `${model}.receiveBufferSize`, 
'"connectorReceiveBufferSize"', enabled, '32768', '0', 'REST TCP server receive 
buffer size')
+            .pc-form-grid-col-30
+                +number('Send buffer size:', `${model}.sendBufferSize`, 
'"connectorSendBufferSize"', enabled, '32768', '0', 'REST TCP server send 
buffer size')
+            .pc-form-grid-col-30
+                +number('Send queue limit:', `${model}.sendQueueLimit`, 
'"connectorSendQueueLimit"', enabled, 'unlimited', '0',
+                    'REST TCP server send queue limit<br/>\
+                    If the limit exceeds, all successive writes will block 
until the queue has enough capacity')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Direct buffer', `${model}.directBuffer`, 
'"connectorDirectBuffer"', enabled,
+                    'Flag indicating whether REST TCP server should use direct 
buffers<br/>\
+                    A direct buffer is a buffer that is allocated and accessed 
using native system calls, without using JVM heap<br/>\
+                    Enabling direct buffer may improve performance and avoid 
memory issues(long GC pauses due to huge buffer size)')
+            .pc-form-grid-col-60
+                +checkbox-enabled('TCP_NODELAY option', `${model}.noDelay`, 
'"connectorNoDelay"', enabled,
+                    'Flag indicating whether TCP_NODELAY option should be set 
for accepted client connections<br/>\
+                    Setting this option reduces network latency and should be 
enabled in majority of cases<br/>\
+                    For more information, see Socket#setTcpNoDelay(boolean)')
+            .pc-form-grid-col-30
+                +number('Selector count:', `${model}.selectorCount`, 
'"connectorSelectorCount"', enabled, 'min(4, availableProcessors)', '1',
+                    'Number of selector threads in REST TCP server<br/>\
+                    Higher value for this parameter may increase throughput, 
but also increases context switching')
+            .pc-form-grid-col-30
+                +number('Thread pool size:', `${model}.threadPoolSize`, 
'"connectorThreadPoolSize"', enabled, 'max(8, availableProcessors) * 2', '1',
+                    'Thread pool size to use for processing of client messages 
(REST requests)')
+            .pc-form-grid-col-60
+                +java-class('Message interceptor:', 
`${model}.messageInterceptor`, '"connectorMessageInterceptor"', enabled, 
'false',
+                    'Interceptor allows to transform all objects exchanged via 
REST protocol<br/>\
+                    For example if you use custom serialisation on client you 
can write interceptor to transform binary representations received from client 
to Java objects and later access them from java code directly')
+            .pc-form-grid-col-60
+                +text-enabled('Secret key:', `${model}.secretKey`, 
'"connectorSecretKey"', enabled, 'false', 'Specify to enable authentication', 
'Secret key to authenticate REST requests')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Enable SSL', `${model}.sslEnabled`, 
'"connectorSslEnabled"', enabled, 'Enables/disables SSL for REST TCP binary 
protocol')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Enable SSL client auth', 
`${model}.sslClientAuth`, '"connectorSslClientAuth"', sslEnabled, 'Flag 
indicating whether or not SSL client authentication is required')
+            .pc-form-grid-col-60
+                +java-class('SSL factory:', `${model}.sslFactory`, 
'"connectorSslFactory"', sslEnabled, sslEnabled,
+                    'Instance of Factory that will be used to create an 
instance of SSLContext for Secure Socket Layer on TCP binary protocol')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterConnector')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/data-storage.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/data-storage.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/data-storage.pug
new file mode 100644
index 0000000..c9fea56
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/data-storage.pug
@@ -0,0 +1,301 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'dataStorageConfiguration'
+-var model = '$ctrl.clonedCluster.dataStorageConfiguration'
+-var dfltRegionModel = model + '.defaultDataRegionConfiguration'
+-var dataRegionConfigurations = model + '.dataRegionConfigurations'
+
+mixin data-region-form({modelAt, namePlaceholder, dataRegionsAt})
+    .pc-form-grid-col-60
+        +sane-ignite-form-field-text({
+            label: 'Name:',
+            model: `${modelAt}.name`,
+            name: '"name"',
+            placeholder: namePlaceholder,
+        })(
+            ng-model-options='{allowInvalid: true}'
+
+            
pc-not-in-collection='::$ctrl.Clusters.dataRegion.name.invalidValues'
+            ignite-unique=dataRegionsAt
+            ignite-unique-property='name'
+            ignite-unique-skip=`["_id", ${modelAt}]`
+        )
+            +form-field-feedback(_, 'notInCollection', 
'{{::$ctrl.Clusters.dataRegion.name.invalidValues[0]}} is reserved for internal 
use')
+            +form-field-feedback(_, 'igniteUnique', 'Name should be unique')
+
+    .pc-form-grid-col-30
+        pc-form-field-size(
+            label='Initial size:'
+            ng-model=`${modelAt}.initialSize`
+            name='initialSize'
+            placeholder='{{ $ctrl.Clusters.dataRegion.initialSize.default / 
_drISScale.value }}'
+            min='{{ ::$ctrl.Clusters.dataRegion.initialSize.min }}'
+            on-scale-change='_drISScale = $event'
+        )
+
+    .pc-form-grid-col-30
+        pc-form-field-size(
+            ng-model=`${modelAt}.maxSize`
+            ng-model-options='{allowInvalid: true}'
+            name='maxSize'
+            label='Maximum size:'
+            placeholder='{{ ::$ctrl.Clusters.dataRegion.maxSize.default }}'
+            min=`{{ $ctrl.Clusters.dataRegion.maxSize.min(${modelAt}) }}`
+        )
+
+    .pc-form-grid-col-60
+        +text('Swap file path:', `${modelAt}.swapFilePath`, '"swapFilePath"', 
'false', 'Input swap file path', 'An optional path to a memory mapped file for 
this data region')
+        
+    .pc-form-grid-col-60
+        +number('Checkpoint page buffer:', 
`${modelAt}.checkpointPageBufferSize`, '"checkpointPageBufferSize"', 'true', 
'0', '0', 'Amount of memory allocated for a checkpoint temporary buffer in 
bytes')
+
+    .pc-form-grid-col-60
+        +dropdown('Eviction mode:', `${modelAt}.pageEvictionMode`, 
'"pageEvictionMode"', 'true', 'DISABLED',
+        '[\
+            {value: "DISABLED", label: "DISABLED"},\
+            {value: "RANDOM_LRU", label: "RANDOM_LRU"},\
+            {value: "RANDOM_2_LRU", label: "RANDOM_2_LRU"}\
+        ]',
+        `An algorithm for memory pages eviction
+        <ul>
+            <li>DISABLED - Eviction is disabled</li>
+            <li>RANDOM_LRU - Once a memory region defined by a data region is 
configured, an off-heap array is allocated to track last usage timestamp for 
every individual data page</li>
+            <li>RANDOM_2_LRU - Differs from Random - LRU only in a way that 
two latest access timestamps are stored for every data page</li>
+        </ul>`)
+
+    .pc-form-grid-col-30
+        +sane-ignite-form-field-number({
+            label: 'Eviction threshold:',
+            model: `${modelAt}.evictionThreshold`,
+            name: '"evictionThreshold"',
+            placeholder: '{{ 
::$ctrl.Clusters.dataRegion.evictionThreshold.default }}',
+            min: '{{ ::$ctrl.Clusters.dataRegion.evictionThreshold.min }}',
+            max: '{{ ::$ctrl.Clusters.dataRegion.evictionThreshold.max }}',
+            step: '{{ ::$ctrl.Clusters.dataRegion.evictionThreshold.step }}',
+            tip: 'A threshold for memory pages eviction initiation'
+        })
+
+    .pc-form-grid-col-30
+        +sane-ignite-form-field-number({
+            label: 'Empty pages pool size:',
+            model: `${modelAt}.emptyPagesPoolSize`,
+            name: '"emptyPagesPoolSize"',
+            placeholder: '{{ 
::$ctrl.Clusters.dataRegion.emptyPagesPoolSize.default }}',
+            min: '{{ ::$ctrl.Clusters.dataRegion.emptyPagesPoolSize.min }}',
+            max: `{{ 
$ctrl.Clusters.dataRegion.emptyPagesPoolSize.max($ctrl.clonedCluster, 
${modelAt}) }}`,
+            tip: 'The minimal number of empty pages to be present in reuse 
lists for this data region'
+        })
+
+    .pc-form-grid-col-30
+        +sane-ignite-form-field-number({
+            label: 'Metrics sub interval count:',
+            model: `${modelAt}.subIntervals`,
+            name: '"subIntervals"',
+            placeholder: '{{ ::$ctrl.Clusters.dataRegion.subIntervals.default 
}}',
+            min: '{{ ::$ctrl.Clusters.dataRegion.subIntervals.min }}',
+            step: '{{ ::$ctrl.Clusters.dataRegion.subIntervals.step }}',
+            tip: 'A number of sub-intervals the whole rate time interval will 
be split into to calculate allocation and eviction rates'
+        })
+
+    .pc-form-grid-col-30
+        pc-form-field-size(
+            ng-model=`${modelAt}.rateTimeInterval`
+            ng-model-options='{allowInvalid: true}'
+            name='rateTimeInterval'
+            size-type='seconds'
+            label='Metrics rate time interval:'
+            placeholder='{{ $ctrl.Clusters.dataRegion.rateTimeInterval.default 
/ _rateTimeIntervalScale.value }}'
+            min=`{{ ::$ctrl.Clusters.dataRegion.rateTimeInterval.min }}`
+            tip='Time interval for allocation rate and eviction rate 
monitoring purposes'
+            on-scale-change='_rateTimeIntervalScale = $event'
+            size-scale-label='s'
+        )
+            
+    .pc-form-grid-col-60
+        +checkbox('Metrics enabled', `${modelAt}.metricsEnabled`, 
'"MemoryPolicyMetricsEnabled"',
+        'Whether memory metrics are enabled by default on node startup')
+
+    .pc-form-grid-col-60
+        +checkbox('Persistence enabled', `${modelAt}.persistenceEnabled`, 
'"RegionPersistenceEnabled" + $index',
+        'Enable Ignite Native Persistence')
+
+panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form 
on-open=`ui.loadPanel('${form}')`)
+    panel-title Data storage configuration
+    panel-description
+        | Page memory is a manageable off-heap based memory architecture that 
is split into pages of fixed size. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/distributed-persistent-store";
 target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`$ctrl.available("2.3.0") && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-dropdown({
+                    label: 'Page size:',
+                    model: `${model}.pageSize`,
+                    name: '"DataStorageConfigurationPageSize"',
+                    options: 
`$ctrl.Clusters.dataStorageConfiguration.pageSize.values`,
+                    tip: 'Every memory region is split on pages of fixed size'
+                })
+            .pc-form-grid-col-30
+                +number('Concurrency level:', model + '.concurrencyLevel', 
'"DataStorageConfigurationConcurrencyLevel"',
+                'true', 'availableProcessors', '2', 'The number of concurrent 
segments in Ignite internal page mapping tables')
+            .pc-form-grid-col-60.pc-form-group__text-title
+                span System region
+            .pc-form-group.pc-form-grid-row
+                .pc-form-grid-col-30
+                    pc-form-field-size(
+                        label='Initial size:'
+                        ng-model=`${model}.systemRegionInitialSize`
+                        name='DataStorageSystemRegionInitialSize'
+                        placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.default / 
systemRegionInitialSizeScale.value }}'
+                        min='{{ 
::$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.min }}'
+                        tip='Initial size of a data region reserved for system 
cache'
+                        on-scale-change='systemRegionInitialSizeScale = $event'
+                    )
+                .pc-form-grid-col-30
+                    pc-form-field-size(
+                        label='Max size:'
+                        ng-model=`${model}.systemRegionMaxSize`
+                        name='DataStorageSystemRegionMaxSize'
+                        placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.default / 
systemRegionMaxSizeScale.value }}'
+                        min='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.min($ctrl.clonedCluster)
 }}'
+                        tip='Maximum data region size reserved for system 
cache'
+                        on-scale-change='systemRegionMaxSizeScale = $event'
+                    )
+            .pc-form-grid-col-60.pc-form-group__text-title
+                span Default data region
+            .pc-form-group.pc-form-grid-row
+                +data-region-form({
+                    modelAt: dfltRegionModel,
+                    namePlaceholder: '{{ 
::$ctrl.Clusters.dataRegion.name.default }}',
+                    dataRegionsAt: dataRegionConfigurations
+                })
+            .pc-form-grid-col-60
+                .ignite-form-field
+                    .ignite-form-field__label Data region configurations
+                    .ignite-form-field__control
+                        list-editable(name='dataRegionConfigurations' 
ng-model=dataRegionConfigurations)
+                            list-editable-item-edit.pc-form-grid-row
+                                - form = '$parent.form'
+                                +data-region-form({
+                                    modelAt: '$item',
+                                    namePlaceholder: 'Data region name',
+                                    dataRegionsAt: dataRegionConfigurations
+                                })
+                                - form = 'dataStorageConfiguration'
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$ctrl.Clusters.addDataRegionConfiguration($ctrl.clonedCluster)`
+                                    label-single='data region configuration'
+                                    label-multiple='data region configurations'
+                                )
+
+            .pc-form-grid-col-60
+                +text-enabled('Storage path:', `${model}.storagePath`, 
'"DataStoragePath"', 'true', 'false', 'db',
+                'Directory where index and partition files are stored')
+            .pc-form-grid-col-60
+                +number('Checkpoint frequency:', 
`${model}.checkpointFrequency`, '"DataStorageCheckpointFrequency"', 'true', 
'180000', '1',
+                'Frequency which is a minimal interval when the dirty pages 
will be written to the Persistent Store')
+            .pc-form-grid-col-20
+                +number('Checkpoint threads:', `${model}.checkpointThreads`, 
'"DataStorageCheckpointThreads"', 'true', '4', '1', 'A number of threads to use 
for the checkpoint purposes')
+            .pc-form-grid-col-20
+                +dropdown('Checkpoint write order:', 
`${model}.checkpointWriteOrder`, '"DataStorageCheckpointWriteOrder"', 'true', 
'SEQUENTIAL',
+                '[\
+                    {value: "RANDOM", label: "RANDOM"},\
+                    {value: "SEQUENTIAL", label: "SEQUENTIAL"}\
+                ]',
+                'Order of writing pages to disk storage during checkpoint.\
+                <ul>\
+                    <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
+                    <li>SEQUENTIAL - All checkpoint pages are collected into 
single list and sorted by page index</li>\
+                </ul>')
+            .pc-form-grid-col-20
+                +dropdown('WAL mode:', `${model}.walMode`, 
'"DataStorageWalMode"', 'true', 'DEFAULT',
+                '[\
+                    {value: "DEFAULT", label: "DEFAULT"},\
+                    {value: "LOG_ONLY", label: "LOG_ONLY"},\
+                    {value: "BACKGROUND", label: "BACKGROUND"},\
+                    {value: "NONE", label: "NONE"}\
+                ]',
+                'Type define behavior wal fsync.\
+                <ul>\
+                    <li>DEFAULT - full-sync disk writes</li>\
+                    <li>LOG_ONLY - flushes application buffers</li>\
+                    <li>BACKGROUND - does not force application&#39;s buffer 
flush</li>\
+                    <li>NONE - WAL is disabled</li>\
+                </ul>')
+            .pc-form-grid-col-60
+                +text-enabled('WAL path:', `${model}.walPath`, 
'"DataStorageWalPath"', 'true', 'false', 'db/wal', 'A path to the directory 
where WAL is stored')
+            .pc-form-grid-col-60
+                +text-enabled('WAL archive path:', `${model}.walArchivePath`, 
'"DataStorageWalArchivePath"', 'true', 'false', 'db/wal/archive', 'A path to 
the WAL archive directory')
+            .pc-form-grid-col-20
+                +number('WAL segments:', `${model}.walSegments`, 
'"DataStorageWalSegments"', 'true', '10', '1', 'A number of WAL segments to 
work with')
+            .pc-form-grid-col-20
+                +number('WAL segment size:', `${model}.walSegmentSize`, 
'"DataStorageWalSegmentSize"', 'true', '67108864', '0', 'Size of a WAL segment')
+            .pc-form-grid-col-20
+                +number('WAL history size:', `${model}.walHistorySize`, 
'"DataStorageWalHistorySize"', 'true', '20', '1', 'A total number of 
checkpoints to keep in the WAL history')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+                +number('WAL buffer size:', `${model}.walBufferSize`, 
'"DataStorageWalBufferSize"', 'true', 'WAL segment size / 4', '1',
+                'Size of WAL buffer')
+            .pc-form-grid-col-30
+                +number('WAL flush frequency:', `${model}.walFlushFrequency`, 
'"DataStorageWalFlushFrequency"', 'true', '2000', '1',
+                'How often will be fsync, in milliseconds. In background mode, 
exist thread which do fsync by timeout')
+            .pc-form-grid-col-30
+                +number('WAL fsync delay:', `${model}.walFsyncDelayNanos`, 
'"DataStorageWalFsyncDelay"', 'true', '1000', '1', 'WAL fsync delay, in 
nanoseconds')
+            .pc-form-grid-col-60
+                +number('WAL record iterator buffer size:', 
`${model}.walRecordIteratorBufferSize`, 
'"DataStorageWalRecordIteratorBufferSize"', 'true', '67108864', '1',
+                'How many bytes iterator read from disk(for one reading), 
during go ahead WAL')
+            .pc-form-grid-col-30
+                +number('Lock wait time:', `${model}.lockWaitTime`, 
'"DataStorageLockWaitTime"', 'true', '10000', '1',
+                'Time out in milliseconds, while wait and try get file lock 
for start persist manager')
+            .pc-form-grid-col-30
+                +number('WAL thread local buffer size:', 
`${model}.walThreadLocalBufferSize`, '"DataStorageWalThreadLocalBufferSize"', 
'true', '131072', '1',
+                'Define size thread local buffer. Each thread which write to 
WAL have thread local buffer for serialize recode before write in WAL')
+            .pc-form-grid-col-30
+                +number('Metrics sub interval count:', 
`${model}.metricsSubIntervalCount`, '"DataStorageMetricsSubIntervalCount"', 
'true', '5', '1',
+                'Number of sub - intervals the whole rate time interval will 
be split into to calculate rate - based metrics')
+            .pc-form-grid-col-30
+                +number('Metrics rate time interval:', 
`${model}.metricsRateTimeInterval`, '"DataStorageMetricsRateTimeInterval"', 
'true', '60000', '1000',
+                'The length of the time interval for rate - based metrics. 
This interval defines a window over which hits will be tracked')
+            .pc-form-grid-col-30
+                +dropdown('File IO factory:', `${model}.fileIOFactory`, 
'"DataStorageFileIOFactory"', 'true', 'Default',
+                '[\
+                    {value: "RANDOM", label: "RANDOM"},\
+                    {value: "ASYNC", label: "ASYNC"},\
+                    {value: null, label: "Default"},\
+                ]',
+                'Order of writing pages to disk storage during checkpoint.\
+                <ul>\
+                    <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
+                    <li>SEQUENTIAL - All checkpoint pages are collected into 
single list and sorted by page index</li>\
+                </ul>')
+            .pc-form-grid-col-30
+                +number('WAL auto archive after inactivity:', 
`${model}.walAutoArchiveAfterInactivity`, 
'"DataStorageWalAutoArchiveAfterInactivity"', 'true', '-1', '-1',
+                'Time in millis to run auto archiving segment after last 
record logging')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Metrics enabled', 
`${model}.metricsEnabled`, '"DataStorageMetricsEnabled"', 'true', 'Flag 
indicating whether persistence metrics collection is enabled')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Always write full pages', 
`${model}.alwaysWriteFullPages`, '"DataStorageAlwaysWriteFullPages"', 'true', 
'Flag indicating whether always write full pages')
+            .pc-form-grid-col-60
+                +checkbox('Write throttling enabled', 
`${model}.writeThrottlingEnabled`, '"DataStorageWriteThrottlingEnabled"',
+                'Throttle threads that generate dirty pages too fast during 
ongoing checkpoint')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+                +checkbox('Enable WAL compaction', 
`${model}.walCompactionEnabled`, '"DataStorageWalCompactionEnabled"',
+                'If true, system filters and compresses WAL archive in 
background')
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterDataStorageConfiguration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/deployment.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/deployment.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/deployment.pug
new file mode 100644
index 0000000..1f0b615
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/deployment.pug
@@ -0,0 +1,192 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'deployment'
+-var model = '$ctrl.clonedCluster'
+-var modelDeployment = '$ctrl.clonedCluster.deploymentSpi'
+-var exclude = model + '.peerClassLoadingLocalClassPathExclude'
+-var enabled = '$ctrl.clonedCluster.peerClassLoadingEnabled'
+-var uriListModel = modelDeployment + '.URI.uriList'
+-var scannerModel = modelDeployment + '.URI.scanners'
+-var uriDeployment = modelDeployment + '.kind === "URI"'
+-var localDeployment = modelDeployment + '.kind === "Local"'
+-var customDeployment = modelDeployment + '.kind === "Custom"'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Class deployment
+    panel-description
+        | Task and resources deployment in cluster.
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/deployment-modes"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +dropdown('Deployment mode:', `${model}.deploymentMode`, 
'"deploymentMode"', 'true', 'SHARED',
+                    '[\
+                        {value: "PRIVATE", label: "PRIVATE"},\
+                        {value: "ISOLATED", label: "ISOLATED"}, \
+                        {value: "SHARED", label: "SHARED"},\
+                        {value: "CONTINUOUS", label: "CONTINUOUS"}\
+                    ]',
+                    'Task classes and resources sharing mode<br/>\
+                    The following deployment modes are supported:\
+                    <ul>\
+                        <li>PRIVATE - in this mode deployed classes do not 
share resources</li>\
+                        <li>ISOLATED - in this mode tasks or classes deployed 
within the same class loader will share the same instances of resources</li>\
+                        <li>SHARED - same as ISOLATED, but now tasks from 
different master nodes with the same user version and same class loader will 
share the same class loader on remote nodes</li>\
+                        <li>CONTINUOUS - same as SHARED deployment mode, but 
resources will not be undeployed even after all master nodes left grid</li>\
+                    </ul>')
+            .pc-form-grid-col-60
+                +checkbox('Enable peer class loading', 
`${model}.peerClassLoadingEnabled`, '"peerClassLoadingEnabled"', 
'Enables/disables peer class loading')
+            .pc-form-grid-col-60
+                +number('Missed resources cache size:', 
`${model}.peerClassLoadingMissedResourcesCacheSize`, 
'"peerClassLoadingMissedResourcesCacheSize"', enabled, '100', '0',
+                    'If size greater than 0, missed resources will be cached 
and next resource request ignored<br/>\
+                    If size is 0, then request for the resource will be sent 
to the remote node every time this resource is requested')
+            .pc-form-grid-col-60
+                +number('Pool size:', 
`${model}.peerClassLoadingThreadPoolSize`, '"peerClassLoadingThreadPoolSize"', 
enabled, '2', '1', 'Thread pool size to use for peer class loading')
+            .pc-form-grid-col-60
+                mixin clusters-deployment-packages
+                    .ignite-form-field
+                        -let items = exclude
+                        -var uniqueTip = 'Such package already exists!'
+
+                        list-editable(
+                            ng-model=items
+                            name='localClassPathExclude'
+                            list-editable-cols=`::[{
+                                name: "Local class path excludes:",
+                                tip: "List of packages from the system 
classpath that need to be peer-to-peer loaded from task originating node<br/>
+                                '*' is supported at the end of the package 
name which means that all sub-packages and their classes are included like in 
Java package import clause"
+                            }]`
+                            ng-disabled=enabledToDisabled(enabled)
+                        )
+                            list-editable-item-view {{ $item }}
+
+                            list-editable-item-edit
+                                +list-java-package-field('Package name', 
'$item', '"packageName"', items)(
+                                    ignite-auto-focus
+                                )
+                                    +unique-feedback('"packageName"', 
uniqueTip)
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$editLast($ctrl.Clusters.addPeerClassLoadingLocalClassPathExclude(${model}))`
+                                    label-single='package'
+                                    label-multiple='packages'
+                                )
+
+                -var form = '$parent.form'
+                +clusters-deployment-packages
+                -var form = 'deployment'
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +java-class('Class loader:', model + '.classLoader', 
'"classLoader"', 'true', 'false',
+                    'Loader which will be used for instantiating execution 
context')
+
+            .pc-form-grid-col-60
+                +dropdown('Deployment variant:', modelDeployment + '.kind', 
'"deploymentKind"', 'true', 'Default',
+                    '[\
+                        {value: "URI", label: "URI"},\
+                        {value: "Local", label: "Local"}, \
+                        {value: "Custom", label: "Custom"},\
+                        {value: null, label: "Default"}\
+                    ]',
+                    'Grid deployment SPI is in charge of deploying tasks and 
classes from different sources:\
+                    <ul>\
+                        <li>URI - Deploy tasks from different sources like 
file system folders, email and HTTP</li>\
+                        <li>Local - Only within VM deployment on local 
node</li>\
+                        <li>Custom - Custom implementation of 
DeploymentSpi</li>\
+                        <li>Default - Default configuration of 
LocalDeploymentSpi will be used</li>\
+                    </ul>')
+            .pc-form-group(ng-show=uriDeployment).pc-form-grid-row
+                .pc-form-grid-col-60
+                    mixin clusters-deployment-uri
+                        .ignite-form-field
+                            -let items = uriListModel
+                            -var uniqueTip = 'Such URI already configured!'
+
+                            list-editable(
+                                ng-model=items
+                                name='uriList'
+                                list-editable-cols=`::[{
+                                    name: "URI list:",
+                                    tip: "List of URI which point to GAR file 
and which should be scanned by SPI for the new tasks"
+                                }]`
+                            )
+                                list-editable-item-view {{ $item }}
+
+                                list-editable-item-edit
+                                    +list-url-field('URL', '$item', '"url"', 
items)
+                                        +unique-feedback('"url"', uniqueTip)
+
+                                list-editable-no-items
+                                    list-editable-add-item-button(
+                                        add-item=`$editLast((${items} = 
${items} || []).push(''))`
+                                        label-single='URI'
+                                        label-multiple='URIs'
+                                    )
+
+                    - var form = '$parent.form'
+                    +clusters-deployment-uri
+                    - var form = 'deployment'
+
+                .pc-form-grid-col-60
+                    +text('Temporary directory path:', modelDeployment + 
'.URI.temporaryDirectoryPath', '"DeploymentURITemporaryDirectoryPath"', 
'false', 'Temporary directory path',
+                    'Absolute path to temporary directory which will be used 
by deployment SPI to keep all deployed classes in')
+                .pc-form-grid-col-60
+                    mixin clusters-deployment-scanner
+                        .ignite-form-field
+                            -let items = scannerModel
+                            -var uniqueTip = 'Such scanner already configured!'
+
+                            list-editable(
+                                ng-model=items
+                                name='scannerModel'
+                                list-editable-cols=`::[{name: "URI deployment 
scanners:"}]`
+                            )
+                                list-editable-item-view {{ $item }}
+
+                                list-editable-item-edit
+                                    +list-java-class-field('Scanner', '$item', 
'"scanner"', items)
+                                        +unique-feedback('"scanner"', 
uniqueTip)
+
+                                list-editable-no-items
+                                    list-editable-add-item-button(
+                                        add-item=`$editLast((${items} = 
${items} || []).push(''))`
+                                        label-single='scanner'
+                                        label-multiple='scanners'
+                                    )
+
+                    - var form = '$parent.form'
+                    +clusters-deployment-scanner
+                    - var form = 'deployment'
+
+                .pc-form-grid-col-60
+                    +java-class('Listener:', 
`${modelDeployment}.URI.listener`, '"DeploymentURIListener"', 'true', 'false', 
'Deployment event listener', uriDeployment)
+                .pc-form-grid-col-60
+                    +checkbox('Check MD5', `${modelDeployment}.URI.checkMd5`, 
'"DeploymentURICheckMd5"', 'Exclude files with same md5s from deployment')
+                .pc-form-grid-col-60
+                    +checkbox('Encode URI', 
`${modelDeployment}.URI.encodeUri`, '"DeploymentURIEncodeUri"', 'URI must be 
encoded before usage')
+            .pc-form-group(ng-show=localDeployment).pc-form-grid-row
+                .pc-form-grid-col-60
+                    +java-class('Listener:', 
`${modelDeployment}.Local.listener`, '"DeploymentLocalListener"', 'true', 
'false', 'Deployment event listener', localDeployment)
+            .pc-form-group(ng-show=customDeployment).pc-form-grid-row
+                .pc-form-grid-col-60
+                    +java-class('Class:', 
`${modelDeployment}.Custom.className`, '"DeploymentCustom"', 'true', 
customDeployment, 'DeploymentSpi implementation class', customDeployment)
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterDeployment')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/discovery.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/discovery.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/discovery.pug
new file mode 100644
index 0000000..35bd5e8
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/discovery.pug
@@ -0,0 +1,97 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'discovery'
+-var model = '$ctrl.clonedCluster.discovery'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Discovery
+    panel-description
+        | TCP/IP discovery configuration. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/cluster-config"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-20
+                +text-ip-address('Local address:', `${model}.localAddress`, 
'"discoLocalAddress"', 'true', '228.1.2.4',
+                    'Local host IP address that discovery SPI uses<br/>\
+                    If not provided a first found non-loopback address will be 
used')
+            .pc-form-grid-col-20
+                +number-min-max('Local port:', `${model}.localPort`, 
'"discoLocalPort"', 'true', '47500', '1024', '65535', 'Local port which node 
uses')
+            .pc-form-grid-col-20
+                +number('Local port range:', `${model}.localPortRange`, 
'"discoLocalPortRange"', 'true', '100', '1', 'Local port range')
+            .pc-form-grid-col-60
+                +java-class('Address resolver:', `${model}.addressResolver`, 
'"discoAddressResolver"', 'true', 'false',
+                    'Provides resolution between external and internal 
addresses')
+            .pc-form-grid-col-30
+                +number('Socket timeout:', `${model}.socketTimeout`, 
'"socketTimeout"', 'true', '5000', '0', 'Socket operations timeout')
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Acknowledgement timeout:',
+                    model: `${model}.ackTimeout`,
+                    name: '"ackTimeout"',
+                    disabled: 'false',
+                    placeholder: '5000',
+                    min: '0',
+                    max: `{{ ${model}.maxAckTimeout || 600000 }}`,
+                    tip: 'Message acknowledgement timeout'
+                })
+                    +form-field-feedback('"ackTimeout"', 'max', 
`Acknowledgement timeout should be less than max acknowledgement timeout ({{ 
${model}.maxAckTimeout || 60000 }}).`)
+            .pc-form-grid-col-30
+                +number('Max acknowledgement timeout:', 
`${model}.maxAckTimeout`, '"maxAckTimeout"', 'true', '600000', '0', 'Maximum 
message acknowledgement timeout')
+            .pc-form-grid-col-30
+                +number('Network timeout:', `${model}.networkTimeout`, 
'"discoNetworkTimeout"', 'true', '5000', '1', 'Timeout to use for network 
operations')
+            .pc-form-grid-col-30
+                +number('Join timeout:', `${model}.joinTimeout`, 
'"joinTimeout"', 'true', '0', '0',
+                    'Join timeout<br/>' +
+                    '0 means wait forever')
+            .pc-form-grid-col-30
+                +number('Thread priority:', `${model}.threadPriority`, 
'"threadPriority"', 'true', '10', '1', 'Thread priority for all threads started 
by SPI')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +number('Heartbeat frequency:', `${model}.heartbeatFrequency`, 
'"heartbeatFrequency"', 'true', '2000', '1', 'Heartbeat messages issuing 
frequency')
+            .pc-form-grid-col-30
+                +number('Max heartbeats miss w/o init:', 
`${model}.maxMissedHeartbeats`, '"maxMissedHeartbeats"', 'true', '1', '1',
+                    'Max heartbeats count node can miss without initiating 
status check')
+            .pc-form-grid-col-30(ng-if-end)
+                +number('Max missed client heartbeats:', 
`${model}.maxMissedClientHeartbeats`, '"maxMissedClientHeartbeats"', 'true', 
'5', '1',
+                    'Max heartbeats count node can miss without failing client 
node')
+
+            .pc-form-grid-col-60
+                +number('Topology history:', `${model}.topHistorySize`, 
'"topHistorySize"', 'true', '1000', '0', 'Size of topology snapshots history')
+            .pc-form-grid-col-60
+                +java-class('Discovery listener:', `${model}.listener`, 
'"discoListener"', 'true', 'false', 'Listener for grid node discovery events')
+            .pc-form-grid-col-60
+                +java-class('Data exchange:', `${model}.dataExchange`, 
'"dataExchange"', 'true', 'false', 'Class name of handler for initial data 
exchange between Ignite nodes')
+            .pc-form-grid-col-60
+                +java-class('Metrics provider:', `${model}.metricsProvider`, 
'"metricsProvider"', 'true', 'false', 'Class name of metric provider to 
discovery SPI')
+            .pc-form-grid-col-30
+                +number('Reconnect count:', `${model}.reconnectCount`, 
'"discoReconnectCount"', 'true', '10', '1', 'Reconnect attempts count')
+            .pc-form-grid-col-30
+                +number('Statistics frequency:', 
`${model}.statisticsPrintFrequency`, '"statisticsPrintFrequency"', 'true', '0', 
'1', 'Statistics print frequency')
+            .pc-form-grid-col-60
+                +number('IP finder clean frequency:', 
`${model}.ipFinderCleanFrequency`, '"ipFinderCleanFrequency"', 'true', '60000', 
'1', 'IP finder clean frequency')
+            .pc-form-grid-col-60
+                +java-class('Node authenticator:', `${model}.authenticator`, 
'"authenticator"', 'true', 'false', 'Class name of node authenticator 
implementation')
+            .pc-form-grid-col-60
+                +checkbox('Force server mode', `${model}.forceServerMode`, 
'"forceServerMode"', 'Force start TCP/IP discovery in server mode')
+            .pc-form-grid-col-60
+                +checkbox('Client reconnect disabled', 
`${model}.clientReconnectDisabled`, '"clientReconnectDisabled"',
+                    'Disable try of client to reconnect after server detected 
client node failure')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterDiscovery')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/events.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/events.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/events.pug
new file mode 100644
index 0000000..a41999e
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/events.pug
@@ -0,0 +1,66 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'events'
+-var model = '$ctrl.clonedCluster'
+-var modelEventStorage = model + '.eventStorage'
+-var modelEventStorageKind = modelEventStorage + '.kind'
+-var eventStorageMemory = modelEventStorageKind + ' === "Memory"'
+-var eventStorageCustom = modelEventStorageKind + ' === "Custom"'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Events
+    panel-description
+        | Grid events are used for notification about what happens within the 
grid. 
+        | #[a.link-success(href="https://apacheignite.readme.io/docs/events"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +dropdown('Event storage:', modelEventStorageKind, 
'"eventStorageKind"', 'true', 'Disabled', '$ctrl.eventStorage',
+                'Regulate how grid store events locally on node\
+                <ul>\
+                    <li>Memory - All events are kept in the FIFO queue 
in-memory</li>\
+                    <li>Custom - Custom implementation of event storage 
SPI</li>\
+                </ul>')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +dropdown('Event storage:', modelEventStorageKind, 
'"eventStorageKind"', 'true', 'Disabled', '$ctrl.eventStorage',
+                'Regulate how grid store events locally on node\
+                <ul>\
+                    <li>Memory - All events are kept in the FIFO queue 
in-memory</li>\
+                    <li>Custom - Custom implementation of event storage 
SPI</li>\
+                    <li>Disabled - Events are not collected</li>\
+                </ul>')
+            .pc-form-group.pc-form-grid-row(ng-if=modelEventStorageKind)
+                .pc-form-grid-col-30(ng-if-start=eventStorageMemory)
+                    +number('Events expiration time:', 
`${modelEventStorage}.Memory.expireAgeMs`, '"EventStorageExpireAgeMs"', 'true', 
'Long.MAX_VALUE', '1', 'All events that exceed this value will be removed from 
the queue when next event comes')
+                .pc-form-grid-col-30
+                    +number('Events queue size:', 
`${modelEventStorage}.Memory.expireCount`, '"EventStorageExpireCount"', 'true', 
'10000', '1', 'Events will be filtered out when new request comes')
+                .pc-form-grid-col-60(ng-if-end)
+                    +java-class('Filter:', 
`${modelEventStorage}.Memory.filter`, '"EventStorageFilter"', 'true', 'false',
+                    'Filter for events to be recorded<br/>\
+                    Should be implementation of 
o.a.i.lang.IgnitePredicate&lt;o.a.i.events.Event&gt;', eventStorageMemory)
+
+                .pc-form-grid-col-60(ng-if=eventStorageCustom)
+                    +java-class('Class:', 
`${modelEventStorage}.Custom.className`, '"EventStorageCustom"', 'true', 
eventStorageCustom, 'Event storage implementation class name', 
eventStorageCustom)
+
+                .pc-form-grid-col-60
+                    +dropdown-multiple('Include type:', 
`${model}.includeEventTypes`, '"includeEventTypes"', true, 'Choose recorded 
event types', '', '$ctrl.eventGroups',
+                    'Array of event types, which will be recorded by 
GridEventStorageManager#record(Event)<br/>\
+                    Note, that either the include event types or the exclude 
event types can be established')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterEvents')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/failover.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/failover.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/failover.pug
new file mode 100644
index 0000000..2e92f83
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/failover.pug
@@ -0,0 +1,89 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var model = '$ctrl.clonedCluster'
+-var form = 'failoverSpi'
+-var failoverSpi = model + '.failoverSpi'
+-var failoverCustom = '$item.kind === "Custom"'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Failover configuration
+    panel-description
+        | Failover SPI provides ability to supply custom logic for handling 
failed execution of a grid job. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/fault-tolerance"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.0.0")')
+                +number('Failure detection timeout:', model + 
'.failureDetectionTimeout', '"failureDetectionTimeout"', 'true',
+                    '10000', '1', 'Failure detection timeout is used to 
determine how long the communication or discovery SPIs should wait before 
considering a remote connection failed')
+            .pc-form-grid-col-60(ng-if-end)
+                +number('Client failure detection timeout:', model + 
'.clientFailureDetectionTimeout', '"clientFailureDetectionTimeout"', 'true',
+                    '30000', '1', 'Failure detection timeout is used to 
determine how long the communication or discovery SPIs should wait before 
considering a remote connection failed')
+
+            .pc-form-grid-col-60(ng-init='failoverSpiTbl={type: "failoverSpi", 
model: "failoverSpi", focusId: "kind", ui: "failover-table"}')
+                mixin clusters-failover-spi
+                    .ignite-form-field
+                        +ignite-form-field__label('Failover SPI 
configurations:', '"failoverSpi"')
+                            +tooltip(`Failover SPI configurations`)
+                        .ignite-form-field__control
+                            -let items = failoverSpi
+
+                            list-editable(ng-model=items name='failoverSpi')
+                                list-editable-item-edit
+                                    - form = '$parent.form'
+                                    .settings-row
+                                        +sane-ignite-form-field-dropdown({
+                                            required: true,
+                                            label: 'Failover SPI:',
+                                            model: '$item.kind',
+                                            name: '"failoverKind"',
+                                            placeholder: 'Choose Failover SPI',
+                                            options: 
'::$ctrl.Clusters.failoverSpis',
+                                            tip: `
+                                            Provides ability to supply custom 
logic for handling failed execution of a grid job
+                                            <ul>
+                                                <li>Job stealing - Supports 
job stealing from over-utilized nodes to under-utilized nodes</li>
+                                                <li>Never - Jobs are ordered 
as they arrived</li>
+                                                <li>Always - Jobs are first 
ordered by their priority</li>
+                                                <li>Custom - Jobs are 
activated immediately on arrival to mapped node</li>
+                                                <li>Default - Default 
FailoverSpi implementation</li>
+                                            </ul>`
+                                        })
+
+                                    .settings-row(ng-show='$item.kind === 
"JobStealing"')
+                                        +number('Maximum failover attempts:', 
'$item.JobStealing.maximumFailoverAttempts', '"jsMaximumFailoverAttempts"', 
'true', '5', '0',
+                                            'Maximum number of attempts to 
execute a failed job on another node')
+                                    .settings-row(ng-show='$item.kind === 
"Always"')
+                                        +number('Maximum failover attempts:', 
'$item.Always.maximumFailoverAttempts', '"alwaysMaximumFailoverAttempts"', 
'true', '5', '0',
+                                            'Maximum number of attempts to 
execute a failed job on another node')
+                                    .settings-row(ng-show=failoverCustom)
+                                        +java-class('SPI implementation', 
'$item.Custom.class', '"failoverSpiClass"', 'true', failoverCustom,
+                                            'Custom FailoverSpi implementation 
class name.', failoverCustom)
+
+                                list-editable-no-items
+                                    list-editable-add-item-button(
+                                        add-item=`(${items} = ${items} || 
[]).push({})`
+                                        label-single='failover SPI'
+                                        label-multiple='failover SPIs'
+                                    )
+
+                +clusters-failover-spi
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterFailover')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general.pug
new file mode 100644
index 0000000..86f6384
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general.pug
@@ -0,0 +1,89 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'general'
+-var model = '$ctrl.clonedCluster'
+-var modelDiscoveryKind = model + '.discovery.kind'
+
+include ./general/discovery/cloud
+include ./general/discovery/google
+include ./general/discovery/jdbc
+include ./general/discovery/multicast
+include ./general/discovery/s3
+include ./general/discovery/shared
+include ./general/discovery/vm
+include ./general/discovery/zookeeper
+include ./general/discovery/kubernetes
+
+panel-collapsible(opened=`::true` ng-form=form)
+    panel-title General
+    panel-description
+        | Common cluster configuration.
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/clustering"; 
target="_blank") More info]
+    panel-content.pca-form-row
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-text({
+                    label: 'Name:',
+                    model: `${model}.name`,
+                    name: '"clusterName"',
+                    disabled: 'false',
+                    placeholder: 'Input name',
+                    required: true,
+                    tip: 'Instance name allows to indicate to what grid this 
particular grid instance belongs to'
+                })(
+                    ignite-unique='$ctrl.shortClusters'
+                    ignite-unique-property='name'
+                    ignite-unique-skip=`["_id", ${model}]`
+                )
+                    +unique-feedback(`${model}.name`, 'Cluster name should be 
unique.')
+
+            .pc-form-grid-col-30
+                +text-ip-address('Local host:', `${model}.localHost`, 
'"localHost"', 'true', '0.0.0.0',
+                    'System-wide local address or host for all Ignite 
components to bind to<br/>\
+                    If not defined then Ignite tries to use local wildcard 
address<br/>\
+                    That means that all services will be available on all 
network interfaces of the host machine')
+
+            .pc-form-grid-col-60
+                +dropdown('Discovery:', `${model}.discovery.kind`, 
'"discovery"', 'true', 'Choose discovery', '$ctrl.Clusters.discoveries',
+                'Discovery allows to discover remote nodes in grid\
+                <ul>\
+                    <li>Static IPs - IP Finder which works only with pre 
configured list of IP addresses specified</li>\
+                    <li>Multicast - Multicast based IP finder</li>\
+                    <li>AWS S3 - AWS S3 based IP finder that automatically 
discover cluster nodes on Amazon EC2 cloud</li>\
+                    <li>Apache jclouds - Apache jclouds multi cloud toolkit 
based IP finder for cloud platforms with unstable IP addresses</li>\
+                    <li>Google cloud storage - Google Cloud Storage based IP 
finder that automatically discover cluster nodes on Google Compute Engine 
cluster</li>\
+                    <li>JDBC - JDBC based IP finder that use database to store 
node IP address</li>\
+                    <li>Shared filesystem - Shared filesystem based IP finder 
that use file to store node IP address</li>\
+                    <li>Apache ZooKeeper - Apache ZooKeeper based IP finder 
when you use ZooKeeper to coordinate your distributed environment</li>\
+                    <li>Kubernetes - IP finder for automatic lookup of Ignite 
nodes running in Kubernetes environment</li>\
+                </ul>')
+            .pc-form-group
+                +discovery-cloud()(ng-if=`${modelDiscoveryKind} === 'Cloud'`)
+                +discovery-google()(ng-if=`${modelDiscoveryKind} === 
'GoogleStorage'`)
+                +discovery-jdbc()(ng-if=`${modelDiscoveryKind} === 'Jdbc'`)
+                +discovery-multicast()(ng-if=`${modelDiscoveryKind} === 
'Multicast'`)
+                +discovery-s3()(ng-if=`${modelDiscoveryKind} === 'S3'`)
+                +discovery-shared()(ng-if=`${modelDiscoveryKind} === 
'SharedFs'`)
+                +discovery-vm()(ng-if=`${modelDiscoveryKind} === 'Vm'`)
+                +discovery-zookeeper()(ng-if=`${modelDiscoveryKind} === 
'ZooKeeper'`)
+                +discovery-kubernetes()(ng-if=`${modelDiscoveryKind} === 
'Kubernetes'`)
+
+        .pca-form-column-6
+            -var model = '$ctrl.clonedCluster'
+            +preview-xml-java(model, 'clusterGeneral')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/cloud.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/cloud.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/cloud.pug
new file mode 100644
index 0000000..074756e
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/cloud.pug
@@ -0,0 +1,78 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-cloud(modelAt='$ctrl.clonedCluster')
+
+    -const model = `${modelAt}.discovery.Cloud`
+    -const discoveryKind = 'Cloud'
+    -const required = `${modelAt}.discovery.kind == "${discoveryKind}"`
+    -const regions = `${model}.regions`
+    -const zones = `${model}.zones`
+    -const formRegions = 'discoveryCloudRegions'
+    -const formZones = 'discoveryCloudZones'
+
+    div.pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text('Credential:', `${model}.credential`, '"credential"', 
'false', 'Input cloud credential',
+                'Credential that is used during authentication on the 
cloud<br/>\
+                Depending on a cloud platform it can be a password or access 
key')
+        .pc-form-grid-col-30
+            +text('Path to credential:', `${model}.credentialPath`, 
'"credentialPath"', 'false', 'Input path to credential',
+                'Path to a credential that is used during authentication on 
the cloud<br/>\
+                Access key or private key should be stored in a plain or PEM 
file without a passphrase')
+        .pc-form-grid-col-30
+            +text('Identity:', `${model}.identity`, '"' + discoveryKind + 
'Identity"', required, 'Input identity',
+                'Identity that is used as a user name during a connection to 
the cloud<br/>\
+                Depending on a cloud platform it can be an email address, user 
name, etc')
+        .pc-form-grid-col-30
+            +text('Provider:', `${model}.provider`, '"' + discoveryKind + 
'Provider"', required, 'Input provider', 'Cloud provider to use')
+        .pc-form-grid-col-60
+            .ignite-form-field
+                +list-text-field({
+                    items: regions,
+                    lbl: 'Region name',
+                    name: 'regionName',
+                    itemName: 'region',
+                    itemsName: 'regions'
+                })(
+                    list-editable-cols=`::[{
+                        name: 'Regions:',
+                        tip: "List of regions where VMs are located<br />
+                        If the regions are not set then every region, that a 
cloud provider has, will be investigated. This could lead to significant 
performance degradation<br />
+                        Note, that some cloud providers, like Google Compute 
Engine, doesn't have a notion of a region. For such providers regions are 
redundant"
+                    }]`
+                )
+                    +unique-feedback(_, 'Such region already exists!')
+
+        .pc-form-grid-col-60
+            .ignite-form-field
+                +list-text-field({
+                    items: zones,
+                    lbl: 'Zone name',
+                    name: 'zoneName',
+                    itemName: 'zone',
+                    itemsName: 'zones'
+                })(
+                    list-editable-cols=`::[{
+                        name: 'Zones:',
+                        tip: "List of zones where VMs are located<br />
+                        If the zones are not set then every zone from 
specified regions, will be taken into account<br />
+                        Note, that some cloud providers, like Rackspace, 
doesn't have a notion of a zone. For such providers zones are redundant"
+                    }]`
+                )
+                    +unique-feedback(_, 'Such zone already exists!')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/google.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/google.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/google.pug
new file mode 100644
index 0000000..7de3843
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/google.pug
@@ -0,0 +1,38 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-google(modelAt = '$ctrl.clonedCluster')
+    -const discoveryKind = 'GoogleStorage'
+    -const required = `${modelAt}.discovery.kind == '${discoveryKind}'`
+    -const model = `${modelAt}.discovery.GoogleStorage`
+
+    .pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text('Project name:', `${model}.projectName`, 
`'${discoveryKind}ProjectName'`, required, 'Input project name', '' +
+                'Google Cloud Platforms project name<br/>\
+                Usually this is an auto generated project number(ex. 
208709979073) that can be found in "Overview" section of Google Developer 
Console')
+        .pc-form-grid-col-30
+            +text('Bucket name:', `${model}.bucketName`, 
`'${discoveryKind}BucketName'`, required, 'Input bucket name',
+                'Google Cloud Storage bucket name<br/>\
+                If the bucket does not exist Ignite will automatically create 
it<br/>\
+                However the name must be unique across whole Google Cloud 
Storage and Service Account Id must be authorized to perform this operation')
+        .pc-form-grid-col-30
+            +text('Private key path:', `${model}.serviceAccountP12FilePath`, 
`'${discoveryKind}ServiceAccountP12FilePath'`, required, 'Input private key 
path',
+                'Full path to the private key in PKCS12 format of the Service 
Account')
+        .pc-form-grid-col-30
+            +text('Account id:', `${model}.serviceAccountId`, 
`'${discoveryKind}ServiceAccountId'`, required, 'Input account id', 'Service 
account ID (typically an e-mail address)')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/jdbc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/jdbc.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/jdbc.pug
new file mode 100644
index 0000000..7b23a22
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/jdbc.pug
@@ -0,0 +1,35 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-jdbc(modelAt = '$ctrl.clonedCluster')
+    -const model = `${modelAt}.discovery.Jdbc`
+    -const required = `${modelAt}.discovery.kind === "Jdbc"`
+
+    .pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text('Data source bean name:', `${model}.dataSourceBean`,
+                '"dataSourceBean"', required, 'Input bean name', 'Name of the 
data source bean in Spring context')
+        .pc-form-grid-col-30
+            +dialect('Dialect:', `${model}.dialect`, '"dialect"', required,
+                'Dialect of SQL implemented by a particular RDBMS:', 'Generic 
JDBC dialect', 'Choose JDBC dialect')
+        .pc-form-grid-col-60
+            +checkbox('DB schema should be initialized by Ignite', 
`${model}.initSchema`, '"initSchema"',
+                'Flag indicating whether DB schema should be initialized by 
Ignite or was explicitly created by user')
+        
.pc-form-grid-col-30(ng-if=`$ctrl.Clusters.requiresProprietaryDrivers(${modelAt})`)
+            a.link-success(ng-href=`{{ 
$ctrl.Clusters.JDBCDriverURL(${modelAt}) }}` target='_blank')
+                | Download JDBC drivers?
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/kubernetes.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/kubernetes.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/kubernetes.pug
new file mode 100644
index 0000000..9232022
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/kubernetes.pug
@@ -0,0 +1,38 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-kubernetes(modelAt = '$ctrl.clonedCluster')
+    -const discoveryKind = 'Kubernetes'
+    -const model = `${modelAt}.discovery.Kubernetes`
+
+    .pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text('Service name:', `${model}.serviceName`, 
`'${discoveryKind}ServiceName'`, 'false', 'ignite',
+                "The name of Kubernetes service for Ignite pods' IP addresses 
lookup.<br/>\
+                The name of the service must be equal to the name set in 
service's Kubernetes configuration.<br/>\
+                If this parameter is not changed then the name of the service 
has to be set to 'ignite' in the corresponding Kubernetes configuration.")
+        .pc-form-grid-col-30
+            +text('Namespace:', `${model}.namespace`, 
`'${discoveryKind}Namespace'`, 'false', 'default',
+                "The namespace the Kubernetes service belongs to.<br/>\
+                By default, it's supposed that the service is running under 
Kubernetes `default` namespace.")
+        .pc-form-grid-col-60
+            +url('Kubernetes server:', `${model}.masterUrl`, 
`'${discoveryKind}MasterUrl'`, 'true', 'false', 
'https://kubernetes.default.svc.cluster.local:443',
+                'The host name of the Kubernetes API server')
+        .pc-form-grid-col-60
+            +text('Service token file:', `${model}.accountToken`, 
`'${discoveryKind}AccountToken'`, 'false', 
'/var/run/secrets/kubernetes.io/serviceaccount/token',
+                'The path to the service token file')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/multicast.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/multicast.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/multicast.pug
new file mode 100644
index 0000000..639a374
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/multicast.pug
@@ -0,0 +1,63 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-multicast(modelAt = '$ctrl.clonedCluster')
+    -const model = `${modelAt}.discovery.Multicast`
+    -const addresses = `${model}.addresses`
+
+    .pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text-ip-address('IP address:', `${model}.multicastGroup`, 
'"multicastGroup"', 'true', '228.1.2.4', 'IP address of multicast group')
+        .pc-form-grid-col-30
+            +number-min-max('Port number:', `${model}.multicastPort`, 
'"multicastPort"', 'true', '47400', '0', '65535', 'Port number which multicast 
messages are sent to')
+        .pc-form-grid-col-20
+            +number('Waits for reply:', `${model}.responseWaitTime`, 
'"responseWaitTime"', 'true', '500', '0',
+                'Time in milliseconds IP finder waits for reply to multicast 
address request')
+        .pc-form-grid-col-20
+            +number('Attempts count:', `${model}.addressRequestAttempts`, 
'"addressRequestAttempts"', 'true', '2', '0',
+                'Number of attempts to send multicast address request<br/>\
+                IP finder re - sends request only in case if no reply for 
previous request is received')
+        .pc-form-grid-col-20
+            +text-ip-address('Local address:', `${model}.localAddress`, 
'"localAddress"', 'true', '0.0.0.0',
+                'Local host address used by this IP finder<br/>\
+                If provided address is non - loopback then multicast socket is 
bound to this interface<br/>\
+                If local address is not set or is any local address then IP 
finder creates multicast sockets for all found non - loopback addresses')
+        .pc-form-grid-col-60
+            .ignite-form-field
+                .ignite-form-field__control
+                    +list-addresses({
+                        items: addresses,
+                        name: 'multicastAddresses',
+                        tip: `Addresses may be represented as follows:
+                        <ul>
+                            <li>IP address (e.g. 127.0.0.1, 9.9.9.9, etc)</li>
+                            <li>IP address and port (e.g. 127.0.0.1:47500, 
9.9.9.9:47501, etc)</li>
+                            <li>IP address and port range (e.g. 
127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc)</li>
+                            <li>Hostname (e.g. host1.com, host2, etc)</li>
+                            <li>Hostname and port (e.g. host1.com:47500, 
host2:47502, etc)</li>
+                            <li>Hostname and port range (e.g. 
host1.com:47500..47510, host2:47502..47508, etc)</li>
+                        </ul>
+                        If port is 0 or not provided then default port will be 
used (depends on discovery SPI configuration)<br />
+                        If port range is provided (e.g. host:port1..port2) the 
following should be considered:
+                        </ul>
+                        <ul>
+                            <li> port1 &lt; port2 should be true</li>
+                            <li> Both port1 and port2 should be greater than 
0</li>
+                        </ul>`
+                    })
+                    

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/s3.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/s3.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/s3.pug
new file mode 100644
index 0000000..41d45ac
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/general/discovery/s3.pug
@@ -0,0 +1,38 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin discovery-s3(modelAt = '$ctrl.clonedCluster')
+
+    -var discoveryKind = 'S3'
+    -var required = `${modelAt}.discovery.kind == '${discoveryKind}'`
+    -var model = `${modelAt}.discovery.S3`
+
+    .pc-form-grid-row&attributes(attributes=attributes)
+        .pc-form-grid-col-30
+            +text('Bucket name:', `${model}.bucketName`, 
`'${discoveryKind}BucketName'`, required, 'Input bucket name', 'Bucket name for 
IP finder')
+        .pc-form-grid-col-30
+            .pc-form-grid__text-only-item(style='font-style: italic;color: 
#424242;')
+                | AWS credentials will be generated as stub
+        .pc-form-grid-col-40(ng-if-start=`$ctrl.available("2.4.0")`)
+            +text('Bucket endpoint:', `${model}.bucketEndpoint`, 
`'${discoveryKind}BucketEndpoint'`, false, 'Input bucket endpoint',
+            'Bucket endpoint for IP finder<br/> \
+            For information about possible endpoint names visit <a 
href="http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region";>docs.aws.amazon.com</a>')
+        .pc-form-grid-col-20(ng-if-end)
+            +text('SSE algorithm:', `${model}.SSEAlgorithm`, 
`'${discoveryKind}SSEAlgorithm'`, false, 'Input SSE algorithm',
+            'Server-side encryption algorithm for Amazon S3-managed encryption 
keys<br/> \
+            For information about possible S3-managed encryption keys visit <a 
href="http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html";>docs.aws.amazon.com</a>')
\ No newline at end of file

Reply via email to