summaryrefslogtreecommitdiffstats
path: root/plugins/discovery.py
diff options
context:
space:
mode:
authorRamesh Nachimuthu <rnachimu@redhat.com>2014-05-05 16:14:50 +0530
committerSahina Bose <sabose@redhat.com>2014-05-12 02:58:51 -0700
commitfdc74de01faf52114578b64481c44d58abc06405 (patch)
tree19b93c999377ce19083e9e5a97049d0fa99322ce /plugins/discovery.py
parent9605a7b9f60369f72ad5f7f142c37802edf9db3f (diff)
autoconf: don't remove disconnected hosts from nagios
Currently auto-config removes all the hosts with disconnected status in 'peer status' from nagios configuration. But that is not correct as a host can goto disconnected status for many differnt reasons and we should not remove the configuration. Similarly disconnected hosts need not be added to nagios configuration during auto discovery. Fixing this by ingnoring all the disconnected hosts in delta calculation. Note: Host name can't be used to identify disconnected hosts as we may not be able to communicate the disconnected host to get the host name. Hence Host UUID in peer status is used to intentify the host. Bug-Url: https://bugzilla.redhat.com/1091170 Change-Id: I3fe730d2545f8cbc8224c576712b09bb4c16e712 Signed-off-by: Ramesh Nachimuthu <rnachimu@redhat.com> Reviewed-on: http://review.gluster.org/7677 Reviewed-by: Sahina Bose <sabose@redhat.com>
Diffstat (limited to 'plugins/discovery.py')
-rwxr-xr-xplugins/discovery.py61
1 files changed, 37 insertions, 24 deletions
diff --git a/plugins/discovery.py b/plugins/discovery.py
index 2f1b9f6..3e3b0a5 100755
--- a/plugins/discovery.py
+++ b/plugins/discovery.py
@@ -24,6 +24,7 @@ import shutil
import sys
from glusternagios import utils
+from glusternagios.glustercli import HostStatus
from config_generator import GlusterNagiosConfManager
import server_utils
import submit_external_command
@@ -111,16 +112,17 @@ def discoverCluster(hostip, cluster):
#Add the ip address of the root node given by the user to the peer list
hostlist[0]['hostip'] = hostip
for host in hostlist:
- #Get host names
- hostDetails = execNRPECommand(host['hostip'], "discoverhostparams")
- host.update(hostDetails)
- #Get the list of bricks for this host and add to dictionary
- host['bricks'] = []
- for volume in componentlist['volumes']:
- for brick in volume['bricks']:
- if brick['hostUuid'] == host['uuid']:
- brick['volumeName'] = volume['name']
- host['bricks'].append(brick)
+ #Get host names for all the connected hosts
+ if host['status'] == HostStatus.CONNECTED:
+ hostDetails = execNRPECommand(host['hostip'], "discoverhostparams")
+ host.update(hostDetails)
+ #Get the list of bricks for this host and add to dictionary
+ host['bricks'] = []
+ for volume in componentlist['volumes']:
+ for brick in volume['bricks']:
+ if brick['hostUuid'] == host['uuid']:
+ brick['volumeName'] = volume['name']
+ host['bricks'].append(brick)
clusterdata['hosts'] = hostlist
clusterdata['volumes'] = componentlist['volumes']
clusterdata['name'] = cluster
@@ -143,10 +145,11 @@ def setHostNameWithIP(clusterdata):
def isHostsNamesUnique(clusterdata):
hostnames = {}
for host in clusterdata['hosts']:
- if hostnames.get(host['hostname']) is None:
- hostnames[host['hostname']] = host['hostip']
- else:
- return False
+ if host.get('status') == HostStatus.CONNECTED:
+ if hostnames.get(host.get('hostname')) is None:
+ hostnames[host.get('hostname')] = host['hostip']
+ else:
+ return False
return True
@@ -244,29 +247,30 @@ def findAddUpdateHosts(hosts):
#Find deleted hosts in the given cluster.
-def findDeletedHosts(hostgroup, hosts):
+def findDeletedHosts(hostgroup, hosts, ignoredHosts):
deletedHosts = []
hostConfigs = server_utils.getHostConfigsForCluster(hostgroup)
for hostConfig in hostConfigs:
- host = findHostInList(hosts, hostConfig['host_name'])
- if host is None:
- deletedHosts.append({'host_name': hostConfig['host_name'],
- 'changeMode': CHANGE_MODE_REMOVE})
+ if hostConfig.get('_HOST_UUID') not in ignoredHosts:
+ host = findHostInList(hosts, hostConfig['host_name'])
+ if host is None:
+ deletedHosts.append({'host_name': hostConfig['host_name'],
+ 'changeMode': CHANGE_MODE_REMOVE})
return deletedHosts
#Find Added/Deleted/Updated hosts in cluster
-def findHostDelta(clusterConfig):
+def findHostDelta(clusterConfig, ignoredHosts):
hostDelta = []
updated = findAddUpdateHosts(clusterConfig['_hosts'])
hostDelta.extend(updated)
hostDelta.extend(findDeletedHosts(clusterConfig['hostgroup_name'],
- clusterConfig['_hosts']))
+ clusterConfig['_hosts'], ignoredHosts))
return hostDelta
#Find changes to the cluster
-def findDelta(clusterConfig):
+def findDelta(clusterConfig, ignoredHosts):
delta = {}
delta['hostgroup_name'] = clusterConfig['hostgroup_name']
delta['alias'] = clusterConfig['alias']
@@ -277,7 +281,7 @@ def findDelta(clusterConfig):
delta['_hosts'] = clusterConfig['_hosts']
return delta
- hostDelta = findHostDelta(clusterConfig)
+ hostDelta = findHostDelta(clusterConfig, ignoredHosts)
delta['_hosts'] = hostDelta
if hostDelta:
delta['changeMode'] = CHANGE_MODE_UPDATE
@@ -449,6 +453,14 @@ def sendCustomNotification(cluster, summary):
submit_external_command.submitExternalCommand(cmdStr)
+def getAllNonConnectedHosts(hostList):
+ nonConnectedHosts = []
+ for host in hostList:
+ if host.get('status') != HostStatus.CONNECTED:
+ nonConnectedHosts.append(host.get('uuid'))
+ return nonConnectedHosts
+
+
if __name__ == '__main__':
args = parse_input()
clusterdata = discoverCluster(args.hostip, args.cluster)
@@ -457,7 +469,8 @@ if __name__ == '__main__':
if args.force:
clusterDelta['changeMode'] = CHANGE_MODE_ADD
else:
- clusterDelta = findDelta(clusterDelta)
+ nonConnectedHosts = getAllNonConnectedHosts(clusterdata['hosts'])
+ clusterDelta = findDelta(clusterDelta, nonConnectedHosts)
if clusterDelta.get('changeMode') is None:
print "Cluster configurations are in sync"