def stonith_level_add(level, node, devices): dom = utils.get_cib_dom() if not re.search(r'^\d+$', level) or re.search(r'^0+$', level): utils.err("invalid level '{0}', use a positive integer".format(level)) level = level.lstrip('0') if "--force" not in utils.pcs_options: for dev in devices.split(","): if not utils.is_stonith_resource(dev): utils.err("%s is not a stonith id (use --force to override)" % dev) if not utils.is_pacemaker_node(node) and not utils.is_corosync_node(node): utils.err("%s is not currently a node (use --force to override)" % node) ft = dom.getElementsByTagName("fencing-topology") if len(ft) == 0: conf = dom.getElementsByTagName("configuration")[0] ft = dom.createElement("fencing-topology") conf.appendChild(ft) else: ft = ft[0] fls = ft.getElementsByTagName("fencing-level") for fl in fls: if fl.getAttribute("target") == node and fl.getAttribute("index") == level and fl.getAttribute("devices") == devices: utils.err("unable to add fencing level, fencing level for node: %s, at level: %s, with device: %s already exists" % (node,level,devices)) new_fl = dom.createElement("fencing-level") ft.appendChild(new_fl) new_fl.setAttribute("target", node) new_fl.setAttribute("index", level) new_fl.setAttribute("devices", devices) new_fl.setAttribute("id", utils.find_unique_id(dom, "fl-" + node +"-" + level)) utils.replace_cib_configuration(dom)
def stonith_level_verify(): dom = utils.get_cib_dom() fls = dom.getElementsByTagName("fencing-level") for fl in fls: node = fl.getAttribute("target") devices = fl.getAttribute("devices") for dev in devices.split(","): if not utils.is_stonith_resource(dev): utils.err("%s is not a stonith id" % dev) if not utils.is_corosync_node(node) and not utils.is_pacemaker_node(node): utils.err("%s is not currently a node" % node)
def stonith_level_verify(): dom = utils.get_cib_dom() corosync_nodes = [] if utils.hasCorosyncConf(): corosync_nodes = utils.getNodesFromCorosyncConf() pacemaker_nodes = utils.getNodesFromPacemaker() fls = dom.getElementsByTagName("fencing-level") for fl in fls: node = fl.getAttribute("target") devices = fl.getAttribute("devices") for dev in devices.split(","): if not utils.is_stonith_resource(dev): utils.err("%s is not a stonith id" % dev) if node not in corosync_nodes and node not in pacemaker_nodes: utils.err("%s is not currently a node" % node)
def stonith_level_add(level, node, devices): dom = utils.get_cib_dom() if not re.search(r'^\d+$', level) or re.search(r'^0+$', level): utils.err("invalid level '{0}', use a positive integer".format(level)) level = level.lstrip('0') if "--force" not in utils.pcs_options: for dev in devices.split(","): if not utils.is_stonith_resource(dev): utils.err("%s is not a stonith id (use --force to override)" % dev) corosync_nodes = [] if utils.hasCorosyncConf(): corosync_nodes = utils.getNodesFromCorosyncConf() pacemaker_nodes = utils.getNodesFromPacemaker() if node not in corosync_nodes and node not in pacemaker_nodes: utils.err("%s is not currently a node (use --force to override)" % node) ft = dom.getElementsByTagName("fencing-topology") if len(ft) == 0: conf = dom.getElementsByTagName("configuration")[0] ft = dom.createElement("fencing-topology") conf.appendChild(ft) else: ft = ft[0] fls = ft.getElementsByTagName("fencing-level") for fl in fls: if fl.getAttribute("target") == node and fl.getAttribute( "index") == level and fl.getAttribute("devices") == devices: utils.err( "unable to add fencing level, fencing level for node: %s, at level: %s, with device: %s already exists" % (node, level, devices)) new_fl = dom.createElement("fencing-level") ft.appendChild(new_fl) new_fl.setAttribute("target", node) new_fl.setAttribute("index", level) new_fl.setAttribute("devices", devices) new_fl.setAttribute("id", utils.find_unique_id(dom, "fl-" + node + "-" + level)) utils.replace_cib_configuration(dom)