diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2006-08-27 22:05:48 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2006-08-27 22:05:48 +0000 |
commit | b1cb80172f674e694d04ff9f85dbafda83f10629 (patch) | |
tree | 2a8eb432e36e95276a27730c4147c0b5308484d4 /src/lib/Server/Metadata.py | |
parent | fd57f6e2bba71c71aeb614aa002499004253c612 (diff) | |
download | bcfg2-b1cb80172f674e694d04ff9f85dbafda83f10629.tar.gz bcfg2-b1cb80172f674e694d04ff9f85dbafda83f10629.tar.bz2 bcfg2-b1cb80172f674e694d04ff9f85dbafda83f10629.zip |
Refactor to allow manual address specification in clients.xml
* Move address resolution to Bcfg2.Server.Metadata
* Remove bcfg2-server -c option (can be done with bcfg2-info more easily
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2123 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Metadata.py')
-rw-r--r-- | src/lib/Server/Metadata.py | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/lib/Server/Metadata.py b/src/lib/Server/Metadata.py index b4a5afd2a..9d232d7c5 100644 --- a/src/lib/Server/Metadata.py +++ b/src/lib/Server/Metadata.py @@ -1,7 +1,7 @@ '''This file stores persistent metadata for the BCFG Configuration Repository''' __revision__ = '$Revision$' -import logging, lxml.etree, os, time +import logging, lxml.etree, os, socket, time class MetadataConsistencyError(Exception): '''This error gets raised when metadata is internally inconsistent''' @@ -21,15 +21,16 @@ class ClientMetadata(object): class Metadata: '''This class contains data for bcfg2 server metadata''' - __name__ = 'Metadata' __version__ = '$Id$' __author__ = 'bcfg-dev@mcs.anl.gov' def __init__(self, fam, datastore): + self.__name__ = 'Metadata' self.data = "%s/%s" % (datastore, self.__name__) fam.AddMonitor("%s/%s" % (self.data, "groups.xml"), self) fam.AddMonitor("%s/%s" % (self.data, "clients.xml"), self) self.states = {'groups.xml':False, 'clients.xml':False} + self.addresses = {} self.clients = {} self.aliases = {} self.groups = {} @@ -58,6 +59,11 @@ class Metadata: self.aliases = {} self.clientdata = xdata for client in xdata.findall('./Client'): + if address in client.attrib: + self.addresses[client.get('address')] = client.get('name') + for alias in [alias for alias in client.findall('Alias') if 'address' in alias.attrib]: + self.addresses[alias.get('address')] = client.get('name') + self.clients.update({client.get('name'): client.get('profile')}) [self.aliases.update({alias.get('name'): client.get('name')}) for alias in client.findall('Alias')] else: @@ -153,6 +159,17 @@ class Metadata: '''Build the configuration header for a client configuration''' return lxml.etree.Element("Configuration", version='2.0', toolset=self.find_toolset(client)) + def resolve_client(self, address): + '''Lookup address locally or in DNS to get a hostname''' + if self.addresses.has_key(address): + return self.addresses[address] + try: + return socket.gethostbyaddr(address)[0] + except socket.herror: + warning = "address resolution error for %s" % (address) + self.logger.warning(warning) + raise MetadataConsistencyError + def get_metadata(self, client): '''Return the metadata for a given client''' if self.aliases.has_key(client): |