From a7f114c31d475e4f748b956d1f28da9bd47a4e0c Mon Sep 17 00:00:00 2001 From: Kaleb S. KEITHLEY Date: Thu, 11 Jun 2015 16:28:06 -0400 Subject: [PATCH 73/73] common-ha: handle long node names and node names with '-' and '.' in them sourcing the /etc/ganesha/ganesha-ha.conf file seemed like a simple and elegant solution for reading config params, but bash variable names do not allow '-' and '.' in them. also fix incorrect path to shared volume Change-Id: I7d05ac04034c4d829916ff06472dbe9f86a10525 BUG: 1225507 Signed-off-by: Kaleb S. KEITHLEY Reviewed-on: https://code.engineering.redhat.com/gerrit/50591 Reviewed-by: Soumya Koduri Reviewed-by: Niels de Vos Tested-by: Niels de Vos --- extras/ganesha/config/ganesha-ha.conf.sample | 26 +++++++--- extras/ganesha/ocf/ganesha_nfsd | 4 +- extras/ganesha/scripts/ganesha-ha.sh | 70 +++++++++++++++----------- 3 files changed, 60 insertions(+), 40 deletions(-) diff --git a/extras/ganesha/config/ganesha-ha.conf.sample b/extras/ganesha/config/ganesha-ha.conf.sample index f8536d3..24054ab 100644 --- a/extras/ganesha/config/ganesha-ha.conf.sample +++ b/extras/ganesha/config/ganesha-ha.conf.sample @@ -1,12 +1,22 @@ # Name of the HA cluster created. +# must be unique within the subnet HA_NAME="ganesha-ha-360" -# The server from which you intend to mount -# the shared volume. +# +# The gluster server from which to mount the shared data volume. HA_VOL_SERVER="server1" -# The subset of nodes of the Gluster Trusted Pool -# that forms the ganesha HA cluster. IP/Hostname -# is specified. +# +# N.B. you may use short names or long names; you may not use IP addrs. +# Once you select one, stay with it as it will be mildly unpleasant to +# clean up if you switch later on. Ensure that all names - short and/or +# long - are in DNS or /etc/hosts on all machines in the cluster. +# +# The subset of nodes of the Gluster Trusted Pool that form the ganesha +# HA cluster. Hostname is specified. HA_CLUSTER_NODES="server1,server2,..." -# Virtual IPs of each of the nodes specified above. -VIP_server1="10.x.x.x" -VIP_server2="10.x.x.x" +#HA_CLUSTER_NODES="server1.lab.redhat.com,server2.lab.redhat.com,..." +# +# Virtual IPs for each of the nodes specified above. +VIP_server1="10.0.2.1" +VIP_server2="10.0.2.2" +#VIP_server1.lab.redhat.com="10.0.2.1" +#VIP_server2.lab.redhat.com="10.0.2.2" diff --git a/extras/ganesha/ocf/ganesha_nfsd b/extras/ganesha/ocf/ganesha_nfsd index d69b9f4..e064183 100644 --- a/extras/ganesha/ocf/ganesha_nfsd +++ b/extras/ganesha/ocf/ganesha_nfsd @@ -105,9 +105,9 @@ ganesha_nfsd_stop() if [ -d /var/lib/nfs ]; then mv /var/lib/nfs /var/lib/nfs.backup - ln -s $OCF_RESKEY_ha_vol_mnt/${long_host}/nfs /var/lib/nfs + ln -s $OCF_RESKEY_ha_vol_mnt/nfs-ganesha/${long_host}/nfs /var/lib/nfs if [ $? -ne 0 ]; then - logger "warning: ln -s $OCF_RESKEY_ha_vol_mnt/${long_host}/nfs /var/lib/nfs failed" + logger "warning: ln -s $OCF_RESKEY_ha_vol_mnt/nfs-ganesha/${long_host}/nfs /var/lib/nfs failed" fi fi diff --git a/extras/ganesha/scripts/ganesha-ha.sh b/extras/ganesha/scripts/ganesha-ha.sh index 79a99c4..bd344fa 100755 --- a/extras/ganesha/scripts/ganesha-ha.sh +++ b/extras/ganesha/scripts/ganesha-ha.sh @@ -363,10 +363,7 @@ setup_create_resources() while [[ ${1} ]]; do - # ipaddr=$(grep ^${1} ${HA_CONFIG_FILE} | cut -d = -f 2) - ipaddrx="VIP_${1//-/_}" - - ipaddr=${!ipaddrx} + ipaddr=$(grep "^VIP_${1}=" ${HA_CONFDIR}/ganesha-ha.conf | cut -d = -f 2) pcs -f ${cibfile} resource create ${1}-cluster_ip-1 ocf:heartbeat:IPaddr ip=${ipaddr} cidr_netmask=32 op monitor interval=15s if [ $? -ne 0 ]; then @@ -460,9 +457,7 @@ recreate_resources() local cibfile=${1}; shift while [[ ${1} ]]; do - ipaddrx="VIP_${1//-/_}" - - ipaddr=${!ipaddrx} + ipaddr=$(grep "VIP_${1}=" ${HA_CONFDIR}/ganesha-ha.conf | cut -d = -f 2) pcs -f ${cibfile} resource create ${1}-cluster_ip-1 ocf:heartbeat:IPaddr ip=${ipaddr} cidr_netmask=32 op monitor interval=15s if [ $? -ne 0 ]; then @@ -679,43 +674,52 @@ setup_state_volume() local longname="" local shortname="" local dname="" + local dirname="" longname=$(hostname) dname=${longname#$(hostname -s)} while [[ ${1} ]]; do - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname} ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname} + + if [[ ${1} == *${dname} ]]; then + dirname=${1} + else + dirname=${1}${dname} + fi + + + if [ ! -d ${mnt}/nfs-ganesha/${dirname} ]; then + mkdir ${mnt}/nfs-ganesha/${dirname} fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/statd ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/statd fi - touch ${mnt}/nfs-ganesha/${1}${dname}/nfs/state - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha/v4recov ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha/v4recov + touch ${mnt}/nfs-ganesha/${dirname}/nfs/state + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha/v4recov ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha/v4recov fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha/v4old ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha/v4old + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha/v4old ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha/v4old fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/sm ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/sm + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/statd/sm ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/statd/sm fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/sm.bak ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/sm.bak + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/statd/sm.bak ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/statd/sm.bak fi - if [ ! -d ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/state ]; then - mkdir ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/state + if [ ! -d ${mnt}/nfs-ganesha/${dirname}/nfs/statd/state ]; then + mkdir ${mnt}/nfs-ganesha/${dirname}/nfs/statd/state fi for server in ${HA_SERVERS} ; do - if [ ${server} != ${1}${dname} ]; then - ln -s ${mnt}/nfs-ganesha/${server}/nfs/ganesha ${mnt}/nfs-ganesha/${1}${dname}/nfs/ganesha/${server} - ln -s ${mnt}/nfs-ganesha/${server}/nfs/statd ${mnt}/nfs-ganesha/${1}${dname}/nfs/statd/${server} + if [ ${server} != ${dirname} ]; then + ln -s ${mnt}/nfs-ganesha/${server}/nfs/ganesha ${mnt}/nfs-ganesha/${dirname}/nfs/ganesha/${server} + ln -s ${mnt}/nfs-ganesha/${server}/nfs/statd ${mnt}/nfs-ganesha/${dirname}/nfs/statd/${server} fi done shift @@ -728,10 +732,16 @@ main() { local cmd=${1}; shift HA_CONFDIR=${1}; shift + local ha_conf=${HA_CONFDIR}/ganesha-ha.conf local node="" local vip="" - . ${HA_CONFDIR}/ganesha-ha.conf + ha_name=$(grep ^HA_NAME= ${ha_conf} | cut -d = -f 2) + HA_NAME=${ha_name//\"/} + ha_vol_server=$(grep ^HA_VOL_SERVER= ${ha_conf} | cut -d = -f 2) + HA_VOL_SERVER=${ha_vol_server//\"/} + ha_cluster_nodes=$(grep ^HA_CLUSTER_NODES= ${ha_conf} | cut -d = -f 2) + HA_CLUSTER_NODES=${ha_cluster_nodes//\"/} if [ -e /etc/os-release ]; then RHEL6_PCS_CNAME_OPTION="" -- 1.7.1