sampledoc

Properties

The Properties plugin is a connector plugin that adds information from properties files into client metadata instances.

Enabling Properties

First, mkdir /var/lib/bcfg2/Properties. Each property XML file goes in this directory. Each will automatically be cached by the server, and reread/reparsed upon changes. Add Properties to your plugins line in /etc/bcfg2.conf.

Data Structures

Properties adds a new dictionary to client metadata instances that maps property file names to PropertyFile instances. PropertyFile instances contain parsed XML data as the “data” attribute.

The XML data in a property file is arbitrary, but a matching .xsd file can be created to assign a schema to a property file, which will be checked when running bcfg2-lint. For instance, given:

Properties/dns-config.xml
Properties/dns-config.xsd

dns-config.xml will be validated against dns-config.xsd.

Usage

Specific property files can be referred to in templates as metadata.Properties[<filename>]. The xdata attribute is an LXML element object. (Documented here)

Currently, only one access method is defined for this data, Match. Match parses the Group and Client tags in the file and returns a list of elements that apply to the client described by a set of metadata. (See Bundler for more details on how Group and Client tags are parsed.) For instance:

{% python
ntp_servers = [el.text
               for el in metadata.Properties['ntp.xml'].Match(metadata):
               if el.tag == "Server"]
%}

If you need to make persistent changes to properties data, you can use the write method of the PropertyFile class:

{% python
import lxml.etree
from genshi.template import TemplateError
lxml.etree.SubElement(metadata.Properties['foo.xml'],
                      "Client",
                      name=metadata.hostname)
if not metadata.Properties['foo.xml'].write():
    raise TemplateError("Failed to write changes back to foo.xml")

The write method checks the data in the object against its schema before writing it; see Data Structures for details.

As we formulate more common use cases, we will add them to the PropertyFile class as methods. This will simplify templates.

You can also access the XML data that comprises a property file directly in one of several ways:

  • metadata.Properties['prop-file'].xdata is an lxml.etree._Element object representing the top-level element in the file.
  • metadata.Properties['prop-file'].data is the raw contents of the property file as a string.
  • metadata.Properties['prop-file'].entries is a list of lxml.etree._Element objects representing the direct children of the top-level element. (I.e., everything directly under the <Properties> tag.)

Accessing Properties contents from TGenshi

Access contents of Properties/auth.xml:

${metadata.Properties['auth.xml'].xdata.find('file').find('bcfg2.key').text}

Table Of Contents

Previous topic

test

Next topic

DBStats

This Page