From f55ca2f12c4552fcd516737fa797cf806aa70705 Mon Sep 17 00:00:00 2001
From: Ondrej Mular <omular@redhat.com>
Date: Thu, 3 Sep 2015 12:29:37 +0200
Subject: [PATCH] fix loading cluster status for web UI
---
pcs/status.py | 37 ++++++++++++++++++++++++++++++++++---
pcsd/cluster_entity.rb | 25 ++++++++++++++++++++++---
pcsd/pcs.rb | 3 +++
3 files changed, 59 insertions(+), 6 deletions(-)
diff --git a/pcs/status.py b/pcs/status.py
index eb2a5eb..34354ef 100644
--- a/pcs/status.py
+++ b/pcs/status.py
@@ -123,14 +123,28 @@ def nodes_status(argv):
onlinenodes = []
offlinenodes = []
standbynodes = []
+ remote_onlinenodes = []
+ remote_offlinenodes = []
+ remote_standbynodes = []
for node in nodes[0].getElementsByTagName("node"):
+ node_name = node.getAttribute("name")
+ node_remote = node.getAttribute("type") == "remote"
if node.getAttribute("online") == "true":
if node.getAttribute("standby") == "true":
- standbynodes.append(node.getAttribute("name"))
+ if node_remote:
+ remote_standbynodes.append(node_name)
+ else:
+ standbynodes.append(node_name)
else:
- onlinenodes.append(node.getAttribute("name"))
+ if node_remote:
+ remote_onlinenodes.append(node_name)
+ else:
+ onlinenodes.append(node_name)
else:
- offlinenodes.append(node.getAttribute("name"))
+ if node_remote:
+ remote_offlinenodes.append(node_name)
+ else:
+ offlinenodes.append(node_name)
print "Pacemaker Nodes:"
@@ -149,6 +163,23 @@ def nodes_status(argv):
print node,
print ""
+ print "Pacemaker Remote Nodes:"
+
+ print " Online:",
+ for node in remote_onlinenodes:
+ print node,
+ print ""
+
+ print " Standby:",
+ for node in remote_standbynodes:
+ print node,
+ print ""
+
+ print " Offline:",
+ for node in remote_offlinenodes:
+ print node,
+ print ""
+
# TODO: Remove, currently unused, we use status from the resource.py
def resources_status(argv):
info_dom = utils.getClusterState()
diff --git a/pcsd/cluster_entity.rb b/pcsd/cluster_entity.rb
index 78bc5ab..4f751b8 100644
--- a/pcsd/cluster_entity.rb
+++ b/pcsd/cluster_entity.rb
@@ -533,7 +533,8 @@ module ClusterEntity
@operations = []
failed_ops = []
message_list = []
- cib_dom.elements.each("//lrm_resource[@id='#{@id}']/lrm_rsc_op") { |e|
+ cib_dom.elements.each("//lrm_resource[@id='#{@id}']/lrm_rsc_op | "\
+ + "//lrm_resource[starts-with(@id, \"#{@id}:\")]/lrm_rsc_op") { |e|
operation = ResourceOperation.new(e)
@operations << operation
if operation.rc_code != 0
@@ -819,13 +820,15 @@ module ClusterEntity
primitive_list = @member.members
end
@masters, @slaves = get_masters_slaves(primitive_list)
- if @masters.empty?
- @error_list << {
+ if @masters.empty? and !disabled?
+ @status = ClusterEntity::ResourceStatus.new(:partially_running)
+ @warning_list << {
:message => 'Resource is master/slave but has not been promoted '\
+ 'to master on any node.',
:type => 'no_master'
}
end
+ @status = @member.status if @status < @member.status
end
end
@@ -851,6 +854,22 @@ module ClusterEntity
end
end
+ def update_status
+ if @member
+ @member.update_status
+ if @member.instance_of?(Primitive)
+ primitive_list = [@member]
+ else
+ primitive_list = @member.members
+ end
+ @masters, @slaves = get_masters_slaves(primitive_list)
+ if @masters.empty? and !disabled?
+ @status = ClusterEntity::ResourceStatus.new(:partially_running)
+ end
+ @status = @member.status if @status < @member.status
+ end
+ end
+
private
def get_masters_slaves(primitive_list)
masters = []
diff --git a/pcsd/pcs.rb b/pcsd/pcs.rb
index cc5b038..87404ac 100644
--- a/pcsd/pcs.rb
+++ b/pcsd/pcs.rb
@@ -568,6 +568,9 @@ def get_nodes_status()
if l.start_with?("Pacemaker Nodes:")
in_pacemaker = true
end
+ if l.start_with?("Pacemaker Remote Nodes:")
+ break
+ end
if l.end_with?(":")
next
end
--
1.9.1