+ def lov(self, name, uuid, stripe_sz, stripe_off, pattern):
+ lov = self.newService("lov", name, uuid)
+ devs = self.addElement(lov, "devices" )
+ devs.setAttribute("stripesize", stripe_sz)
+ devs.setAttribute("stripeoffset", stripe_off)
+ devs.setAttribute("pattern", pattern)
+ return lov
+
+ def mds(self, name, uuid, fs, devname, format, net_uuid, failover_uuid = "", dev_size=0 ):
+ mds = self.newService("mds", name, uuid)
+ self.addElement(mds, "fstype", fs)
+ dev = self.addElement(mds, "device", devname)
+ if dev_size:
+ dev.setAttribute("size", "%s" % (dev_size))
+ self.addElement(mds, "autoformat", format)
+ mds.appendChild(self.ref("network", net_uuid))
+ if failover_uuid:
+ mds.appendChild(self.ref("failover", failover_uuid))
+ return mds
+
+ def mdc(self, name, uuid, mds_uuid):
+ mdc = self.newService("mdc", name, uuid)
+ mdc.appendChild(self.ref("mds", mds_uuid))
+ return mdc
+
+ def mountpoint(self, name, uuid, mdc_uuid, osc_uuid, path):
+ mtpt = self.newService("mtpt", name, uuid)
+ mtpt.appendChild(self.ref("mdc", mdc_uuid))
+ mtpt.appendChild(self.ref("osc", osc_uuid))
+ self.addElement(mtpt, "path", path)
+ return mtpt
+
+def findByName(lustre, name, tag = "*"):
+ path = '//%s[@name="%s"]' % (tag, name)
+ ret = Evaluate(path, lustre)
+ if ret:
+ return ret[0]
+ return None
+
+# XXX: assumes only one network element per node. will fix this
+# as soon as support for routers is added
+def get_net_uuid(lustre, node_name):
+ """ get a network uuid for a node_name """
+ node = findByName(lustre, node_name, "node")
+ if not node:
+ error ("node not found:", node_name)
+ net = Evaluate("./network", node)
+ if net:
+ return net[0].getAttribute("uuid")
+ return None
+
+def lov_add_osc(gen, lov, osc_uuid):
+ devs = Evaluate("devices", lov)
+ if len(devs) == 1:
+ devs[0].appendChild(gen.ref("osc", osc_uuid))
+ else:
+ error("No devices element found for LOV:", lov)
+
+