Пример #1
0
 def body(self, lines):
     pan_include(lines, "servicedata/%s/config" % self.service)
     lines.append("")
     pan_assign(lines, "instance", self.name)
     pan_assign(lines, "servers", self.dbobj.server_fqdns)
     if self.service == 'dns':
         pan_assign(lines, "server_ips", self.dbobj.server_ips)
Пример #2
0
    def body(self, lines):
        path = PlenaryServiceInstanceToplevel.template_name(self.dbobj)
        pan_assign(lines, "/system/services/%s" % self.dbobj.service,
                   StructureTemplate(path))

        path = PlenaryServiceClientDefault.template_name(self.dbobj.service)
        pan_include(lines, path)
Пример #3
0
 def body(self, lines):
     pan_include(lines, "servicedata/%s/config" % self.service)
     lines.append("")
     pan_assign(lines, "instance", self.name)
     pan_assign(lines, "servers", self.dbobj.server_fqdns)
     if self.service == 'dns':
         pan_assign(lines, "server_ips", self.dbobj.server_ips)
Пример #4
0
    def body(self, lines):
        pan_include(lines,
                    PlenaryServiceToplevel.template_name(self.dbobj.service))
        lines.append("")
        pan_assign(lines, "instance", self.dbobj.name)

        fqdns = [srv.fqdn for srv in self.dbobj.servers]
        ips = [srv.ip for srv in self.dbobj.servers if srv.ip]

        pan_assign(lines, "servers", fqdns)
        pan_assign(lines, "server_ips", ips)
Пример #5
0
    def body(self, lines):
        path = PlenaryServiceInstanceServer.template_name(self.dbobj)
        # TODO: we should export the FQDN, IP address, and service address name
        # that provides the service
        # TODO: make it possible to provide multiple instances of the same
        # service
        pan_assign(lines, "/system/provides/%s" % self.dbobj.service,
                   StructureTemplate(path))

        path = PlenaryServiceServerDefault.template_name(self.dbobj.service)
        pan_include(lines, path)
Пример #6
0
    def body(self, lines):
        pan_variable(lines, "PERSONALITY", self.dbobj.name)

        ## process grns
        eon_id_map = defaultdict(set)

        # own == pers level
        for grn_rec in self.dbobj._grns:
            eon_id_map[grn_rec.target].add(grn_rec.grn.eon_id)

        for (target, eon_id_set) in eon_id_map.iteritems():
            eon_id_list = list(eon_id_set)
            eon_id_list.sort()
            for eon_id in eon_id_list:
                pan_append(lines, "/system/eon_id_maps/%s" % target, eon_id)

        archetype = self.dbobj.archetype.name
        # backward compat for esp reporting
        if self.config.has_option("archetype_" + archetype,
                                  "default_grn_target"):
            default_grn_target = self.config.get("archetype_" + archetype,
                                                 "default_grn_target")

            eon_id_set = eon_id_map[default_grn_target]

            eon_id_list = list(eon_id_set)
            eon_id_list.sort()
            for eon_id in eon_id_list:
                pan_append(lines, "/system/eon_ids", eon_id)

        pan_assign(lines, "/system/personality/owner_eon_id",
                   self.dbobj.owner_eon_id)

        ## include pre features
        path = PlenaryPersonalityPreFeature.template_name(self.dbobj)
        pan_include_if_exists(lines, path)

        ## process parameter templates
        pan_include_if_exists(lines, "personality/config")
        pan_assign(lines, "/system/personality/name", self.dbobj.name)
        if self.dbobj.host_environment.name != 'legacy':
            pan_assign(lines, "/system/personality/host_environment",
                       self.dbobj.host_environment, True)

        ## TODO : This is just to satisfy quattor schema
        ## needs to be removed as soon as the schema allows this
        pan_assign(lines, "/system/personality/systemgrn", [])

        if self.dbobj.config_override:
            pan_include(lines, "features/personality/config_override/config")

        ## include post features
        path = PlenaryPersonalityPostFeature.template_name(self.dbobj)
        pan_include_if_exists(lines, path)
Пример #7
0
    def body(self, lines):
        pan_include(lines, ["pan/units", "pan/functions"])
        pan_assign(lines, "/",
                   StructureTemplate("clusterdata/%s" % self.name,
                                     {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")

        for servinst in sorted(self.dbobj.service_bindings):
            pan_include(lines, "service/%s/%s/client/config" %
                        (servinst.service.name, servinst.name))

        pan_include(lines, "personality/%s/config" %
                    self.dbobj.personality.name)
        pan_include(lines, "archetype/final")
Пример #8
0
    def body(self, lines):
        pan_variable(lines, "PERSONALITY", self.name)

        ## process grns
        eon_id_map = defaultdict(set)

        # own == pers level
        for grn_rec in self.dbobj._grns:
            eon_id_map[grn_rec.target].add(grn_rec.grn.eon_id)

        for (target, eon_id_set) in eon_id_map.iteritems():
            eon_id_list = list(eon_id_set)
            eon_id_list.sort()
            for eon_id in eon_id_list:
                pan_append(lines, "/system/eon_id_maps/%s" % target, eon_id)

        archetype = self.dbobj.archetype.name
        # backward compat for esp reporting
        if self.config.has_option("archetype_" + archetype,
                                  "default_grn_target"):
            default_grn_target = self.config.get("archetype_" + archetype,
                                                 "default_grn_target")

            eon_id_set = eon_id_map[default_grn_target]

            eon_id_list = list(eon_id_set)
            eon_id_list.sort()
            for eon_id in eon_id_list:
                pan_append(lines, "/system/eon_ids", eon_id)

        pan_assign(lines, "/system/personality/owner_eon_id",
                   self.dbobj.owner_eon_id)

        ## include pre features
        pan_include_if_exists(lines, "%s/pre_feature" % self.plenary_core)
        ## process parameter templates
        pan_include_if_exists(lines, "personality/config")
        pan_assign(lines, "/system/personality/name", self.name)
        pan_assign(lines, "/system/personality/host_environment",
                   self.dbobj.host_environment)

        ## TODO : This is just to satisfy quattor schema
        ## needs to be removed as soon as the schema allows this
        pan_assign(lines, "/system/personality/systemgrn", [])

        if self.dbobj.config_override:
            pan_include(lines, "features/personality/config_override/config")

        ## include post features
        pan_include_if_exists(lines, "%s/post_feature" % self.plenary_core)
Пример #9
0
    def body(self, lines):
        pan_include(lines, ["pan/units", "pan/functions"])
        pan_assign(lines, "/",
                   StructureTemplate("clusterdata/%s" % self.dbobj.name,
                                     {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")

        #for esx_management_server
        for servinst in sorted(self.dbobj.service_bindings):
            path = PlenaryServiceInstanceClientDefault.template_name(servinst)
            pan_include(lines, path)

        path = PlenaryPersonalityBase.template_name(self.dbobj.personality)
        pan_include(lines, path)
        pan_include(lines, "archetype/final")
Пример #10
0
    def body(self, lines):
        pan_include(lines, ["pan/units", "pan/functions"])
        pan_assign(
            lines, "/",
            StructureTemplate("clusterdata/%s" % self.name,
                              {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")

        for servinst in sorted(self.dbobj.service_bindings):
            pan_include(
                lines, "service/%s/%s/client/config" %
                (servinst.service.name, servinst.name))

        pan_include(lines,
                    "personality/%s/config" % self.dbobj.personality.name)
        pan_include(lines, "archetype/final")
Пример #11
0
    def body(self, lines):
        pers = self.dbobj.personality
        arch = pers.archetype

        # FIXME: Enforce that one of the interfaces is marked boot?
        for dbinterface in self.dbobj.machine.interfaces:
            # Management interfaces are not configured at the host level
            if dbinterface.interface_type == "management":
                continue

        services = []
        required_services = set(arch.services + pers.services)

        for si in self.dbobj.services_used:
            required_services.discard(si.service)
            services.append(si.cfg_path + "/client/config")
        if required_services:
            missing = ", ".join(sorted([srv.name for srv in required_services]))
            raise IncompleteError(
                "Host %s is missing the following required "
                "services, please run 'aq reconfigure': %s." % (self.name, missing)
            )

        provides = []
        for si in self.dbobj.services_provided:
            provides.append("%s/server/config" % si.cfg_path)

        # Ensure used/provided services have a stable order
        services.sort()
        provides.sort()

        # Okay, here's the real content
        pan_include(lines, ["pan/units", "pan/functions"])
        lines.append("")

        pan_assign(lines, "/", StructureTemplate("hostdata/%s" % self.name, {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")
        pan_include(lines, self.dbobj.operating_system.cfg_path + "/config")

        pan_include(lines, services)
        pan_include(lines, provides)

        personality_template = "personality/%s/config" % self.dbobj.personality.name

        pan_include(lines, personality_template)

        if self.dbobj.cluster:
            clplenary = PlenaryClusterClient(self.dbobj.cluster)
            pan_include(lines, clplenary.plenary_template_name)
        elif pers.cluster_required:
            raise IncompleteError(
                "Host %s personality %s requires cluster "
                "membership, please run 'aq cluster'." % (self.name, pers.name)
            )
        pan_include(lines, "archetype/final")
Пример #12
0
 def body(self, lines):
     pan_assign(
         lines, "/system/provides/%s" % self.service,
         StructureTemplate('servicedata/%s/%s/srvconfig' %
                           (self.service, self.name)))
     pan_include(lines, "service/%s/server/config" % self.service)
Пример #13
0
    def body(self, lines):
        pers = self.dbobj.personality
        arch = pers.archetype

        # FIXME: Enforce that one of the interfaces is marked boot?
        for dbinterface in self.dbobj.hardware_entity.interfaces:
            # Management interfaces are not configured at the host level
            if dbinterface.interface_type == 'management':
                continue

        services = []
        required_services = set(arch.services + pers.services)

        for si in self.dbobj.services_used:
            required_services.discard(si.service)
            services.append(PlenaryServiceInstanceClientDefault.template_name(si))
        if required_services:
            missing = ", ".join(sorted([srv.name for srv in required_services]))
            raise IncompleteError("{0} is missing the following required "
                                  "services, please run 'aq reconfigure': "
                                  "{1!s}.".format(self.dbobj, missing))

        provides = []
        for srv in self.dbobj.services_provided:
            si = srv.service_instance
            provides.append(PlenaryServiceInstanceServerDefault.template_name(si))

        # Ensure used/provided services have a stable order
        services.sort()
        provides.sort()

        # Okay, here's the real content
        pan_include(lines, ["pan/units", "pan/functions"])
        lines.append("")

        path = PlenaryHostData.template_name(self.dbobj)
        pan_assign(lines, "/",
                   StructureTemplate(path,
                                     {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")

        opsys = self.dbobj.operating_system
        pan_include(lines, "os/%s/%s/config" % (opsys.name, opsys.version))

        pan_include(lines, services)
        pan_include(lines, provides)

        path = PlenaryPersonalityBase.template_name(pers)
        pan_include(lines, path)

        if self.dbobj.cluster:
            pan_include(lines,
                        PlenaryClusterClient.template_name(self.dbobj.cluster))
        elif pers.cluster_required:
            raise IncompleteError("{0} requires cluster membership, please "
                                  "run 'aq cluster'.".format(pers))
        pan_include(lines, "archetype/final")
Пример #14
0
    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 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.machine,
                                                 disk.device_name)
                params["address"] = disk.address
                params["sharename"] = share.name
                params["server"] = share.server
                params["mountpoint"] = share.mount

                tpl = params

            disks[PanEscape(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
        pan_assign(lines, "location", self.sysloc)
        pan_assign(lines, "sysloc/building", self.building)
        pan_assign(lines, "sysloc/city", self.city)
        pan_assign(lines, "sysloc/continent", self.continent)
        if self.rack:
            pan_assign(lines, "rack/name", self.rack)
            if self.rackrow:
                pan_assign(lines, "rack/row", self.rackrow)
            if self.rackcol:
                pan_assign(lines, "rack/column", self.rackcol)
        if self.room:
            pan_assign(lines, "rack/room", self.room)

        # 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)

        #if self.hub:
        #    pan_assign(lines, "sysloc/hub", self.hub)
        if self.campus:
            pan_assign(lines, "sysloc/campus", self.campus)
        if self.bunker:
            pan_assign(lines, "sysloc/bunker", self.bunker)
        if self.dns_search_domains:
            pan_assign(lines, "sysloc/dns_search_domains",
                       self.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.machine)
        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)
        if disks:
            pan_assign(lines, "harddisks", disks)
        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])
Пример #15
0
    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)
Пример #16
0
    def body(self, lines):
        pers = self.dbobj.personality
        arch = pers.archetype

        # FIXME: Enforce that one of the interfaces is marked boot?
        for dbinterface in self.dbobj.machine.interfaces:
            # Management interfaces are not configured at the host level
            if dbinterface.interface_type == 'management':
                continue

        services = []
        required_services = set(arch.services + pers.services)

        for si in self.dbobj.services_used:
            required_services.discard(si.service)
            services.append(si.cfg_path + '/client/config')
        if required_services:
            missing = ", ".join(sorted([srv.name
                                        for srv in required_services]))
            raise IncompleteError(
                "Host %s is missing the following required "
                "services, please run 'aq reconfigure': %s." %
                (self.name, missing))

        provides = []
        for si in self.dbobj.services_provided:
            provides.append('%s/server/config' % si.cfg_path)

        # Ensure used/provided services have a stable order
        services.sort()
        provides.sort()

        # Okay, here's the real content
        pan_include(lines, ["pan/units", "pan/functions"])
        lines.append("")

        pan_assign(
            lines, "/",
            StructureTemplate("hostdata/%s" % self.name,
                              {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")
        pan_include(lines, self.dbobj.operating_system.cfg_path + '/config')

        pan_include(lines, services)
        pan_include(lines, provides)

        personality_template = "personality/%s/config" % \
                self.dbobj.personality.name

        pan_include(lines, personality_template)

        if self.dbobj.cluster:
            clplenary = PlenaryClusterClient(self.dbobj.cluster)
            pan_include(lines, clplenary.plenary_template_name)
        elif pers.cluster_required:
            raise IncompleteError("Host %s personality %s requires cluster "
                                  "membership, please run 'aq cluster'." %
                                  (self.name, pers.name))
        pan_include(lines, "archetype/final")
Пример #17
0
    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 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.machine, disk.device_name)
                params["address"] = disk.address
                params["sharename"] = share.name
                params["server"] = share.server
                params["mountpoint"] = share.mount

                tpl = params

            disks[PanEscape(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
        pan_assign(lines, "location", self.sysloc)
        pan_assign(lines, "sysloc/building", self.building)
        pan_assign(lines, "sysloc/city", self.city)
        pan_assign(lines, "sysloc/continent", self.continent)
        if self.rack:
            pan_assign(lines, "rack/name", self.rack)
            if self.rackrow:
                pan_assign(lines, "rack/row", self.rackrow)
            if self.rackcol:
                pan_assign(lines, "rack/column", self.rackcol)
        if self.room:
            pan_assign(lines, "rack/room", self.room)

        # 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)

        #if self.hub:
        #    pan_assign(lines, "sysloc/hub", self.hub)
        if self.campus:
            pan_assign(lines, "sysloc/campus", self.campus)
        if self.bunker:
            pan_assign(lines, "sysloc/bunker", self.bunker)
        if self.dns_search_domains:
            pan_assign(lines, "sysloc/dns_search_domains",
                       self.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.machine)
        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)
        if disks:
            pan_assign(lines, "harddisks", disks)
        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])
Пример #18
0
 def body(self, lines):
     pan_assign(lines, "/system/provides/%s" % self.service,
                StructureTemplate('servicedata/%s/%s/srvconfig' %
                                  (self.service, self.name)))
     pan_include(lines, "service/%s/server/config" % self.service)
Пример #19
0
    def body(self, lines):
        pan_include(lines, ["pan/units", "pan/functions"])
        path = PlenaryClusterData.template_name(self.dbobj)
        pan_assign(lines, "/",
                   StructureTemplate(path,
                                     {"metadata": PanValue("/metadata")}))
        pan_include(lines, "archetype/base")

        for servinst in sorted(self.dbobj.service_bindings,
                               key=attrgetter('service.name', 'name')):
            path = PlenaryServiceInstanceClientDefault.template_name(servinst)
            pan_include(lines, path)

        for srv in sorted(self.dbobj.services_provided,
                          key=attrgetter("service_instance.service.name",
                                         "service_instance.name")):
            path = PlenaryServiceInstanceServerDefault.template_name(srv.service_instance)
            pan_include(lines, path)

        path = PlenaryPersonalityBase.template_name(self.dbobj.personality)
        pan_include(lines, path)
        pan_include(lines, "archetype/final")