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

# ==================================================================
# This is a sample file for Visor CMD to use with "start" command.
# More info: https://apacheignite-tools.readme.io/docs/start-command
# ==================================================================

# Section with settings for host1:
[host1]
# IP address or host name:
host=192.168.1.1

# SSH port:
port=2200

# SSH login:
uname=userName

# SSH password:
passwd=password

# SSH key path:
key=~/.ssh/id_rsa

# Number of nodes to start:
nodes=1

# Ignite home path:
igniteHome=/usr/lib/ignite

# Ignite config path:
cfg=examples/example-ignite.xml

# Ignite node start script:
script=bin/ignite.sh

# Section with settings for host2:
[host2]
# IP address or host name:
host=192.168.1.2

# Section with default settings. Used if value not defined in host section.
[defaults]
# SSH port:
port=22

# SSH login:
uname=userName

# SSH password:
passwd=password

# SSH key path:
key=~/.ssh/id_rsa

# Number of nodes to start:
nodes=3

# Ignite home path:
igniteHome=/usr/lib/ignite

# Ignite config path:
cfg=examples/example-ignite.xml

# Ignite node start script:
script=bin/ignite.sh
