commit pacemaker-mgmt for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package pacemaker-mgmt for openSUSE:Factory checked in at 2011-11-02 12:10:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pacemaker-mgmt (Old) and /work/SRC/openSUSE:Factory/.pacemaker-mgmt.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "pacemaker-mgmt", Maintainer is "XWHu@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/pacemaker-mgmt/pacemaker-mgmt.changes 2011-09-23 12:21:29.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.pacemaker-mgmt.new/pacemaker-mgmt.changes 2011-11-02 12:10:21.000000000 +0100 @@ -1,0 +2,13 @@ +Tue Nov 1 09:57:29 UTC 2011 - ygao@suse.com + +- New version: 2.1.0 +- Medium: haclient: Show gray icons for resources with "failure ignored" (bnc#711002) +- Medium: snmp_subagent: Additional check for pending messages from heartbeat (lf#2604) +- High: haclient: Support resource template +- Medium: haclient: Fill existing resource templates' IDs into the drop-down lists where they can be referenced +- High: haclient: Correctly get and process metadata for the resources referencing templates +- High: haclient: Change the condition for verifying a primitive's attributes +- Medium: haclient: Tuning for support of rsc_ticket +- Upstream version cs: 57bab9d281ef8714bb6ec20ab0a4846aa188ec6f + +------------------------------------------------------------------- Old: ---- pacemaker-mgmt.tar.gz New: ---- pacemaker-mgmt.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pacemaker-mgmt.spec ++++++ --- /var/tmp/diff_new_pack.5ea9pS/_old 2011-11-02 12:10:22.000000000 +0100 +++ /var/tmp/diff_new_pack.5ea9pS/_new 2011-11-02 12:10:22.000000000 +0100 @@ -36,12 +36,12 @@ Name: pacemaker-mgmt Summary: Management Tools for Pacemaker based HA solution -Version: 2.0.0 -Release: 6 +Version: 2.1.0 +Release: 0 License: GPLv2+ Url: http://hg.clusterlabs.org/pacemaker/pygui Group: Productivity/Clustering/HA -Source: pacemaker-mgmt.tar.gz +Source: pacemaker-mgmt.tar.bz2 Source1: pacemaker_starter.py Source2: pacemaker-starter.glade BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ pacemaker-mgmt.tar.gz -> pacemaker-mgmt.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pacemaker-mgmt/.hg_archival.txt new/pacemaker-mgmt/.hg_archival.txt --- old/pacemaker-mgmt/.hg_archival.txt 2011-06-01 10:32:23.000000000 +0200 +++ new/pacemaker-mgmt/.hg_archival.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -repo: 7e60b32757e4dcb3f87092467b42de754fc2eabc -node: 1a1d9055abec035fc9352a5b96e3dddb3a18e757 -branch: default -latesttag: pacemaker-mgmt-2.0.0 (compatible with pacemaker-1.0.x) -latesttagdistance: 34 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pacemaker-mgmt/.hgtags new/pacemaker-mgmt/.hgtags --- old/pacemaker-mgmt/.hgtags 2011-06-01 10:32:23.000000000 +0200 +++ new/pacemaker-mgmt/.hgtags 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -17f9cfe9a03e6a7bf4b40d8387725cc355e65171 SLE10-SP1 -17f9cfe9a03e6a7bf4b40d8387725cc355e65171 STABLE-2.1.0 -18b9aab5cb77c7fff43f9412f459ec347f6de768 STABLE-2.0.4 -2e2f13c0031aa58c49738bc3bcb48354e9cabaad STABLE-2.0.8 -3498e3c7589138b2ae83494bd041bd4035986ab0 obs-2.1.2-15 -3884c0471649777489d51a879e1250a26abf50e0 obs-2.1.2-1 -3884c0471649777489d51a879e1250a26abf50e0 obs-2.1.2-2 -50a4415330682dd13bf7cb402afcf8de5d2eaab1 STABLE-2.0.1 -50a4415330682dd13bf7cb402afcf8de5d2eaab1 STABLE-2.0.2 -5219fa85a02e80fc17b807f80ee9b8a35102e860 STABLE-2.0.3 -5ffb35cb887244a4c05a9d49f22117a2b6b933cd obs-2.1.2-24 -7347ce61e20fc3bb5083191e9bcf9d82c470d518 obs-2.1.2-4 -768cb2fe018c4a391147d0a7d0b55c119e7115e6 STABLE-2.1.3 -7c4dd01b27b84eff88b4a530b104b6126a68fcef SLES10-GA-2.0.7-1.5 -7c4dd01b27b84eff88b4a530b104b6126a68fcef STABLE-2.0.7 -7e60b32757e4dcb3f87092467b42de754fc2eabc Beta-0.4.9f -a87d4e121527f70a2514e90439bc3faae3fb68af STABLE-2.0.6 -ac01ffae6d59cd7a2537ab6301291a3bf9d9583f STABLE-1.1.3 -ac01ffae6d59cd7a2537ab6301291a3bf9d9583f STABLE-1.1.5 -ac01ffae6d59cd7a2537ab6301291a3bf9d9583f Series-Root-1.2 -ad523cccc9179b05989c7c915cd01d5cd4d05ce7 STABLE-2.1.1 -b2aad3727cb5e2583d2a9f92c4121e9c8f29b91e STABLE-2.1.2 -b2ef116145dafdeecdb48a7f6745e196fa155072 Series-Root-1.0 -b34961469c52b89821b00e0094555fef11ab8644 STABLE-2.0.5 -ce387a572079ec43fb1dff248c5c5708d99938c9 STABLE-2.0.0 -b80f73a4220e61c276a992855f2e67b94fdb3ffc Conversion-Complete -d39732d2fe52e2489d41548a168ebf44e5bf33a7 pygui-1.1 -d1490ffc2186da3f3be9bee893eda9ae8ac96f27 pygui-1.2 -46736ff1b944191c2a16a9e79b336b4509e27b85 pygui-1.3 -662b9412662fe8e1bbe9e827a1dc71679a553474 pygui-1.3.1 -4d3288030a84f75b556a85c1e641e6d59834464a pacemaker-pygui-1.4 -0f24c045c82a798fdb94757724dad501e2c51679 pacemaker-mgmt-1.99.0 -2e157aedac0d867b7491326f77d6937559e07971 pacemaker-mgmt-1.99.1 -d870986f397419ab4336f52b4a4590067ebc73ca pacemaker-mgmt-1.99.2 -18332eae086e5c64bf1f2ae80eba52b72c409963 pacemaker-mgmt-2.0.0 (compatible with pacemaker-1.0.x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pacemaker-mgmt/mgmt/client/haclient.py.in new/pacemaker-mgmt/mgmt/client/haclient.py.in --- old/pacemaker-mgmt/mgmt/client/haclient.py.in 2011-06-01 10:32:23.000000000 +0200 +++ new/pacemaker-mgmt/mgmt/client/haclient.py.in 2011-10-28 11:13:52.000000000 +0200 @@ -539,6 +539,7 @@ "cluster_property_set": gtk.STOCK_PREFERENCES, "node": "node", "primitive": gtk.STOCK_DND, + "template": gtk.STOCK_DND, "group": gtk.STOCK_DND_MULTIPLE, "clone": gtk.STOCK_COPY, "master": gtk.STOCK_COPY, @@ -546,6 +547,7 @@ "rsc_order": gtk.STOCK_PROPERTIES, "rsc_location": gtk.STOCK_PROPERTIES, "rsc_colocation": gtk.STOCK_PROPERTIES, + "rsc_ticket": gtk.STOCK_PROPERTIES, "operations": gtk.STOCK_DIALOG_AUTHENTICATION, "op": gtk.STOCK_DIALOG_AUTHENTICATION, "instance_attributes": gtk.STOCK_PREFERENCES, @@ -1801,7 +1803,8 @@ iter_status = 0 if type == "primitive" : if string.find(status, _("unmanaged")) != -1 \ - or string.find(status, _("unclean")) != -1 : + or string.find(status, _("unclean")) != -1 \ + or string.find(status, _("failure ignored")) != -1 : iter_status = 2 elif string.find(status, _("failed")) != -1 : iter_status = 3 @@ -2961,7 +2964,7 @@ obj_box = self.vbox if has_attr : - if obj_type == "primitive" : + if obj_type in ["primitive", "template"] : obj_attrs = Primitive(self.xml_node, is_newobj, self.change_call_back) elif obj_type == "rsc_order" : obj_attrs = RscOrder(self.xml_node, is_newobj, self.change_call_back) @@ -2970,7 +2973,7 @@ elif obj_type == "nvpair" : if validate_type == "dtd" : if self.xml_node.parentNode.parentNode.tagName == "instance_attributes" and \ - self.xml_node.parentNode.parentNode.parentNode.tagName == "primitive" : + self.xml_node.parentNode.parentNode.parentNode.tagName in ["primitive", "template"] : obj_attrs = PrimInstAttrsNV(self.xml_node, is_newobj, self.change_call_back) elif self.xml_node.parentNode.parentNode.tagName == "instance_attributes" and \ self.xml_node.parentNode.parentNode.parentNode.tagName == "op" : @@ -2988,7 +2991,7 @@ obj_attrs = ObjectAttrs(self.xml_node, is_newobj, self.change_call_back) else : if self.xml_node.parentNode.tagName == "instance_attributes" and \ - self.xml_node.parentNode.parentNode.tagName == "primitive" : + self.xml_node.parentNode.parentNode.tagName in ["primitive", "template"]: obj_attrs = PrimInstAttrsNV(self.xml_node, is_newobj, self.change_call_back) elif self.xml_node.parentNode.tagName == "instance_attributes" and \ self.xml_node.parentNode.parentNode.tagName == "op" : @@ -3844,7 +3847,7 @@ or (validate_type != "dtd" and option_list[0][0][1].getAttribute("name") != "lifetime")) : obj_type = option_list[0] elif not invoked_by_wizard and mode_level == 0 and ( - self.obj_type in ["node", "primitive", "group"] + self.obj_type in ["node", "primitive", "template", "group"] or (self.obj_type in ["clone", "master"] and (self.pages.count("primitive") > 0 or self.pages.count("group") > 0)) @@ -4402,6 +4405,7 @@ meta_attributes_options = { "primitive": common_options, + "template": common_options, "group": common_options, "clone": common_options + clone_basic_options + clone_other_options, "master": common_options + clone_basic_options + master_basic_options + clone_other_options, @@ -4439,7 +4443,7 @@ separator.show() dialog.vbox.pack_start(separator, False, padding = 2) - if self.obj_type == "primitive" : + if self.obj_type in ["primitive", "template"] : obj_attrs = Primitive(self.xml_node, True, hide_optional = True) else : obj_attrs = obj_attrs = ObjectAttrs(self.xml_node, True, hide_optional = True) @@ -4549,7 +4553,7 @@ widget_group = WidgetGroup(widgets) self.widget_group = widget_group - if self.obj_type == "primitive" : + if self.obj_type in ["primitive", "template"]: label = gtk.Label(_("Add monitor operation")) self.monitor_checkbutton = gtk.CheckButton() self.monitor_checkbutton.add(label) @@ -4576,7 +4580,7 @@ tmp_meta_attributes.update(meta_attributes) self.widget_group.show_values(tmp_meta_attributes) - if self.obj_type == "primitive" : + if self.obj_type in ["primitive", "template"]: monitors = self.get_monitors() if len(monitors) > 0 : self.monitor_checkbutton.set_active(True) @@ -4601,7 +4605,7 @@ top_window = save_top_window self.set_meta_attributes() - if self.obj_type == "primitive" : + if self.obj_type in ["primitive", "template"] : meta = self.get_rsc_meta() self.set_monitor(meta) self.set_inst_attributes(meta) @@ -4671,14 +4675,15 @@ return monitors def get_rsc_meta(self) : - primitive_class = str(self.xml_node.getAttribute("class")) - primitive_type = str(self.xml_node.getAttribute("type")) - primitive_provider = str(self.xml_node.getAttribute("provider")) + primitive_attrs = manager.get_rsc_attrs(self.xml_node, ["class", "type", "provider"]) + primitive_class = str(primitive_attrs.get("class", "")) + primitive_type = str(primitive_attrs.get("type", "")) + primitive_provider = str(primitive_attrs.get("provider", "")) meta = manager.get_rsc_meta(primitive_class, primitive_type, primitive_provider) return meta def set_monitor(self, meta) : - if self.obj_type != "primitive" or meta == None : + if self.obj_type not in ["primitive", "template"] or meta == None : return monitors = self.get_monitors() @@ -4812,7 +4817,7 @@ break iter = model.iter_next(iter) - if self.obj_type == "primitive" : + if self.obj_type in ["primitive", "template"] : self.monitor_checkbutton.set_active(True) return self.first_page_run() @@ -4855,7 +4860,7 @@ dialog.vbox.show_all() - if self.obj_type != "primitive" and add_prompt : + if self.obj_type not in ["primitive", "template"] and add_prompt : if rsc_id != "" : title_suffix = _("Sub-resource For \"%s\"")%rsc_id else : @@ -8076,12 +8081,53 @@ for resources_node in manager.xml_nodes["cib"].getElementsByTagName("resources") : for primitive_node in resources_node.getElementsByTagName("primitive") : if primitive_node.getAttribute("id") == rsc_id : - rsc_class = str(primitive_node.getAttribute("class")) - rsc_type = str(primitive_node.getAttribute("type")) - rsc_provider = str(primitive_node.getAttribute("provider")) + primitive_attrs = self.get_rsc_attrs(primitive_node, ["class", "type", "provider"]) + rsc_class = str(primitive_attrs.get("class", "")) + rsc_type = str(primitive_attrs.get("type", "")) + rsc_provider = str(primitive_attrs.get("provider", "")) return (rsc_class, rsc_type, rsc_provider) return None + def get_rsc_attrs(self, primitive_node, attr_names) : + attrs ={} + + ref_node = primitive_node + while ref_node and ref_node.nodeType == xml.dom.Node.ELEMENT_NODE : + for attr_name in attr_names : + if attrs.get(attr_name) : + continue + + attr_value = ref_node.getAttribute(attr_name) + if attr_value : + attrs[attr_name] = str(attr_value) + + template_id = ref_node.getAttribute("template") + if template_id : + ref_node = self.get_template(template_id) + else : + break + + return attrs + + def get_template(self, template_id) : + if not template_id : + return None + + for resources_node in manager.xml_nodes["cib"].getElementsByTagName("resources") : + for template_node in resources_node.getElementsByTagName("template") : + if template_node.getAttribute("id") == template_id : + return template_node + return None + + def get_all_templates(self) : + templates = [] + for resources_node in manager.xml_nodes["cib"].getElementsByTagName("resources") : + for template_node in resources_node.getElementsByTagName("template") : + template_id = template_node.getAttribute("id") + if template_id and template_id not in templates: + templates.append(template_id) + return templates + def get_locale_desc(self, node, tag) : desc_en = "" desc_match = "" @@ -8430,8 +8476,8 @@ else : if self.is_newobj and not self.id_is_idref and self.obj_type not in \ - ["node", "primitive", "group", "clone", "master","master_slave", \ - "rsc_location", "rsc_colocation", "rsc_order", "acl_user", "acl_role"] : + ["node", "primitive", "template", "group", "clone", "master","master_slave", \ + "rsc_location", "rsc_colocation", "rsc_order", "rsc_ticket", "acl_user", "acl_role"] : if self.widgets.has_key("combo_entries") and self.widgets["combo_entries"].has_key("id") \ and len(self.widgets["combo_entries"]["id"].child.get_text()) == 0 : obj_id = manager.auto_unique_id(self.xml_node, self.obj_type) @@ -8956,7 +9002,8 @@ def auto_fill(self) : widgets = self.widgets rsc_store = gtk.ListStore(str, str) - for rsc in manager.get_all_real_rsc() : + all_real_rsc = manager.get_all_real_rsc() + for rsc in all_real_rsc : rsc_store.append([rsc, ""]) node_list = manager.get_normal_nodes() @@ -8964,13 +9011,27 @@ node_list = [] node_store = [[node, ""] for node in node_list] + all_templates = manager.get_all_templates() + template_store = [[template, ""] for template in all_templates] + + rsc_refs = all_real_rsc[:] + rsc_refs.extend(all_templates) + rsc_refs_store = [[rsc, ""] for rsc in rsc_refs] + if widgets.has_key("combo_entries") : for key in ["rsc", "with-rsc", "first", "then", "from", "to"] : if widgets["combo_entries"].has_key(key) : - self.combobox_store_append(widgets["combo_entries"][key], rsc_store) + if self.obj_type == "rsc_location" : + self.combobox_store_append(widgets["combo_entries"][key], rsc_store) + else : + self.combobox_store_append(widgets["combo_entries"][key], rsc_refs_store) if widgets["combo_entries"].has_key("id") and self.id_is_idref : self.combobox_store_append(widgets["combo_entries"]["id"], rsc_store) + for key in ["template"] : + if widgets["combo_entries"].has_key(key) : + self.combobox_store_append(widgets["combo_entries"][key], template_store) + for key in ["node"] : if widgets["combo_entries"].has_key(key) : self.combobox_store_append(widgets["combo_entries"][key], node_store) @@ -9507,13 +9568,32 @@ and widget == widgets["combo_entries"]["provider"] : desc = self.get_meta_desc() + if widgets.has_key("combo_entries") and widgets["combo_entries"].has_key("template") \ + and widget == widgets["combo_entries"]["template"] : + desc = self.get_meta_desc() + return desc def get_meta_desc(self) : primitive = self.get_values() - primitive_class = primitive.get("class", "") - primitive_type = primitive.get("type", "") - primitive_provider = primitive.get("provider", "heartbeat") + primitive_template = primitive.get("template") + + title = "" + if not primitive_template : + primitive_class = primitive.get("class", "") + primitive_type = primitive.get("type", "") + primitive_provider = primitive.get("provider", "heartbeat") + else : + template_node = manager.get_template(primitive_template) + if template_node == None : + return [""] + + primitive_attrs = manager.get_rsc_attrs(template_node, ["class", "type", "provider"]) + primitive_class = str(primitive_attrs.get("class", "")) + primitive_type = str(primitive_attrs.get("type", "")) + primitive_provider = str(primitive_attrs.get("provider", "heartbeat")) + + title = "%s:%s:%s\n\n"%(primitive_class, primitive_provider, primitive_type) meta = manager.get_rsc_meta(primitive_class, primitive_type, primitive_provider) if meta == None : @@ -9530,14 +9610,14 @@ shortdesc = "" if len(longdesc) == 0 : - desc = [shortdesc] + desc = [title + shortdesc] elif longdesc.find(shortdesc) > -1 : - desc = [longdesc] + desc = [title + longdesc] else : if shortdesc.endswith(_(".")) : - desc = [shortdesc + "\n" + longdesc] + desc = [title + shortdesc + "\n" + longdesc] else : - desc = [shortdesc + _(".") + "\n" + longdesc] + desc = [title + shortdesc + _(".") + "\n" + longdesc] return desc def verify_values(self) : @@ -9545,8 +9625,8 @@ return False primitive = self.get_values() - if primitive.get("class", "") == "" : - msgbox(_("\"%s\" is required")%_("Class")) + if primitive.get("template", "") == "" and primitive.get("class", "") == "" : + msgbox(_("\"%s\" or \"%s\" is required")%(_("Class"), _("Template"))) return False if primitive.get("class", "") == "ocf" and primitive.get("provider", "") == "" : @@ -9606,6 +9686,7 @@ self.meta_attributes_options = { "primitive": common_options + primitive_options, + "template": common_options + primitive_options, "group": common_options, "clone": common_options + clone_basic_options + clone_other_options, "master": common_options + clone_basic_options + master_basic_options + clone_other_options, @@ -9670,7 +9751,7 @@ widgets = self.widgets attr_store = [] - if self.target_type in ["primitive", "group", "clone", "master_slave"] : + if self.target_type in ["primitive", "template", "group", "clone", "master_slave"] : attr_store.append(["target_role", ""]) for attr_name in self.target_attrlist : @@ -9840,9 +9921,12 @@ primitive_node = xml_node.parentNode.parentNode.parentNode else : primitive_node = xml_node.parentNode.parentNode - primitive_class = str(primitive_node.getAttribute("class")) - primitive_type = str(primitive_node.getAttribute("type")) - primitive_provider = str(primitive_node.getAttribute("provider")) + + primitive_attrs = manager.get_rsc_attrs(primitive_node, ["class", "type", "provider"]) + primitive_class = str(primitive_attrs.get("class", "")) + primitive_type = str(primitive_attrs.get("type", "")) + primitive_provider = str(primitive_attrs.get("provider", "")) + self.meta = manager.get_rsc_meta(primitive_class, primitive_type, primitive_provider) MetaNV.__init__(self, xml_node, is_newobj, change_call_back) @@ -9977,9 +10061,10 @@ if mode_level == 0 : self.dynamic_layout = self.dynamic_layout_simple primitive_node = xml_node.parentNode.parentNode - primitive_class = str(primitive_node.getAttribute("class")) - primitive_type = str(primitive_node.getAttribute("type")) - primitive_provider = str(primitive_node.getAttribute("provider")) + primitive_attrs = manager.get_rsc_attrs(primitive_node, ["class", "type", "provider"]) + primitive_class = str(primitive_attrs.get("class", "")) + primitive_type = str(primitive_attrs.get("type", "")) + primitive_provider = str(primitive_attrs.get("provider", "")) meta = manager.get_rsc_meta(primitive_class, primitive_type, primitive_provider) self.meta = meta ObjectAttrs.__init__(self, xml_node, is_newobj, change_call_back) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pacemaker-mgmt/snmp_subagent/hbagent.c new/pacemaker-mgmt/snmp_subagent/hbagent.c --- old/pacemaker-mgmt/snmp_subagent/hbagent.c 2011-06-01 10:32:23.000000000 +0200 +++ new/pacemaker-mgmt/snmp_subagent/hbagent.c 2011-10-28 11:13:52.000000000 +0200 @@ -1669,6 +1669,15 @@ run_alarms(); netsnmp_check_outstanding_agent_requests(); +#if SUPPORT_HEARTBEAT + if (is_heartbeat_cluster()) { + if ((ret = handle_heartbeat_msg()) == HA_FAIL) { + cl_log(LOG_DEBUG, "no heartbeat. quit now."); + hb_already_dead = 1; + break; + } + } +#endif } /* at shutdown time */ -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de