def body(self, lines): pan_assign(lines, "system/metacluster/name", self.dbobj.name) pan_assign(lines, "system/metacluster/type", self.dbobj.cluster_type) dbloc = self.dbobj.location_constraint add_location_info(lines, dbloc, prefix="system/metacluster/") pan_assign(lines, "system/metacluster/sysloc/location", dbloc.sysloc()) if dbloc.campus: ## maintaining this so templates dont break ## during transtion period.. should be DEPRECATED pan_assign(lines, "system/metacluster/campus", dbloc.campus.name) lines.append("") pan_assign(lines, "system/metacluster/members", sorted([member.name for member in self.dbobj.members])) lines.append("") pan_assign(lines, "system/build", self.dbobj.status.name) lines.append("") if self.dbobj.resholder: for resource in sorted(self.dbobj.resholder.resources, key=attrgetter('resource_type', 'name')): res_path = PlenaryResource.template_name(resource) pan_append(lines, "system/resources/" + resource.resource_type, StructureTemplate(res_path))
def body(self, lines): pan_assign(lines, "system/cluster/name", self.dbobj.name) pan_assign(lines, "system/cluster/type", self.dbobj.cluster_type) dbloc = self.dbobj.location_constraint add_location_info(lines, dbloc, prefix="system/cluster/") pan_assign(lines, "system/cluster/sysloc/location", dbloc.sysloc()) if dbloc.campus: ## maintaining this so templates dont break ## during transtion period.. should be DEPRECATED pan_assign(lines, "system/cluster/campus", dbloc.campus.name) pan_assign(lines, "system/cluster/down_hosts_threshold", self.dbobj.dht_value) if self.dbobj.dmt_value is not None: pan_assign(lines, "system/cluster/down_maint_threshold", self.dbobj.dmt_value) if self.dbobj.down_hosts_percent: pan_assign(lines, "system/cluster/down_hosts_percent", self.dbobj.down_hosts_threshold) pan_assign(lines, "system/cluster/down_hosts_as_percent", self.dbobj.down_hosts_percent) if self.dbobj.down_maint_percent: pan_assign(lines, "system/cluster/down_maint_percent", self.dbobj.down_maint_threshold) pan_assign(lines, "system/cluster/down_maint_as_percent", self.dbobj.down_maint_percent) lines.append("") # Only use system names here to avoid circular dependencies. # Other templates that needs to look up the underlying values use: # foreach(idx; host; value("system/cluster/members")) { # v = value("/" + host + "/system/foo/bar/baz"); # ); pan_assign(lines, "system/cluster/members", sorted([member.fqdn for member in self.dbobj.hosts])) lines.append("") if self.dbobj.resholder: for resource in sorted(self.dbobj.resholder.resources, key=attrgetter('resource_type', 'name')): res_path = PlenaryResource.template_name(resource) pan_append(lines, "system/resources/" + resource.resource_type, StructureTemplate(res_path)) pan_assign(lines, "system/build", self.dbobj.status.name) if self.dbobj.allowed_personalities: pan_assign(lines, "system/cluster/allowed_personalities", sorted(["%s/%s" % (p.archetype.name, p.name) for p in self.dbobj.allowed_personalities])) fname = "body_%s" % self.dbobj.cluster_type if hasattr(self, fname): getattr(self, fname)(lines)
def body(self, lines): ram = [StructureTemplate("hardware/ram/generic", {"size": PanMetric(self.dbobj.memory, "MB")})] cpus = [] for cpu_num in range(self.dbobj.cpu_quantity): cpu = StructureTemplate("hardware/cpu/%s/%s" % (self.dbobj.cpu.vendor.name, self.dbobj.cpu.name)) cpus.append(cpu) disks = {} for disk in self.dbobj.disks: devname = disk.device_name params = {"capacity": PanMetric(disk.capacity, "GB"), "interface": disk.controller_type} if disk.bootable: params["boot"] = True if hasattr(disk, "snapshotable") and disk.snapshotable is not None: params["snapshot"] = disk.snapshotable if disk.disk_type == 'local': tpl = StructureTemplate("hardware/harddisk/generic/%s" % disk.controller_type, params) if disk.controller_type == 'cciss': devname = "cciss/" + devname elif disk.disk_type == 'virtual_disk': share = disk.share params["path"] = "%s/%s.vmdk" % (self.dbobj.label, disk.device_name) params["address"] = disk.address params["sharename"] = share.name params["server"] = share.server params["mountpoint"] = share.mount tpl = params elif disk.disk_type == 'virtual_localdisk': filesystem = disk.filesystem params["path"] = "%s/%s.vmdk" % (self.dbobj.label, disk.device_name) params["address"] = disk.address params["filesystemname"] = filesystem.name params["mountpoint"] = filesystem.mountpoint tpl = params disks[devname] = tpl managers = {} interfaces = {} for interface in self.dbobj.interfaces: path = "hardware/nic/%s/%s" % (interface.model.vendor, interface.model) if interface.interface_type == 'public': ifinfo = {} if interface.mac: ifinfo["hwaddr"] = interface.mac if interface.port_group: ifinfo["port_group"] = interface.port_group if interface.bootable: ifinfo["boot"] = interface.bootable interfaces[interface.name] = StructureTemplate(path, ifinfo) elif interface.interface_type == 'management': has_addr = False for addr in interface.assignments: has_addr = True manager = {"hwaddr": interface.mac} if addr.fqdns: manager["fqdn"] = addr.fqdns[0] managers[addr.logical_name] = manager if not has_addr: managers[interface.name] = {"hwaddr": interface.mac} elif interface.interface_type == 'bonding': # Bonding interfaces need an entry under /hardware/cards/nic # only if the MAC address has been explicitely set if interface.mac: ifinfo = {"hwaddr": interface.mac} interfaces[interface.name] = StructureTemplate(path, ifinfo) # Firstly, location add_location_info(lines, self.dbobj.location) pan_assign(lines, "location", self.dbobj.location.sysloc()) # And a chassis location? if self.dbobj.chassis_slot: slot = self.dbobj.chassis_slot[0] pan_assign(lines, "chassis", slot.chassis.fqdn) pan_assign(lines, "slot", slot.slot_number) dns_search_domains = [] parents = self.dbobj.location.parents[:] parents.append(self.dbobj.location) parents.reverse() for parent in parents: # Filter out duplicates extra_domains = [map.dns_domain.name for map in parent.dns_maps if map.dns_domain.name not in dns_search_domains] dns_search_domains.extend(extra_domains) if dns_search_domains: pan_assign(lines, "sysloc/dns_search_domains", dns_search_domains) # Now describe the hardware lines.append("") if self.dbobj.serial_no: pan_assign(lines, "serialnumber", self.dbobj.serial_no) pan_assign(lines, "nodename", self.dbobj.label) pan_include(lines, "hardware/machine/%s/%s" % (self.dbobj.model.vendor.name, self.dbobj.model.name)) lines.append("") pan_assign(lines, "ram", ram) pan_assign(lines, "cpu", cpus) for name in sorted(disks.keys()): pan_assign(lines, "harddisks/{%s}" % name, disks[name]) if interfaces: pan_assign(lines, "cards/nic", interfaces) # /hardware/console/preferred must be set, so we can't assign to # "/console" directly for manager in sorted(managers.keys()): pan_assign(lines, "console/%s" % manager, managers[manager]) if self.dbobj.uri: pan_assign(lines, "uri", self.dbobj.uri)