summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Base.py
blob: 389ca7a9560033a3752ad8d2bc3d8cbd7e0c9175 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
"""This module sets up a base list of configuration entries."""

import copy
import lxml.etree
import sys
# py3k compatibility
if sys.hexversion >= 0x03000000:
    from functools import reduce

import Bcfg2.Server.Plugin


class Base(Bcfg2.Server.Plugin.Plugin,
           Bcfg2.Server.Plugin.Structure,
           Bcfg2.Server.Plugin.XMLDirectoryBacked):
    """This Structure is good for the pile of independent configs
    needed for most actual systems.
    """
    name = 'Base'
    __author__ = 'bcfg-dev@mcs.anl.gov'
    __child__ = Bcfg2.Server.Plugin.StructFile
    deprecated = True

    """Base creates independent clauses based on client metadata."""
    def __init__(self, core, datastore):
        Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
        Bcfg2.Server.Plugin.Structure.__init__(self)
        try:
            Bcfg2.Server.Plugin.XMLDirectoryBacked.__init__(self,
                                                            self.data,
                                                            self.core.fam)
        except OSError:
            self.logger.error("Failed to load Base repository")
            raise Bcfg2.Server.Plugin.PluginInitError

    def BuildStructures(self, metadata):
        """Build structures for client described by metadata."""
        ret = lxml.etree.Element("Independent", version='2.0')
        fragments = reduce(lambda x, y: x + y,
                           [base.Match(metadata) for base
                            in list(self.entries.values())], [])
        [ret.append(copy.copy(frag)) for frag in fragments]
        return [ret]