diff --git a/cts/CIB.py.in b/cts/CIB.py.in index a308c3b455..d058212304 100644 --- a/cts/CIB.py.in +++ b/cts/CIB.py.in @@ -1,238 +1,246 @@ #!@PYTHON@ '''CTS: Cluster Testing System: CIB generator ''' __copyright__=''' Author: Jia Ming Pan Copyright (C) 2006 International Business Machines ''' from UserDict import UserDict import sys, time, types, syslog, os, struct, string, signal, traceback from CTS import ClusterManager from CM_hb import HeartbeatCM class CIB: - cib_option_template = ''' - - - - - - - - - ''' - - - ipaddr_resource_template = ''' - - - - - - - - - - - ''' - - clustermon_resource_template = ''' - - - - - - - - - - - - - - ''' - - ipaddr_location_constraint = ''' - - - - - ''' - - clustermon_location_constraint = ''' - - - - - ''' - - resource_group_template = ''' - - - - - - - - - - - - - - - - - - + cib_option_template = ''' + + + + + + + + + ''' + + + dc_ipaddr_resource_template = ''' + + + + + + + + + + + ''' + + clustermon_resource_template = ''' + + + + + + + + + + + + + + ''' + + dc_ipaddr_location_constraint = ''' + + + + + ''' + + clustermon_location_constraint = ''' + + + + + ''' + + lsb_resource = ''' + + + + + ''' + + master_slave_resource = ''' + + + + + + + + + + + + + + + + + + + + ''' + + resource_group_template = ''' + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - ''' - - - per_node_resource_template = ''' - - - - - - - - - - - ''' - - per_node_constraint_template = ''' - - - - - - ''' - - - stonith_resource_template = """ - - - - - - - - - - - - - - - - - - - """ - - cib_fencing = """ - """ - - cib_template =''' - - - %s - - %s - %s - - - ''' - - def __init__(self, CM): - self.CM = CM - - #make up crm config - cib_options = self.cib_option_template % self.CM.use_short_names - if CM.Env["DoFencing"] == 1: - cib_options += self.cib_fencing - - #create resources and their constraints - resources = "" - constraints = "" - - rsc_class = self.CM.Env["ResourceClass"] - keyname = "" - if rsc_class =="ocf": - keyname = "ip" - elif rsc_class=="heartbeat": - keyname = "1" - else: - raise "Unknown resource class, aborted." - - if self.CM.Env["CIBResource"] == 1: - self.CM.log("Enabling DC resource") - resources += self.ipaddr_resource_template % \ - (rsc_class, keyname, self.CM.Env["IPBase"]) - constraints += self.ipaddr_location_constraint - if self.CM.cluster_monitor == 1: - resources += self.clustermon_resource_template - constraints += self.clustermon_location_constraint - - fields = string.split(self.CM.Env["IPBase"], '.') - fields[3] = str(int(fields[3])+1) - ip1 = string.join(fields, '.') - fields[3] = str(int(fields[3])+1) - ip2 = string.join(fields, '.') - fields[3] = str(int(fields[3])+1) - ip3 = string.join(fields, '.') - self.CM.Env["IPBase"] = ip3 - - resources += self.resource_group_template % \ - ("child_"+ip1, rsc_class, "child_"+ip1, - "child_"+ip1, keyname, ip1, # primitive 1 - "child_"+ip2, rsc_class, "child_"+ip2, - "child_"+ip2, keyname, ip2, # primitive 2 - "child_"+ip3, rsc_class, "child_"+ip3, - "child_"+ip3, keyname, ip3) # primitive 3 - - # per node resource - fields = string.split(self.CM.Env["IPBase"], '.') - for node in self.CM.Env["nodes"]: - fields[3] = str(int(fields[3])+1) - ip = string.join(fields, '.') - self.CM.Env["IPBase"] = ip - per_node_resources = self.per_node_resource_template % \ - ("rsc_"+node, rsc_class, - "rsc_"+node, "rsc_"+node, "rsc_"+node, keyname, ip) - - per_node_constraint = self.per_node_constraint_template % \ - ("rsc_"+node, "rsc_"+node, "rsc_"+node, "rsc_"+node, node) - - resources += per_node_resources - constraints += per_node_constraint + + + ''' + + + per_node_resource_template = ''' + + + + + + + + + + + ''' + + per_node_constraint_template = ''' + + + + + ''' + + stonith_resource_template = """ + + + + + + + + + + + + + + + + + + + """ + + cib_fencing = """ + """ + + cib_template =''' + + + %s + + + %s + + %s + + + + ''' + + def NextIP(self): + fields = string.split(self.CM.Env["IPBase"], '.') + fields[3] = str(int(fields[3])+1) + ip = string.join(fields, '.') + self.CM.Env["IPBase"]=ip + return ip + + def __init__(self, CM): + self.CM = CM + + #make up crm config + cib_options = self.cib_option_template % self.CM.use_short_names + if CM.Env["DoFencing"] == 1: + cib_options += self.cib_fencing + + #create resources and their constraints + resources = "" + constraints = "" + + if self.CM.Env["CIBResource"] == 1: + self.CM.log("Enabling DC resource") + resources += self.dc_ipaddr_resource_template % self.CM.Env["IPBase"] + constraints += self.dc_ipaddr_location_constraint + if self.CM.cluster_monitor == 1: + resources += self.clustermon_resource_template + constraints += self.clustermon_location_constraint + + ip1=self.NextIP() + ip2=self.NextIP() + resources += self.resource_group_template % (ip1, ip2) + + # lsb resource + resources += self.lsb_resource + + # per node resource + fields = string.split(self.CM.Env["IPBase"], '.') + for node in self.CM.Env["nodes"]: + ip = self.NextIP() + per_node_resources = self.per_node_resource_template % \ + ("rsc_"+node, "rsc_"+node, "rsc_"+node, "rsc_"+node, ip) + + per_node_constraint = self.per_node_constraint_template % \ + ("rsc_"+node, "rsc_"+node, "rsc_"+node, "rsc_"+node, node) + + resources += per_node_resources + constraints += per_node_constraint + + # fencing resource + nodelist = "" + len = 0 + for node in self.CM.Env["nodes"]: + nodelist += node + " " + len = len + 1 + stonith_resource = self.stonith_resource_template % (len, nodelist) + resources += stonith_resource - # fencing resource - nodelist = "" - len = 0 - for node in self.CM.Env["nodes"]: - nodelist += node + " " - len = len + 1 - stonith_resource = self.stonith_resource_template % (len, nodelist) - resources += stonith_resource - - self.cts_cib = self.cib_template % (cib_options, resources, constraints) - - def cib(self): - return self.cts_cib + #master slave resource + resources += self.master_slave_resource % (2*len, 2, len, 1) + + # generate cib + self.cts_cib = self.cib_template % (cib_options, resources, constraints) + + def cib(self): + return self.cts_cib