def resource_clone(argv): if len(argv) < 1: usage.resource() sys.exit(1) res = argv[0] resource_clone_create(argv) constraint.constraint_resource_update(res)
def resource_master_create(argv, update=False): if (len(argv) < 2 and not update) or (len(argv) < 1 and update): usage.resource() sys.exit(1) dom = utils.get_cib_dom() master_id = argv.pop(0) if (update): master_found = False for master in dom.getElementsByTagName("master"): if master.getAttribute("id") == master_id: master_element = master master_found = True break if not master_found: print "Error: Unable to find multi-state resource with id %s" % master_id sys.exit(1) else: rg_id = argv.pop(0) if utils.does_id_exist(dom, master_id): print "Error: %s already exists in the cib" % master_id sys.exit(1) resources = dom.getElementsByTagName("resources")[0] rg_found = False for resource in (resources.getElementsByTagName("primitive") + resources.getElementsByTagName("group")): if resource.getAttribute("id") == rg_id: rg_found = True break if not rg_found: print "Error: Unable to find resource or group with id %s" % rg_id sys.exit(1) master_element = dom.createElement("master") master_element.setAttribute("id", master_id) resource.parentNode.removeChild(resource) master_element.appendChild(resource) resources.appendChild(master_element) if len(argv) > 0: meta = None for child in master_element.childNodes: if child.nodeType != xml.dom.Node.ELEMENT_NODE: continue if child.tagName == "meta_attributes": meta = child if meta == None: meta = dom.createElement("meta_attributes") meta.setAttribute("id", master_id + "-meta_attributes") master_element.appendChild(meta) for arg in convert_args_to_tuples(argv): for nvpair in meta.getElementsByTagName("nvpair"): if nvpair.getAttribute("name") == arg[0]: meta.removeChild(nvpair) break if arg[1] == "": continue nvpair = dom.createElement("nvpair") nvpair.setAttribute("id", meta.getAttribute("id") + "-" + arg[0]) nvpair.setAttribute("name", arg[0]) nvpair.setAttribute("value", arg[1]) meta.appendChild(nvpair) if len(meta.getElementsByTagName("nvpair")) == 0: master_element.removeChild(meta) utils.replace_cib_configuration(dom) if not update: constraint.constraint_resource_update(rg_id)