3 # Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved.
5 # This program and the accompanying materials are made available under the
6 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 # and is available at http://www.eclipse.org/legal/epl-v10.html
13 # Print any error messages
14 test "$1" != "" && echo " ERROR: $1"
16 # Print standard usage help
18 This script is used to configure cluster parameters on this
19 controller. The user should restart controller to apply changes.
21 Usage: $0 <index> <seed_nodes_list>
22 - index: Integer within 1..N, where N is the number of seed nodes.
23 - seed_nodes_list: List of seed nodes, separated by comma or space.
25 The address at the provided index should belong this controller.
26 When running this script on multiple seed nodes, keep the
27 seed_node_list same, and vary the index from 1 through N.
38 ################################################
39 ## Configure Cluster ##
40 ################################################
47 ################################################
48 ## NOTE: Manually restart controller to ##
49 ## apply configuration. ##
50 ################################################
54 # Utility function for joining strings.
60 final=${final}${delim}${str}
66 function create_strings
68 # Using a list of controller IPs, create the strings for data
69 # and rpc seed nodes, as well as the list of members.
71 # First create an arrays with one string per controller.
72 # Then merge the array using the join utility defined above.
74 for ip in ${CONTROLLERIPS[@]} ; do
75 ds[$count]=\\\"akka.tcp:\\/\\/opendaylight-cluster-data@${ip}:2550\\\"
76 rpc[$count]=\\\"akka.tcp:\\/\\/odl-cluster-rpc@${ip}:2551\\\"
77 members[$count]=\\\"member-${count}\\\"
81 DATA_SEED_LIST=$(join ${ds[@]})
82 RPC_SEED_LIST=$(join ${rpc[@]})
83 MEMBER_NAME_LIST=$(join ${members[@]})
86 function get_cli_params
88 # Check if params have been supplied
89 test $# -eq 0 && usage
91 # First param is index, and rest are controller list
95 # Verify we have controller list
96 test "${CONTROLLER_LIST}" == "" && usage "Missing controller list"
98 # Create the list of controllers from the CONTROLLER_LIST variable
99 CONTROLLERIPS=( ${CONTROLLER_LIST//,/ } )
101 test ${INDEX} -le 0 -o ${INDEX} -gt ${#CONTROLLERIPS[@]} && \
102 usage "Invalid index"
104 CONTROLLER_ID="member-${INDEX}"
105 CONTROLLER_IP="${CONTROLLERIPS[((${INDEX} - 1))]}"
109 function modify_conf_files
111 echo "Configuring unique name in akka.conf"
112 sed -i -e "/roles[ ]*=/ { :loop1 /.*\]/ b done1; N; b loop1; :done1 s/roles.*\]/roles = [\"${CONTROLLER_ID}\"]/}" ${AKKACONF}
114 echo "Configuring hostname in akka.conf"
115 sed -i -e "s/hostname[ ]*=.*\"/hostname = \"${CONTROLLER_IP}\"/" ${AKKACONF}
117 echo "Configuring data and rpc seed nodes in akka.conf"
118 sed -i -e "/seed-nodes[ ]*=/ { :loop2 /.*\]/ b done2; N; b loop2; :done2 s/seed-nodes.*opendaylight-cluster-data.*\]/seed-nodes = [${DATA_SEED_LIST}]/; s/seed-nodes.*odl-cluster-rpc.*\]/seed-nodes = [${RPC_SEED_LIST}]/}" ${AKKACONF}
120 echo "Configuring replication type in module-shards.conf"
121 sed -i -e "/^[^#].*replicas[ ]*=/ { :loop /.*\]/ b done; N; b loop; :done s/replicas.*\]/replicas = [${MEMBER_NAME_LIST}]/}" ${MODULESHARDSCONF}
125 function verify_configuration_files
129 CONTROLLER_DIR=`dirname ${BIN_DIR}`
130 CONF_DIR=${CONTROLLER_DIR}/configuration/initial
131 AKKACONF=${CONF_DIR}/akka.conf
132 MODULESCONF=${CONF_DIR}/modules.conf
133 MODULESHARDSCONF=${CONF_DIR}/module-shards.conf
135 # Verify configuation files are present.
136 if [ ! -f ${AKKACONF} -o ! -f ${MODULESHARDSCONF} ]; then
138 ERROR: Cluster configurations files not found. Please configure\
149 verify_configuration_files
159 # vim: ts=4 sw=4 sts=4 et ft=sh :